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 シミュレーションを開始してみると以下のようにテーブルの上にペンギンが乗っていてそれを人間エージェントが見つめています。 次にテーブルの上に乗っているおもちゃを動かしてみましょう。 例えばSIGViewerから"Toy_0"に z=500 というメッセージを送信します。 するとペンギンはz軸方向に力が加わり、机の上を移動します。 人間はそれを目で追いかけ、同時に黒目を動かします。 顔のズーム 次にy軸方向に力を加えてみます。 以下のメッセージを"Toy_0"に送信します。 y=3000 するとy軸方向に力が加わり、おもちゃのペンギンは飛び跳ねます。 人間エージェントはそれを目で追いかけます。 Up:Tutorial? Previous:距離センサ Next: キネクトによるエージェントの操作 |