激光雷达分单线和多线这两大类,针对这两类Lidar所使用的算法也不尽相同。 首先单线雷达一般应用在平面运动场景,多线雷达则可以应用于三维运动场景。
2D Lidar SLAM
一般将使用单线雷达建构二维地图的SLAM算法,称为2D Lidar SLAM。大家熟知的2D Lidar SLAM算法有:gmapping, hector, karto, cartographer。通常数据和运动都限制在2D平面内且运动平面与激光扫描平面平行。
gmapping[1]
基于粒子滤波的2D激光雷达SLAM,构建二维栅格地图。融合里程计信息,没有回环检测。 优点是在小场景中,计算量小,速度较快。 缺点是每个粒子都携带一幅地图,无法应对大场景(内存和计算量巨大);如果里程不准或标定参数不准,在长回廊等环境中容易把图建歪。
hector[2]
hector SLAM是完全基于scan-matching的,使用迭代优化的方法来求匹配的最佳位置,为避免陷入局部极值,也采用多分辨率的地图匹配。 由于完全依赖于scan matching,要求雷达的测量精度较高、角度范围大,扫描速度较高(或移动速度慢)。噪声多、边角特征点少的场景就很容易失败。 原文所提出方法的特点还在于,加入IMU,使用EKF估计整体的6DoF位姿,并根据roll, pitch角将激光扫描数据投影到XY平面,因而支持激光雷达有一定程度的倾斜,比如手持或机器人运动在不是很平整的地面上。
karto[3][4]
karto是基于scan-matching,回环检测和图优化SLAM算法,采用SPA(Sparse Pose Adjustment)进行优化。 关于karto 和 cartographer 的比较,可以看看这里:https://blog.csdn.net/hzy925/article/details/78857241
cartographer[5][6]
cartographer是谷歌开源的激光SLAM框架,主要特点在于: 1.引入submap,scan to submap matching,新到的一帧数据与最近的submap匹配,放到最优位置上。如果不再有新的scan更新到最近的submap,再封存该submap,再去创建新的submap。 2.回环检测和优化。利用submap和当前scan作回环检测,如果当前scan与已经创建的submap在距离上足够近,则进行回环检测。检测到回环之后用ceres进行优化,调整submap之间的相对位姿。为了加快回环检测,采用分枝定界法。 cartographer也可以应用于3D Lidar SLAM(我还没试过),不过最出名的还是她在2D Lidar SLAM方面的出色表现,毕竟论文标题就是“Real-time loop closure in 2D LIDAR SLAM”。
3D Lidar SLAM
3D Lidar SLAM主要是针对多线雷达的SLAM算法。比较出名的有LOAM, LeGO-LOAM, LOAM-livox等。
LOAM[7]
LOAM是针对多线激光雷达的SLAM算法,主要特点在于:1) 前端抽取平面点和边缘点,然后利用scan-to-scan的匹配来计算帧间位姿,也就形成了里程计;2) 由估计的帧间运动,对scan中的每一个点进行运动补偿;3) 生成map时,利用里程计的信息作为submap-to-map的初始估计,再在利用submap和map之间的匹配做一次优化。 LOAM提出的年代较早(2014),还没有加入回环优化。 关于LOAM的详细解析,可以参考这篇专栏文章: https://zhuanlan.zhihu.com/p/111388877ALOAM[8]是Advanced implementation of LOAM,使用Eigen和ceres-solver简化代码实现。
LeGO-LOAM[9]
LeGO-LOAM在LOAM的基础上主要改进:1) 地面点分割,点云聚类去噪;2)添加了ICP回环检测和gtsam优化。 关于LeGO-LOAM的详细解析,可以查看这个专栏文章: https://zhuanlan.zhihu.com/p/115986186
LOAM_livox[10]
大疆2019年公布的面向小FOV Lidar的LOAM算法。相比LOAM,做了一些改动。算法的特点: 1.添加策略提取更鲁棒的特征点:a) 忽略视角边缘有畸变的区域; b) 剔除反射强度过大或过小的点 ; c) 剔除射线方向与所在平台夹角过小的点; d) 部分被遮挡的点 2.与LOAM一样,有运动补偿 3.里程计中剔除相对位姿解算后匹配度不高的点(比如运动物体)之后,再优化一次求解相对位姿。
视觉和Lidar 融合的SLAM算法
VLOAM[11]
VLOAM 是视觉和激光雷达紧耦合的方案。
视觉里程计部分,图像帧之间的相对位姿估计以60Hz运行。先抽取和匹配图像特征,雷达点云融合成深度地图,再将深度地图与视觉特征点关联起来,以帮助计算两帧之间的相对位姿。 雷达里程计部分,将1s内的数据作为一个完整扫描 sweep。Sweep-to-Sweep refinement模块优化求解两个sweep之间的相对运动并去除运动畸变,Sweep-to-Map Registration模块将局部点云注册到已经构建的地图上面。 Transform Integration模块则结合两个里程计,以视觉里程计的高帧率输出位姿估计。 待补充 。。。
方法二
2D:效果最好的应当是Google的Cartographer,此外还有基于粒子滤波的gmapping,基于优化的hector slam等等。 3D领域: 经典的LOAM(A-LOAM),用特征点:planar points & edge points 来进行帧间匹配,无回环 LeGO-LOAM ICP 的方法加入了回环,用于减小漂移,一致性更强 G-LOAM 引入 GPS 作为新增的位姿约束,用 Levenberg-Marquardt 方法优化位姿图 LOAM-Livox (HKU Mars Lab)一套可用于固态激光雷达的SLAM算法 Fast-LIO (HKU Mars Lab),一套可用于无人机的基于EKF的雷达惯导里程计
审核编辑 :李倩
全部0条评论
快来发表一下你的评论吧 !