はじめに
本記事は、初めてGenesisを触る人向けにセットアップの手順と学習の実行方法・評価方法を解説したものになります。
元々Unityでロボットのシミュレータを開発していたのですが、Genesisを使えば簡単にロボットの機械学習が組めるとのことで、今回技術検証をするに至りました。
試してみると、セットアップは思ったより簡単で、すぐ機械学習を試すことができます。今回はその一連の流れを紹介していこうと思います。
Ubuntu22.04+poetry系の記事は既にあるので、本記事ではUbuntu24.04+uvの組み合わせでの手順を紹介します。
Genesisとは
Genesisは、物理シミュレーション+ロボット学習向けのプラットフォームです。
2024年12月に学術プロジェクト「Genesis」としてスタートし、現在はGenesis AI社が開発を引き継いで「Genesis World」に改名しています。
genesis-worldの構成は、プロジェクト内のREADMEで以下の図のように説明されています。
ざっくりと説明すると、シミュレーションインターフェース・描画エンジン・物理演算エンジン・コンパイラが一通り用意されており、ユーザは上層のシミュレーションインターフェース(=Python API)を触るだけでロボットの学習環境が作れるというものです。
初心者には「Unity/Unreal Engineのロボット・物理シミュレーション特化版」というイメージがわかりやすいでしょう。
以降の節で、実際にGenesisの環境構築と学習の手順まで解説します。
環境
| 項目 | 内容 |
|---|---|
| OS(ホスト) | Windows11 + WSL2(2.7.10.0) |
| Ubuntu | 24.04 LTS |
| CUDAバージョン | 12.6(PyTorchのcu126ビルドに対応) |
| Python | 3.11.0 |
| Genesis (genesis-world) | v1.2.0 |
| GPU | NVIDIA GeForce RTX 3060 |
1. WSL & Ubuntuのセットアップ
1-1. Windows側の下準備(GPUドライバ)
学習時にGPUを使用するためにはCUDAドライバーが必要です。
まずは以下のコマンドでCUDAドライバが入っているか確認しましょう。
# Windows側でGPU認識確認
nvidia-smi
以下のような出力が表示されればOKです。
GPU名や、対応しているCUDAのバージョンが確認できます。
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 610.47 KMD Version: 610.47 CUDA UMD Version: 13.3 |
+-----------------------------------------+------------------------+----------------------+
| GPU Name Driver-Model | Bus-Id Disp.A | Volatile Uncorr. ECC |
#(以下省略)
もし上記のようなコマンドが認識されない、またはGPU情報が表示されない場合は、NVIDIA公式ページから最新のドライバーをインストールしてください。
CUDA Toolkitをインストールする必要はありません。後述のPyTorchインストール時に必要なCUDAランタイムが一緒に入るので安心してください。
1-2. WSL2 + Ubuntu24.04セットアップ
Windows側の準備ができたら、次はWSL2にUbuntu24.04をセットアップしていきます。
WSLを最新化
Ubuntu24.04は比較的新しいディストリビューションなので、WSL自体が古いとインストールできないことがあります。念のため先にアップデートしておきましょう。
wsl --update
Ubuntu24.04をインストール
以下のコマンドでUbuntu24.04をインストールします。
wsl --install -d Ubuntu-24.04
すでに古いバージョンが入っていて入れ替えたい場合は、以下のように既存のディストリビューションを削除してから入れ直してください。
# 既存のディストリビューションを削除(例:Ubuntu-22.04)
wsl --unregister Ubuntu-22.04
# Ubuntu24.04をインストール
wsl --install -d Ubuntu-24.04
# デフォルトに設定
wsl --set-default Ubuntu-24.04
1-3. WSL内でのGPU認識確認
Ubuntu24.04にログインし、WSL内でもnvidia-smiを入力します。
# Ubuntu24.04にログイン
wsl -d Ubuntu-24.04
# wsl内でのGPU確認
nvidia-smi
ここで先ほどWindows側で確認したのと同じような出力が出れば、WSL側からパススルーでGPU認識できています。
これでWSLとUbuntuのセットアップは完了です。
2. genesis-worldのセットアップ
2-1. プロジェクト作成
以下のようなディレクトリ構成でプロジェクトを作成してください。
genesis-rl-lab/
├── docs/ # ドキュメント(本レポートもここに置く想定)
├── envs/ # タスクごとの環境定義(拡張ポイント)
├── scripts/ # 学習・評価スクリプト
└── third_party/ # Genesis本体(.gitignore対象)
└── .gitignore # gitプロジェクトにする場合は作成
必要な人は、以下コマンドで.gitignoreを作成するといいでしょう。
cat > .gitignore << 'EOF'
.venv/
__pycache__/
*.pyc
logs/
checkpoints/
*.ckpt
wandb/
third_party/
EOF
2-2. uvによるPython環境構築
WSL(Ubuntu)のターミナルで先ほど作成したプロジェクトにcdし、以下の手順でuv経由でpython仮想環境を構築します。
# プロジェクト直下に移動
cd ~/projects/genesis-rl-lab
# uvのインストール
curl -LsSf https://astral.sh/uv/install.sh | sh
# パスの設定
source $HOME/.local/bin/env
# python仮想環境を作成
uv venv --python 3.11
これでpythonの仮想環境を作成することができました。
以下のコマンドで仮想環境を起動することができます。
# 仮想環境の起動
source .venv/bin/activate
uv venv で作った仮想環境にはpip本体が入っていません。
この環境でpipを使用したい時には、uv pipと書くようにします。
例:pip install ... → uv pip install ...
2-3. PyTorch(GPU版)+Genesisインストール
仮想環境を起動した状態で、以下のコマンドでtorchとgenesis-worldをインストールします。両方ともかなり時間がかかります。
# プロジェクト直下に移動
cd ~/projects/genesis-rl-lab
# torchのインストール
uv pip install torch --index-url https://download.pytorch.org/whl/cu126
# genesis-worldのインストール(third_partyディレクトリに格納します)
git clone https://github.com/Genesis-Embodied-AI/genesis-world.git third_party/genesis-world
cd third_party/genesis-world
uv pip install -e ".[dev]"
# プロジェクト直下に戻る
cd ~/projects/genesis-rl-lab
torchのインストール時に、NVIDIA関連パッケージのダウンロードでタイムアウトすることがありました。同じようなエラーにあった方は次のコマンドでのインストールを試してください。
# タイムアウト延長+並列数を絞って再実行
UV_HTTP_TIMEOUT=300 UV_CONCURRENT_DOWNLOADS=1 uv pip install torch --index-url https://download.pytorch.org/whl/cu126
これでだめなら、単純にターミナルを再起動したり、wsl --shutdownでWSLの再起動を行うことも試してみてください。
以下のコマンドで、torchのインストールができているか確認できます。
python -c "import torch; print(torch.zeros((3,), device='cuda'))"
# → tensor([0., 0., 0.], device='cuda:0') が出ればGPU認識OK
2-4. チュートリアル依存パッケージのインストール
以下のコマンドでチュートリアルで使うパッケージをインストールします。
uv pip install tensorboard rsl-rl-lib
ここまで済めば、Genesisを起動する用意ができました!
3. ドローンホバリングタスクの学習
3-1. 学習
この節ではGenesisのチュートリアルにある、ロボットの機械学習を試していきます。
まず、新しくターミナル(PowerShell)を開き以下のコマンドを入力します。この手順はよく入力するので覚えておくといいです。
# プロジェクト直下に移動
cd ~/projects/genesis-rl-lab
# Ubuntu24.04にログイン
wsl -d Ubuntu-24.04
# 仮想環境起動
source .venv/bin/activate
そしたら以下のコマンドで、hover_train.pyを起動しドローンの学習を始めます。
python third_party/genesis-world/examples/drone/hover_train.py -e drone-hovering -B 8192 --max_iterations 301
-
-eは--exp_nameの短縮形で、これから始める学習に自分でつける「experiment name(実験名)」を指定します。 -
-Bは--num_envsの短縮形で、並列で動かす環境の数を指定しています。 -
--max_iterationsは、学習を何イテレーション(何周)回すかを指定します。
すると学習が始まります。学習が完了するまでしばらくかかります。
3-2. 評価
学習が終わるとgenesis-rl-lab/logsに学習モデルが生成されるので確認してみてください。

