0.前言
上一篇番外文章教大家如何在宇樹機器狗go2的gazebo仿真環境中實現簡單的導航運動,本期文章會教大家如何讓宇樹的機器狗go2在仿真環境中進行slam建圖時經常會遇到的一些點云格式,在后續的slam建圖和slam算法解析的時候會經常與這些點云信息打交道。宇樹機器狗go2仿真會作為一個長期項目來進行不定期更新,仿真不只限于在gazebo上實現,后面還會在isaac sim等仿真平臺上教大家如何搭建,其目的還是幫助各位都能以較低的成本加入到宇樹機器狗go2的學習中。gazebo的仿真對電腦的需求會低于isaac sim等仿真平臺,這對實驗條件要求會低很多,更很適合學校小實驗室或個人進行仿真實驗。
同時我也希望能有更多的開發者加入近來一起完成機器狗go2的仿真實驗項目的建設,如有更好的方案和建議可以私聊或申請共創作者。
1.ros PointClould點云格式
宇樹機器狗go2配上livox的mid360進行gazebo仿真使用的就是ros PointClould點云格式(livox官方gazebo仿真功能包給的是ros PointClould點云格式,但可通過修改點云屬性文件livox_points_plugin.cpp來將PointCloud點云):
使用rostopic命令會在終端中打印出話題的消息類型、發布者和接收者。
rostopic info /scan
ros PointClould的點云消息格式如下:sensor_msgs /PointCloud Message
std_msgs/Header header
geometry_msgs/Point32[] points
sensor_msgs/ChannelFloat32[] channels
- header:類型為 Header,包含了消息的元數據,如時間戳(stamp)、坐標系(frame_id)等。時間戳可用于確定數據采集的時間,坐標系則表明這些點云數據所在的參考系。
- points:類型為 geometry_msgs/Point32[],是一個三維點的數組。每個 Point32 包含三個浮點型字段 x、y、z,分別表示點在三維空間中的坐標。
- channels:類型為 sensor_msgs/ChannelFloat32[],用于存儲額外的屬性信息。每個 ChannelFloat32 包含一個字符串 name 用于標識該通道的含義,以及一個浮點型數組 values 存儲對應的值。例如,可以用一個通道存儲點的強度信息,另一個通道存儲點的顏色信息等。
2.ros PointClould2點云格式
宇樹機器狗go2配上velodyne的vlp16進行gazebo仿真使用的就是ros PointClould2點云格式:
使用rostopic命令會在終端中打印出話題的消息類型、發布者和接收者。
rostopic info /velodyne_points
ros PointClould2的點云消息格式如下:sensor_msgs /PointCloud2 Message
std_msgs/Header header
uint32 height
uint32 width
sensor_msgs/PointField[] fields
bool is_bigendian
uint32 point_step
uint32 row_step
uint8[] data
bool is_dense
- header:?
Header
?類型,包含時間戳和坐標系等元數據。 - height 和 width:
height
?和?width
?用于描述點云的二維結構。如果點云是無序的,height
?通常為 1,width
?表示點的數量;如果點云是有序的(如立體相機采集的深度圖),則?height
和?width
?分別表示點云的行數和列數。 - fields:類型為
sensor_msgs/PointField[]
,描述了點云中每個點的字段信息。每個?PointField
?包含字段的名稱(如?x
、y
、z
、intensity
?等)、偏移量(表示該字段在數據中的起始位置)、數據類型(如?FLOAT32
、UINT8
?等)和計數(通常為 1)。 - is_bigendian:布爾類型,指示數據是否采用大端字節序。
- point_step:無符號 32 位整數,表示每個點在數據緩沖區中占用的字節數。
- row_step:無符號 32 位整數,表示每行點在數據緩沖區中占用的字節數。
- data:無符號 8 位整數數組,存儲了實際的點云數據。數據按照?
fields
?中定義的字段順序和?point_step
、row_step
的規則排列。 - is_dense:布爾類型,指示點云中是否包含無效點(如 NaN 或 Inf)。如果為?
true
,則表示點云中所有點都是有效的。
3.ros PointClould點云格式與ros PointClould2點云格式的區別
點擊宇樹機器狗go2—slam建圖(1)點云格式?查看全文