はじめに
最近、研究室・企業でも Unitree Go2 に強化学習(RL)を導入したいというニーズが増えてきています。しかし、いざ触ってみると、
- サンプルコードの全体像がつかみにくい……
- とりあえず動かすまでが長い……
- なんかチュートリアルやったけど**いまいちよくわからん**
という壁にぶつかりがちです。
そこで本シリーズでは、**動かし方をコードベースでしっかり追う**ことに振り切ります。
今回の準備編では細かい解説は後回し。まずは環境を整えて、自分の強化学習ワークスペースを作成しましょう。
本記事は、IsaacLabで遊ぶための準備編です。
をメインでやっていきます。
想定読者
- 強化学習をやりたい研究者・学生・企業エンジニア
- Isaac Labを触り始めたばかりの人
- サンプルではなく、自分のプロジェクトを作りたい人
本記事でできること
- Isaac Labをインストール
- 自分のRLプロジェクトを生成
- VSCodeでのコーディング環境の整備
この記事の環境
- IsaacSim: 5.1.0
- IsaacLab: 2.3
- OS : Ubuntu 22.04.5 LTS (Jammy Jellyfish)
- GPU : NVIDIA GeForce RTX 3090
- Driver : 580.95.05
- CUDA : 13.0
- Python : uv仮想環境(Python 3.11)
このフォーラムのように、`nvidia-driver-535`&`cuda12.2`の組み合わせは失敗する恐れがあります。また、この記事はIsaaSim5系での環境構築を想定しているので、uvで使用するpythonは3.11系にしてください。
環境構築
基本的には👆に従えばOKです。
個人的には**uv**での環境構築を強くお勧めします。インストールも早いし、pipとの互換性があるので非常に使いやすいです。uvを入れていない場合はこちらから。
uvを使用した場合のインストール手法
git clone https://github.com/isaac-sim/IsaacLab.git
cd IsaacLab
uv環境は専用のshell scriptを用いて作ります。そうしないとこの後利用する`isaaclab`コマンドが使用できません。
./isaaclab.sh -u
source env_isaaclab/bin/activate
コマンドライン上では、構築後に`isaaclab -i`でインストールを始めるように指示がありますが、IsaacSimが入っていないとうまくインストールできないので、先に入れておきます。
IsaacSimのインストール
uv pip install "isaacsim[all,extscache]==5.1.0" --extra-index-url https://pypi.nvidia.com
コマンドライン上では、構築後に`isaaclab -i`でインストールを始めるように指示がありますが、IsaacSimが入っていないとうまくインストールできないので、先に入れておきます。
bash:IsaacLabのインストール
isaaclab -i
uvを使った場合、インストールはvscode関連のエラーで終わります。
こちらで説明されているように、バイナリを用いたインストールでないと機能しない仕組みなので今は**無視**してください。どうせ`setting.json`をいじるだけなので、後で対処します。
プロジェクトの作成
そのままチュートリアルとかやろうとすると、いきなり深い話がきて混乱するので、まず自分でプロジェクトを作ってみましょう。
bash:プロジェクトの作成
isaaclab -n
ここから先の設定がちょっとわかりにくいので、細かく説明していきます。
- エージェントの設定

後で変更できますが、とりあえず`Direct`モードは自分でコードをいっぱい書かないといけない上級者向けなので、`Manager-based`+`single-agent`をお勧めします。
- 強化学習ライブラリの選択

明らかに`skrl`の自由度が高いので、これを選択しておけば良いと思います。
– 強化学習アルゴリズムの選択

`AMP`アルゴリズムか`PPO`アルゴリズムかどっちか選べとあります。最初に生成されるファイルがちょっと異なるくらいで、別にどっちを選んでも問題ないですが、とりあえず`PPO`を選んでおきます。
アルゴリズムの詳細はここでは説明しませんが、要するに、強化学習をうまいこと画像認識とかでよく使われるニューラルネットワークの形にするための手法です。
ちょっと動かしてみよう
晴れて自分のプロジェクトを作れました!といったところで、早速動かしてみましょう。IsaacLabの公式チュートリアルとかを読むと、
python/scripts/skrl/train.py --task=$YOUR_TASK #訓練
python/scripts/skrl/play.py --task=$YOUR_TASK #プレイ
で訓練しては試してみるみたいなフローみたいですね。ここで、「いや、この`task`ってなんやねん!」ってなってしまうので、まずは全体感を掴むために`README.md`を読んでみましょう。
中身がちょっと古いので全部読む価値は正直ないのですが、大事なところだけこれから見せていきます。とりあえずこれによると、まず自分の作成したプロジェクトをライブラリ化しないといけません。
#python -m pip install -e source/$YOUR_PROJECT
uv pip install -e source/$YOUR_PROJECT
これがうまくいくと、デフォルトで設定されている`task`がIsaacLabに登録されるはずです。
それを確認するために、
python scripts/list_envs.py
とすると、

