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 建图
添加Lidar传感器到机器人:
转到 Create > Isaac > Sensors > RTX Lidar > Rotating,然后将该传感器的名字从
Rotating
更改为Lidar
。
将Lidar传感器与机器人对齐:
将Lidar传感器拖到
/World/turtlebot3_burger/base_scan
下,以确保Lidar传感器与机器人的Lidar单元重合。在Property面板中的Transform字段中,将位移设置为零,确保传感器的位置正确对齐。
通过Omnigraph节点连接ROS桥和传感器输出:
打开一个可视化脚本编辑器,转到 Window > Visual Scripting > Action Graph。
向图中添加以下节点:
Action Graph Layout
On Playback Tick节点:负责在点击Play后触发所有其他节点。
Isaac Create Render Product节点:在输入相机目标prim中选择步骤2中创建的RTX Lidar。
ROS1 RTX Lidar Helper节点:此节点负责发布来自RTX Lidar的LaserScan消息。输入的渲染产品来自步骤b中
Isaac Create Render Product
的输出。将frameId
名称更改为Lidar
,以匹配Lidar传感器的名称。添加另一个ROS1 RTX Lidar Helper节点以发布点云数据:选择输入类型为
point_cloud
,并将话题名称更改为/point_cloud
。此节点处理从RTX Lidar发布点云数据。输入的渲染产品来自步骤b中的Isaac Create Render Product
节点的输出。将frameId
名称更改为Lidar
,以匹配Lidar传感器的名称。
启动仿真:
设置正确后,点击 Play 开始仿真。验证RTX Lidar是否发送了 LaserScan 和 PointCloud2 消息,并且可以在RViz中可视化。
2.2 RViz可视化:
运行RViz:rosrun rviz rviz
更新RViz中的固定帧:
在Isaac Sim中,RTX Lidar的固定帧名称设置为
Lidar
,因此需要在RViz的 Global Options 标签中更新 Fixed Frame 为Lidar
。
添加LaserScan可视化:
在RViz中,点击 Add,选择 LaserScan,然后将话题设置为
/scan
。
添加PointCloud2可视化:
同样,点击 Add,选择 PointCloud2,然后将话题设置为
/point_cloud
。
验证可视化:
确保在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 文档。