MuJoCoプラグイン¶
概要¶
MuJoCoについて¶
MuJoCo (Multi-Joint dynamics with Contact)は、ロボティクス研究の分野で広く使われている物理エンジンです。もともとワシントン大学のEmo Todorov氏らによって開発され、2021年にGoogle DeepMindが取得した後、Apache 2.0ライセンスのオープンソースソフトウェアとして公開されています。特に強化学習をはじめとするロボットの学習研究において標準的なシミュレーション基盤のひとつとなっています。
MuJoCoは一般化座標系(関節座標系)に基づいて多体系の運動方程式を扱う設計となっており、多関節ロボットを安定に扱うことができます。また接触については、凸最適化として定式化されたソフトコンタクトモデルを採用していることが特徴で、接触を含むシミュレーションを安定かつ高速に処理できます。
MuJoCoプラグインについて¶
ChoreonoidのMuJoCoプラグインは、MuJoCoをChoreonoidの物理エンジンとして利用するためのプラグインです。シミュレータアイテムとして「MuJoCoシミュレータ」を提供し、他の物理エンジンのシミュレータアイテムと同様の手順で利用することができます。Choreonoidで扱う標準的なボディモデルをそのまま利用でき、位置制御・速度制御・トルク制御のいずれの方式にも対応しています。
MuJoCoはPhysXと並んでChoreonoidにおける準標準の物理エンジンとして位置付けられており、公式のビルド済みライブラリ(バージョン3.9.0)がChoreonoid本体のリポジトリに同梱されています。これによりMuJoCoを別途インストールする必要はなく、Choreonoidをビルドするだけで自動的に利用できる状態になります。
セットアップ¶
MuJoCoプラグインの利用に必要なMuJoCoライブラリはChoreonoid本体に同梱されており、デフォルトで有効になっています。そのため通常のChoreonoidのビルド手順に従うだけで、MuJoCoプラグインも一緒にビルドされ、すぐに利用できる状態となります。同梱されているのはMuJoCoの公式リリースのビルド済みダイナミックライブラリとヘッダファイルで、対応プラットフォームはLinux (x86_64) とWindows (x86_64) です。
CMakeのオプションとしては次の2つが用意されていますが、通常は特に変更する必要はありません。
ENABLE_MUJOCO: 同梱のMuJoCoライブラリを有効にします。デフォルトはONです。BUILD_MUJOCO_PLUGIN: MuJoCoプラグイン本体をビルドします。デフォルトはENABLE_MUJOCOの値(つまり通常はON)です。
MuJoCoを使いたくない場合は、CMakeの設定で ENABLE_MUJOCO と BUILD_MUJOCO_PLUGIN の両方を OFF にしてください。
MuJoCoシミュレータの利用¶
MuJoCoプラグインが読み込まれていると、シミュレータアイテムとして「MuJoCoシミュレータ」が利用可能となります。メインメニューの「ファイル」-「新規」-「MuJoCoシミュレータ」で生成し、 シミュレーションプロジェクトの作成 で解説されている手順でワールドアイテムの子アイテムとして配置することで使用できます。基本的な使い方は他のシミュレータアイテムと共通です。
対応機能¶
MuJoCoシミュレータは以下の機能に対応しています。
プロパティ¶
MuJoCoシミュレータアイテムでは、 シミュレータアイテム共通のプロパティ に加えて、以下の固有のプロパティが利用できます。
プロパティ |
デフォルト値 |
意味 |
|---|---|---|
重力加速度 |
0 0 -9.80665 |
重力加速度ベクトルです [m/s^2]。 |
積分器 |
ImplicitFast |
数値積分の手法を「Euler」「Implicit」「ImplicitFast」から選択します。通常はデフォルトのImplicitFastで問題ありません。 |
ソルバ |
Newton |
接触・拘束力計算のソルバを「PGS」「CG」「Newton」から選択します。 |
ソルバ反復回数 |
100 |
ソルバの最大反復回数です。 |
スレッド数 |
1 |
MuJoCoの計算に使用するスレッド数です。 |
位置ゲイン |
10000.0 |
位置指令で関節を駆動する際のアクチュエータのゲインです。 |
速度ゲイン |
100.0 |
速度指令で関節を駆動する際のアクチュエータのゲインです。 |
最小摩擦係数 |
0.001 |
接触計算で使用する摩擦係数の下限値です。 |
最大摩擦係数 |
1.0 |
接触計算で使用する摩擦係数の上限値です。 |
摩擦インピーダンス比 |
1.0 |
MuJoCoのimpratioパラメータに対応します。接触の法線方向に対する摩擦方向のインピーダンスの比で、値を大きくすると滑りが抑えられます。 |
自己干渉 |
false |
ボディモデル内の自己干渉をデフォルトで有効にします。 |
速度出力 |
false |
リンクの速度をシミュレーション結果として出力します。 |
加速度出力 |
false |
リンクの加速度をシミュレーション結果として出力します。 |
駆動トルク/力出力 |
false |
関節の駆動に実際に使用されたトルク(直動関節の場合は力)を、関節のエフォート値として書き戻します。 |
サンプル¶
MuJoCoプラグイン専用のサンプルは特に用意されていませんが、Choreonoidに付属する一般のシミュレーションサンプル( sample/SimpleController/ 等)について、プロジェクト内のシミュレータアイテムをMuJoCoシミュレータに差し替えることで、多くのものをMuJoCoでシミュレーションすることができます。