お問合せ多数につきすぐにレンタルができない場合がございます。ご不便をおかけして申し訳ございません。
HowTo

【開発】Unitree G1,Go2を仮想空間でシミュレート

はじめに

Isaac Simを使用して、Unitree製品を仮想空間上で動作させます。
本体を直接開発するのには、ハードルがあると思いますので、まずは仮想空間上で、開発することをおすすめしております。今回紹介するレポジトリには、ROS2でのインターフェースも含まれておりますので、rviz2での連携やローレベルのインターフェースの操作にも対応しております。

開発環境

  • OS : Ubuntu 22.04
  • GPU: RTX3090
  • Isaac Sim: 2023.1.1
  • Isaac Lab: 0.3.1
  • Nvidia Driver: 545

Isaac Simを使用するためにはGPUマシンが必要となります。下記、推奨スペックとなります。

ElementMinimum SpecGoodIdeal
OSUbuntu 20.04/22.04Windows 10/11Ubuntu 20.04/22.04Windows 10/11Ubuntu 20.04/22.04Windows 10/11
CPUIntel Core i7 (7th Generation)AMD Ryzen 5Intel Core i7 (9th Generation)AMD Ryzen 7Intel Core i9, X-series or higherAMD Ryzen 9, Threadripper or higher
Cores4816
RAM32GB [1]64GB [1]64GB [1]
Storage50GB SSD500GB SSD1TB NVMe SSD
GPUGeForce RTX 3070GeForce RTX 4080RTX Ada 6000
VRAM8GB [1][2]16GB48GB

事前準備

以下、それぞれを事前に準備しておきます。

Dockerのインストール

https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html

ROS2のインストール

ROS2 humbleを使用します。

https://docs.ros.org/en/humble/Installation/Alternatives/Ubuntu-Install-Binary.html

MiniCondaのインストール

https://www.anaconda.com/docs/getting-started/miniconda/install#macos-linux-installation

Isaac Simのインストール

今回対応している2023.1.1がomniverse launcherで利用できないので、Dockerを使用してIsaac Simをインストールします。

イメージをPullします。

docker pull nvcr.io/nvidia/isaac-sim:2023.1.1

イメージを起動します。

docker run --name isaac-sim --entrypoint bash -it --runtime=nvidia --gpus all -e "ACCEPT_EULA=Y" --rm --network=host \
    -e "PRIVACY_CONSENT=Y" \
    -v ~/docker/isaac-sim/cache/kit:/isaac-sim/kit/cache:rw \
    -v ~/docker/isaac-sim/cache/ov:/root/.cache/ov:rw \
    -v ~/docker/isaac-sim/cache/pip:/root/.cache/pip:rw \
    -v ~/docker/isaac-sim/cache/glcache:/root/.cache/nvidia/GLCache:rw \
    -v ~/docker/isaac-sim/cache/computecache:/root/.nv/ComputeCache:rw \
    -v ~/docker/isaac-sim/logs:/root/.nvidia-omniverse/logs:rw \
    -v ~/docker/isaac-sim/data:/root/.local/share/ov/data:rw \
    -v ~/docker/isaac-sim/documents:/root/Documents:rw \
    nvcr.io/nvidia/isaac-sim:2023.1.1

Isaac Simの本体をコンテナからホストマシーンにコピーします。コンテナのIDはdocker ps -aで確認しておきます。コピーが完了したらDockerは使用しないので終了して問題ないです。

docker cp <id_container>:isaac-sim/.  .local/share/ov/pkg/

Isaac Lab 0.3.1をCloneします。

git clone --branch v0.3.1 --depth 1 https://github.com/isaac-sim/IsaacLab.git

環境変数を登録

export ISAACSIM_PATH="${HOME}/.local/share/ov/pkg/isaac-sim-2023.1.1"
export ISAACSIM_PYTHON_EXE="${ISAACSIM_PATH}/python.sh"

labのルートに入って、リンクを追加

cd IsaacLab
ln -s ${ISAACSIM_PATH} _isaac_sim

Pythonの実行環境を作成します。

./orbit.sh --conda
conda activate orbit
sudo apt install cmake build-essential
./orbit.sh --install
./orbit.sh --extra rsl_rl

インストールがうまく行かない場合は、Numpyのバージョンを下げる必要があるので、こちらを実行します。

pip reinstall numpy==1.23.5 scipy==1.9.3

rsl_rlがうまく入らなかった場合は、こちらでインストールします。

pip install rsl-rl-lib==2.2.3

実際にIsaac Simが立ち上がれば動作確認はOKです

python source/standalone/tutorials/00_sim/create_empty.py

レポジトリの設定

有志が作成されたGo2 Omniverseを使用します。ルートに戻ってレポジトリをクローンします。

git clone https://github.com/abizovnuralem/go2_omniverse/ --recurse-submodules -j8 --depth=1

Isaac LabにL1Lidarのファイルをコピーします

cp ~/go2_omniverse/Isaac_sim/Unitree/Unitree_L1.json ~/IsaacLab/source/data/sensors/lidar/

素材をコピーします

cp -r ${ISAACSIM_PATH}/data/material_files/* ~/IsaacLab/source/data/material_files/

仮想空間をこちらからダウンロードして、/envs内に保存します。立ち上げのときのオプションに–custom_env=officeとすることで空間を指定することができます。

https://drive.google.com/drive/folders/1vVGuO1KIX1K6mD6mBHDZGm9nk2vaRyj3?usp=sharing

起動

./run_sim.shでGo2が起動でき、./run_sim_g1.shでG1を起動することができます。また、キーボードの入力に応じて操作することが可能です。

  • A key: Move Left
  • S key:Move Back
  • D key:Move Right
  • Q key:Trun Right,
  • W key: Move Forward
  • R key:Trun Left

フロントカメラの映像も取得することが可能です

ROS2と連動しているので、ローレベルAPIへの指示やLidar、カメラ情報も取得することが可能です。

$ ros2 topic list
/parameter_events
/robot0/cmd_vel
/robot0/front_cam/rgb
/robot0/go2_states
/robot0/imu
/robot0/joint_states
/robot0/odom
/robot0/point_cloud2
/rosout
/tf

おわりに

Isaac Simを利用した仮想空間での環境構築の方法を紹介しました。ROS2と連動することで、仮想環境上で物体認識の実装やLidarを使用したSLAMの実装が可能となります。GPU環境があればお試しいただくのはいかがでしょうか。

関連記事

TOP