2014年5月25日日曜日

Leap Motion のお試し。 ロボットハンド。

 今回のガラクタは、Leap Motion です。Kinect や Xition 等につぐ期待のNUIデバイスとして1~2年前に話題になりましたが、イマイチ使い道が微妙(まあ、NUIデバイス全般に言えることかもしれませんが)なせいか、最近はアマゾンなどでも品薄ということもなく、容易に入手できるようになりました。
 先日、なんとなく色々なセンサデバイスの情報をWebで収集しているときに、Leap Motion のSDKのv2beta が出ているという情報を見つけて、じゃあ、Leap Motionも一応触っておくかと思い、入手してみました。

 ※下の写真は Leap Motion のサイトに合ったものをコピーしてきました。大きさのイメージはこんな感じ。ちなみに、自分の机の上はこんなに片付いておりません・・・。



 まだ、ほんのおさわり程度しか遊んでいないんですが、驚くのは、このLeap MotionのSDKはライブラリというか関数がよく出来ていて、APIリファレンスも(英語ですが)きちんとまとめられたものが公開されています。こういう、KickStarterっぽいものから始まったようなデバイスだとその辺が結構アバウトだったりすることが多いと思うのですが、このLeap Motion は資料がDeveloper Site に割りとよく揃っています。

 で、この Leap Motion ですが、Kinect や Xiton がユーザの体全体の情報を扱うのに対して、ユーザの「手」「指」の情報を特化して扱います。Web上のレポートサイトや分解写真をみると、小さなデバイスの天面方向に2つの赤外線カメラが配置されており、ステレオ視によりユーザの手指の位置情報を解析・取得しているように想像されます。

 パッケージはこんな感じですが、


 明けてみると




 中身はとっても小さい。


 SDカードと並べてみました。

 Developer Site から SDKβ2 をダウンロードしてきて展開すると、SDKと合わせてドライバのインストーラも解凍されるので、それをインストールして、Leap Motion をPCに接続します。「Leap Motion Visualizer」というアプリがドライバと一緒にインストールされているので、これを起動するとデバイスが動作しているかどうかを確認できます。手をかざしたところ。


 今回は、Leap Motion で検出した各指の手のひらに対する方向(角度)をそれぞれ1バイトの大きさのデータにして、USB(シリアル)接続経由でArduino  Micro に送信し、Arduino Micro で ラジコンサーボを動かしてみました。以前に「ぱい揉みハンド」で曲げセンサグローブで動かしたおもちゃのロボットハンドを同じように動かしてみました。


 前回は、Futaba のメタルギアでわりとハイトルク・ハイスピードな無駄に良いサーボを使ったんですが、今回は、Amazonで10個で3千いくらという超小型の格安サーボ(飛行機模型用?)を使ったため、小型化出来ましたが、反応(指の動く早さ)は悪くなっています。




また、Leap Motion の指の誤検出が結構あるので、レスポンス・確実性の両方共曲げセンサグローブ方式に負けますが、それでも、Leap Motion の面白さは十分あると思います。まあ、実用でなんかあるか?っていわれると、Kinect以上に使いドコロは微妙ですが、SF映画に出てくるNUIなコンピュータの世界に近づいてきてはいますね。

 今回のソース類はこちらにおいてあります。今回、Leap Motion アプリは初なので、終了時にアプリケーションエラーとか(たぶんリソース開放忘れとか?)出たりすることもありますが、まあ、ご愛嬌・・・。PC側 Leap Motion のアプリはこちら。Arduino側はこちらがソースです。