点云的去畸变是激光slam定位中十分重要的一环,如果去畸变的效果不好甚至没有去畸变,那么在较高速的场景或者转弯的场景,点云匹配的效果就会因为点云的畸变而变得不好(即点云匹配的偏移,导致定位效果的偏移),所以需要明确激光slam的去畸变模块是否正确进行了工作.
- 速腾16线雷达
- velodyne16线雷达
这里说下我是怎么发现fastlio运行中点云去畸变没有效果.(PS:可能是我的雷达时间格式上有点问题,所以是对应我这个雷达的解决方案,也希望各位可以学会判断去畸变的效果,和学会对应的解决方案)
首先是代码上去打印雷达的扫描结束时间和起始时间的差值.
运行的结果
关于点云中每一个点的时间这个问题做一个解释(PS:从fastlio上的代码逻辑理解过来的).
- 首先是点云扫描的绝对时间,一般指的是点云开始扫描第一个点的时间,一般是通过点云回调函数中,sensor_msgs::PointCloud2中的header.stamp中取得.(如下图所示)
- 点云中每个点的相对时间(相对于点云第一个点的时间).
相对时间可以通过将sensor_msgs::pointcloud2转换到pcl类型进行读取.(如下图所示)
这样通过第一个点的绝对时间和每个点的相对时间就组成了所有点的时间.
点的类型是XYZIRT(根据官方文档在cmakelist进行设置)
雷达选的velodyne,阿克曼小车的运动方式选择的是绕圈转.
没有去畸变的效果
去畸变后的效果
主要是讨论了两种情况:
- 第一种是速腾雷达,通过配置可以得到点云中每个点的时间,但是时间单位有问题,需要修正才能使去畸变正常工作.
- 第二种是velodyne,不知道是什么原因没法得到点云中点的相对时间,所以需要去补偿时间,才能使去畸变正常工作.
吐槽一下velodyne怎么样才能直接从雷达驱动获取点云每个点的时间,不太清楚怎么操作,github上的驱动太不详细了…