モデルが確認できたら以下のコマンドで、hover_eval.pyを起動し生成したモデルを使ってみましょう。
python third_party/genesis-world/examples/drone/hover_eval.py -e drone-hovering --ckpt 300
--ckptは「checkpoint(チェックポイント)」の略で、学習の途中で保存されたモデルのうち、どの時点のものを評価に使うかを指定します。
--ckpt 300なら、300イテレーション時点で保存されたモデル(=model_300.pt)を使って評価するという意味になります。
しばらくすると、以下のようなシミュレーション画面が表示されます。
画面真ん中にあるのがドローン、赤い球がターゲットとなる位置です。
ちなみに私の環境で行ったモデル評価では、ドローンは滞空までできますがターゲットに近づけませんでした。
この挙動について学習曲線・評価結果グラフを使って分析してみましょう。
3-3. 学習曲線・評価
以下のコマンドでTensorBoardを起動します
tensorboard --logdir logs/drone-hovering
#以下のような出力が出たらOK.
#Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all
#TensorBoard 2.21.0 at http://localhost:6006/ (Press CTRL+C to quit)
出力で提示されたhttp://localhost:6006/をブラウザで表示すると以下のようにグラフが表示された画面になるはずです。
色んなグラフが表示されていますが、特に重要なものを以下にまとめました。
ぜひ自分のTensorBoardでもこれらの値を確認してみてください。
| セクション | グラフ名 | 内容 |
|---|---|---|
| Episode | rew_target | ターゲットへの接近を直接表す報酬 |
| Train | mean_reward | 全報酬を合計した総合スコア |
| Episode | rew_crash | 墜落しているかどうかを表す報酬 |
| Train | mean_episode_length | 1エピソードあたり何ステップ生き延びたか |
| Policy | mean_std | 行動のランダム性(探索幅)がどれだけ収束したかを表す指標 |
-
Episodeとは「リセットしてから終了するまでの一連の試行」の単位です。 -
rewは、reward(報酬)の略で、「そのステップでの行動がどれだけ良かったかを表す1つの指標」です。
3-4. 学習の考察
この節ではなぜドローンがターゲットに近づかなかったかを考察してみます。
※ 深堀した内容になるのでGenesisのセットアップのみ知りたい方は読み飛ばしてください。
TensorBoardの分析
今回の評価シミュレータでは、ドローンは滞空するもののターゲットに近づきませんでした。その原因をTensorBoardを使って考察してみます。
上記のグラフに注目すると次の事が読み取れます。
-
Episode/rew_target
80イテレーションあたりから0で収束している。タスク成功なら、もっと大きくプラスに振れる場面が続くはず。何かが原因で報酬が頭打ちになった。 -
Train/mean_reward
序盤の振動の後、150イテレーションあたりで頭打ち。学習はやり切ったが報酬が伸びていない。 -
Episode/rew_crash
100イテレーションあたりで0に収束。墜落しなくなったことがわかる。 -
Train/mean_episode_length
150イテレーション以降、1500(最大値)で安定。エピソードの最後まで落ちずに飛び続けていることがわかる。 -
Policy/mean_std
1付近から右肩下がりで0.12まで低下。探索をやめ、行動が固定化されている。
つまりまとめると、学習自体は上手くいっているが、途中から報酬が伸びなくなったという事になります。
原因の追究
ここでgenesis-world/examples/drone/hover_env.pyの中身を見てみると、報酬関数_reward_targetは以下の様になっていました。
# ------------ reward functions----------------
def _reward_target(self):
target_rew = torch.sum(torch.square(self.last_rel_pos), dim=1) - torch.sum(torch.square(self.rel_pos), dim=1)
return target_rew
rel_posは「ターゲットとドローンの距離ベクトル」ですので、簡単にまとめると、
target_rew =(1ステップ前のターゲットまでの距離²)-(今のターゲットまでの距離²)
という計算で報酬が決まっています。つまり「前回より、どれだけターゲットに近づいたか」という"距離の変化量"に対する報酬という事です。
ここでドローンが滞空し距離が変わらない状態を考えます。その時は距離の変化量が0なのでtarget_rew ≒ 0となり、ペナルティが無い状態になり、探索をしなくなったと考えられます。
これがEpisode/rew_targetのグラフが0で収束した理由でしょう。
4. 四足ロボットの学習
ここでは詳細は省きますが、genesis-world/examples/locomotion ディレクトリに go2_env.py / go2_train.py / go2_eval.py があるので、ドローンで使用したコマンドを参考に、こちらも試してみてください。
私の環境では、300イテレーション程度でも歩行を学習させることができました。
まとめ
本記事では、WSL2とUbuntu24.04を使ったGenesis環境のセットアップと実際に学習を行うまでの流れを紹介しました。
また、ドローン学習を題材にTensorBoardの見方や簡単な考察なども行いました。
今後は自作の訓練・評価スクリプトの作成、さらに自作ロボットに特化した学習方法などについても調べてみようと思います。
この記事を読んでくれた皆さんの、Genesis活用の第一歩になればと思います。
参考




