Nvidia Isaac Sim 4 - ROS 2 安装

NVIDIA Isaac Sim 提供用于集成 ROS 系统的 ROS 2 Bridge。仿真器发布和接收的数据类型,由同一套通用组件定义。

Isaac Sim 支持的 ROS 发行版如下所示。

平台ROS 2
Ubuntu 24.04Jazzy(推荐)
Ubuntu 22.04Humble、Jazzy
Windows 11Humble

对于 ROS 2 桥接器,Isaac Sim 兼容 ROS 2 JazzyROS 2 Humble

建议在 Ubuntu 24.04 上使用 ROS 2 Jazzy。后续所有步骤均默认使用 Ubuntu 24.04 和 ROS 2 Jazzy。


1. 安装 ROS 2(Ubuntu 24.04 + ROS 2 Jazzy)

1.1. 按照官方网站的说明下载 ROS 2 Jazzy

1.2. 安装 ros-jazzy-vision-msgs

运行以下命令在系统上安装该软件包。如果从源码构建 ROS 2,那么克隆该软件包,并且将其包含在 ROS 2 安装工作空间中,然后重新构建。如果无需运行 vision_msgs 发布者,可以跳过此步骤。ROS 2 桥接器中的某些消息类型(用于发布边界框的 Detection2DArray 和 Detection3DArray)依赖 vision_msgs 软件包。

sudo apt install ros-jazzy-vision-msgs

1.3. 安装 ros-jazzy-ackermann-msgs

运行以下命令在系统上安装该软件包。如果从源码构建 ROS 2,那么克隆该软件包,并且将其包含在 ROS 2 安装工作空间中,然后重新构建。如果无需运行 ackermann_msgs 发布者/订阅者,可以跳过此步骤。ROS 2 桥接器中的某些消息类型(用于发布和订阅 Ackermann 转向指令的 AckermannDriveStamped)依赖 ackermann_msgs 软件包。

sudo apt install ros-jazzy-ackermann-msgs

1.4. source ROS 环境

确保已在终端或 ~/.bashrc 文件中 source ROS 环境。每次使用 ROS 命令之前都必须执行此步骤。

source /opt/ros/jazzy/setup.bash

2. Isaac Sim ROS 工作空间

ROS 2 工作空间包含运行 ROS 2 教程和示例所需的必要软件包。

2.1. 包含的 ROS 2 软件包

为 NVIDIA Isaac Sim 创建的示例 ROS 2 软件包列表:

  • carter_navigation:包含用于 NVIDIA Carter 机器人的必要启动文件和 ROS 2 导航参数。
  • cmdvel_to_ackermann:包含脚本文件和启动文件,用于将速度命令消息(Twist 消息类型)转换为 Ackermann 驱动消息(AckermannDriveStamped 消息类型)。
  • custom_message
  • h1_fullbody_controller:包含用于运行 H1 人形机器人全身控制器的必要启动文件、参数和脚本。
  • isaac_compressed_image_decoder:包含解码节点,用于使用 PyAV 将 H.264 压缩图像(sensor_msgs/CompressedImage)还原为原始 sensor_msgs/Image 消息。
  • isaac_moveit:包含用于将 Isaac Sim 与 MoveIt2 栈一起运行的启动文件和参数。
  • isaac_ros_navigation_goal:用于在 ROS 2 Navigation 中自动设置随机或用户定义的目标位姿。
  • isaac_ros2_messages:一套自定义的 ROS 2 服务接口,用于获取位姿、列出 Prim 以及操作其属性。
  • isaacsim_bringup:包含用于将 Isaac Sim 作为 ROS 2 节点运行和启动的启动文件和脚本。
  • isaac_tutorials:包含教程系列所需的启动文件、RViz2 配置文件和脚本。
  • iw_hub_navigation:包含用于 iw.hub 机器人的必要启动文件和 ROS 2 导航参数。

重要提示

每次打开新终端或加入新 ROS 2 软件包时,务必 source ROS 2 工作空间。然后,在同一终端中运行 Isaac Sim。

2.2. 设置 ROS 2 工作空间

为运行 ROS 2 教程和示例,需要在计划使用的终端中 source ROS 2 安装工作空间。

要构建 Isaac Sim ROS 工作空间,请确保系统已安装 ROS 2。

从 https://github.com/isaac-sim/IsaacSim-ros_workspaces 克隆 Isaac Sim ROS 工作空间仓库。

