Up:Tutorial? Previous:車輪移動ロボット Next: 距離センサ
前節では,動力学計算をしない状態での車両の制御を説明しましたが,ここでは車両の物理シミュレーションを行うサンプルを紹介します。
まずロボットの形状モデルなどが置かれたディレクトリに移動し、以下のファイルを作成します。
$ cd ~/sigverse-<version>/share/data/shape/ $ emacs Dumbel.x3d
このサンプルは2つのシリンダを関節で接続したモデルです。
同じ形状ファイルをクライアント側のSIGViewerのインストール先に置きます。
作成したモデルのJointの親子関係は以下のようになっています。
Humanoid sample(モデルのルート) + Joint JOINT0 (ルートジョイント、3軸における位置、回転の6つの自由度をもつ) + Joint JOINT_CENTER :Segment LINK_CENTER (固定ジョイント、自由度0) + Joint JOINT_LWHEEL :Segment LINK_LWHEEL(ヒンジジョイント、自由度1) + Joint JOINT_RWHEEL :Segment LINK_RWHEEL(ヒンジジョイント、自由度1)
このモデルではLINK_LWHEELがJOINT_LWHEELによって接続され、JOINT_RWHEELがLINK_RWHEEL によって接続されています。
LINK_LWHEELとLINK_RWHEELはそれぞれシリンダ形状となっていて、2つのシリンダが回転することによって車輪運動が実現されます。
エージェント設定ファイルと世界ファイルを作成します。
$ cd ../xml $ emacs DumbelTest.xml
ダイナミクスをtrueにしています。
次に車輪を回転させるコントローラを作成します。
$ cd NewWorld $ emacs DumbelController.cpp
setWheelProperty()で車両の特性を設定します。各引数の意味は下記の通りとなっています。
第1引数 : 左側の車輪のリンクオブジェクト名 第2引数 : 左側の車輪の消費電力[W](2011/4/12時点未対応) 第3引数 : 左車輪の最大角速度[rad/s] 第4引数 : 速度の精度[rad/s] 第5引数 : シミュレーションステップごとに加えられる一様分布に従うノイズ 第6引数 : 1rad回転するごとに加えられるノイズの回数 第7引数 : 左側車輪に掛けられる最大トルク[Nm] 第8引数 : 右側の車輪のリンクオブジェクト名 第9引数 : 右側の車輪の消費電力[W](2011/4/12時点未対応) 第10引数 : 右車輪の最大角速度[rad/s] 第11引数 : 速度の精度[rad/s] 第12引数 : シミュレーションステップごとに加えられる一様分布に従うノイズ 第13引数 : 1rad回転するごとに加えられるノイズの回数 第14引数 : 右側車輪に掛けられる最大トルク[Nm]
Makefileを修正してコンパイルします。
$ emacs Makefile
オブジェクトファイルDumbelController.soを指定
#オブジェクトファイルの指定 OBJS = DumbelController.so
$ make
それでは実行してみましょう。
$ ./sigserver.sh -p 9001 -w DumbelWorld.xml
viewerで見てみると、定期的にダンベルが前後に動くことが確認できます。
Up:Tutorial? Previous:車輪移動ロボット Next: 距離センサ