はじめに
NVIDIA Omniverse™ プラットフォームを使用した3D仮想空間の構築やNVIDIA Isaac Sim™ を使用したAIロボットシミュレーションの技術が注目を集めています。
Isaac Simは、NVIDIAが提供するロボット開発向けのシミュレーションプラットフォームで、フォトリアルな3D仮想環境上でロボットシミュレーションの実行が可能です。また、NVIDIAが提供するROS2向けのロボット開発用サンプルパッケージ群であるNVIDIA Isaac™ ROSを活用することで、AI処理を追加した高度なロボット制御プログラムの実現が可能です。
本記事では、Isaac Sim / Isaac ROSを使用するために必要なセットアップ手順を紹介し、あわせてセットアップの動作確認として、Isaac ROSの二輪ロボットの自動走行シミュレーションのサンプル(Nvblox)の実行手順をご紹介いたします。
Isaac Sim / Isaac ROSの活用事例
Isaac Sim とIsaac ROSは、以下のような様々なシーンで活用可能です。
①2輪ロボットシミュレーション(ROS2プログラムでの2輪ロボットを制御)
・Isaac ROSにはステレオカメラを活用した自動走行シミュレーションのサンプルコードも公開されています
②アームロボットシミュレーション(ROS2/MoveIt 2を活用し、アームロボットを制御)
・実機のアームロボット導入前に、Isaac SimのシミュレーションでMoveIt 2を活用したアームロボットのPick&Place制御の動作を確認
③ヒューマノイドシミュレーション(NVIDIA Isaac Labを活用したデータセットの作成)
・実機ヒューマノイドでのデータセットの作成に加えて、Isaac Simのシミュレーション環境でバリエーション・データセットの生成
④NVIDIA Cosmos™ を活用した動画生成(Isaac Simのロボットシミュレーションから生成された動画をCosmosに入力しバリエーション動画を生成)
・Isaac Simで再現された物理シミュレーションの動作結果をRGB動画、セグメンテーション動画として自動生成可能
・NVIDIA Cosmosを活用して、promptの指示に従いリアルなバリエーション動画を自動生成することが可能
動作環境
今回はOfficialサイトに記載の推奨Spec(Ideal)に相当する、NVIDIA RTX PRO™ 6000 Blackwell Max-Q 96GB 搭載のワークステーション(ROBODEV)で動作を確認しております。
・Linux-PC(Ubuntu24.04)
・CUDA 13.0
GPUドライバーの確認
以下のコマンドでGPUドライバー、NVIDIA CUDA® のバージョンが確認できます。
$ nvidia-smi
以下のような表示で確認できます。(表示されるVersionは動作環境により異なります)
Isaac Simをインストール
Isaac Simをダウンロード
OfficialサイトからIsaac Simをダウンロードします。(今回は以下のようにIsaac Sim 5.1.0を選択します)
Isaac Simをインストール
以下のようなコマンドを実行し、Isaac Simをインストールします。
(インストールを実行する前にcondaはdeactivateして抜けておくことを推奨します。)
$ conda deactivate
$ mkdir ~/isaac-sim-5.1.0
$ cd ~/Downloads
$ unzip isaac-sim-standalone_xxx.zip -d ~/isaac-sim-5.1.0
$ cd ~/isaac-sim-5.1.0
$ ./post_install.sh
Docker関連のセットアップ
officialサイト(以下)手順を参考に、Isaac ROS使用するためのDocker関連のセットアップを実施していきます。
Dockerのセットアップ
officialサイトの手順を参考にDockerのセットアップを実行します。(以下は実行例です。詳細はoffcialサイトをご参照ください。)
<実行例>
$ sudo apt update
$ sudo apt install ca-certificates curl
$ sudo install -m 0755 -d /etc/apt/keyrings
$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
$ sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
$ sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Add your user to the docker group
$ sudo groupadd docker
$ sudo usermod -aG docker $USER
Dockerを設定するための再起動
以下のコマンドでLinuxを再起動します。
$ sudo reboot
Dockerの基本動作確認
以下のコマンドでDockerの基本動作を確認します。(sudoなしでhello-worldのdockerサンプルが実行されることを確認します。)
$ docker run hello-world
以下のような実行画面の表示を確認します。
NVIDIA Container Toolkitのセットアップ
officialサイトの手順を参考にNVIDIA Container Toolkitのセットアップを実施します。(以下は実行例です。詳細はofficialサイトをご参照ください。)
<実行例>
$ sudo apt-get update && sudo apt-get install -y --no-install-recommends ca-certificates curl gnupg2
$ curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
$ sudo sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list
# Install
$ sudo apt-get update
$ export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.19.0-1
$ sudo apt-get install -y \
nvidia-container-toolkit=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
nvidia-container-toolkit-base=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
libnvidia-container-tools=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
libnvidia-container1=${NVIDIA_CONTAINER_TOOLKIT_VERSION}
Docker runtimeのセットアップ
officialサイトの手順を参考にDocker runtimeのセットアップを実施します。(以下は実行例です。詳細はofficialサイトをご参照ください。)
<実行例>
$ sudo nvidia-ctk runtime configure --runtime=docker
$ sudo systemctl restart docker
$ nvidia-ctk runtime configure --runtime=docker --config=$HOME/.config/docker/daemon.json
$ sudo systemctl restart docker
$ sudo nvidia-ctk config --set nvidia-container-cli.no-cgroups --in-place
$ sudo systemctl restart docker
NVIDIA Container Toolkitの動作確認
以下のコマンドを実行し、NVIDIA Container Toolkitの動作確認を行います。
$ docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
以下のように"nvidia-smi"で確認した内容と同様の表示がDockerで確認できます。(表示されるVersionは動作環境により異なります)
Isaac ROSのセットアップ
officialサイトの手順を参考に、Isaac ROS使用するためのセットアップを実施していきます。(今回はIsaac ROS(Rev4.4)を使用した手順をご紹介します。)
本サイトではコマンドの実行例を記載しておりますが、基本的には以下のように、OfficialサイトのCopyアイコンをクリックしてコマンドが取得できます。
ROS2ワークスペースを作成
以下のコマンド実行で、ROS2ワークスペースを作成します。
$ mkdir -p ~/workspaces/isaac_ros-dev/src
$ echo 'export ISAAC_ROS_WS="${ISAAC_ROS_WS:-${HOME}/workspaces/isaac_ros-dev/}"' >> ~/.bashrc
$ source ~/.bashrc
Isaac ROS Repositoryの設定
以下のコマンド実行で、 Isaac ROS Repositoryの設定を行います。
$ locale # check for UTF-8
$ sudo apt update && sudo apt install locales
$ sudo locale-gen en_US en_US.UTF-8
$ sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
$ export LANG=en_US.UTF-8
$ locale # verify settings
$ sudo apt update && sudo apt install curl gnupg
$ sudo apt install software-properties-common
$ sudo add-apt-repository universe
Isaac ROSのセットアップ
以下のコマンド実行で、Isaac ROS(Rev4.4)をセットアップします。
$ k="/usr/share/keyrings/nvidia-isaac-ros.gpg"
$ curl -fsSL https://isaac.download.nvidia.com/isaac-ros/repos.key | sudo gpg --dearmor | sudo tee -a $k > /dev/null
$ f="/etc/apt/sources.list.d/nvidia-isaac-ros.list"
$ sudo touch $f
$ s="deb [signed-by=$k] https://isaac.download.nvidia.com/isaac-ros/release-4.4 noble main"
$ grep -qxF "$s" $f || echo "$s" | sudo tee -a $f
$ sudo apt-get update
Isaac ROS CLIのインストール
以下のコマンド実行で、Isaac ROS を使うためのCLI -Toolをインストールします。
$ sudo apt-get install isaac-ros-cli
$ sudo systemctl daemon-reload && sudo systemctl restart docker
$ docker info | grep -E "Runtimes|Default Runtime"
$ docker run --rm hello-world
$ docker run --rm --gpus all ubuntu:24.04 bash -lc 'echo "NVIDIA runtime OK"'
$ sudo isaac-ros init docker
Isaac ROSを使用した2輪ロボットの自動走行シミュレーションの実行例のご紹介
officialサイトの手順を参考に、Isaac ROSの設定を行いましたので、Isaac ROSのサンプルパッケージを実行して、動作を確認してみましょう。
今回は、サンプルパッケージとして、Nvbloxを使用し、2輪ロボットの自動走行シミュレーションを実行する手順をご紹介します。
Nvbloxのセットアップ
officialサイトに従って以下のコマンドを実行し、Nvbloxのセットアップを進めます。
$ sudo apt-get install -y curl jq tar
officialサイトの手順に従い、実行に必要なファイルを取得( copyアイコンでコマンドを取得できます。)
$ NGC_ORG="nvidia"
$ NGC_TEAM="isaac"
$ PACKAGE_NAME="isaac_ros_nvblox"
$ NGC_RESOURCE="isaac_ros_nvblox_assets"
$ NGC_FILENAME="quickstart.tar.gz"
$ MAJOR_VERSION=4
$ MINOR_VERSION=4
$ VERSION_REQ_URL="https://catalog.ngc.nvidia.com/api/resources/versions?orgName=$NGC_ORG&teamName=$NGC_TEAM&name=$NGC_RESOURCE&isPublic=true&pageNumber=0&pageSize=100&sortOrder=CREATED_DATE_DESC"
AVAILABLE_VERSIONS=$(curl -s -H "Accept: application/json" "$VERSION_REQ_URL")
$ LATEST_VERSION_ID=$(echo $AVAILABLE_VERSIONS | jq -r "
.recipeVersions[]
| .versionId as \$v
| \$v | select(test(\"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+$\"))
| split(\".\") | {major: .[0]|tonumber, minor: .[1]|tonumber, patch: .[2]|tonumber}
| select(.major == $MAJOR_VERSION and .minor <= $MINOR_VERSION)
| \$v
" | sort -V | tail -n 1
)
$ if [ -z "$LATEST_VERSION_ID" ]; then
echo "No corresponding version found for Isaac ROS $MAJOR_VERSION.$MINOR_VERSION"
echo "Found versions:"
echo $AVAILABLE_VERSIONS | jq -r '.recipeVersions[].versionId'
else
mkdir -p ${ISAAC_ROS_WS}/isaac_ros_assets && \
FILE_REQ_URL="https://api.ngc.nvidia.com/v2/resources/$NGC_ORG/$NGC_TEAM/$NGC_RESOURCE/\
versions/$LATEST_VERSION_ID/files/$NGC_FILENAME" && \
curl -LO --request GET "${FILE_REQ_URL}" && \
tar -xf ${NGC_FILENAME} -C ${ISAAC_ROS_WS}/isaac_ros_assets && \
rm ${NGC_FILENAME}
fi
officialサイトを参考にNvbloxをインストールします。
$ isaac-ros activate
$ sudo apt-get update
$ sudo apt update && sudo apt-get install -y ros-jazzy-isaac-ros-nvblox
$ sudo apt-get install -y ros-jazzy-rviz2
$ source /opt/ros/jazzy/setup.bash
$ sudo apt-get install -y ros-jazzy-nav2-bringup ros-jazzy-nav2-route
$ sudo apt-get install -y ros-jazzy-rmw-cyclonedds-cpp
$ export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
Isaac Simの仮想空間でロボットを走行させる
Nvbloxのインストールを実施した後、以下のコマンドを実行し、ロボットシミュレーションを実行するためにIsaac Simを起動します。
$ ~/isaac-sim-5.1.0/isaac-sim.selector.sh
以下のようなwindowが表示されたら、jazzyを選択し、STARTをクリックします。
以下のような手順でサンプルの仮想空間を読みこみ、ロボットシミュレーションを実行するための仮想空間を準備します。
以下のWindowが表示された場合は"yes"をクリックします。
仮想空間の準備ができましたら、Playアイコンをクリックして、Isaac Simのシミュレーションをスタートします。
Issac Simでシミュレーションが実行されたので、以下のコマンドを実行し、Nvbloxの自動走行プログラムを実行します。
$ ros2 launch nvblox_examples_bringup isaac_sim_example.launch.py
以下のようにNvbloxのWindowが表示されますので、2D Goal Poseをクリックした後、マウスの左ボタンでGoal Poseを指定すると、そのGoal Poseを目指してロボットが自動走行します。
まとめ
今回ご紹介しましたIsaac ROSのサンプルパッケージ(Nvblox)では、Isaac Simの3D仮想空間に配置されたロボットに搭載されているカメラからのRGB画像とDepth画像をROS2-Topicとして取り出し、ROS2のNvblox内の自動走行プログラムに渡して、Nvbloxで3D-MAPを作成しながら、障害物を回避する自動走行ルートを生成しています。
Nvbloxは生成した自動走行ルートに従って、2輪走行車両制御用のROS2-Topicを生成し、Isaac Simに渡すことで、Isaac Sim上のロボットが走行するような3Dレンダリング描画を行うことで、3D仮想空間でのロボット走行シミュレーションを実現しています。
本記事ではIsaac Sim / Isaac ROSを使用するために必要なセットアップ手順から、代表的なIsaac ROSの2輪ロボットの自動走行シミュレーションのサンプル(Nvblox)の動作を確認するまでの一連の手順をご紹介させていただきました。
Isaac Sim / Isaac ROSをご使用になる際にご参考になれば幸いです。