UNPKG

bebop-flight-app

Version:

Replacement flight app for the Parrot Bebop Drone

132 lines (103 loc) 3.86 kB
// Trying to create a replacement flight control app for the Parrot Bebop drone // Based on example app using Cylon.js to communicate with drone var cylon = require("cylon"); var bebop = require("node-bebop"); var drone = bebop.createClient(); // Sensitivity controls for left/right sticks var stickSensitivity = 0.2; var maxSpeed = 0.5; drone.connect(function() { cylon.start(); }); cylon.robot({ connections: { joystick: { adaptor: "joystick" } }, devices: { controller: { driver: "dualshock-3", connection: "joystick" } }, work: function() { var that = this, rightStick = { x: 0.0, y: 0.0 }, leftStick = { x: 0.0, y: 0.0 }; // functions for each button press that.controller.on("square:press", function() { drone.takeOff(); }); that.controller.on("triangle:press", function() { drone.stop(); }); that.controller.on("x:press", function() { drone.land(); }); that.controller.on("right_x:move", function(data) { rightStick.x = data; }); that.controller.on("right_y:move", function(data) { rightStick.y = data; }); that.controller.on("left_x:move", function(data) { leftStick.x = data; }); that.controller.on("left_y:move", function(data) { leftStick.y = data; }); // set drone controls for the left stick setInterval(function() { var pair = leftStick; var curPos = 0; // move drone forward/backward if (pair.y < -(stickSensitivity)) { curPos = pair.y + stickSensitivity; drone.forward(validatePitch(curPos <= -(maxSpeed) ? -(maxSpeed) : curPos)); } else if (pair.y > stickSensitivity) { curPos = pair.y - stickSensitivity; drone.backward(validatePitch(curPos >= maxSpeed ? maxSpeed : curPos)); } // move drone left/right if (pair.x < -(stickSensitivity)) { curPos = pair.x + stickSensitivity; drone.left(validatePitch(curPos <= -(maxSpeed) ? -(maxSpeed) : curPos)); } else if (pair.x > stickSensitivity) { curPos = pair.x - stickSensitivity; drone.right(validatePitch(curPos >= maxSpeed ? maxSpeed : curPos)); } }, 0); // set drone controls for the right stick setInterval(function() { var pair = rightStick; var curPos = 0; // move dronw up/down if (pair.y < -(stickSensitivity)) { curPos = pair.y + stickSensitivity; drone.up(validatePitch(curPos <= -(maxSpeed) ? -(maxSpeed) : curPos)); } else if (pair.y > stickSensitivity) { curPos = pair.y - stickSensitivity; drone.down(validatePitch(curPos <= maxSpeed ? maxSpeed : curPos)); } // move drone clockwise/counterclockwise if (pair.x < -(stickSensitivity)) { curPos = pair.x + stickSensitivity; drone.counterClockwise(validatePitch(curPos >= -(maxSpeed) ? -(maxSpeed) : curPos)); } else if (pair.x > stickSensitivity) { curPos = pair.x - stickSensitivity; drone.clockwise(validatePitch(curPos <= maxSpeed ? maxSpeed : curPos)); } }, 0); setInterval(function() { drone.stop(); }, 10); } }); function validatePitch(data) { var value = Math.abs(data); if (value > 0.0) { if (value <= 1.0) { return Math.round(value * 100); } else { return 100; } } else { return 0; } }