激光SLAM生成pcd點雲地圖保存和格式轉換

1 生成點雲地圖

  利用LeGO-LOAM-BOR[1]^{[1]}等三維激光SLAM程序可以進行三維建模,最終得到的地圖是點雲的形式。爲了使用這個地圖,我們可以將其保存爲pcd文件格式,步驟如下。我們假設將激光雷達的掃描數據錄成rosbag包,在離線狀態下建圖。

  1. 運行SLAM程序,跑激光雷達掃描的數據包。在包運行到快結束時(例如差幾秒就播放完),在新的終端中運行以下指令
   rosbag record -o out /laser_cloud_surround
  2. 這時會在在home文件夾內生成一個新的包,名稱是你播放的包名稱加了前綴out,例如out_2020-01-24-16-42-05.bag
  3. 然後再運行以下指令[2]^{[2]}。注意要將out_2020-01-24-16-42-05.bag換成你自己的包名;
   rosrun pcl_ros bag_to_pcd out_2020-01-24-16-42-05.bag /laser_cloud_surround ./pcd

  這樣就將SLAM建立的地圖保存爲pcd點雲文件了,文件在home的pcd文件夾下(名字是例如1579252485.220523357.pcd)。如果想查看這個三維地圖,可以使用以下指令(別忘了切換到pcd文件夾下吆),如下圖所示。
   pcl_viewer 1579252485.220523357.pcd

2 轉換地圖文件格式

  前面保存的地圖文件是pcd格式的,這種格式的缺點是大多數軟件都不支持編輯。我們可以將其轉換爲其它格式,例如ply格式,步驟如下。

  1. 在新的終端中運行以下指令,別忘了將out_2020-01-24-16-42-05.bag換成你自己的文件;
   rosbag play out_2020-01-24-16-42-05.bag /laser_cloud_surround:=/input
  2. 在以上指令運行結束之前,在新的終端中運行以下指令(手速要快哈)。這會將包保存爲一個新的pcd格式的文件[3]^{[3]}
   rosrun pcl_ros pointcloud_to_pcd
  3. 再運行以下指令將新的pcd文件轉換爲ply格式,map.ply就是我們想要的ply格式;
   pcl_pcd2ply 1579252485220523.pcd map.ply

3 使用Matlab轉換

  以上格式轉換的步驟有些複雜,幸運的是Matlab支持pcd格式轉換,代碼如下。

pointCloud = pcread('1579252485.220523357.pcd');         % read from a PCD file
pcwrite(pointCloud,'map.ply','PLYFormat','binary');      % convert PCD file into PLY file
pcshow(pointCloud);                               

4 在Mathematica中查看PLY點雲文件

  Mathematica不支持pcd格式,只能導入ply格式,代碼如下。

  pointCloud = Import["map.ply", "VertexData"];  
  Graphics3D[{PointSize[0.0001], Point[pointCloud]}]

參考資料

[1] https://github.com/facontidavide/LeGO-LOAM-BOR
[2] http://wiki.ros.org/pcl_ros
[3] 保存並查看Loam的三維點雲地圖

發佈了52 篇原創文章 · 獲贊 370 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章