PythonによるOpen Dynamics Engine講座 その26
PythonによるRTコンポーネント講座(その7)

簡易分散コンポーネント型シミュレータの作成


OpenHRP3のようにコンポーネントに分散したロボットシミュレータをPyODE、PyOpenGLを使って簡単に作ります。僕は4日ぐらいかかりましたけど、のろのろしていたせいなので多分1時間ぐらいいでできます。サンプルはここ
プログラムの実行には以下のソフトウェアをインストールする必要があります。

インストールのやり方はPyODERTC講座のインストール編に書いてます。
マニュアルは暇があれば追加しまが、今は一身上の都合により追加できません(単にめんどくさいだけ)。
サンプルですが、GLRTMというのは画像表示のコンポーネントでインポートを3つ持っています。

  1. 物体の姿勢(TimedDoubleSeq)・・・・回転変換行列3×3×物体の数
  2. 物体の位置(TimedDoubleSeq)・・・・x、y、zの3つ×物体の数
  3. 物体の形状、初期位置(TimedDoubleSeq)・・・・後述

の3つです。
PySimuというのは物理計算のコンポーネントでインポートを3つ、アウトポートを4つ持っています。

  1. トルク(TimedDoubleSeq)・・・・・・関節の数
  2. シミュレーションのリセット(TimedBoolean)・・・・1個
  3. 物体の形状、初期位置、ジョイントの種類、軸、位置、どの物体を接続するか(TimedDoubleSeq)・・・後述

のインポート3つと、

  1. 物体の姿勢(TimedDoubleSeq)・・・・回転変換行列3×3×物体の数
  2. 物体の位置(TimedDoubleSeq)・・・・x、y、zの3つ×物体の数
  3. 関節の角度(TimedDoubleSeq)・・・・関節の数
  4. 圧力センサのデータ(TimedDoubleSeq)・・・・・設置した圧力センサの数(まだ使用できません)。

のアウトポートの3つです。
インポートにトルクがありますが今回は簡易のために速度制御になっているので注意してください
最後にModelLorderですが、アウトポートを1つ持っています。

  1. 物体の形状、初期位置、ジョイントの種類、軸、位置、どの物体を接続するか(TimedDoubleSeq)・・・後述

モデルの読み込みですが、ModelLorderと同じフォルダにTest.txtという名前のファイルを作成して物体の場合は以下のように記述してください。空行は絶対に空けないでください。

直方体の場合
Body、Box、x軸方向への長さ、y軸方向への長さ、z軸方向への長さ、x座標、y座標、z座標、密度

球の場合
Body、Sphere、半径、x座標、y座標、z座標、密度

円柱の場合
Body、Cylinder、高さ、半径、x座標、y座標、z座標、密度

カプセルの場合
Body、Capsule、高さ、半径、x座標、y座標、z座標、密度

です。ポリゴンはまだ実装してません。ジョイントもTest.txtに記述します。ただし、物体をすべて記述した後に記述するようにしてください。駆動関節かは、1で駆動関節、0で自由関節にできます。物体1、2には物体を記述した順に番号を書いてください。

ヒンジジョイントの場合
Joint、Hinge、物体1、物体2、中心点x座標、y座標、z座標、関節軸x、y、z、駆動関節か?

スライダージョイントの場合
Joint、Slinder、物体1、物体2、関節軸x、y、z

固定ジョイントの場合
Joint、Fix、物体1、物体2

その他のジョイントは未実装です。バネ関節、粘性摩擦などもこれから実装予定です。

今回はP制御を行うサンプルコントローラSampleControllerODEを用意しました。インポートは、

  1. 関節角度(TimedDoubleSeq)

で、アウトポートは

  1. トルク(TimedDoubleSeq)

です。

コンポーネントの接続は、

これで動作できます。コントローラはOpenHRP3用のコントローラも使うことができます。これがRTミドルウェアの便利なところですね。


PythonによるRTコンポーネント講座に戻る

PythonによるOpen Dynamics Engine講座に戻る

トップページへ戻る