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でサーバに接続してシミュレーションを開始します。するとヒューマノイドロボットがバランスを取りながら立っているのが見えます。

dyna_1.jpg

次にロボットにメッセージを送信して関節の目標角度を設定します。

dyna_2.jpg

右腕の関節角度を-20°に設定しました。 実行ボタンを押すと右肩の関節の目標角度が設定されて、右肩の関節がゆっくりと動き始めます。

※関節が動き始めるまで時間がかかることがあります。

dyna_3.jpg

目標角度を大きくしすぎるとバランスが取れなくなってロボットは転倒してしまいます。

dyna_4.jpg

Up:Tutorial?    Previous:ロボット・ダイナミクス(単純モデル)     Next: 車輪移動ロボット?


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