UNPKG

aerogel

Version:

CrazyFlie control software

103 lines (80 loc) 1.73 kB
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;