Leap Motionを使ってArduinoラジコンを動かす

Leap Motionを使ってArduinoラジコンを動かす

mikilabo
mikilabo (ID1881) 2014/09/15
0

前回、ArduinoラジコンをWeb画面から操作するプロトタイプを作りました。
今回はその応用編としてLeap Motionを使って同じラジコンを操作出来るようにしてみました。

https://www.youtube.com/watch?v=ssDeozuLhHA

Leap Motionとは?

言葉で説明するよりもLeap Motionの本家サイトにある動画を見てもらった方がどんなデバイスか伝わると思います。

このデバイスは、赤外線を使って、手・指の位置、角度および簡単な動作の認識が可能です。下記の図はLeap Motionインストール時に用意されているビジュアライザで手の位置を表示させたものです。仕様上1/100mm単位での認識が可能なとの事なので、なかなか精度が高いと感じます。

主要言語に対応した開発者向けドキュメント・ライブラリも公開されています。今回はMac上で動くNode.jsと連動させるためにJavaScript用のライブラリを使いました。

全体の仕組み・使ったもの・利用したソフトなど

全体の仕組みは上図の通りです。前回はWeb画面からArduinoラジコンをコントロールしていましたが、今回はそこをLeap Motionに変更しています。その他の部分は変わりません。

改めて今回利用した主な部品・ソフトのリストアップです。
●Arduino関連
Arduino Uno x 1
XBee Shield(sparkfun) x 1
XBee Explorer USB(sparkfun) x 1
XBee(Series 1) x 2

●モーター制御用
モータードライバ TA7267BP x 2 (左右用)
コンデンサ 0.1uF, 33uF それぞれx2

●Tamiya関連
ダブルギヤボックス(左右独立4速タイプ) x 1
ユニバーサルプレート x 1
オフロードタイヤセット x 1
ボールキャスター x 1

●その他
電池ボックス x 1 (モーター電源用)
モバイルバッテリー(Arduino電源用)

●ソフト、ライブラリ関連
Node.js (XBeeの通信ハンドリングおよびWebサーバ)
node-serialport (Node.jsでシリアル通信を扱うライブラリ)
Socket.IO (Webブラウザの画面制御)
Leap Motion Javascriptライブラリ <ーー今回追加

今回の配線図

Arduinoラジコンにおける配線図は前回と同じです。

Leap Motionにおけるラジコン操作仕様

今回のソースコード一式は下記からダウンロード可能です。
https://github.com/mikilabo/arduino_leapmotion

Leap Motionのライブラリでは、最短で1/200〜1/300秒(仕様上の最大値は290fpsらしい)に近い間隔で手の位置等に関する情報の取得が出来ます。この間隔だと過敏に反応しすぎるので、プログラミング上にて5回取得したデータのうち4回分は捨てるようにしました。

データを捨てるのではなく、5回取得したデータの平均値を用いる方がベターだと思うのですが、ちょっと面倒だったので手を抜いてます。

Leap Motionの座標軸(公式サイトより)

Leap Motionは機器の位置を原点として上図の様な座標軸を持っています。(こちらの図は公式サイトから持ってきました。)

そこで今回のコントロールの仕様は下記としています。

●手の位置情報が取得できない場合は停止
●認識できる指の本数が2本より少なかったら停止(手がグーだったら停止)

次に、手の位置からラジコンの動作を決めます。
●X軸・Z軸の値を比較して絶対値が大きい方を採用する。ただし、10cm<X軸<10cm もしくは -5cm<Z軸<5cm ならば停止
●Z軸がプラス→後進、Z軸がマイナス→前進
●X軸がプラス→右回転、X軸がマイナス→左回転
●Y軸の値に応じてモーターの回転数を決める。(ex, 手の位置が高ければ高回転とする


実際に動かしてみると、当然ですがLeap Motionと手の距離が開くほど手の認識が怪しくなります。そのため、正しい認識が出来ない場合は、安全の為にラジコンを停止させるようにしています。

また、ここのルールに従って確定された指示はXBee経由でラジコンに送信されると同時に、Socket.IOを使ってWeb画面にも反映させるようにしてます。これにより、実際にどのような指示がラジコンに送られているか「見える化」しています。

この辺りの仕様は実際に動かし調整をしながら決めていきました。今回はLeap Motionのライブラリを理解する事とこの仕様調整が最も時間が掛かった気がします。

まとめ

今回はArduinoラジコンの応用としてコントロール部分を前回のWebブラウザからLeap Motionに変更しました。実際にLeap Motionでコントロールしていると、比較的短時間で手が疲れてきます。肘を浮かした状態を保つ事というのは日常生活上あまり無い事なので仕方がないかもしれません。これは使ってみて初めて気がつきました。

Leap Motionは各プログラミング言語に対応したライブラリ・ドキュメントが用意されており、対応する言語に慣れている人ならばすぐにライブラリが使えると思います。機器のコストは$99.99ですので、1万円でちょっとした実験、プロトタイピング、プログラミングの勉強が出来るオモチャという事ならば、まずまずのお買い物かと思います。

参考にしてくれた記事

記事が登録されていません。
この記事を参考にして、新しく記事を投稿しよう!

違反について