10. isaacsim4.2教程-RTX Lidar 传感器

1. 前言

RTX Lidar 传感器

Isaac Sim的RTX或光线追踪Lidar支持通过JSON配置文件设置固态和旋转Lidar配置。每个RTX传感器必须附加到自己的视口或渲染产品,以确保正确模拟。

重要提示:

在运行RTX Lidar仿真时,如果你在Isaac Sim UI中停靠窗口,可能会导致崩溃。请在重新停靠窗口之前暂停仿真。

学习目标

在本示例中,你将:

  • 简要了解如何使用RTX Lidar传感器。

  • 创建一个RTX Lidar传感器并将其附加到Turtlebot3机器人上。

  • 将传感器数据发布到ROS,作为LaserScan和PointCloud2消息。

  • 使用菜单快捷方式创建RTX Lidar传感器发布器。

  • 将所有部分结合起来并在RViz中可视化多个传感器。

开始之前

注意:

在运行Isaac Sim之前,请确保在终端中对ROS进行source操作。如果你的bashrc中已经包含了source ROS命令,那么可以直接运行Isaac Sim。

前提条件

  • 完成ROS相机教程。

  • 启用了ROS Bridge,并且roscore正在运行。

  • 可选:探索RTX Lidar传感器的内部工作原理,学习它们的工作方式,使用它们的RTX Lidar节点,以及如何获取RTX Lidar合成数据。

  • 完成URDF导入:Turtlebot教程,以便加载并让TurtleBot正常运行。

2. 添加RTX Lidar发布器

2.1 建图

  1. 添加Lidar传感器到机器人:

    1. 转到 Create > Isaac > Sensors > RTX Lidar > Rotating ,然后将该传感器的名字从 Rotating 更改为 Lidar
  2. 将Lidar传感器与机器人对齐:

    1. 将Lidar传感器拖到 /World/turtlebot3_burger/base_scan 下,以确保Lidar传感器与机器人的Lidar单元重合。

    2. 在Property面板中的Transform字段中,将位移设置为零,确保传感器的位置正确对齐。

  3. 通过Omnigraph节点连接ROS桥和传感器输出:

    1. 打开一个可视化脚本编辑器,转到 Window > Visual Scripting > Action Graph

    2. 向图中添加以下节点:

      Action Graph Layout

      1. On Playback Tick节点:负责在点击Play后触发所有其他节点。

      2. Isaac Create Render Product节点:在输入相机目标prim中选择步骤2中创建的RTX Lidar。

      3. ROS1 RTX Lidar Helper节点 :此节点负责发布来自RTX Lidar的LaserScan消息。输入的渲染产品来自步骤b中Isaac Create Render Product的输出。将frameId名称更改为Lidar,以匹配Lidar传感器的名称。

      4. 添加另一个ROS1 RTX Lidar Helper节点以发布点云数据 :选择输入类型为 point_cloud,并将话题名称更改为/point_cloud。此节点处理从RTX Lidar发布点云数据。输入的渲染产品来自步骤b中的 Isaac Create Render Product 节点的输出。将 frameId 名称更改为 Lidar,以匹配Lidar传感器的名称。

  4. 启动仿真:

    1. 设置正确后,点击 Play 开始仿真。验证RTX Lidar是否发送了 LaserScanPointCloud2 消息,并且可以在RViz中可视化。

2.2 RViz可视化:

  1. **运行RViz:**rosrun rviz rviz

  2. 更新RViz中的固定帧:

    • 在Isaac Sim中,RTX Lidar的固定帧名称设置为Lidar,因此需要在RViz的 Global Options 标签中更新 Fixed FrameLidar
  3. 添加LaserScan可视化:

    • 在RViz中,点击 Add ,选择 LaserScan ,然后将话题设置为 /scan
  4. 添加PointCloud2可视化:

    • 同样,点击 Add ,选择 PointCloud2 ,然后将话题设置为 /point_cloud
  5. 验证可视化:

    • 确保在RViz中看到来自RTX Lidar的激光扫描和点云数据。

3. Rviz中多传感器

要在 RViz 中同时显示多个传感器的数据,并确保所有消息的时间戳正确且同步,请注意以下几点。

仿真时间戳

使用 Isaac Read Simulation Time 节点作为唯一的时间源,将它的输出连接到所有发布节点的时间戳输入。

ROS 时钟

