LOAM_Livox小结

LOAM_Livox小结

  • 简介
    • 相关资源
    • 传感器
  • 论文小结
    • paperⅠ
    • paper Ⅱ
  • 源码

简介

LOAM_Livox是港大开源的关于大疆的传感器Livoxmid-40mid-100所写的建图框架,大致的思路和LOAM差不多,也是基于特征点提取角点和平面点,并通过Ceres优化来进行配准,里面有很多细节和LOAM不一样。

相关资源

源码 https://github.com/hku-mars/loam_livox
paper Ⅰ Loam livox: A fast, robust, high-precision LiDAR odometry and mapping package for LiDARs of small FoV

paper Ⅱ A fast, complete, point cloud based loop closure for LiDAR odometry and mapping

传感器

不得不说大疆还是牛X的,livox这波激光雷达一出,感觉激光雷达的步子一下子拉了一大步,把价格拉低了很多,而且非重复性扫描是真的厉害.随着固态激光雷达的发展(主要价格的降低),日后在工程上会越来越多用到激光SLAM的.
我用过mid-40, mid-100,horizon这三款,性能还是挺强的,唯一缺点的就是近处"看不见",就不太适合室内机器人的使用了,室外用用还是很好的.这三款还是horizon更好一些,它里面还有imu,而且同步功能和外参标定的工作已经都做好了,可以直接用的.

论文小结

paperⅠ

论文1主要写了Loam_livox的整体算法,它只使用了Livox的激光数据,并没有融合其他传感器;跑demo的程序,离线建图的效果还是不错的,但是在线建图的效果不是很好,而且demo的rosbag中的数据的运动均比较缓和,若出现运动幅度较大的情况下,由于激光的窄视角的原因,建图效果会很差。
下面总结一下:

  • 基于livox激光的特征点的提取,通过计算激光的距离、归一化距离、视角等提取good points,并且,还使用了intensity的数据,这块是可以用的。
  • 角点与全局的角点之间的匹配和平面点和全局的平面点的匹配的残差计算方式和LOAM一样。
  • Piecewise processing操作,分段处理的操作,将点云分段处理,把一帧数据分成三个子帧,并将三个子帧分别与全局地图进行匹配,可以消除运动模糊。
  • 在用Ceres优化残差时,使用了两步优化的方法,先优化一遍,计算残差,把最大的前20%的残差舍去后,再使用Ceres进行一遍优化,可以很好的去除外点,对运动物体也有很好的过滤作用。(这一步操作应该还是不相信ceres的LossFunction的剔除外点的能力)

paper Ⅱ

论文2主要就闭环优化这块进行分析,使用2D直方图的方法对点云进行描述,通过2D直方图来判断是否闭环。对于闭环优化部分,了解的不多,只知道视觉SLAM中(VINS_mono)中的策略,使用BRIEF描述子描述图像,再通过描述子之间的汉明距离来判断闭环,使用DBow2库的词袋模型。
该论文的创新点:

  • 先一帧点云投影到全局坐标上,并将点云栅格化,计算每个cell的均值和方差,为了计算方便,使用迭代的方式进行计算。
  • 通过将协方差矩阵的特征值分解,(λ_(1 )≥λ_2≥λ_3),特征值代表特征向量的拉伸情况。可将cell分为三类:平面栅格(λ_2比λ_3大很多)、线状栅格(λ_1比λ_2大很多)、没有特征栅格。对于平面栅格,其法向量就是特征方向;对于线状栅格,其线的方向就是特征方向。
  • 旋转不变性,将特征点云*R矩阵,使大多的特征方向和X轴对齐,次多和Y轴对齐。R的计算与平面特征有关(见论文)
  • LOAM_Livox小结_第1张图片
  • 计算两帧的相似性
    LOAM_Livox小结_第2张图片

源码

Loam-livox的代码大致过了一遍,总的感觉就是代码比较冗杂,和看LOAM代码差不都的感觉,变量非常多;而且注释很少,同时该框架也支持velodyne。代码写的还是挺高级的,得仔细看.印象挺深的就是线程池的使用;第一次看到这样的写法(也是我框架看的不多,还是自己比较菜),代码中一直维护了一个线程池,使用了std::future等多线程的模板类,每次进行匹配一帧就开一个线程,把线程丢入线程池中,若线程中的个数超过最大线程数,则将进行完的线程delete掉。
这份源码更新之前(只支持mid-40那版),我用自己采集的数据跑过这份代码,离线建图效果还是挺好的,应该优化 比较到位;在线跑的画,偏差比较大;主要没有融合IMU,会导致鲁棒性会差一点,毕竟激光的视角就这么窄了,剧烈运动的话会出现问题.如果想用来作为里程计的话,应该要融合一下imu会好一点.我觉得拿lio-mapping的框架和livox_loam的框架结合起来改一改,应该是可以的(我也还没试)

你可能感兴趣的:(LOAM_Livox小结)