見出し画像

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 -v

3. ロボットのデモの準備

今回は、「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



いいなと思ったら応援しよう!