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 的設定精準化。)
沒有留言:
張貼留言