Up:Tutorial    Previous:車輪移動ロボット     Next: 距離センサ   


車両のダイナミクス

前節では,動力学計算をしない状態での車両の制御を説明しましたが,ここでは車両の物理シミュレーションを行うサンプルを紹介します。

ダンベルモデル

モデルの作成

まずロボットの形状モデルなどが置かれたディレクトリに移動し、以下のファイルを作成します。

$ cd ~/sigverse-<version>/share/sigverse/data/shape/
$ emacs Dumbel.x3d

このサンプルは2つのシリンダを関節で接続したモデルです。

同じ形状ファイルをクライアント側のSIGViewerのインストール先に置きます。

Jointの親子関係

作成したモデルの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
$ emacs DumbelWorld.xml

ダイナミクスをtrueにしています。

コントローラ

次に車輪を回転させるコントローラを作成します。

$ 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]

コンパイルします。

$ ./sigmake.sh DumbelController.cpp

実行

それでは実行してみましょう。

$ ./sigserver.sh -w DumbelWorld.xml

viewerで見てみると、定期的にダンベルが前後に動くことが確認できます。


Up:Tutorial    Previous:車輪移動ロボット     Next: 距離センサ

Counter: 1413, today: 2, yesterday: 1

Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2014-11-07 (Fri) 18:28:12 (1470d)