完成 Isaac Sim ROS 2 教程系列需要一些 ROS 软件包。完整的 ROS 2 工作空间已包含这些必要的软件包。

如果是从源码构建的 ROS 2,则在构建其他工作空间之前,请将 source /opt/ros/<ros_distro>/setup.bash 命令替换为 source <path_ros2_ws>/install/setup.bash

要构建 ROS 2 工作空间,可能需要安装额外的软件包:

# For rosdep install command
sudo apt install python3-rosdep build-essential
# For colcon build command
sudo apt install python3-colcon-common-extensions

确保已经 source 原生 ROS 2:

source /opt/ros/jazzy/setup.bash

在 ROS 2 工作空间的根目录下,运行以下命令解决所有软件包依赖项:

cd jazzy_ws
git submodule update --init --recursive # If using docker, perform this step outside the container and relaunch the container
rosdep install -i --from-path src --rosdistro jazzy -y

构建工作空间:

colcon build

在根目录下,将新建 buildinstalllog 目录。

开始使用此工作空间中构建的 ROS 2 软件包时,打开新终端,使用以下命令 source 该工作空间:

source /opt/ros/jazzy/setup.bash
cd jazzy_ws
source install/local_setup.bash

3. 配置选项及启用内部 ROS 库(可选)

如果需要使用 ROS Docker 容器,并且没有可用的原生 ROS 2 安装,则可以使用 Isaac Sim 自带的内部 ROS 库运行 Isaac Sim。

3.1. 使用 Isaac Sim 内部 ROS 库

在 Ubuntu 24.04 中,如果没有 source 其他 ROS 库,Isaac Sim 将自动加载内部的 ROS 2 Jazzy 库。使用常规启动命令运行 Isaac Sim,并且启用 ROS 2 Bridge。

./isaac-sim.sh
  • 注意

    ROS_DISTRO 环境变量用于检查是否已 source ROS。

3.2. 使用终端或启用 ROS 2 Python Standalone 脚本

如果使用 ./python.sh 运行 Isaac Sim Standalone 脚本,必须手动启用内部库。

为直接设置特定的内部 ROS 2 库,必须在运行 Isaac Sim 之前,在新终端或命令提示符中设置以下环境变量。如果 Isaac Sim 安装在非默认位置,请将 isaac_sim_package_path 环境变量替换为 Isaac Sim 安装根目录路径。

3.2.1. 使用手动选择的 ROS 2 内部库运行 Isaac Sim(覆盖为 jazzy

export isaac_sim_package_path=/isaac-sim

export ROS_DISTRO=jazzy

export RMW_IMPLEMENTATION=rmw_fastrtps_cpp

# Can only be set once per terminal.
# Setting this command multiple times will append the internal library path again potentially leading to conflicts
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$isaac_sim_package_path/exts/isaacsim.ros2.core/jazzy/lib

# Run Isaac Sim
$isaac_sim_package_path/isaac-sim.sh

3.2.2. 运行 Standalone 脚本

export isaac_sim_package_path=$HOME/isaacsim

export ROS_DISTRO=jazzy

export RMW_IMPLEMENTATION=rmw_fastrtps_cpp

# Can only be set once per terminal.
# Setting this command multiple times will append the internal library path again potentially leading to conflicts
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$isaac_sim_package_path/exts/isaacsim.ros2.core/jazzy/lib

# Run Isaac Sim Standalone scripts
$isaac_sim_package_path/python.sh <path/to/standalone/script>

4. 启用 ROS 2 桥接器

当未设置 RMW_IMPLEMENTATION 环境变量时,ROS 2 桥接器默认使用 Fast DDS。

4.1. 在 Linux 上使用 Fast DDS

4.1.1. 单机

如果使用 ROS 2 桥接器与同一台机器上运行的 ROS 2 节点进行通信,请使用 FastDDS 的默认配置。这样可以确保使用共享内存传输,从而获得最佳的仿真性能。

4.2. 在 isaac-sim.sh 中禁用 ROS 桥接器

要禁用 ROS 桥接器,请按以下步骤操作:

  1. 打开位于 ~/isaacsim/apps/isaacsim.exp.full.kit 的文件。
  1. 找到以下配置行:

    isaac.startup.ros_bridge_extension = "isaacsim.ros2.bridge"

  1. 将其修改为:

    isaac.startup.ros_bridge_extension = ""

    即可禁用 ROS 2 桥接器。

  1. 保存,关闭文件。