ゆるふわフィジカル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形式で記述します。まずは「箱が落ちるだけの世界」から。

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から直接開くことも:

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

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

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

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)で数千〜数万環境の同時シミュレーションが可能になった。

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

学習コース

23 / 46 本目

学習コースの全体を見る

あわせて読みたい

A*経路探索をPythonで実装する|ロボットの「最短ルート」を見つける

ロボットや自律移動の経路計画で定番のA*(エースター)アルゴリズムをPythonでゼロから実装。ヒューリスティックがなぜ探索を速くするのか、グリッド上で障害物を避けて最短経路を見つける流れを、動くコードで理解します。

SLAM(自己位置推定と地図作成)をPythonで実装する|占有格子地図とパーティクルフィルタ

「地図が無いと自分の位置が分からず、位置が分からないと地図が作れない」というSLAMの鶏と卵問題を、占有格子地図とパーティクルフィルタでPython実装。ロボットが自分の位置と周囲の地図を同時に組み立てる仕組みをコードで理解します。

PID制御をPythonで実装する|ロボットを"ちょうどよく"目標へ動かす

ロボット制御の基本「PID制御」をPythonでゼロから実装。比例・積分・微分の3項が何をしているのか、ゲイン調整で挙動がどう変わるのかを、動くシミュレーションコードで手を動かして理解します。

ロボティクス転職に効くポートフォリオの作り方【GitHub活用】

フィジカルAI・ロボティクス領域への転職や就職で評価されるポートフォリオの作り方を解説。何を作るべきか、GitHubの見せ方、READMEの書き方、動画の重要性まで実践的にまとめました。