こんな感じで、現在使用可能なタスク名が表示されます。
タスク登録の詳細
そもそもこの辺のタスクってどうやって登録されるんだって話なのですが、
tasks/manager_based/YOUR_PROJECT_NAME/__init__.py
gym.register(
id="Template-Disr-Inc-Lab-v0",
entry_point="isaaclab.envs:ManagerBasedRLEnv",
disable_env_checker=True,
kwargs={
"env_cfg_entry_point": f"{__name__}.disr_inc_lab_env_cfg:DisrIncLabEnvCfg",
"skrl_cfg_entry_point": f"{__name__}.agent_cfg:unitree_go2_agent_cfg",
"skrl_amp_cfg_entry_point": f"{agents.__name__}:skrl_amp_cfg.yaml",
},
)
初出はこの辺です。要するに`import YOUR_PROJECT_NAME.tasks.manager_based.YOUR_PROJECT_NAME`すると登録プログラムが走るわけですね。それで、`list_envs.py`には
import YOUR_PROJECT_NAME.tasks # noqa: F401
という記述だけがあるのですが、
tasks.__init___.py
from isaaclab_tasks.utils import import_packages
# The blacklist is used to prevent importing configs from sub-packages
_BLACKLIST_PKGS = ["utils", ".mdp"]
# Import all configs in this package
import_packages(__name__, _BLACKLIST_PKGS)
この`import_packages`という関数は、`os.walk`にimport機能がついたような関数で、`tasks`以下のパッケージを再帰的にimportします。再帰的に走査する中で、`import YOUR_PROJECT_NAME.tasks.manager_based.YOUR_PROJECT_NAME`も当然行います。ですので、`tasks`以下で記述したオリジナルタスクを全て登録可能というわけです。
👆の詳細は別に読まなくていいですが、
- 自分のタスクは、**`tasks/manager_based/YOUR_PROJECT_NAME/__init__.py`で登録されている**
- **自分の作成したワークスペースでは、自分の作ったタスクしか使えない**ここにあるタスクは、`IsaacLab`ディレクトリの下でないと使用不可能!)
- `import YOUR_PROJECT_NAME.tasks`は、**一見何にも使っていないように見えるが、消すと動かなくなるので触っちゃダメ**
の3点だけ覚えておいてください。
ここからのコードをコピペで済ますために、今チェックしたタスク名を以下のコマンドで環境変数に登録しておいてください。
export YOUR_TASK="さっき表示されたタスク名"
実は、モデルを動かすためには、`train.py`で生成される`logs/(train Date)/agent_xxxx.pt`ファイルが必要(ニューラルネットの重みが書き込まれたファイル)です。初期の段階だとこれがないので、普通に`play.py`しても動きません。このままだとうまくプロジェクトが作成できているかよくわからないので困ってしまうのですが、ちょうどよく`README.md`にこんな記載があります。
- Random-action agent
```bash
# use 'FULL_PATH_TO_isaaclab.sh|bat -p' instead of 'python' if Isaac Lab is not installed in Python venv or conda
python scripts/random_agent.py --task=<TASK_NAME>
```
「なんか適当に動かす」だけの環境チェック用コードとして、`random_agent.py`が用意されています。これを使ってみましょう!
python scripts/random_agent.py --task=$YOUR_TASK
そうすると、以下のようにCartPole(倒立振子)が動くのが確認できます。

とりあえずここまできたら、あとはロボットを差し替えたりして遊ぶことができるので、環境構築完了です!
快適なコーディング環境のために
ここから先で、コーディング環境を整えるための`setting.json`の設定を行っていきます。先ほど説明したように、pipでのインストールの場合、この設定は手動でやる必要があります。現段階だと、

こんなのが出てきたらストレスで何も手につきませんね…
インテリセンスが効くようにしないと、ここから先めちゃくちゃ苦労します。
:~/YOUR_PROJECT_NAME/YOUR_PROJECT_NAME/.vscode/settings.json
"python.analysis.extraPaths": [
"${workspaceFolder}/source/<YOUR_PROJECT_NAME>",
]
初期の段階ではこんな感じです。実はIsaacLabのライブラリは`site-packages`以下に格納されるわけではないので、初期のままだとインテリセンスは役に立ちません。`python.analysis.extraPaths`に**手動でこれらのライブラリを入れてあげます**。
python
> import isaaclab
> isaaclab.__path__
/home/ubuntu/IsaacLab/source/isaaclab/isaaclab
のようにすると、`isaaclab`の実体の位置がわかるので、このパスの**親ディレクトリ**を`extraPaths`に追加しましょう。
~/YOUR_PROJECT_NAME/YOUR_PROJECT_NAME/.vscode/settings.json
"python.analysis.extraPaths": [
"${workspaceFolder}/source/<YOUR_PROJECT_NAME>",
"/home/ubuntu/IsaacLab/source/isaaclab/",
]
実は`isaaclab`には、`isaaclab_tasks`や`isaaclab_rl`のような兄弟ライブラリがあるので、これらも同じ要領で追加します。
~/YOUR_PROJECT_NAME/YOUR_PROJECT_NAME/.vscode/settings.json
"python.analysis.extraPaths": [
"${workspaceFolder}/source/<YOUR_PROJECT_NAME>",
"/home/ubuntu/IsaacLab/source/isaaclab/",
"/home/ubuntu/IsaacLab/source/isaaclab_tasks/",
"/home/ubuntu/IsaacLab/source/isaaclab_rl/",
"/home/ubuntu/IsaacLab/source/isaaclab_assets/"
]
これくらいやれば、とりあえず

まともに開発ができそうです。
終わりに
ここまでで、IsaacLabの最新環境で遊ぶための準備が整いました!続いて、IsaacLabで具体的に強化学習を行うためのフローを細かく解説していこうと思います。