Up:Tutorial? Previous:ロボット・ダイナミクス(単純モデル) Next: 車輪移動ロボット?
※このサンプルはv121029, v2.0.1には対応しておりません。
ここではヒューマノイドロボットの物理シミュレーションを行うサンプルを紹介します。(バージョン110418以降で正常に動作)
世界ファイルでヒューマノイドロボットや人間の"dynamics"の設定を"false"に設定した場合はエージェントの関節角度を直接指定することができます。しかし、 "dynamics"の設定を"true"にした場合、関節角度を直接指定することができなくなります。また、シミュレーション開始と同時に重力の影響で関節が曲がってしまい、エージェントが崩れ落ちてしまいます。ここではヒューマノイドロボットの関節に力を加え関節角度を制御するサンプルを紹介します。
コントローラを作成します。
$ cd ~/sigverse-<version>/bin/NewWorld $ emacs RobotContoroller.cpp
RobotController.cpp
これは関節の角度が目標角度に達するようにonActionで各関節の角速度を設定するサンプルです。onInitでヒューマノイドロボット(nii_robot.x3d)が持つすべてのヒンジ関節の関節名と目標角度の初期値(0°)が設定されています。また、メッセージを送信することによりそれぞれの関節の目標角度を設定することができます。
まずMakefileを修正します。
$ emacs Makefile
#オブジェクトファイルの指定でobotController.soを指定
#オブジェクトファイルの指定 OBJS = RobotController.so
Makefile
#SIGVerseソースの場所指定 SIG_SRC = /home/<username>/sigverse-<version>/include/sigverse #オブジェクトファイルの指定 OBJS = RobotController.so all: $(OBJS) #コンパイルを行います。 ./%.so: ./%.cpp g++ -DCONTROLLER -DNDEBUG -DUSE_ODE -DdDOUBLE -I$(SIG_SRC) - I$(SIG_SRC)/comm/controller -fPIC -shared -o $@ $<
コンパイルします。
$ make
次に世界ファイルを作成します。
$ cd .. $ emacs xml/RobotWorld.xml
RobotWorld.xml
"dynamics"を"true"に設定しました。
それでは実行してみましょう。
$ ./sigserver.sh -p 9001 -w RobotWorld.xml
SIGViewerでサーバに接続してシミュレーションを開始します。するとヒューマノイドロボットがバランスを取りながら立っているのが見えます。
次にロボットにメッセージを送信して関節の目標角度を設定します。
右腕の関節角度を-20°に設定しました。 実行ボタンを押すと右肩の関節の目標角度が設定されて、右肩の関節がゆっくりと動き始めます。
※関節が動き始めるまで時間がかかることがあります。
目標角度を大きくしすぎるとバランスが取れなくなってロボットは転倒してしまいます。
Up:Tutorial? Previous:ロボット・ダイナミクス(単純モデル) Next: 車輪移動ロボット?