キネクトを使ってSIGVerseの人間エージェントの体の動きを操作する方法を紹介します。
※すでにOpenNIがクライアントpcにインストールされていて、サンプルコードNiUserTrackerが動作可能であることを前提条件とします。
キネクトにより骨格を抽出するサンプルプログラムを利用し、関節の回転データ(クオータニオン)を計算し、SIGVerseサーバにデータを送信します。
まず、以下の実行ファイルをダウロードします。
(※2012/2/8更新)
ソースコードはこちら
ダウンロードした実行ファイルをOpenNIサンプルの実行ファイルがあるフォルダに移動します。デフォルトでは以下のフォルダです。
C:\Program Files (x86)\OpenNI\Samples\Bin\Release (※Windows7 64bitの場合)
この状態でクライアントpcにキネクトを接続しておけば準備完了です。
サーバ側で関節データを受信し、コントローラで関節を回転させます。
まずコントローラを作成します。
$ cd ~/sigverse-<version>/bin/NewWorld $ emacs kinectController.cpp
kinectController.cpp
次にMakefileを修正してコンパイルします。 (※動作手順省略)
次に世界ファイルを作成します。
$ cd .. $ emacs xml/kinectWorld.xml
kinectWorld.xml
人間のみが登場するシンプルな世界ファイルです。このサンプルではキネクトで操作できるエージェントは人間エージェントのみです。
それでは実行してみましょう。
まずシグバースサーバを起動します。
$ ./sigserver.sh -p 9001 -w xml/kinectWorld.xml
次にSIGViewerで起動したサーバに接続します。接続すると人間が立っているのが見えます。"Send"ボタンを押しシミュレーションを開始します。
次に先ほどダウンロードしてOpneNIサンプルの実行ファイルフォルダの中に入れたSIGNiUserTrackerをダブルクリックして実行します。 すると以下のようなコンソール画面が立ち上がります。
接続するSIGVerseサーバのホスト名、ポート番号、操作するエージェント名の順に入力していきます。
深度画像が表示されたらキネクトの前で以下のようなポーズをとると骨格が検出され、人間エージェントを操作することができるようになります。
一つのキネクトに対して操作できるエージェントは1エージェントのみです。 複数人数の骨格を抽出した場合2人目以降は無視されます。
次にクライアント側のソースコードをコンパイルする方法を説明します。コンパイルする環境はVC++2008を前提としています。
以下からソースコードを取得します。
(※2012/2/8更新)
展開したフォルダの中に入っているSIGNiUserTrackerフォルダをOpenNIのサンプルコードがおかれた以下のフォルダに移動します。
C:\Program Files (x86)\OpenNI\Samples
次にSIGNiUserTrackerフォルダの中のソリューションファイルをダブルクリックして起動します。(※このとき必ず管理者権限で実行します)
VC++が起動したらソリューションエクスプローラの中のソリューション名を右クリックしてビルドを選択します。ビルドが成功すると以下に実行ファイルSIGNiUserTracker.exeが作成されます。
C:\Program Files (x86)\OpenNI\Samples\Bin\Debug