Isaac Labを使ってUnitree G1のシミュレーション環境を構築する

Isaac Labを使ってUnitree G1のシミュレーション環境を構築する

2026.04.07

はじめに

本記事では、Isaac Labをセットアップし、Unitree G1をシミュレーション上で起動するところまでを解説します。

Isaac Simのセットアップはこちら
https://dev.classmethod.jp/articles/install-isaac-sim/

unitree_sim_isaaclab とは

Unitree公式が公開しているIsaac Labベースのシミュレーション環境です。以下の特徴があります。

  • G1/H1-2ロボットで、物を掴んで置く・ブロックを積む・歩きながら物を運ぶなど、複数の作業シナリオがすぐに使える状態で用意されている
  • 実機と同じDDS通信プロトコルを採用しているため、シミュレータ用に書いたコードをそのまま実機に持っていける
  • VRヘッドセットで人間がロボットを遠隔操作して動作データを収集し、それをシミュレータ上で再生・検証したり、照明やカメラ条件を変えて学習用データのバリエーションを自動生成する機能がある
  • スクリプトでIsaac Sim・Isaac Labの環境を一括セットアップできる

今回試した環境

  • Ubuntu 24.04 LTS(x86_64)
  • Isaac Sim 5.1.0
  • NVIDIA GeForce RTX 5090

環境構築

Minicondaのインストール

セットアップスクリプトはconda環境を前提としています。未インストールの場合は先にインストールします。

cd /tmp
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh

インストール後、condaを初期化します。

conda init bash
source ~/.bashrc

condaのTerms of Service承認

初回利用時にToSの承認が必要です。

conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r

リポジトリのクローン

cd ~
git clone --recurse-submodules https://github.com/unitreerobotics/unitree_sim_isaaclab.git
cd unitree_sim_isaaclab

Python 3.11のconda環境を事前作成する

自動セットアップスクリプトが内部でconda環境を作成しますが、事前にPython 3.11の環境を作成しておくことを強くおすすめします

Minicondaのデフォルト(base環境)はPython 3.13ですが、依存パッケージのteleimagerがPython 3.12未満を要求するため、Python 3.13環境ではインストールに失敗します。また、tensorboard等の依存関係解決が無限ループに陥る問題も発生します。

conda create -y -n unitree_sim_env python=3.11
conda activate unitree_sim_env
python --version  # Python 3.11.x と表示されることを確認

自動セットアップの実行

cd ~/unitree_sim_isaaclab
bash auto_setup_env.sh 5.1 unitree_sim_env

このスクリプトは以下を自動で行います。

  1. Isaac Lab、CycloneDDS、unitree_sdk2_pythonリポジトリのクローン
  2. SSL証明書の生成(テレオペレーション用、対話入力が求められるのでEnterキーを押し続ければOK)
  3. アセットファイルのダウンロード
  4. CycloneDDSのビルド
  5. conda環境の作成、PyTorch・Isaac Sim・Isaac Lab・Unitree SDKのインストール

完了まで結構時間がかかります(記憶が曖昧ですが、15分以上はかかったかと)。

アセットのダウンロード(スクリプトで失敗した場合)

git-lfsが未インストールの場合、アセットダウンロードが失敗することがあります。(私はしました)
その場合は手動で実行してください。

git lfs install
. fetch_assets.sh

環境構築の確認

conda activate unitree_sim_env
python --version  # Python 3.11.x
python -c "import isaaclab; print('Isaac Lab OK')"
python -c "import unitree_sdk2py; print('Unitree SDK OK')"

シミュレーションの起動

タスクの起動

conda activate unitree_sim_env
cd ~/unitree_sim_isaaclab
python sim_main.py --device cpu --enable_cameras --task Isaac-PickPlace-Cylinder-G129-Dex3-Joint --enable_dex3_dds --robot_type g129

各オプションの意味は以下の通りです。
使用したい構成に合わせて調整します。

オプション 説明
--task タスク名。使用するロボット構成とタスク内容を指定する
--enable_dex3_dds Dex3ハンドのDDS通信を有効化する。手のモデルによって変える
--robot_type g129 G1 29DoFモデルを使用する
--enable_cameras カメラ映像を有効化する
--device cpu デバイス指定

ハンドの種類とタスクの対応

今回私は手の操作をすることを目的に環境を構築したので、ハンド周りの設定も紹介します。

シミュレーション上のロボットにどのハンドを取り付けるかは--taskのタスク名で決まります。そして、外部のスクリプトからハンドを操作できるようにするには、対応するDDSフラグ(--enable_dex3_ddsなど)を付けて起動する必要があります。DDSフラグを付けないと、ハンドはシーン上に表示されますが外部から動かせません。

Dex3(3本指ハンド)のタスク:

