Up:Tutorial?    Previous:距離センサ?    Next: キネクトによるエージェントの操作?      

眼球運動

人間エージェントがターゲットのオブジェクトを目で追いかけ、視線の変化と同時に目玉を動かすサンプルを紹介します。

※バージョン111005以降で正常に動作(v121029, v2.0.1以降には未対応)

コントローラ

まずコントローラを作成します。

目玉を動かすコントローラ

$ cd ~/sigverse-<version>/bin/NewWorld
$ emacs moveEye.cpp

moveEye.cpp

これは人間がターゲット"Toy_0"を目で追いかけ、視線の変化に合わせて黒目を動かすサンプルです。黒目を動かす方法は普通の関節を動かす方法と同じでsetJointAngleを使います。ここで指定した関節名は人間エージェントのそれぞれの関節名に対応する関節軸はJoint定義一覧?を参考にしてください。

移動可能なコントローラ

次にビューワーで操作可能なエージェントのコントローラを作ります。

$ emacs move.cpp

move.cpp

このコントローラはdynamicsをtrueに設定したときにエージェントを操作することができます。操作方法はビューワーからメッセージを送信してオブジェクトに力を加えます。例えば

z=-500

とメッセージを送信したらz軸のマイナス方向に500(N)の力が働きます。

Makefileを修正してコンパイルします。

$ make

設定ファイル

次に設定ファイルを作成します。

世界ファイル

$ cd ../
$ emacs xml/eyeWorld.xml

eyeWorld.xml

この世界ファイルでは人間、ペンギン(おもちゃ)、テーブル、椅子が登場します。ペンギンとテーブルはdynamicsをtrueに設定しています。ペンギンがテーブルの上に乗っています。このペンギンに先ほど作成したビューワーで操作できるコントローラを割り当てます。

物理演算形状、大きさの設定

エージェントまたはエンティティの物理演算用の形状、位置を微調整します。

$ emacs xml/seSidetabe_B.xml
 <body filename="dummy-body.xml"/>

の下に以下を加えます。

 <simpleShape type="box">
   <position x="0" y="-10" z="0"/>
   <size sx="150" sy="70" sz="80"/>
 </simpleShape>

テーブルの見た目の形状と物理演算用の形状を一致させるように微調整を行いました。

実行

それでは実行してみましょう。

$ ./sigserver.sh -p 9001 -w xml/eyeWorld.xml

シミュレーションを開始してみると以下のようにテーブルの上にペンギンが乗っていてそれを人間エージェントが見つめています。

#ref(): File not found: "eye_1.jpg" at page "眼球運動"

次にテーブルの上に乗っているおもちゃを動かしてみましょう。 例えばSIGViewerから"Toy_0"に

z=500

というメッセージを送信します。 するとペンギンはz軸方向に力が加わり、机の上を移動します。 人間はそれを目で追いかけ、同時に黒目を動かします。

#ref(): File not found: "eye_2.jpg" at page "眼球運動"


#ref(): File not found: "eye_3.jpg" at page "眼球運動"

      顔のズーム

次にy軸方向に力を加えてみます。 以下のメッセージを"Toy_0"に送信します。

y=3000

するとy軸方向に力が加わり、おもちゃのペンギンは飛び跳ねます。 人間エージェントはそれを目で追いかけます。

#ref(): File not found: "eye_4.jpg" at page "眼球運動"

Old Version

Up:Tutorial?    Previous:距離センサ?    Next: キネクトによるエージェントの操作?         


Front page   New List of pages Search Recent changes   Help   RSS of recent changes