目次
はじめに
最近、研究室・企業でも 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が入っていないとうまくインストールできないので、先に入れておきます。
uv pip install "isaacsim[all,extscache]==5.1.0" --extra-index-url https://pypi.nvidia.com
コマンドライン上では、構築後にisaaclab -iでインストールを始めるように指示がありますが、IsaacSimが入っていないとうまくインストールできないので、先に入れておきます。
isaaclab -i
こちらで説明されているように、バイナリを用いたインストールでないと機能しない仕組みなので今は無視してください。どうせsetting.jsonをいじるだけなので、後で対処します。
プロジェクトの作成
そのままチュートリアルとかやろうとすると、いきなり深い話がきて混乱するので、まず自分でプロジェクトを作ってみましょう。
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
とすると、

こんな感じで、現在使用可能なタスク名が表示されます。
タスク登録の詳細
そもそもこの辺のタスクってどうやって登録されるんだって話なのですが、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
という記述だけがあるのですが、
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でのインストールの場合、この設定は手動でやる必要があります。現段階だと、

こんなのが出てきたらストレスで何も手につきませんね...
インテリセンスが効くようにしないと、ここから先めちゃくちゃ苦労します。
"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に追加しましょう。
"python.analysis.extraPaths": [
"${workspaceFolder}/source/<YOUR_PROJECT_NAME>",
"/home/ubuntu/IsaacLab/source/isaaclab/",
]
実はisaaclabには、isaaclab_tasksやisaaclab_rlのような兄弟ライブラリがあるので、これらも同じ要領で追加します。
"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で具体的に強化学習を行うためのフローを細かく解説していこうと思います。
