LOAM 的全称是 Lidar Odometry and Mapping(激光雷达里程计与建图),是由Ji Zhang博士于2014年提出的一种开创性的、仅使用3D激光雷达进行实时里程计估计和地图构建的算法。
在LOAM出现之前,激光SLAM要么计算量巨大难以实时,要么精度不足,LOAM的核心贡献在于它创造性地将复杂的SLAM问题解耦为两个并行的优化线程:一个高频低精度的里程计线程和一个低频高精度的建图线程。
核心思想:解耦与分治 将6自由度(6-DoF)的位姿估计这一复杂问题,分解为两个更简单的问题:
这种设计巧妙地平衡了计算效率和估计精度。
关键流程 LOAM的工作流程主要分为四个部分:
LOAM不会使用原始激光点云中的所有点(数据量太大,且大部分是冗余的),而是提取具有代表性的特征点,并将特征点分为两类:
通过计算每个点与其相邻点集合的曲率(粗糙度)来筛选出曲率大的点作为边缘点,曲率小的点作为平面点。同时,会剔除不可靠的点(如被遮挡的边缘点或近似平行的平面点)。
目的: 在两个连续的激光扫描(比如S_k和S_{k+1})之间,以高频(例如10Hz)计算激光雷达的运动变换(位姿T_{k+1})。
**目的:**以较低频率(例如1Hz)将特征点注册到全局地图中,并利用更丰富的地图信息对里程计线程估计出的位姿进行精细化校正,消除累积误差。
由于激光雷达在扫描过程中本身是运动的,一帧点云中的不同点是在不同位姿下采集的,这会导致点云“畸变”,LOAM通过在特征关联和优化过程中,线性插值相邻位姿变换的方式来对点云进行运动畸变校正,这是其实现高精度的重要一环。
原始的LOAM算法是用C++实现的,但代码风格较为学术化,不易理解和移植。因此,社区中出现了许多基于LOAM思想改进、优化和重写的流行方案。
A-LOAM (Advanced LOAM)这可以说是最著名、最广泛使用的LOAM学习版本,由香港大学Shen Shanjie博士开源,它并不是一个算法上的重大创新,而是一个代码层面的重大优化和重构。
适用场景:学术研究、教育学习、快速原型开发。几乎所有人学习LOAM都是从A-LOAM入手。
LeGO-LOAM(Lightweight and Ground-Optimized LOAM) 由Tixiao Shan博士(也是LIO-SAM的作者)提出,专门为地面车辆(如UGV)设计。
适用场景:室外地面机器人,尤其是在有明显地面结构的场景中表现优异。
LIO-SAM (Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping),同样是Tixiao Shan博士的工作,它将LOAM推向了新的高度。
适用场景:对精度和鲁棒性要求极高的应用,如无人机、自动驾驶汽车。需要高质量的IMU。
F-LOAM (Fast LOAM)旨在进一步提升LOAM的计算效率。
适用场景:计算资源受限的平台(如嵌入式设备、车载计算单元),需要更高的运行频率。
这是专门为大疆的Livox品牌研制的非重复扫描式固态激光雷达(如Mid-40, Horizon)适配的版本。
适用场景:使用Livox系列雷达的所有项目。
方案名称 | 核心特点 | 优势 | 适用场景 |
|---|---|---|---|
原始LOAM | 开创性工作,解耦设计 | 里程碑意义 | 学术研究,历史了解 |
A-LOAM | 代码重构,依赖优化库 | 易于学习,代码清晰 | 入门学习,快速验证 |
LeGO-LOAM | 轻量化,地面优化,闭环 | 计算量小,地面车辆鲁棒 | 室外地面机器人 |
LIO-SAM | 紧耦合IMU,因子图优化 | 精度极高,多传感器融合 | 高性能无人机、自动驾驶 |
F-LOAM | 无特征提取,高效匹配 | 计算速度快 | 资源受限平台 |
LOAM-Livox | 专为Livox雷达适配 | 解决固态雷达兼容性问题 | 使用Livox雷达的项目 |
选择建议:
学生或研究者理解原理:从 A-LOAM 开始读代码 机器人是地面车辆,且计算资源一般:优先尝试 LeGO-LOAM。 有高质量的IMU,并且追求极致精度:推荐LIO-SAM 计算平台性能较弱:可以尝试 F-LOAM。 使用的是Livox雷达:直接使用 LOAM-Livox 或其衍生版本。