要将仿真时间发布到 ROS 的 /clock 话题,可按 "运行 ROS Clock 发布器" 教程中的方式设置你的 Action Graph。

frameId 与 topicName

  1. 要在 RViz 中同时可视化所有传感器数据 以及 TF 树,frameId 和 topicName 必须遵循一定的命名约定,RViz 才能正确识别。下表大致描述了这些约定。要查看完整的多传感器示例,请参考 USD 资源 Isaac/Samples/ROS/Scenario/turtlebot_tutorial.usd

2.查看 RViz 配置

确保仿真正在运行,然后在已 source ROS 的终端中使用以下命令打开示例配置:

复制代码
rviz -d <noetic_ws>/src/isaac_tutorials/rviz/camera_lidar.rviz

然后添加上接受消息可视化的工具

可以看到他们主题的命名就是按照上表所述进行命名的。

4. 在 Standalone 环境中添加 RTX Lidar

启动 ROS 与 RViz

  1. 在一个终端中,source 你的 ROS 工作空间并运行:
bash 复制代码
rviz -d <noetic_ws>/src/isaac_tutorials/rviz/rtx_lidar.rviz

以启动 RViz 并显示 Lidar 点云。

  1. 运行示例脚本
bash 复制代码
./python.sh standalone_examples/api/omni.isaac.ros_bridge/rtx_lidar.py

场景加载完成后,确认你能在 RViz 中看到旋转 Lidar 传感器的点云数据。

RTX Lidar Standalone 脚本解析

虽然大部分示例代码都比较通用,但以下几步是创建并模拟 RTX Lidar 传感器所必需的。

1.创建 RTX Lidar 传感器

python 复制代码
_, sensor = omni.kit.commands.execute(
    "IsaacSensorCreateRtxLidar",
    path="/sensor",
    parent=None,
    config="Example_Rotary",
    translation=(0, 0, 1.0),
    orientation=Gf.Quatd(1.0, 0.0, 0.0, 0.0),
)

这里的 Example_Rotary 定义了 Lidar 的配置。除厂商/型号特定的配置外,示例中还提供了两个通用配置文件,位于:

bash 复制代码
extsbuild/omni.sensors.nv.common/data/lidar/
├── Example_Rotary.json
└── Example_Solid_State.json

若要切换到固态 Lidar 示例配置,只需将config="Example_Rotary"替换为:config="Example_Solid_State"

  1. 创建渲染产品并附加传感器
bash 复制代码
hydra_texture = rep.create.render_product(
    sensor.GetPath(),
    [1, 1],
    name="Isaac"
)

3.构建后处理流程并发布到 ROS

bash 复制代码
writer = rep.writers.get("RtxLidarROS1PublishPointCloud")
writer.initialize(
    topicName="point_cloud",
    frameId="sim_lidar"
)
writer.attach([hydra_texture])

注意

在调用 activate_node_template 时,你可以通过可选的 attributes={...} 字典来设置节点特定参数。更多用法请参阅官方 API 文档。

相关推荐
kyle~5 小时前
ROS2---QoS策略
c++·机器人·ros2
IT猿手7 小时前
基于强化学习的多算子差分进化路径规划算法QSMODE的机器人路径规划问题研究,提供MATLAB代码
算法·matlab·机器人
大江东去浪淘尽千古风流人物7 小时前
【VLN】VLN仿真与训练三要素 Dataset,Simulators,Benchmarks(2)
深度学习·算法·机器人·概率论·slam
不做无法实现的梦~8 小时前
PX4各个模块的作用(3)
linux·stm32·嵌入式硬件·机器人·自动驾驶
清风6666668 小时前
基于单片机的喷漆机器人自动控制系统
单片机·嵌入式硬件·机器人·毕业设计·课程设计·期末大作业
9呀9 小时前
【ros2】OccupancyGrid消息里的resolution
人工智能·机器人
熵减纪元9 小时前
人形机器人周末炸场:Atlas后空翻回归、宇树零下47度暴走、中国Bolt跑出10m/s | 2.8日报
人工智能·机器人·人形机器人
硅谷秋水9 小时前
REALM:用于机器人操作泛化能力的真实-仿真验证基准测试
人工智能·机器学习·计算机视觉·语言模型·机器人
movigo7_dou11 小时前
工业相机镜头参数和选型
图像处理·数码相机
云空11 小时前
日常高频英语口语实用表达播客
人工智能·机器人