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_MUJOCOBUILD_MUJOCO_PLUGIN の両方を OFF にしてください。

MuJoCoシミュレータの利用

MuJoCoプラグインが読み込まれていると、シミュレータアイテムとして「MuJoCoシミュレータ」が利用可能となります。メインメニューの「ファイル」-「新規」-「MuJoCoシミュレータ」で生成し、 シミュレーションプロジェクトの作成 で解説されている手順でワールドアイテムの子アイテムとして配置することで使用できます。基本的な使い方は他のシミュレータアイテムと共通です。

対応機能

MuJoCoシミュレータは以下の機能に対応しています。

  • アクチュエーションモード: トルク指令(JointEffort)、速度指令(JointVelocity)、位置指令(JointDisplacement)

  • 力センサ、加速度センサ、角速度センサ(レートジャイロ)のシミュレーション

  • リンクの速度・加速度・駆動トルク(力)の状態出力(対応するプロパティで有効化)

  • 接触マテリアル による摩擦係数・反発係数等の設定

  • 追加拘束(extra joint)( 追加拘束の設定

  • 等価ロータ慣性(armature)の考慮( ロータ慣性の設定

  • 表面速度(surface velocity)による疑似的なクローラやコンベアのシミュレーション

プロパティ

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でシミュレーションすることができます。