aerogel
Version:
CrazyFlie control software
103 lines (80 loc) • 1.73 kB
JavaScript
var
_ = require('lodash'),
Leap = require('leapjs'),
curtsy = require('curtsy'),
P = require('p-promise')
;
function HandMotion()
{
};
var controller = new Leap.Controller(
{
enableGestures: true,
});
controller.on('ready', function()
{
console.log('leap controller ready');
});
controller.on('connect', function()
{
console.log('leap controller connected');
});
controller.on('disconnect', function()
{
console.log('leap controller disconnected');
});
controller.on('frame', leaploop);
var lastCircle = 0;
function handleCircle(circle, frame)
{
var state = copter.copterStates.currentState();
var now = Date.now();
if (now - lastCircle < 1000)
return 'ignored';
if (state !== 'waiting')
{
lastCircle = Date.now();
return land();
}
else if (state === 'waiting')
{
lastCircle = Date.now();
return takeoff();
}
}
function handleSwipe(gesture)
{
var scaledSpeed = Math.round(gesture.speed) * 10;
var currentThrust = copter.thrust;
if (!_.isNumber(currentThrust))
currentThrust = 10001;
if (copter.copterStates.currentState() !== 'hovering')
return 'ignored';
if (gesture.direction[1] < 0)
{
console.log('swipe down', scaledSpeed);
copter.thrust = currentThrust - scaledSpeed;
}
else
{
console.log('swipe up', gesture.speed);
copter.thrust = currentThrust + scaledSpeed;
}
return copter.thrust;
}
function leaploop(frame)
{
var hands = frame.hands;
var pointables = frame.pointables;
var gestures = frame.gestures;
if (frame.gestures.length > 0)
{
var g = frame.gestures[0];
// console.log(g.type);
if (g.type === 'swipe')
handleSwipe(g);
else if (g.type === 'circle')
handleCircle(g, frame);
}
}
module.exports = HandMotion;