9. Leap motion + SNAP!

■Leap motion

両手、指10本の位置を認識するモーションセンサー

https://www.leapmotion.com/

■SNAP!

Scratchに、ブロック作成機能を加えたプログラム学習環境。

http://byob.berkeley.edu/

関数定義も可能。

ブロックの制御でパラメータの利用や再帰呼び出しもプログラム可能。

■演習内容

Leap motion を3台用意した。

受講生は、3でつのチームに分かれ、ハンドジェスチャを利用したアプリケーションの作成に取りくむ。

コードの作成は、SNAP!を利用する。

チーム編成用シート

https://docs.google.com/spreadsheet/ccc?key=0AsuRfq5c3XFSdGVUUVE2Tk9ZMlozQXJUSU04OFg0dlE#gid=0

■動作確認

ノートPCに Leap motion のSDKとドライバはインストール済み。

SNAP! は、ブラウザ Chrome から、上記アドレスを開き、ブラウザ内で実行する(HTML5+Javascriptアプリ)。

歯車アイコンから、言語環境を変更しても良い。(日本語、にほんご、など)

■プログラムの保存と提出など

SNAP!で作成したコードは、IDを取得すればクラウド上に保存できる。

クラウドに保存の他、ブラウザの保存領域(File API利用?)に保存することも可能。

今回の課題の提出手順:

Fileアイコンから、プロジェクトを書き出すを選び、ブラウザ上に XML 化されたコードをコピー&ペーストでテキストファイルに記録し、

レポートフォルダに、

ファイル名: 学籍番号.xml

で提出する。

※ブラウザから xmlファイルをコピーする際、先頭の1行目に余分な行が入る。 SNAP!にimportする際に障害になり動作しなくなるので、テキストエディタなどで、先頭行は削除してください。

■SNAP!と Leap motion の接続

Leap motion を USBケーブルでノートPCに接続し、Leapアプリケーション、 Airspace を起動してセンサーの動作を確認する。

Leap motion に手をかざし、アプリケーションに反応があれば確認OK。

Airspaceは終了してよい。

Python スクリプトの起動。

Leap motion はプログラム言語 Python からの呼び出しに対応している。

演習用の ノートPCには Python と Leap 接続用の拡張ライブラリ(DLLなど)は設定済み。

センサーで取得したデータの流れ:

Leap motion → Python → SNAP!

SNAP! にデータを提供する為、 Python スクリプトで、ローカルにデータ中継用サーバを立ち上げる。

起動手順:

プログラムとファイルの検索 に以下を入力。

cmd (コマンドプロンプト開く)
cd python
python snapmotion.py

サーバが起動し、メッセージが表示される。

※ python はスクリプト言語。テキスト処理などWeb分野やアプリケーションの組み込み制御言語として利用されている。GoogleのGAEの制御用言語にも利用されている。

※ python では、制御構文のブロックをブロック内のコードを同じ深さのインデントに揃えて作製する。{}など、括弧は利用しない。

サーバの動作確認:

ブラウザのURLに、

http://localhost:3434/fingercount

http://localhost:3434/handcount

と入力。

サーバからの反応が、送信されてくる。ブラウザで受信すると、ファイルに内容が記録される。

ファイルをテキストエディタで開き、センサーの値を確認する。

サーバが正常に動作してるなら、プラウザで上記URLにアクセスする度にターミナルにメッセージが表示される。

SNAP!とLeapの接続:

SNAP!に、 leap motion 接続用のブロックを追加する。以下のファイルを開く(デスクトップに置いてある)

snapmotion.xml

leap motion のセンサー値を読み取るブロックが変数のグループに追加される。

これを利用して、アプリケーションを作成する。

無限ループのブロックの中に、センサーブロックを配置して利用するとよい。

※ SNAP!のLeapセンサー値のブロックで値が取得されない場合は、ターミナルウィンドウを最前面にすると動作する模様。

※ それでも回復しない場合、サーバスクリプトを Ctrl+Cで停止し、python で読み込んで起動し直す。

例)