Up:Tutorial? Previous:ロボット・ダイナミクス(単純モデル) Next: 車輪移動ロボット?
※このサンプルはv2.2.0以降で正常に動作します。
ここでは物理シミュレーションモードでヒューマノイドロボットの関節を制御するサンプルを紹介します。
世界ファイルでヒューマノイドロボットや人間の"dynamics"の設定を"false"に設定した場合はエージェントの関節角度を直接指定することができました。しかし、 "dynamics"の設定を"true"にした場合、関節角度を直接指定することができなくなります。また、シミュレーション開始と同時に重力の影響で関節が曲がってしまい、エージェントが崩れ落ちてしまいます。ここではヒューマノイドロボットの関節に力を加え関節角度を制御するサンプルを紹介します。
コントローラを作成します。
$ cd ~/MyWorld $ emacs RobotContoroller.cpp
RobotController.cpp
これは関節の角度が目標角度に達するようにonActionで各関節の角速度を設定するサンプルです。onInitでヒューマノイドロボット(nii_robot.x3d)が持つすべてのヒンジ関節の関節名と目標角度の初期値(0°)が設定されています。また、メッセージを送信することによりそれぞれの関節の目標角度を設定することができます。
コンパイルします。
$ ./sigmake.sh RobotController.cpp
次に世界ファイルを作成します。
$ emacs RobotWorld.xml
RobotWorld.xml
"dynamics"を"true"に設定しました。
それでは実行してみましょう。
$ sigserver.sh -w ./RobotWorld.xml
SIGViewerでサーバに接続してシミュレーションを開始します。するとヒューマノイドロボットがバランスを取りながら立っているのが見えます。
次にロボットにメッセージを送信して関節の目標角度を設定します。
左肩の関節角度を-90°に設定しました。 実行ボタンを押すと左肩の関節の目標角度が設定されて、左肩の関節が動きます。
Up:Tutorial? Previous:ロボット・ダイナミクス(単純モデル) Next: 車輪移動ロボット?