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

发布于:2025-07-24 ⋅ 阅读:(19) ⋅ 点赞:(0)

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 工作空间并运行:

rviz -d <noetic_ws>/src/isaac_tutorials/rviz/rtx_lidar.rviz

以启动 RViz 并显示 Lidar 点云。

2. 运行示例脚本

./python.sh standalone_examples/api/omni.isaac.ros_bridge/rtx_lidar.py

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

RTX Lidar Standalone 脚本解析

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

1.创建 RTX Lidar 传感器

_, 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 的配置。除厂商/型号特定的配置外,示例中还提供了两个通用配置文件,位于:

extsbuild/omni.sensors.nv.common/data/lidar/
├── Example_Rotary.json
└── Example_Solid_State.json

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

2. 创建渲染产品并附加传感器

hydra_texture = rep.create.render_product(
    sensor.GetPath(),
    [1, 1],
    name="Isaac"
)

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

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

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


网站公告

今日签到

点亮在社区的每一天
去签到