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