Docker で Isaac Sim 5.1 を起動してROS2 Bridge でロボット制御を試す
「Docker」で「Isaac Sim 5.1」を起動して「ROS 2 Bridge」でロボット制御を試したのでまとめました。
前回
1. はじめに
「Docker」で「Isaac Sim 5.1」を起動して「ROS 2 Bridge」でロボット制御を試したのでまとめました。
動作環境は、次のとおりです。
・Ubuntu 22.04
・NVIDIA GPU
・NVIDIA Driver
・NVIDIA Container Toolkit
・Docker
2. Docker の Isaac Sim 5.1 の準備
(1) 「NVIDIA NGC」からDockerイメージを取得。
docker pull nvcr.io/nvidia/isaac-sim:5.1.0(2) キャッシュやログを保存するディレクトリを準備。
mkdir -p ~/docker/isaac-sim/cache/main/ov
mkdir -p ~/docker/isaac-sim/cache/main/warp
mkdir -p ~/docker/isaac-sim/cache/computecache
mkdir -p ~/docker/isaac-sim/config
mkdir -p ~/docker/isaac-sim/data/documents
mkdir -p ~/docker/isaac-sim/data/Kit
mkdir -p ~/docker/isaac-sim/logs
mkdir -p ~/docker/isaac-sim/pkg(3) Docker内ユーザーのUIDに合わせる。
sudo chown -R 1234:1234 ~/docker/isaac-sim(4) 「~/.ros/fastdds.xml」の準備。
Dockerなど複数マシン構成では「UDP transport」を有効にするために 「fastdds.xml」を用意し、「FASTRTPS_DEFAULT_PROFILES_FILE」を設定する必要があります。
・~/.ros/fastdds.xml
<?xml version="1.0" encoding="UTF-8" ?>
<profiles xmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles">
<transport_descriptors>
<transport_descriptor>
<transport_id>UdpTransport</transport_id>
<type>UDPv4</type>
</transport_descriptor>
</transport_descriptors>
<participant profile_name="udp_transport_profile" is_default_profile="true">
<rtps>
<userTransports>
<transport_id>UdpTransport</transport_id>
</userTransports>
<useBuiltinTransports>false</useBuiltinTransports>
</rtps>
</participant>
</profiles>「Fast DDS」が標準で自動的に用意するトランスポートを無効化して、自分で定義した「UDPv4」だけを使う設定です。
(5) Dockerコンテナの起動。
コンテナに入ります。
docker run --name isaac-sim \
--entrypoint bash -it \
--gpus all \
-e "ACCEPT_EULA=Y" \
-e "PRIVACY_CONSENT=Y" \
--rm \
--network=host \
-v ~/docker/isaac-sim/cache/main:/isaac-sim/.cache:rw \
-v ~/docker/isaac-sim/cache/computecache:/isaac-sim/.nv/ComputeCache:rw \
-v ~/docker/isaac-sim/logs:/isaac-sim/.nvidia-omniverse/logs:rw \
-v ~/docker/isaac-sim/config:/isaac-sim/.nvidia-omniverse/config:rw \
-v ~/docker/isaac-sim/data:/isaac-sim/.local/share/ov/data:rw \
-v ~/docker/isaac-sim/pkg:/isaac-sim/pkg:rw \
-u 1234:1234 \
-v ~/.ros/fastdds.xml:/root/.ros/fastdds.xml:ro \
-e "FASTRTPS_DEFAULT_PROFILES_FILE=/root/.ros/fastdds.xml" \
-e "RMW_IMPLEMENTATION=rmw_fastrtps_cpp" \
-e "ROS_DOMAIN_ID=0" \
nvcr.io/nvidia/isaac-sim:5.1.0・FASTRTPS_DEFAULT_PROFILES_FILE
Fast DDS の通信方法を指定。
・RMW_IMPLEMENTATION
ROS2が使うDDS実装を指定。
・ROS_DOMAIN_ID
ROS2 ネットワークのグループIDを指定。
(5) コンテナ内で「Isaac Sim」を起動。
./runheadless.sh -v3. ロボットのデモの準備
今回は、「Nova Carter」のサンプルを仕様します。
(1) 「Isaac Sim」のメニュー「Window → Extentsons」で「ros2」を検索し、「ROS2 Bridge」が有効化されていることを確認。

(2) 「Isaac Sim」のメニュー「Window → Examples → Robotics Examples」で下端のペインに「Robot Examples」を表示。
(3) 「Robotics Exampes」の「ROS2 → NAVIGATION → Nova Carter」を選択し、「Load Sample Scene」をクリック。

(4) 左端の再生ボタン(▶)でシミュレーション開始。

4. Docker の ROS2 Jazzy の準備
(1) Dockerコンテナの起動。
コンテナに入ります。
docker run --name ros_ws_docker \
-it \
--rm \
--network=host \
-v ~/.ros/fastdds.xml:/root/.ros/fastdds.xml:ro \
-e FASTRTPS_DEFAULT_PROFILES_FILE="/root/.ros/fastdds.xml" \
-e RMW_IMPLEMENTATION=rmw_fastrtps_cpp \
-e ROS_DOMAIN_ID=0 \
osrf/ros:jazzy-desktop(2) トピックの確認。
ros2 topic list/# ros2 topic list
/back_stereo_imu/imu
/chassis/imu
/chassis/odom
/clock
/cmd_vel
/front_3d_lidar/lidar_points
/front_stereo_camera/left/camera_info
/front_stereo_camera/left/image_raw
/front_stereo_imu/imu
/left_stereo_imu/imu
/parameter_events
/right_stereo_imu/imu
/rosout
/tf(3) /clock の確認。
ros2 topic echo /clock---
clock:
sec: 17
nanosec: 466667577
---
clock:
sec: 17
nanosec: 483334245
---
clock:
sec: 17
nanosec: 500000912(4) ロボットの移動。
ros2 topic pub /cmd_vel geometry_msgs/msg/Twist \
"{linear: {x: 0.5, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.3}}"
(5) ロボットの操作。
sudo apt-get update
sudo apt-get install -y ros-$ROS_DISTRO-teleop-twist-keyboard
ros2 run teleop_twist_keyboard teleop_twist_keyboard