ゆるふわフィジカルAI
パソコンで作業中のゆるロボ

MuJoCo入門|物理シミュレーションの最初の一歩を10分で【Python】

2026-07-22 ・ 実践

#MuJoCo#シミュレーション#Python#実践

フィジカルAIの練習場、物理シミュレータ。その定番が Google DeepMind がオープンソースで公開している MuJoCo です。この記事では、インストールから「画面の中で物理が動く」感動まで10分で行きます。

📦

pip install

1分

→
📝

モデルを書く

XMLで数行

→
▶️

動かす

物理が動く!

まずは触ってみよう(インストール不要)

「物理シミュレーション」と言われてもピンとこないですよね。まずはこの場で遊んでみてください。

🕹️ さわれる物理シミュレータ

箱やボールをドラッグして投げてみてください。重力も変えられます

重力をマイナスにすると…?🌙 いろいろ試してみましょう

いま体験したこと — 「重力・摩擦・衝突のルールがある仮想世界で、モノが本物っぽく動く」 — これが物理シミュレーションのすべてです。ロボット開発では、この仮想世界の中でロボットに何百万回も練習させます。

💡

これは2Dの簡易版です

上のデモはブラウザ用の2D物理エンジンで作ったミニ版。本物のMuJoCoは3Dで、摩擦や接触をはるかに正確に計算します。ここから先は、その本物を自分のPCで動かす手順です。

MuJoCoってなに?

接触や摩擦の計算が得意な物理エンジンです。ロボットの強化学習研究で長年の定番で、以前は有料でしたが、DeepMindが買収して無料・オープンソースになりました。

インストール(1分)

Python 3.9以降があれば1行です。

ターミナル
pip install mujoco

最小のシミュレーション: 振り子を落とす

MuJoCoでは、世界をMJCFというXML形式で記述します。まずは「箱が落ちるだけの世界」から。

Python
import mujoco
 
xml = """
<mujoco>
  <worldbody>
    <light pos="0 0 3"/>
    <geom type="plane" size="2 2 0.1" rgba="0.9 0.9 0.95 1"/>
    <body pos="0 0 1">
      <freejoint/>
      <geom type="box" size="0.1 0.1 0.1" rgba="1 0.56 0.69 1"/>
    </body>
  </worldbody>
</mujoco>
"""
 
model = mujoco.MjModel.from_xml_string(xml)
data = mujoco.MjData(model)
 
for _ in range(1000):
    mujoco.mj_step(model, data)
 
print("箱の最終位置:", data.qpos[:3])

実行すると、1000ステップ後の箱の位置が表示されます。Z座標(3つめ)が約0.1 = 床の上に着地しているのがわかるはず。物理、動いてます🎉

画面で見る(ビューア)

数字だけでは寂しいので、可視化しましょう。

ターミナル
pip install mujoco  # ビューアは同梱です
python -m mujoco.viewer

ウィンドウが開いたら、さっきのXMLを pendulum.xml として保存してドラッグ&ドロップするだけ。マウスで視点をぐりぐり動かせます。

Pythonから直接開くことも:

Python
import mujoco.viewer
mujoco.viewer.launch(model, data)

ちょっと発展: 振り子を揺らす

関節(joint)を使うと「物理で揺れる振り子」が作れます。

Python
xml = """
<mujoco>
  <worldbody>
    <light pos="0 0 3"/>
    <body pos="0 0 1.5">
      <joint type="hinge" axis="0 1 0"/>
      <geom type="capsule" fromto="0 0 0  0 0 -0.5" size="0.03" rgba="0.54 0.93 0.82 1"/>
    </body>
  </worldbody>
</mujoco>
"""

これをビューアで開いて振り子をマウスでつまんで放すと、ちゃんと物理法則で揺れます。この「世界のルールを書く→動く」の体験がシミュレーションの本質です。

🌱

つまずいたら

エラーの多くはXMLの書き間違いです。エラーメッセージに行番号が出るので、まずそこを確認。公式ドキュメント(mujoco.readthedocs.io)のXMLリファレンスが頼りになります。

まとめ

  • MuJoCoは pip install mujoco だけで始められる無料の物理シミュレータ
  • 世界はXML(MJCF)で記述、mj_step() で時間を進める
  • ビューアで可視化すると一気に楽しくなる
📚 もう少し詳しく(背景と理論)気になる人向け・タップで開く

MuJoCo(Multi-Joint dynamics with Contact)は Todorov らが2012年に発表した物理エンジンで1、多関節系と接触を安定・高速に解けることから強化学習研究の標準になりました。接触や摩擦は数値的に扱いが難しいのですが、MuJoCo はソフト制約に基づく定式化で安定性と速度を両立しています2。

2021年に DeepMind が買収しオープンソース化、さらに GPU 上で数千環境を並列に走らせる MJX などで大規模学習が容易になりました3。「実機で試す前にシミュレータで大量学習」というSim-to-Realの土台を支えています。

次の一歩 🌸

次は「シミュレーションの中でAIに動きを学ばせる」段階へ。LeRobot入門で模倣学習を体験するか、学習ロードマップで全体像を確認しましょう。

Footnotes

  1. Todorov, E., Erez, T., Tassa, Y. (2012). "MuJoCo: A physics engine for model-based control." IROS 2012. 接触を含む多関節動力学を高速・安定に解く。 ↩

  2. 剛体接触は本来、微分不可能で数値的に不安定になりやすい。MuJoCo はソフト制約(凸最適化)に基づく接触モデルで安定性と計算速度を確保する。 ↩

  3. 2021年に DeepMind が MuJoCo を取得し無償・オープンソース化。GPU 並列版(MJX)で数千〜数万環境の同時シミュレーションが可能になった。 ↩

この記事をシェア:𝕏 で共有LINEで送る

🔥 この分野の最新トレンドをチェック →

学習コース

23 / 46 本目

学習コースの全体を見る

あわせて読みたい

Isaac Lab入門|強化学習フレームワークの導入とサンプル実行

Isaac Labとは、NVIDIAが提供するロボット向け強化学習フレームワークです。インストール手順、必要なGPU・OS要件、環境一覧の確認方法、最初のサンプルの動かし方をエンジニア向けに解説します。

MuJoCoのビューアが開かない・固まるときの原因と直し方

MuJoCoのビューアウィンドウが開かない、エラーで落ちる、真っ暗なまま固まるときの原因と直し方。DISPLAY未設定・macOSのmjpython・sync()忘れの3パターンを、公式ドキュメントと実際の動作確認で整理します。

Gymnasium入門|CartPoleで強化学習を体験する

Gymnasiumとは、強化学習の環境をPythonの共通インターフェースで扱えるFarama Foundation製のオープンソースライブラリです。CartPole-v1でreset/stepの基本ループを動かし、ランダム行動と自分で書いた方策で結果がどれだけ変わるかを比較しながら体験します。

IMUセンサーフュージョンをPythonで実装する|加速度計とジャイロから傾きを求める(相補フィルタ)

IMU(加速度計+ジャイロ)から姿勢の傾きを求める相補フィルタをPythonでゼロから実装。加速度計だけだとノイズだらけ、ジャイロだけだとドリフトで増え続ける様子を数値で確認し、2つを混ぜるとなぜ安定するのかを手を動かして理解します。