前言:
由于对三维激光SLAM比较感兴趣,并且最近也在找无人驾驶激光SLAM算法的岗位,所以花了一个多月把LOAM的论文和源码好好看了一遍。发现论文还是比较容易明白,但一看代码全是坑。看论文懂了,看代码似懂非懂。为了尽快把这坑填上,所以诚邀读者一起探讨。作者始终认为填坑最好的方法是拉别人和你一起填坑。由于三千多行的源码不是一篇博客能够讲明白的,所以这篇博客主要讲一下我对LOAM论文的理解,希望对大家能有帮助。
摘要:
论文作者的目标是使用一个三维空间中运动的两轴激光雷达来构建实时激光里程计。文章提出了构建实时里程计的难点在于点云不是相同时间获得的,为什么呢,因为点云中的点随着激光雷达运动会产生运动畸变,也就是点云中的点会相对实际环境中的物品表面上的点存在位置上的误差。这种运动畸变会造成点云在匹配时发生错误,从而不能正确获得两帧点云的相对位置关系也就无法获得正确的里程计信息。论文提出了一种方法可以同时获得低漂移和低复杂度计算,并且不需要高精度的测距和惯性测量。核心思想是分割同时定位和建图的复杂问题,通过两个算法:一个是执行高频率的里程计但是地精度的运动估计,另一个算法在一个数量级低的频率执行匹配和注册点云信息。将这两个算法结合就获得了高精度、实时性的激光里程计。
第一章 简介:
激光雷达的优势在于测距频率高、准确,并测量产生相对固定的误差且与距离无关。如果激光传感器本体静止,激光只是绕固定轴做选择运动,则点云的注册是很简单的。但我们使用的环境中激光通常是运动的,这就造成建图需要运动过程中激光传感器的位姿。通常使用的方法是使用独立的位姿估计如:GPS/INS来提供位姿信息来注册点云。另一种方法是使用车轮编码器或是视觉里程计提供的里程计信息来注册点云信息。但里程计是不断对运动积分,积分的过程中会不断累积误差,这就造成需要花费精力去抑制里程计的漂移。
论文作者提出了使用低漂移的两轴激光雷达来建图,激光的关键优势是对光线和物体纹理不敏感。激光的发展使激光雷达传感器的体积和成本不断下降,因此激光可以手持遍历环境或是固定在小型移动设备上。由于论文的目的是最小化里程计漂移所以不涉及回环检测的问题。
LOAM是怎么解决低漂移和低计算量这两个难题呢?我感觉是作者很好的利用了点云匹配和特征点提取。为什么这么说呢,我们知道匹配的问题分为scan-to-scan、scan-to-map、map-to-map。而三者各有特点,首先说scan-to-scan匹配:优点是计算量小速度快,缺点是误差累计大,长距离误差累计后地图就无法看了。map-to-map的匹配:优点是精度高,误差累计小;缺点就是计算量大,实时性压力大。scan-to-map的匹配居中。LOAM的优点就是很好地利用力匹配的优缺点,首先,虽然scan-to-scan匹配精度差,但是我们可以只是使用它做一个获取粗的里程计,用获取的结果去除匀速运动造成的运动畸变,由于scan-to-scan的计算量较小因此我们可以高频执行。其次,有了里程计校正后的点云数据,接下来我们就可以做一个map-to-map的匹配了。但是map-to-map存在计算量大的问题,因此 我们可以让其执行的频率降低。这样的高低频率结合就保证了计算量的同时又兼具了精度。不得不说论文作者思考很深啊!
再有减少计算量的方法就是特征点的选取,像以前的特征点提取方法:特征向量、直方图、旋转图片等,方法好不好,好但是计算量大。 作者提出了新颖的方法就是提取边缘点和平面点作为特征点来使用,这种提取的方法就很简单,计算量就减少了很多。
回到论文中,针对计算量问题,作者提出了高低搭配的方案,即执行高频的里程计但低精度的运动估计和执行低频的地图匹配来修正里程计。这两个方法结合就保证了实时性和精度两方面的要求。
未完待续。。。