MuJoCoを使ってみる その1(環境構築、サンプルプログラムの実行)
はじめに
今回は物理シミュレーションを行うことができる、MuJoCoというソフトウェアを試してみました。
MuJoCoは以前の記事でGenesisを試していたときに見つけました。Genesisの開発でも利用されているようです。ロボットのシミュレーションといえばROSというイメージが強かったのですが、他にもいろいろあるようですね。
▼MuJoCoのページはこちら。
▼シミュレーションの動画はこちら。確かにGenesisで見たような画面です。
▼Genesisを利用したときの記事はこちら
▼以前の記事はこちら
環境を構築する
▼PCは10万円ぐらいで購入したゲーミングノートPCを利用しています。Windows 11の環境です。
まずはPythonの仮想環境を作成します。
py -3.10 -m venv pyenv-mujoco
cd .\pyenv-mujoco
.\Scripts\activate
▼Pythonの仮想環境の作成については、以下の記事をご覧ください。
パッケージのインストールは以下だけで済むようです。
pip install mujoco
ロボットのモデルなどのデータが必要になりそうだったので、GitHubのリポジトリをクローンしておきました。
git clone https://github.com/google-deepmind/mujoco.git
Viewerを起動する
MuJoCoで利用できるモデルを、Viewerで表示してみました。
▼Pythonでの実行に関するページを参考に実行してみます。
https://mujoco.readthedocs.io/en/latest/python.html
以下のコマンドでViewerが起動しました。
python -m mujoco.viewer
▼以下のように表示されました。モデルファイルをドラッグ&ドロップでアップロードできるようです。

以下のようにクローンしたGitHubのリポジトリの、モデルファイルのパスを指定すると、Viewerの中にモデルが表示されました。
python -m mujoco.viewer --mjcf=./mujoco/model/humanoid/22_humanoids.xml
ヒューマノイドのモデルを指定しています。
▼表示された途端、姿勢を崩して倒れました。


▼各ジョイントの値が表示されています。

▼Controlの欄でパラメータを変更すると、動いているヒューマノイドがありました。

他のモデルも試してみました。
▼carは2輪+キャスターの構成ですね。

▼Controlから操作することができました。

▼tendon_armは人間の関節と筋肉の構成のようなモデルでした。

▼slider_crankはこんな感じ。アニメーションっぽい表現に見えました。

Model Galleryのモデルを表示してみる
MuJoCoのModel Galleryにあった実際のロボットのモデルは、MuJoCo Menagerieという別のリポジトリにあるようでした。
▼Model Galleryのページはこちら。二足歩行、人型、犬型、ロボットアームなどが用意されています。
https://mujoco.readthedocs.io/en/latest/models.html
▼MuJoCo Menagerieのリポジトリはこちら
https://github.com/google-deepmind/mujoco_menagerie
MuJoCo MenagerieのGitHubのリポジトリをクローンして、Viewerで表示してみました。
git clone https://github.com/google-deepmind/mujoco_menagerie
python -m mujoco.viewer --mjcf=./mujoco_menagerie/unitree_a1/scene.xml
▼倒れていますが、犬型ロボットが表示されました!Controlで足を操作できます。

▼google_robotはこんな感じ。アームを動かすと、慣性が働いていました。

▼flybodyという、なぜか存在するハエのモデルはこんな感じ。

ハエのモデルは可動部が非常に多くて、羽や関節だけでなく、触覚や口などの細かいところまで動かせます。ロボットよりもよっぽど制御パラメータが多くて、やたらと作りこまれています。
Notebookのチュートリアルを実行してみる
Google Colaboratoryで実行できるチュートリアルがあったので、実行してみました。
▼以下のリンクからGoogle ColaboratoryでNotebookのコードを実行できます。
https://colab.research.google.com/github/google-deepmind/mujoco/blob/main/python/tutorial.ipynb
ここでは実行結果の一部だけ紹介します。
▼これは面白いと思ったのですが、逆立ちコマのシミュレーションですね。データはグラフでも出力されています。

▼物体に対する力のベクトルの可視化もできます。
▼糸で固定した物体に対する衝突のシミュレーション。リアルな挙動に見えます。
▼深度画像やセグメンテーション画像のレンダリングもできます。


▼一番最後はドミノでした。カメラを動かしながら撮影されています。
xmlファイルで記述して物体を配置すると、コードが長くなるのではないかと思いましたが、そうでもなさそうでした。サンプルをもとにChatGPTに書いてもらえば、シミュレーションできそうです。
▼ROSのURDFファイルを記述するときは行数が多かった印象です。Viewerでも見たように、サンプルが豊富なら多少は楽かもしれません。
最後に
Genesisに触れた後だったので、MuJoCoが開発に利用されているという面影がありました。MuJoCoよりはGenesisを利用して開発することになるかもしれませんが、物理シミュレーションだけならこちらでも良さそうです。
私は主にUnreal Engineを利用してシミュレーションを行っているので、MuJoCoのように様々なロボットのモデルを利用したいなと思っているところです。