1. (前言)velodyne 驱动包的一些数据信息
以下参数不是理论参数,而是代码编程测试的实际参数
扫描距离:0.4 - 100;
转速: 600r/m ---> 10r/s(每秒钟转10圈);
数据包发送频率: 754(for Last/Strongest) 1508 (for dual)
每一圈发送的数据包: 754/10 = 75个。
雷达扫描的精度: 0.007
因此,激光雷达每扫描一圈发送约75
个数据包, 每个数据包包含1206个字节`
uint8[1206] data // packet contents (42(开头)+[1200(数据)+4(时间轴)+2(雷达型号)] == 1248)
2. 摘要
背景: 使用2轴雷达
来构建实时激光里程计。难点在于在不同时刻接收的距离测量值处理,以及运动估计的误差造成的点云误配准。
迄今为止,连续的地图都是通过离线的捆绑法,常常使用闭环检测来修正漂移。
我们的算法实现了低漂移+低计算复杂度同时,并不要求高精度距离测量和惯性传感器。
该算法核心是SLAM分割为定位和建图两个算法模块
,一个算法负责以高速率更新里程计信息, 但以较低保真度更新雷达的速度
;(与视觉中PTAM原理类似)
另一个算法的运行频率稍微低一些,主要实现精确匹配和点云匹配。将这两个算法合并就可以实现实时更新地图。
-
雷达的优势
对光照不明感,且适用于无纹理的环境下;
相比于摄像头,激光雷达的最大优势在于使用环境限制较小,即不管在白天或是夜晚都能正常使用(无人驾驶);
3. 核心算法
两个算法都在边缘
和平面
提取特征点;
在里程计算法中, 特征点对应关系的确定主要为确保快速计算。
在地图构建算法中, 通过检查局部点簇的几何分布,以及关联的特征值和特征向量来确定对应关系.
-
雷达里程计计算(Lidar Odometry)
- 求取特征
首先根据一个值(这个值勉强可以翻译为
粗糙率
)的计算来区分特征是属于边缘特征还是平面特征:
论文说明当这个值
大于阈值Cmax
时,可以认为是边缘点;
当这个值小于Cmin
时,可以认为是平面点;(至于具体是为什么可以这个判断,暂时还不清楚)
- 求点到直线的距离,点到平面的距离
注意: 与边缘点最邻近的点属于边缘点, 与平面点最邻近的点属于平面
在求取两个距离之后,根据距离值建立优化目标函数:
根据1: 雷达在相邻扫描之间有一个刚体变换矩阵(包括旋转+平移);
根据2: 通过这个变换矩阵分别构建基于边缘点集的方程和基于平面点集的方程;
对上述公式,利用LM优化算法,迭代求解。具体的算法求解伪码如下:
-
地图更新(Mapping)
1.获取两个周边点集合,一个是边缘线集合S', 一个是平面点集合S''; 2.然后计算S‘以及S''的协方差矩阵,并获取该协方差矩阵的特征值和特征向量; 3.最大(或最小的)特征值对应的特征向量是边缘线的方向/局部平面。 4.在获取边缘点集和平面集之后,然后计算相对应点的距离, 最后优化计算的部分与上一步里程计的求解一样。最终可以得到世界座标系下的点云集合Q
4.算法的实测结果
误差对比图
效果对比图