激光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的三维点云地图

发布了47 篇原创文章 · 获赞 361 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/robinvista/article/details/104082524
今日推荐