タスク名 内容 DDSフラグ
Isaac-PickPlace-Cylinder-G129-Dex3-Joint 円柱を掴んで移動 --enable_dex3_dds
Isaac-PickPlace-RedBlock-G129-Dex3-Joint 赤いブロックを掴んで移動 --enable_dex3_dds
Isaac-Stack-RgyBlock-G129-Dex3-Joint ブロックを積み上げる --enable_dex3_dds
Isaac-Move-Cylinder-G129-Dex3-Wholebody 円柱を持って移動(全身制御) --enable_dex3_dds

Dex1(2本指グリッパー)のタスク:

タスク名のDex3Dex1に、DDSフラグを--enable_dex1_ddsに変更するだけで切り替わります。

タスク名 内容 DDSフラグ
Isaac-PickPlace-Cylinder-G129-Dex1-Joint 円柱を掴んで移動 --enable_dex1_dds
Isaac-PickPlace-RedBlock-G129-Dex1-Joint 赤いブロックを掴んで移動 --enable_dex1_dds
Isaac-Stack-RgyBlock-G129-Dex1-Joint ブロックを積み上げる --enable_dex1_dds
Isaac-Move-Cylinder-G129-Dex1-Wholebody 円柱を持って移動(全身制御) --enable_dex1_dds
python sim_main.py --device cpu --enable_cameras --task Isaac-PickPlace-Cylinder-G129-Dex1-Joint --enable_dex1_dds --robot_type g129

Inspire(5本指デクスタラスハンド)のタスク:

Inspire DFXはInspire Robots製の5本指ハンドで、G1およびH1-2に搭載可能です。タスク名にInspireを含むものを指定し、DDSフラグは--enable_inspire_ddsを使用します。

G1用:

タスク名 内容 DDSフラグ
Isaac-PickPlace-Cylinder-G129-Inspire-Joint 円柱を掴んで移動 --enable_inspire_dds
Isaac-PickPlace-RedBlock-G129-Inspire-Joint 赤いブロックを掴んで移動 --enable_inspire_dds
Isaac-Stack-RgyBlock-G129-Inspire-Joint ブロックを積み上げる --enable_inspire_dds
Isaac-Move-Cylinder-G129-Inspire-Wholebody 円柱を持って移動(全身制御) --enable_inspire_dds
python sim_main.py --device cpu --enable_cameras --task Isaac-PickPlace-Cylinder-G129-Inspire-Joint --enable_inspire_dds --robot_type g129

H1-2用:

タスク名 内容 DDSフラグ
Isaac-PickPlace-Cylinder-H12-27dof-Inspire-Joint 円柱を掴んで移動 --enable_inspire_dds
Isaac-PickPlace-RedBlock-H12-27dof-Inspire-Joint 赤いブロックを掴んで移動 --enable_inspire_dds
Isaac-Stack-RgyBlock-H12-27dof-Inspire-Joint ブロックを積み上げる --enable_inspire_dds
python sim_main.py --device cpu --enable_cameras --task Isaac-PickPlace-Cylinder-H12-27dof-Inspire-Joint --enable_inspire_dds --robot_type h1_2

なお、タスク名にWholebodyが含まれるものは全身の移動制御が有効になるタスクです。send_commands_keyboard.pyでロボットの歩行を制御できます。

ビューの切り替え

起動後、ビューポート上部の「Perspective」をクリックすることでカメラを切り替えることができます。

起動成功

起動が成功するとこのような画面になります。

ポツンとしていて哀愁を感じます。

img

私がハマった失敗

Python 3.13では動かない

Minicondaのbase環境(Python 3.13)のままauto_setup_env.shを実行すると、conda環境が正しく作成されず、Python 3.13環境にパッケージがインストールされてしまいます。teleimagerがPython 3.12未満を要求するため最終的にエラーになり、tensorboard等の依存関係解決も無限ループに陥ります。

対策: 必ず事前にconda create -y -n unitree_sim_env python=3.11で環境を作成し、conda activateしてからスクリプトを実行してください。

conda環境の有効化忘れ

ターミナルを新しく開くたびにconda activate unitree_sim_envを実行する必要があります。プロンプトが(base)のままスクリプトを実行するとPython 3.13が使われ、cycloneddsのインポートエラーなどが発生します。

初回起動の「応答がありません」ダイアログ

初回はアセットコンパイルのためUIが一時的にフリーズし、ダイアログが連発します。すべて「応答を待つ」を選択してください。

まとめ

Isaac Lab + Unitree G1のシミュレーション環境を構築し、倉庫シーン内でG1が表示されるところまで確認しました。

次の記事では、DDSコマンドを使ってG1のDex3ハンドを実際に制御する方法を解説します。

この記事をシェアする

関連記事