EpubLDJ01

LeapMotion SDKの概要

仕組み

コンビュータの手前に置かれるように設計された小型USB周辺装置である。2基の赤外線カメラと赤外線照射LEDから構成されています。

赤外線LEDに照らされた手や指を2基の赤外線カメラで撮影し、画像解析によって3D空間での手や指の位置を割り出す。検知できる範囲は半径50センチ程度、中心角110度の空間で、手、指、ベンのようなボイントを指し示すツールを0.01ミリの精度で認識 する。これにより、さまざまなモーションコントロールを実現している。

両手と10本の指をそれぞれ独立して同時に認識することができる。従来技術との差は、「腕を振ってスワイブ入力」と「指先でサイン」の差である。それにより、例えば手の指の動きをコンビューターの中で再現したり、宙で書いたサインがコンビューターの中にも書かれるといったことが可能になる。

マウスやタッチスクリーンより正確で素早く、キーボード並みに確実なデバイスである。トラッキング速度はバランスモードで120fps(150fps)、精度重視のブレシジョンモードで60fps(80fps)、速度重視の高速モードでは214fps(295fps)だ(括 弧内はUSB 3.0接続時)。

Leap Motionは、モーションキャブチャできるのは、両手と指10本で、解析は専用のソフトウェアによって行なわれる。手や指の動きは3次元的に捉えることが可能で、上下左右、前後への移動はもちろん、ひねりなどの動作もしっかり捉えられる。

できること

  • Hand 手のひら位置・向き
  • その手が左右どちらか (v2)
  • 指の骨格の全部の位置・向き (v2)
  • さらに高級な情報も
  • pinch (つまむ), grab (つかむ), confidence (信頼度) • 閉区間 [0,1] で
  • Gesture
  • Circle, swipe, key tap, screen tap

APIの概要

Leap Motionではセンサーから取得したデータと人間の手の内部モデルを組み合わせトラッキングをおこなっています。

座標系

  • 距離:ミリメートル
  • 時間:マイクロ秒(特に記述のない限り)
  • スピード:ミリメートル/秒
  • アングル:ラジアン

モーショントラッキングデータ

Leap Motionがトラッキングする、手、指、ツールの追跡情報や認識ジェスチャー情報などは、LeapFrameオブジェクトとしてLeap Motionデータモデルのルートに用意されています。詳細は、LeapFrameクラスをご確認ください。

手のモデル

手にはID、位置や検出された手の特性情報、腕と指が関連づけられています。詳細は、LeapHandクラスをご確認ください Leap Motionのソフトウェアは、手の一部が陰に隠れて表示されない場合も、人間の手の内部モデルを使い、予測追跡をおこなっています。またほかの人を加えた2つ以上の手も認識することができますが、センサートラッキングの品質を高める一番のオススメは、Leap Motionのセンサーエリアに両手を置くことです。

腕のモデル

腕は、棒のように向き、長さ、幅の情報を持つオブジェクトです。肘がセンサーエリアに含まれていない場合は、一般的な人間の比率によって位置を推定します。 詳細は、LeapArm クラスをご確認ください。

指のモデル

指は一部が陰に隠れて表示されない場合も、人間の手の内部モデルを使い、予測追跡をおこなっています。指のIdには、thumb、index、middle、ring、pinkyの名前が付けられています。詳細は、LeapFinger クラスをご確認ください。 また、指では付け根から先まで4つの骨の情報を持つ、LeapBone オブジェクトを内包しています。

骨のIDs
* Metacarpal - (親指を除く)手首と指を結ぶ手の内側の骨
* Proximal Phalanx - 指の付け根にある骨、手のひらと結ぶ
* Intermediate Phalanx - 指の真ん中の骨、先端部とベースとを結ぶ
* Distal Phalanx - 指の先端末の骨

ツールモデル

ツールはペンなどのデータモデルです。詳細は、LeapTool クラスをご確認ください。

ジェスチャーモデル

ユーザの特定の動きをジェスチャーとして認識します。詳細は、LeapGesture クラスをご確認ください。

  • Circle — 指で円を描く
  • Swipe — 手の横への直線運動
  • Key Tap — 指によるキータッピング
  • Screen Tap — 指による画面タッピング

動作モデル

2つのLeapFrameオブジェクト間で運動を計算することができます。

  • Scale
    LeapFrameオブジェクトのScaleはシーンの遠近を返します。 LeapHand オブジェクトのScaleは指の広がりを返します。

  • Rotation
    LeapFrameオブジェクトのRotationはシーンの回転の差分を返します。 LeapHand オブジェクトのRotationは手の向きを返します。

  • Translation
    LeapFrameオブジェクトのTranslationはシーンのすべてのオブジェクトの平均位置を返します。 LeapHand オブジェクトのTranslationは手の位置を返します。

センサーイメージ

赤外線カメラによる画像データを取得することができます。

システムアーキテクチャー

Leap Motionソフトウェアはサービス(Windows)、またはデーモン(Mac , Linux)で動作します。ソフトウェアはLeap MotionのコントローラーデバイスからUSBを経由しトラッキングデータを受信し、ネイティブアプリケーションインターフェースと、WebSocketインターフェースの2つをLeap Motion SDKで用意しています。

アプリケーションプログラミングインターフェース

ネイティブインターフェースはダイナミックライブラリによるアプリケーションの作成、WebSocketインターフェースではWebアプリケーションがつくれます。

ネイティブアプリケーション

ダイナミックライブラリとC++、またはObjective-Cのアプリケーションでは直接リンクができます。Java, C#, Pythonではバインディングすることでリンクできます。

Leap Motionサービスは、USBを介しLeap Motionコントローラデバイスからデータを受信し、LEAP対応のアプリケーションへ処理したデータを送信します。デフォルトでは、サービスは、フォアグラウンドアプリケーションにトラッキングデータを送信します。アプリケーションはバックグラウンドへの受信を要求することができます。

Leap Motionコントロールパネルは、サービスとは別に実行され、ユーザが構成を更新することができます。WindowsのコントロールパネルアプレットとMac OS Xのメニューバーのアプリケーションです Leap Motionのアプリケーションがオペレーティングシステムのフォーカスを失うと、Leap Motionサービスは、データの送信を停止します。常に受信するには、アプリケーションをバックグラウンドで動作するように設計します。

WebSocketインターフェース

Leap Motionサービスは、localhostのポート6437でWebSocketサーバーを実行し、JSONメッセージフォーマットでトラッキングデータを出力し、アプリケーションは設定メッセージをサーバーに送信することができます。

Leap Motionサービスは http://127.0.0.1:6437 でWebSocketサーバーを提供します。 Leap Motionコントロールパネルで、エンドユーザーがWebSocketサーバーの有効化することができます。 WebアプリケーションではJavaScriptライブラリleap.jsクライアントを利用し、サーバーへの接続を確立し、JSONメッセージを解析します。