Tiago Dual 机器人四视角 ROS 2 联合仿真完整配置教程

0 阅读4分钟

阶段一:仿真端 - 搭建一拖四 Action Graph

在 Isaac Sim 中,我们需要通过 Action Graph 将四个物理相机的渲染画面打包并转化为 ROS 2 话题流。

1. 创建基础触发器

  • 打开 Window -> Visual Scripting -> Action Graph,新建一个 Graph。
  • 添加一个 On Playback Tick 节点,作为整个图像发布流的唯一引擎。

2. 搭建单相机分支(以胸部相机为例) 添加以下五个节点,并按顺序连接执行流(Exec)和数据流:

  • Constant Int: 设置 Value = 1。将数据引脚连至 Viewport 的 Viewport Id

  • Isaac Create Viewport: 接收 Tick 触发。

  • Get Prim Path: 填入 /tiago_dual/torso_lift_link/Camera_chest。将输出连至 Set Active Camera 的 Camera Prim

  • Set Active Camera: 接收 Viewport 和 Camera Prim 数据。

  • ROS2 Camera Helper: 在 Property 面板中严格配置:

    • Type: rgb
    • Topic Name: chest_camera/image_raw
    • Frame Id: chest_camera_frame
    • Reset Simulation Time On Stop: 勾选

3. 复制扩展为四分支 将上述除 On Playback Tick 外的五个节点框选复制三份。将 On Playback Tick 的 Tick 输出引脚分别连给这四个分支的 Isaac Create Viewport

4. 严格修改独立属性 依次选中剩下三个分支的节点,修改以下防冲突参数:

  • 头部相机:

    • Constant Int: 2
    • Get Prim Path: /tiago_dual/head_1_link/Camera_head
    • ROS2 Camera Helper: Topic=head_camera/image_raw, Frame=head_camera_frame
  • 左臂相机:

    • Constant Int: 3
    • Get Prim Path: /tiago_dual/arm_left_7_link/Camera_wrist_left
    • ROS2 Camera Helper: Topic=left_arm_camera/image_raw, Frame=left_arm_camera_frame
  • 右臂相机:

    • Constant Int: 4
    • Get Prim Path: /tiago_dual/arm_right_7_link/Camera_wrist_right
    • ROS2 Camera Helper: Topic=right_arm_camera/image_raw, Frame=right_arm_camera_frame

image.png

image.png


阶段二:代码端 - 强制注入 ROS 2 扩展

在使用纯 Python 脚本(Standalone 模式)启动 Isaac Sim 时,UI 中勾选的扩展不会自动加载。必须在脚本顶层强制拉起 ROS 2 桥接。

tiago_dual_isaac/shop_teleop.py 文件的最上方(实例化 SimulationApp 之后,加载任何环境之前),添加以下代码:

Python

from omni.isaac.core.utils.extensions import enable_extension

# 强制拉起 ROS 2 桥接扩展
enable_extension("omni.isaac.ros2_bridge")

阶段三:系统端 - 环境变量注入与启动

由于底层环境中没有系统级 ROS 2 桌面版,完全依赖 Conda 虚拟环境中的 Fallback 库,启动前必须手动指定动态链接库路径和中间件。

打开终端,激活虚拟环境后,依次执行以下命令

Bash

# 1. 激活 Conda 环境
conda activate env_isaaclab

# 2. 声明 Isaac Sim 库绝对路径
export isaac_sim_package_path=/home/ubuntu/miniconda3/envs/env_isaaclab/lib/python3.10/site-packages/isaacsim

# 3. 强制使用 FastRTPS 作为 ROS 2 中间件
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp

# 4. 将内部 ROS 2 Humble 库注入系统搜索路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$isaac_sim_package_path/exts/isaacsim.ros2.bridge/humble/lib

# 5. 启动控制脚本
python tiago_dual_isaac/shop_teleop.py

提示:启动后,务必确保在 Isaac Sim 渲染界面中点击了 Play(播放) 按钮,时间轴开始流动,图像才会开始发布。


阶段四:可视化端 - RViz2 下载、订阅与显示配置

在脚本稳定运行并处于 Play 状态后,使用 RViz2 捕获这四个视角的画面。由于服务器依赖的是虚拟环境中的精简版库,我们需要在 Ubuntu 系统层级单独安装可视化工具。

1. 下载并安装 RViz2 (仅需配置一次) 打开一个全新的终端(无需激活 Conda),依次严格执行以下命令,为系统添加 ROS 2 软件源并安装轻量化工具:

Bash

# 启用 Universe 仓库并安装 curl
sudo apt update && sudo apt install software-properties-common curl -y
sudo add-apt-repository universe

# 添加 ROS 2 GPG 密钥和软件源
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

# 更新缓存并专门安装 RViz2 与图像查看器
sudo apt update
sudo apt install ros-humble-rviz2 ros-humble-rqt-image-view -y

2. 启动 RViz2 安装完成后,在同一个新终端中,注入刚安装的原生 ROS 2 基础环境并启动:

Bash

source /opt/ros/humble/setup.bash
rviz2

3. 修复全局坐标系报错 (Global Status Error)

  • 刚进入 RViz2 时,左侧 Displays 面板的 Global Options -> Fixed Frame 默认是 map,由于此时还没有发布地图 TF,界面会报错。
  • 点击 map,手动输入我们在 Action Graph 中定义的任意一个相机 Frame,例如:head_camera_frame。回车后报错即会消失。

4. 添加四个摄像头画面

  • 点击左下角的 Add 按钮。
  • 在弹出窗口顶部切换到 By topic 标签页。
  • 找到 /head_camera/image_raw,展开并选中其下方的 Image 模块,点击 OK。界面上会出现头部相机的画面。
  • 重复此操作三次,分别将 /chest_camera/image_raw/left_arm_camera/image_raw/right_arm_camera/image_raw 的 Image 模块添加进来。

5. 保存布局

  • 拖拽四个 Image 窗口的边缘,将它们并排固定在 RViz2 主界面的右侧或下方。
  • 点击左上角 File -> Save Config As,命名为 tiago_4_cameras.rviz。下次启动时使用 rviz2 -d tiago_4_cameras.rviz 即可一键恢复多视角监控阵列。