//&engpage("Controlling agent with Kinect");

Up:[[Tutorial]]    Previous:[[眼球運動]]     Next: [[HMD+KINECT]]   

----
#contents

*キネクトによるエージェントの操作 [#g847337f]

※このチュートリアルはv2.1.0以降で動作します。

キネクトを使ってSIGVerseの人間エージェントの体の動きを操作する方法を紹介します。

※すでにOpenNIがクライアントpcにインストールされていて、サンプルコードNiUserTrackerが動作可能であることを前提条件とします。
**OpenNI動作確認バージョン [#w7344684]
-OpenNI Stable Build for Windows x86 (32-bit) v1.5.2.23 Development Edition
--ダウンロードは[[こちら>http://www.openni.org/openni-sdk/openni-sdk-history-2/]]
-- (※ 最新版でも動作すると思いますが,正式な動作確認は未だです 2013-12-03現在)

-PrimeSene NITE Stable Build for Windows x86 (32-bit) v1.5.2.21 Development
--上と同じページのOpenNI Compliant Middleware Binariesを選択してダウンロード。

-PrimeSense Sensor Module for OpenNI Version 5.1.0.25 
--ダウンロードは[[こちら>https://github.com/avin2/SensorKinect]]。

**クライアント側の準備 [#g906fc36]
キネクトにより骨格を抽出するサンプルプログラムを利用し、関節の回転データ(クオータニオン)を計算し、SIGVerseサーバにデータを送信します。

***ダウンロード [#a9563850]

[[KINECTサービス]]からSIGNiUserTracker_<version>.zipをダウンロードします。



//#ref(SIGNiUserTracker.sig)

//ソースコードは[[こちら>#j4c23122]]


***インストール [#m9903252]
ダウンロードしたzipファイルを展開しSIGNiUserTracker.sigをOpenNIサンプルの実行ファイルがあるフォルダに置きます。デフォルトでは以下のフォルダです。

C:\Program Files (x86)\OpenNI\Samples\Bin\Release
(※Windows7 64bitの場合)

この状態でクライアントpcにキネクトを接続しておけば準備完了です。
**サーバ側の準備 [#y2f178b2]
コントローラで関節データを受信し、関節を回転させます。
***コントローラ [#w4aca122]
まずコントローラを作成します。

 $ emacs kinectController.cpp

#gist(t-inamura/838ce199f60e0c2d7772);


このコントローラではキネクトからデータを受け取り関節を回転させます。

コンパイルします。

 $ ./sigmake.sh kinectController.cpp

***他のモデルのコントローラサンプル [#ra789b97]
※準備中
// ***他のモデルのコントローラサンプル [#ra789b97]
//-[[Robot-nii.xml>キネクトによるエージェントの操作(ロボット)]]
//-[[Man-nii-v2.xml>キネクトによるエージェントの操作(Man-nii-v2.xml)]](エージェントの初期姿勢がz軸方向を向いていない場合に対応)

***世界ファイルの作成 [#wd8a8474]
次に世界ファイルを作成します。
 $ emacs kinectWorld.xml

kinectWorld.xml

#highlight(xml){{
<?xml version="1.0" encoding="utf8"?>
 <world name="myworld2">

 <!--重力の設定-->
   <gravity x="0.0" y="-980.7" z="0.0"/>

 <!--エージェントMan-niiの設定-->
   <instanciate class="Man-nii.xml">

 <!--エージェント名-->
         <set-attr-value name="name" value="kinect_man"/>

 <!--C++言語の指定-->
         <set-attr-value name="language" value="c++"/>

 <!--オブジェクトファイルkinectController.soの指定-->
         <set-attr-value name="implementation"
 value="./kinectController.so"/>
         <set-attr-value name="implementation" value="./kinectController.so"/>

 <!--動力学演算をfalseに設定-->
         <set-attr-value name="dynamics" value="false"/>

 <!--エージェントの位置(x,y,z)-->
        <set-attr-value name="x" value="0.0"/>
        <set-attr-value name="y" value="60.0"/>
        <set-attr-value name="z" value="0.0"/>

  </instanciate>
</world>
}}
人間のみが登場するシンプルな世界ファイルです。このサンプルではキネクトで操作できるエージェントは人間エージェントのみです。
**実行 [#scf358ac]
それでは実行してみましょう。
***SIGVerse起動 [#rebb6851]
まずシグバースサーバを起動します。

 $ sigserver.sh -w ./kinectWorld.xml

次にSIGViewerで起動したサーバに接続します。接続すると人間が立っているのが見えます。

***サービスの登録 [#x7693c87]

SIGViewerにサービスを登録します。左上のメニューのServiceのAddを選択します。

#ref(キネクトによるエージェントの操作(v2.0系)/SIGNi_1.PNG)

すると以下のようなウィンドウが立ち上がるのでAddボタンを押して先ほどダウンロードしたSIGNiUserTracker.sigを読み込みます。

#ref(キネクトによるエージェントの操作(v2.0系)/SIGNi_2.PNG,80%)

Service listにSIGNiUserTracker.sigが登録されたらOKボタンを押してウィンドウを閉じます。

次にメニューのService→Startをクリックし、先ほど登録したSIGNiUserTracker.sigをクリックします。

キネクトの深度画像ウィンドウが立ち上がり、サーバ側で

 [SYS]  Service: "SIGKINECT" is available

と表示されればキネクトサービスの立ち上げに成功です。
それでは"START"ボタンを押してシミュレーションを開始してみましょう。

キネクトの前で体を動かすと骨格が検出され、人間エージェントを操作することができるようになります。

#ref(キネクトによるエージェントの操作(v2.0系)/SIGNi_3.PNG,40%)

**ソースコードのコンパイル [#rc3b6fdb]
次にクライアント側ので動くKINECTサービスのソースコードをコンパイルする方法を説明します。コンパイルする環境はVC++2008を前提としています。


***ソースコード取得 [#j4c23122]

[[KINECTサービス]]からソースコードを取得します。
//#ref(SIGNiUserTracker_1-0-0.zip)

展開したフォルダの中に入っているSIGNiUserTrackerフォルダをOpenNIのサンプルコードがおかれた以下のフォルダに移動します。

C:\Program Files (x86)\OpenNI\Samples
***コンパイル [#j1513ff2]
次にSIGNiUserTrackerフォルダの中のソリューションファイルをダブルクリックして起動します。(※このとき必ず管理者権限で実行します)

※バージョン1.0.0の場合はコンパイルにはboostライブラリのインストールが必要です。
boostのインストール方法とVC++の設定方法は省略します。

VC++が起動したらソリューションエクスプローラの中のソリューション名を右クリックしてビルドを選択します。ビルドが成功すると以下に実行ファイルSIGNiUserTracker.exeが作成されます。

C:\Program Files (x86)\OpenNI\Samples\Bin\Release

拡張子を.exeから.sigに変えることによりSIGViewerに登録可能となります。

*Old Version [#g8ea554a]
-[[キネクトによるエージェントの操作(v2.0系)]]
-[[キネクトによるエージェントの操作(v120330, v1.4.8)]]

#highlight(end)

----
Up:[[Tutorial]]    Previous:[[眼球運動]]   Next: [[HMD+KINECT]] 

#counter

Front page   Edit Diff Backup Upload Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes