Leap Motion + Cylon.js 控制 Sphero

在我业余的时间里,我喜欢玩硬件和机器人。我是从 Node.js 开始的,但是最近我发现了 Cylon.js,并且在快速试玩之后,发现它非常棒,并决定用这个框架重写我的项目。

作为起点,我决定重新编写项目,用 Leap Motion Controller 控制 Sphero。

您可以在这里找到原始的代码:Leap Motion Sphero,但以下是几个代码段:

module.exports = function() {

  var Leap = require('leapjs');
  var spheron = require('spheron');

  // Set this to the device Sphero connects as on your computer.
  var device = '/dev/tty.Sphero-RBR-AMP-SPP';

  var safeMode = true; //Turn this off if Sphero is in water or you like to live dangerously!

  var controlSphero = function(sphero) {
    var controller = new Leap.Controller({frameEventName:'deviceFrame', enableGestures:true});
      controller.on('connect', function() {
        console.log('connected to leap motion');
      });
      controller.on('ready', function() {
          console.log('ready');
      });
switch (direction) {
  // Original settings included: 'sphero.heading = (heading value)';
  // Original speed for all of them: 128.
  case 'LEFT':
    //sphero.roll(speed, heading, state, option)
    sphero.roll(70, 270, 1); //Heading is expressed in degrees so 270 will make the ball move to the left.
    break;
  case 'RIGHT':
    sphero.heading = 90;
    sphero.roll(70, 90, 1);
    break;
  case 'UP':
    stopSphero(sphero);
    //Make the ball turn blue when users move their hand up.
    ball.setRGB(spheron.toolbelt.COLORS.BLUE).setBackLED(255);
    break;
  case 'DOWN':
    stopSphero(sphero);
    //Make the ball turn white when users move their hand down.
     ball.setRGB(spheron.toolbelt.COLORS.WHITE).setBackLED(255);
    break;
  case 'FORWARD':
     sphero.roll(70, 0, 1);
    break;
  case 'REVERSE':
    sphero.heading = 180;
    sphero.roll(70, 180, 1);
    break;

它的工作方式非常简单。Sphero 通过蓝牙连接,Leap Motion 控制器需要插入计算机。当探测到 Sphero 后,Leap Motion 设备将追踪手的动作,方向将在 Sphero 上。 你可以查看 Github 上的代码。

现在,我们来看看 Cylon.js。我最先注意到这个框架是因为,为了获得相同结果所需的代码量很少。完成同样的事情,我只需要 68 行代码!

我想让它使得更容易的原因是,Cylon 已经有一些现有的模块,可以在某些设备进行编程,如下所示:

Cylon.js 跨平台

要开始使用 Cylon,您需要 引入(require)它,并指定您正在使用的设备。

var Cylon = require('cylon');

Cylon.robot({
  connections: {
    leapmotion: {adaptor: 'leapmotion'},
    sphero: {adaptor: 'sphero', port: '/dev/rfcomm0'}
  },

  devices: {
    leapmotion: {driver: 'leapmotion', connection: 'leapmotion'},
    sphero: {driver: 'sphero', connection: 'sphero'}
  },

  work: function(f){
  }
}).start();
 ```

At the moment, this code is not really doing anything but you can see how to specify which devices you are going to use. You have to specify a port for the Sphero because it connects to your computer via Bluetooth. To find the port for your own Sphero, run ‘ls /dev/tty.Sphero*’ in your console and replace the port in this code with the result you get.

The rest of the code goes inside the ‘work’ function as below:

work: function(my){ my.leapmotion.on('frame', function(frame){ if(frame.valid && frame.gestures.length > 0{ my.sphero.roll(70,0,1); } } } ```

如果 Leap Motion 控制器检测到任何种类型的手势,上面的代码将控制 Sphero 前进。当您在终端中搭建应用程序时,您可以执行以下操作:

  • 将手指向上移动,使球停止并变蓝
  • 向下移动你的手指/手,让球停止并变白
  • 向前推,使 Sphero 向前直行(朝向 0° 方向)
  • 向后拉,使 Sphero 向后(朝向 180° 方向)
  • 向左滑动,使 Sphero 向左(朝向 270° 方向)
  • 向右滑动,使 Sphero 右转(朝向 90° 方向)

就是这么简单!

原文链接:http://blog.leapmotion.com/controlling-sphero-leap-motion-cylon-js/

尚未评分
您的评分将帮助我们做出更好的玩法

观光\评论区

Copyright © 2017 玩点什么. All Rights Reserved.