1. URDF 內的 LiDAR 是怎麼表示的
-
在 URDF/Xacro 中,LiDAR 本體會是一個 link(例如
lidar_link),通常是個小圓柱體(僅供視覺化)。 -
接著用一個 joint(通常是 fixed)把
lidar_link固定到base_link或車體上。 -
在 LiDAR link 裡,用
<gazebo>標籤附加 Gazebo 插件,這樣模擬才會真的產生雷射掃描資料。
2. libgazebo_ros_ray_sensor.so 插件
這是 gazebo_ros 套件提供的 Ray Sensor Plugin。它會把 Gazebo 模擬的 Ray sensor(光線投射)封裝成 ROS 2 的 Topic。
主要功能:
-
在 Gazebo 中模擬雷射掃描器(LiDAR)。
-
透過 ROS 2 topic 輸出
sensor_msgs/msg/LaserScan或sensor_msgs/msg/PointCloud2。 -
可設定角度範圍、解析度、更新頻率、噪聲模型。
3. URDF / Xacro 實際範例
4. 關鍵說明
-
<sensor type="ray">:告訴 Gazebo 這是一個 Ray Sensor(雷射)。 -
<ray><scan>…</scan></ray>:定義雷射的掃描角度與分辨率(360 點、360°)。 -
<plugin filename="libgazebo_ros_ray_sensor.so">:把 Gazebo 的 Ray Sensor 綁定到 ROS 2。 -
<output_type>:決定輸出的資料型別(LaserScan / PointCloud2)。 -
<remapping>:改 ROS topic 名稱(這裡輸出到/scan)。 -
<frame_name>:指定發送 TF 的 frame id(通常是lidar_link)。
常見主題名稱:
/scan(2D LaserScan)或/points//points_raw(PointCloud2)。實際名稱取決於你在 URDF/Gazebo 插件裡的<remapping>設定。-
如何確認:
-
RViz2 顯示 LaserScan:
-
開
rviz2→ Fixed Frame 設odom(或base_link)。 -
Add → By display type → LaserScan。
-
Topic 選剛剛找到的
…/scan;Frame 會用frame_id(常是lidar_link)。 -
若看不到:在 LaserScan display 裡把 Size (m) 調到 0.02~0.05、確認時間同步(/clock)與 TF 完整。
-
-
RViz2 顯示 PointCloud2(若輸出點雲):
-
Add → PointCloud2。
-
Topic 選
/points(或你的點雲 topic)。 -
Style 選 Points,Size 0.02~0.05。
-
小檢查:你現在 plugin 輸出的是 sensor_msgs/LaserScan 還是 sensor_msgs/PointCloud2?(告訴我型別,我幫你把 RViz 的設定精準化。)
沒有留言:
張貼留言