1 生成點雲地圖
利用LeGO-LOAM-BOR等三維激光SLAM程序可以進行三維建模,最終得到的地圖是點雲的形式。爲了使用這個地圖,我們可以將其保存爲pcd文件格式,步驟如下。我們假設將激光雷達的掃描數據錄成rosbag包,在離線狀態下建圖。
1. 運行SLAM程序,跑激光雷達掃描的數據包。在包運行到快結束時(例如差幾秒就播放完),在新的終端中運行以下指令
rosbag record -o out /laser_cloud_surround
2. 這時會在在home文件夾內生成一個新的包,名稱是你播放的包名稱加了前綴out
,例如out_2020-01-24-16-42-05.bag
3. 然後再運行以下指令。注意要將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格式的文件;
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的三維點雲地圖