mujoco — ロボティクスや機械学習向け汎用物理シミュレータ
google-deepmind/mujoco
★ 16,987 ・ C++ ・ Apache-2.0
概要
MuJoCo(Multi-Joint dynamics with Contact)は、接触を伴う多関節構造のダイナミクスを計算するための汎用物理シミュレーションエンジンです。現在は Google DeepMind によってメンテナンスされています。
本プロジェクトは、ロボティクス、バイオメカニクス、グラフィックスやアニメーション、機械学習といった、環境と相互作用する構造体の高速かつ高精度なシミュレーションを必要とする領域の研究者やエンジニアに向けて開発されています。基盤となる C API に加え、公式の Python バインディングやゲームエンジン向けのプラグイン、Web ブラウザ上で動作する可視化環境などが整備されており、モデルベース制御から強化学習まで幅広い用途でシミュレーション基盤として利用されています。
主な特徴
- 高精度かつ最適化されたランタイム: ランタイムシミュレーションモジュールは実行性能を最大化するよう調整されており、内蔵された XML コンパイラによって事前に割り当てられた低レベルのデータ構造上で動作します。
- 豊富な可視化機能: デスクトップ環境のネイティブウィンドウ上での対話的なレンダリングに加え、WebAssembly を活用して Web ブラウザ上で 3D モデルを読み込み操作できるビューアが提供されています。
- 公式およびコミュニティによる多言語バインディング: 公式で Python バインディング、Unity 向けプラグイン(C#)、JavaScript/WebAssembly をサポートしているほか、MATLAB Simulink、Swift、Java、Julia、Rust などのサードパーティ製バインディングも存在します。
- 微分可能物理と JAX 連携: JAX で記述された MuJoCo のブランチである「MJX(MuJoCo XLA)」や、MuJoCo の物理ステップから解析的勾配を自動導出して移動ポリシーを学習するチュートリアルが用意されています。
- 多様なモデル形式との相互変換: OpenSim(MyoConverter)、SDFormat(gz-mujoco)、OBJ(obj2mjcf)、Onshape CAD アセンブリ(Onshape to Robot)から MuJoCo の XML 形式(MJCF)への変換ツールがエコシステムとして紹介されています。
使い方
MuJoCo には、ブラウザ上での即時試用、事前ビルド済みバイナリの実行、Python パッケージとしての導入など複数の利用形態が用意されています。
1. ブラウザ上での試用
インストールを行わずにデスクトップやモバイル環境から体験したい場合は、公式Webサイト(mujoco.org)または WebAssembly 版の「MuJoCo Studio」(live.mujoco.org)にアクセスすることで、モデルの確認やドラッグ&ドロップによるモデル読み込みが可能です。
2. 事前ビルド済みバイナリの利用
公式の GitHub Releases ページから、各プラットフォーム向けのコンパイル済みバイナリが配布されています。推奨される利用形態であり、ダウンロード後にネイティブのビューア(MuJoCo Studio または従来の simulate ビューア)を実行できます。
3. Python 環境でのインストール
Python 3.11 以降に対応した公式バインディングは、PyPI 経由で導入できます。パッケージ自体に MuJoCo 本体のバイナリが同梱されています。
pip install mujoco
Linux 向けのビルド済み wheel は manylinux2014 をターゲットに提供されています。また、Google Colab 上で実行可能な公式チュートリアル(IPython notebook)として、基本的な操作法、モデルのプロシージャルな編集、マルチスレッド実行モジュール(rollout)、LQR 制御器の合成、非線形最小二乗法ソルバー、MJX、微分可能物理シミュレーションなどが公開されています。
技術的なポイント
- 実装言語とアーキテクチャ: コアエンジンは C/C++ で実装されており、高速な実行性能を確保するために低レイヤーのメモリ配置が設計されています。XML コンパイラが事前に入力定義を解析・メモリ確保を行うことで、実行時の動的オーバーヘッドを抑える構成をとっています。
- プラットフォームサポート: 配布されている事前ビルド済みバイナリは、Linux(x86-64 および AArch64)、Windows(x86-64 のみ)、macOS(universal バイナリ)に対応しています。
- ソースコードからのビルド: ドキュメントに手順が記載されているものの、
mainブランチの最新コミットは不安定な場合があることが明記されています。 - リリースサイクル: 毎月第1週のリリースを目標に運用されており、バージョン 3.5.0 より独自のセマンティックバージョニング規約が採用されています。
注意点
- ライセンス構成: ソースコードの大部分は Apache License 2.0 のもとで公開されていますが、直方体の衝突判定コード(
engine_collision_box.c)には個別の著作権表示(Copyright 2016 Svetoslav Kolev)があります。また、docディレクトリ内のドキュメントやメディアファイルは CC BY 4.0 ライセンスが適用されます。 - サポートの位置づけ: README には「This is not an officially supported Google product.」(Google の公式サポート製品ではない)との免責事項が記載されています。
- 環境依存性: Python 版は Python 3.11 以上が必要です。また、WebAssembly 版のビューアはブラウザ上で手軽に動作する反面、ネイティブ C 実装と比較して動作速度が劣ると説明されています。
まとめ
MuJoCo は、接触を伴う関節構造の高速・高精度な計算を追求した汎用物理エンジンです。C API を核としつつ、Python バインディングや JAX 連携ブランチ(MJX)、WebAssembly による可視化ツールなど多様な環境が整備されています。ロボティクスや制御、強化学習の研究開発において、信頼性の高いシミュレータを必要とするエンジニアや研究者に適したライブラリです。





