当前位置: 首页 > news >正文

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

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 文档。

http://www.lryc.cn/news/596810.html

相关文章:

  • AWS Lambda IoT数据处理异常深度分析:从告警到根因的完整排查之路
  • Vue3 面试题及详细答案120道(61-75 )
  • Python学习:函数的使用
  • webrtc整体架构
  • LeetCode热题100--205
  • Visual Studio中部署PaddleOCRv5 (借助ncnn框架)
  • Flink 状态管理设计详解:StateBackend、State、RocksDB和Namespace
  • 【笔记】Handy Multi-Agent Tutorial 第三章: CAMEL框架简介及实践(实践部分)
  • Redis原理之分布式锁
  • PowerShell自动化核对AD与HR系统账户信息实战指南
  • IDEA202403 超好用设置【持续更新】
  • ZooKeeper在Hadoop中的协同应用:从NameNode选主到分布式锁实现
  • 天津大学陈亚楠教授团队 ACS AEM:焦耳热超快合成非平衡态能源材料——毫秒级制备与跨体系性能突破
  • 昨天去看了电科金仓的发布会,有点东西!
  • 从 Linux 将文件下载到 Windows 的几种实用方法
  • 【AI智能体】Dify 开发与集成MCP服务实战操作详解
  • 嵌入式学习之路
  • Python笔记之跨文件实例化、跨文件调用、导入库
  • 为什么本地ip记录成0.0.0.1
  • 基于Python flask的常用AI工具功能数据分析与可视化系统设计与实现,技术包括LSTM、SVM、朴素贝叶斯三种算法,echart可视化
  • 慢 SQL接口性能优化实战
  • Fast Frequency Estimation Algorithm by Least Squares Phase Unwrapping
  • USB4.0:开启高速数据传输的新时代
  • 当if else比较多时候应该怎么避免?
  • MCP与企业数据集成:ERP、CRM、数据仓库的统一接入
  • #Linux权限管理:从“Permission denied“到系统安全大师
  • uniapp自定义圆形勾选框和全选框
  • iOS 抓包工具有哪些?2025实用指南与场景推荐
  • 重磅发布:Oracle ADG 一键自动化搭建脚本
  • 离线快速处理PDF格式转化的方案