LiDAR SLAM
其主要思想是通过两个算法:一个高频激光里程计进行低精度的运动估计,即使用激光雷达做里程计计算两次扫描之间的位姿变换;另一个是执行低频但是高精度的建图与校正里程计,利用多次扫描的结果构建地图,细化位姿轨迹。
LOAM
论文:Lidar Odometry and Mapping in Real-time(RSS2014) Ji Zhang
LOAM使用了作者定义的特征点提取和匹配方法,主要去边角点和平面点。LOAM use a new defined feature system (corner and flat point), for the detail see its article.
LOAM假设每一次激光扫描过程中是匀速运动(工程应用时要注意实际载体运动特性),并且用这个假设修正激光雷达数据的运动扭曲问题。在VLOAM中则是更进一步,使用视觉的里程计估计每一个扫描数据的运动。LOAM suppose linear motion within the scan swap (VLOAM further uses visual odometry to estimate it), and undistort the lidar points.
LOAM也有一个低频率调用的全局优化线程。
LOAM一文中提出,可以通过IMU进行辅助。所谓“辅助”就是在激光雷达两次扫描之间,利用IMU得到较为准确的变化轨迹,从而进行点云畸变的去除,从而不需要靠上次扫描获得的运动参数插值对这次的畸变进行去除,能够提升精度。但IMU的数据并没有参与到优化当中,所以IMU在LOAM算法中只起到了辅助作用
A-LOAM
代码:https://github.com/HKUST-Aerial-Robotics/A-LOAM,香港科技大学秦通博士
A-LOAM代码通过ROS运行。在LOAM原有代码基础上,使用Ceres-solver和Eigen库对其进行重构和优化,在保持原有算法原理的基础上,使其可读性大大增加。
主要区别:
1.LOAM中提供了使用IMU信息修正的接口, A-LOAM中省略了这一块。
2.A-LOAM中缺少了对提取到的特征点的筛选过程,具体可以参见LOAM的代码部分(对一些不好的边角点做了筛选)。
3.LOAM中作者解析地求出了雅各比的表达式(其中使用了一些小技巧统一了不同特征点的残差函数的导数表达),A-LOAM则是简单地使用了ceres提供的自动求导工具(这样可以节省开发的时间,得到了也是准确的解,但是运算时间会稍稍长些,具体可以参见ceres的官方文档)。
LeGO-LOAM
LeGO-LOAM:LeGO-LOAM: Lightweight and Ground-Optimized Lidar Odometry and Mapping on Variable Terrain .Tixiao Shan and B. Englot,
IEEE/RSJ International Conference on Intelligent Robots and Systems, 2018.
LeGO-LOAM 是Tixiao Shan在原有LOAM基础上,做了一些改进包括:1、对前端里程计的前量化改造,提取地面点更适配水平安装的LiDAR; 2、使用SLAM中的Keyframe概念以及回环检测位姿图优化的方式对后端进行重构。
从文章名称,可以看出,LeGO-LOAM相对于LOAM的提升主要在于轻量级和地面优化。接下来,我将从论文的整体框架入手,详解介绍LeGO-LOAM和LOAM的区别和联系。
核心四个部分:分割,特征提取,雷达里程计,雷达建图。
分割模块通过对一帧的点云重投影到图像中,进行地面分割,非地面点被分割出来;
特征提取模块基于分割后的点使用和LOAM一样的方法提取边缘点和平面点;
雷达里程计模块基于提取的特征点构建约束关系,使用两次LM优化,得到姿态变换矩阵;
雷达建图模块将得到的特征点进一步处理,构建 的约束关系,构建全局地图。
GTSAM
GTSAM(Georgia Tech Smoothing and Mapping)是基于因子图的C++库,它由佐治亚理工学院的教授和学生们创造。它可以解决slam和sfm的问题,当然它也可以解决简单或者更加复杂的估计问题。
因子图是一种图模型,非常适合于复杂的估计问题的建模,比如SLAM或者是SFM( Structure from Motion)。
因子图的三个基本组成部分:
因子图(factor graph):它属于一个二分图,由因子和变量连接而成。
变量(variables):估计问题中的未知随机变量。
因子(factors):非线性因子表示变量之间的约束,在slam中,可能为landmark或者odometry的读数。
LIO-Mapping
LIO-Mapping:Tightly Coupled 3D Lidar Inertial Odometry and Mapping,H. Ye, Y. Chen, and M. Liu,IEEE International Conference on Robotics and Automation, pp. 3144-3150, 2019.
主要是借鉴LOAM和VINS-Mono的思想进行联合状态估计,工程层面和VINS-Mono一样,只不过是前端视觉部分换成了Lidar的前端进行特征关联,这是第一篇开源的Lidar-IMU紧耦合SLAM算法。
见《https://blog.csdn.net/weixin_44580210/article/details/120541054》
LIO-SAM
LIO-SAM: *Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping.Tixiao Shan, Brendan Englot, Drew Meyers, Wei Wang, Carlo Ratti, and Daniela Rus.*2020
LIO-SAM 是Tixiao Shan在LeGO-LOAM的扩展,添加了IMU预积分因子和GPS因子:前端使用紧耦合的IMU融合方式,替代原有的帧间里程计,使得前端更轻量;后端沿用LeGO-LOAM,在此基础上融入了GPS观测。同时前端后端相互耦合,提高系统精度。
LIO-SAM中的扫描匹配优化部分代码是直接套用LOAM,该部分代码的最大特点是没有利用任何开源的优化库(ceres-solver, g2o, gtsam…)进行残差方程的优化,而是只基于Eigen库构造了高斯牛顿迭代算法对残差方程进行优化,获得最小二乘解.但是,为了提升对后端残差方程优化的理解,抛弃开源优化库只利用Eigen库构造优化过程是一个非常推崇的做法.
该算法是一个紧耦合的雷达惯导里程计(Tightly-coupled Lidar Inertial Odometry),借助的手段就是利用GT-SAM库中的方法。提出了一个利用GT-SAM的紧耦合激光雷达惯导里程计的框架。实现了高精度、实时的移动机器人的轨迹估计和建图。
框架的构成:
通过相对观测(两帧间的估计)及绝对观测(GPS),还包括回环检测,构成因子图。
这个框架必须要有激光雷达和IMU。可以没有回环和GPS。
IMU的作用:
用IMU的数据对激光雷达点云作畸变矫正为激光雷达里程计的优化提供一个初值
系统对IMU的作用:
获得的雷达里程计会用来估计IMU的零偏(bias)
点云匹配建图方式:
为了保障性能和实时,并不是将激光雷达一帧数据和全局地图进行匹配,而是和经过边缘化的历史地图进行匹配;这种当前帧和局部地图配置而不是全局地图的做法,可以显著提高系统的实时性。
局部地图构成:
通过选取关键帧的方式,利用滑窗的方法,将当前的关键帧和历史尺度和大小一致的子关键帧集合配准。
cartographer
谷歌于2016年开源了Cartographer的SLAM库。Cartographer可以使用2D或3D激光雷达来进行SLAM(同时定位与地图构建),用Grid(2D/3D)的形式建地图;局部匹配直接建模成一个非线性优化问题,通过IMU(惯性测量单元陀螺仪)获得比较靠谱的初值,再用Ceres库进行求解;后端用Graph来优化,用分支定界算法来加速;2D和3D的问题统一在一个框架下解决。
cartographer主要解决室内问题,LOAM室内外都可以,但是没有回环检测。Cartographer的3D部分,更像是2D的扩展:即用2D的思路去做3D的事情。而LOAM则主要解决3D问题,其核心思路难以解决2D问题。
Cartographer基本上实现了低成本雷达,低计算资源消耗,实时优化,精度尚可。