Leap Motion Controller対応プログラムを開発する場合は、同社のWebサイトからダウンロードできるSDKをインストールする必要がある。SDKはJavaScript、C#、Unity、Python、ObjectiveC、C++、JAVAと、豊富な言語やプラットフォームに対応している。
Leap Motionで検知できるのは手のひら、指、そのほかペンのようなポインティング可能なツールだ。実際にどのようなデータが取得できるかは「Leap Motion Control Panel」から「Diagnostic Visualizer」を起動させるとよく分かる。座標はLeap Motionの上面中央を原点とする3次元空間――左方向にX軸、上方向にY軸、手前方向にZ軸の直行座標系となる。
指やペンの情報はfingerモデル、Toolモデル、その両方を含むPointableモデルとして、先端の位置情報のほか、ベクトル情報を取得できる。また、後述のHandモデルと合わせて「指と手のひらにぴったりフィットする球体」の中心座標、半径も得られる。「ほぼ平ら」な状態は「より大きな球体」として認識されるため、図らずも巨にゅ……巨大球体平面説が裏付けられたわけだ。この情報を利用したアプリの登場を期待したい。
手の情報はHandモデルとして認識されるが、Fingerモデルなどよりもやや複雑になる。手だけではなく、FingerオブジェクトやToolオブジェクトもその手に関連付けられるからだ。FingerオブジェクトにはIDが振られるが、拳を握り込んだりすれば指は検知されなくなる。その結果、いったんロストしたFingerオブジェクトにはIDの連続性はない。5本の指が検出できればその位置関係から人差し指がどれかを認識することは可能だが、いったんその指がロストすれば再び5本の指が検知できるまでどれが人差し指かを判定することは難しい。
Fingerオブジェクトに限らず、Leap Motion Controllerで検知されるオブジェクトはいつでもロストする可能性があることを前提としてプログラミングする必要がある。また、その逆に突然出現することも考慮したうえで、連続的な操作を実現しなくてはならない。このあたりは作り手の「作法」として徐々に洗練されていくだろう。
Fingerオブジェクト以外にHandモデルで取得できる情報は手のひらの中心点座標、移動速度(ミリ/秒)、手のひらに対する垂直ベクトル、手のひらの中心から指に向かうベクトルなど。これらは飛行機を手のひらで操作するアプリなどで利用されている。
Leap Motion Controllerからはそれぞれの3軸の座標情報だけでなく、回転(回転軸のベクトル、回転角)、拡大/縮小、直線移動といった動き(モーションデータ)も扱いやすい形で取得することができる。さらに、特定のモーションはジェスチャーとしても取得できる。開発者が連続した位置情報を元に動きやジェスチャーを解析する必要がないため、効率のよい開発が可能だ。もちろん、モーションデータ、さらには座標データの変化を読み取れば自分自身でほかのジェスチャーを実装することも可能だ。
認識できるジェスチャーは次の通り。それぞれ指1本ごとに検出できるので「指2本によるスワイプ」も認識可能だ。
これらの情報はAPIを用いて取得するが、Leap Motion Controllerには2系統のAPIが用意されている。1つはネイティブなインタフェース。オーバヘッドが小さいというメリットがある一方、開発するアプリケーションはダイナミック・リンク・ライブラリをリンクする必要がある。そしてもう1つがWebSocketインタフェースだ。このWebSocketインタフェースの実装により、さまざまな言語での開発が容易になっている。
WebSocketは、HTTPをベースとした継続的な双方向通信を可能とするプロトコルで、Ajaxの構成技術の1つであるXMLHttpRequest(XHR)に置き換わるものだ。HTML5仕様を出自とし、IE、Firefox、Ghrome、Safari、Operaなどに実装されている。そのため、特にライブラリをバイナリレベルでリンクさせる必要はなく、ブラウザ上で動くLeap Motion Controller対応JavaScriptアプリケーションを開発することもできる。
もちろん、そのほかの言語でもWebSocketインタフェースは利用可能で、SDKに含まれない有志によるライブラリ・フレームワークはProcessing、Ruby、ActionScriptなどさまざまな言語のものが開発されている。
Copyright © ITmedia, Inc. All Rights Reserved.