Sphero2をLeap Motionで動かしちゃおー!

前回の @shu223 さんの 3次元コントローラにもなるボール型ラジコン「Sphero」対応 iOSアプリの実装方法 に引き続き(続いてないけど!)、Sphero Advent Calendar 2013 23日目の今日は、Sphero2をLeap Motionで動かしちゃおーってお話を書きます。

実際にボールが手の動きにあわせて転がる様子は、ITとかに全く興味が無いうちのヨメでさえ「すげえ!」って言うほど近未来な感じでかっこいいです。

jpeg

Sphero2のSDKいろいろ

Sphero2は単純なおもちゃとしても十分に楽しめるガジェットですが、Sphero Developer Centerで公開されているSDKを使用すると、楽しみ方の幅がさらに広がります。

Sphero Advent Calendarでも、3〜5日目で @jishiha さんが、Sphero を Scratch(スクラッチ)から動かせるようにしたのでこどもでもプログラミングできるよ という記事を書いてますし、前回の記事もiOSによるプログラミング方法の紹介でした。

Spheroには他にもAndroidやWindows、RubyやPythonなどのSDKがいろいろあって、今回はNode.jsのSDKを使ってLeap Motionのジェスチャーでボールを動かすことに挑戦してみます。

まずMacでペアリングしよー!

実際にSpheroをLeap Motionで動かす前に、Leap Motionをセットアップ済みのMacに、Spheroをペアリングしておきましょう。

Spheroをペアリング
Spheroをペアリング

ペアリングしてもこの時点では接続がすぐに切れてしまいますが、これは仕様なので今の時点では気にする必要はありません。

spheron-leapをインストールしてみよー!

GitHubには、SpheroをLeap Motionで動かすためのサンプルが alchemycs さんによって公開されています。

https://github.com/alchemycs/spheron-leap

@alchemycs さんは、SpheroのNode用SDK spheron の開発者さんでもあります。

今回は、これを使って、とりあえず超能力者気分を味わってみましょう。

まず、spheron-leapをcloneしちゃいます。

$ git clone https://github.com/alchemycs/spheron-leap

このspheron-leapは、いくつかのモジュールが必要で、これらはpackage.jsonに記述されていますので、以下のコマンドでそれらのモジュールをかき集めます。

$ cd spheron-leap
$ npm install

つぎに、/dev 以下をのぞいてSpheroっぽいデバイスを探します。

$ ls -alF /dev/cu.*

僕の環境では以下のような感じ。

crw-rw-rw-  1 root  wheel   18,   3 Dec 22 15:06 /dev/cu.Bluetooth-Incoming-Port
crw-rw-rw-  1 root  wheel   18,   7 Dec 22 15:06 /dev/cu.Bluetooth-Modem
crw-rw-rw-  1 root  wheel   18,   1 Dec 22 15:06 /dev/cu.Sphero-PRO-AMP-SPP
crw-rw-rw-  1 root  wheel   18,   5 Dec 22 15:06 /dev/cu.iPhone-WirelessiAP

上の例では、/dev/cu.Sphero-PRO-AMP-SPP ってやつがそれっぽいので、それをコピーしてください。

もし、それっぽいデバイスがない場合は、Spheroをペアリングしてないはずなので、Bluetoothでペアリングしなおしてください。

次に spheron-leap 内の index.js を開いて、以下のように先ほどコピーしたデバイスをペーストしてください。

  1 /* jshint node:true */
  2 
  3 var Leap = require('leapjs');
  4 var spheron = require('spheron');
  5 
  6 // Set this to the device Sphero connects as on your computer
  7 var device = '/dev/cu.Sphero-PRO-AMP-SPP'; // ここにペースト!
  8              
  9 var safeMode = true; //Turn this off if Sphero is in water or you like to live dangero    usly!                   
 10                         
 11 var controlSphero = function(sphero) {

以上で動かすための準備が完了しました。

早速動かしてみよー!

Spheroを動かす前に Sphero 本体を二度タップしてたたき起こしてください。

すると赤とかオレンジとかでSphero本体が点滅を始めますので、その状態で以下のコマンドを実行してください。

$ npm start

しばらく待つとターミナルに以下のように表示されます。

[miyauchi@moray spheron-leap]$ node index.js 
waiting for Sphero connection...
connected to Sphero
waiting for Leap Motion connection...
connected to leap motion
ready
protocol function (data) {
        return data.event ? new Event(data.event) : new Frame(data);

      }
focus?

なんか最後の方に警告っぽいものが出てますけど、スルーで。笑

この時には、Sphero本体も以下のように点滅が止まります。

では早速手を動かしてみましょう!

操作方法はspheron-leapのREADME.mdに書いてありますが、かなり修練が必要で、机の上とかでいきなりためすとコーヒーとかひっくり返したりしますので注意しましょう。

停止させたい時は [Ctrl] + c をキーボードで入力してください。

停止させるときにはボールが停止してから止めないと下の動画のように回転が止まらなくなりますw

こうなっちゃったら、もう一回、npm startを実行してボールの回転を止めてあげましょう。

最後に

実際に試したらわかると思いますが、スワイプによる操作だとなかなか思い通りにボールが転がってくれません。

なので個人的には、手の平の傾きでボールをコントロールしたほうがいんじゃないの?って思えてきたので、次の記事では手の平を傾けることでSpheroをコントロールする方法に挑戦してみようかと思います。

というわけで、明日のSphero Advent Calendarも誰も立候補してないので、僕が書いちゃおうかな、うーん、時間ないかも。