SLAM文献之-LOAM: Lidar Odometry and Mapping in Real-time
LOAM(Lidar Odometry and Mapping in Real-time)是由Ji Zhang等人在 2014 年 IROS 发表的一篇经典 LiDAR SLAM 算法,其论文标题为:
“LOAM: Lidar Odometry and Mapping in Real-time”
J. Zhang and S. Singh, IROS 2014
它被认为是实时激光雷达 SLAM 的奠基性工作之一,广泛应用于无人车、机器人与三维重建等领域。
一、算法目标与基本思路
LOAM 的目标是利用激光雷达点云在不依赖IMU的条件下,实现高精度、实时的六自由度位姿估计与稠密地图构建。其关键思想是将 SLAM 问题分为两部分并行执行:
- Lidar Odometry(前端):快速估计当前帧相对于上一帧的位姿,频率高(如 10Hz~20Hz),追求实时性。
- Mapping(后端):将多个帧融合构图,频率较低(如 1Hz~2Hz),追求精度。
这种分层异步设计兼顾了实时性与精度。
二、算法流程概述
LOAM 算法流程如下:
+----------------+| Raw LiDAR || Point Cloud |+-------+--------+|+-------------+----------------+| |+------+-----+ +--------+--------+| Feature | | Feature || Extraction | | Extraction |+------+-----+ +--------+--------+| |+--------+--------+ +-------+--------+| Lidar Odometry | | Mapping || (high-rate) | | (low-rate) |+--------+--------+ +-------+--------+| |+--------------+---------------+|+--------v--------+| Global Pose |+----------------+
三、关键算法细节与公式推导
1. 特征提取(Feature Extraction)
特征分类:
- 边缘点(Edge / Sharp points)
- 面点(Planar / Flat points)
原理:使用局部曲率(Curvature)来识别点的几何性质。
设一个点为 p i \mathbf{p}_i pi,它的局部邻域为 N i \mathcal{N}_i Ni,则曲率定义为:
c i = 1 ∣ N i ∣ ∥ p i − 1 ∣ N i ∣ ∑ p j ∈ N i p j ∥ 2 c_i = \frac{1}{|\mathcal{N}_i|} \left\| \mathbf{p}_i - \frac{1}{|\mathcal{N}_i|} \sum_{\mathbf{p}_j \in \mathcal{N}_i} \mathbf{p}_j \right\|^2 ci=∣Ni∣1 pi−∣Ni∣1pj∈Ni∑pj 2
- 曲率较大:边缘点
- 曲率较小:平面点
并按照曲率排序,筛选出前 N 个为“边缘强特征”,最后 M 个为“平面强特征”。
2. 前端:Lidar Odometry(LO)
目标:估计相邻帧之间的相对位姿 T k , k − 1 ∈ S E ( 3 ) \mathbf{T}_{k,k-1} \in SE(3) Tk,k−1∈SE(3)。
匹配方式:
-
边缘点 ↔ 直线
在上一帧中找两个最近邻边缘点,构成一条线段,用当前帧的边缘点去拟合直线最短距离。 -
平面点 ↔ 平面
在上一帧中找三个共面点,用当前帧的平面点匹配平面最短距离。
误差模型:
- 对于一个边缘点 p \mathbf{p} p,其对应线段由点 l 1 , l 2 \mathbf{l}_1, \mathbf{l}_2 l1,l2 构成,残差为点到线的距离:
r edge = ∥ ( p ′ − l 1 ) × ( p ′ − l 2 ) ∥ ∥ l 1 − l 2 ∥ r_{\text{edge}} = \frac{\| (\mathbf{p}' - \mathbf{l}_1) \times (\mathbf{p}' - \mathbf{l}_2) \|}{\| \mathbf{l}_1 - \mathbf{l}_2 \|} redge=∥l1−l2∥∥(p′−l1)×(p′−l2)∥
其中 p ′ = R p + t \mathbf{p}' = \mathbf{R} \mathbf{p} + \mathbf{t} p′=Rp+t
- 对于一个平面点 q \mathbf{q} q,其对应平面由三点 p 1 , p 2 , p 3 \mathbf{p}_1, \mathbf{p}_2, \mathbf{p}_3 p1,p2,p3 构成,法向量为:
n = ( p 2 − p 1 ) × ( p 3 − p 1 ) \mathbf{n} = (\mathbf{p}_2 - \mathbf{p}_1) \times (\mathbf{p}_3 - \mathbf{p}_1) n=(p2−p1)×(p3−p1)
归一化后,点到面的残差为:
r plane = n ⊤ ( R q + t − p 1 ) r_{\text{plane}} = \mathbf{n}^\top (\mathbf{R} \mathbf{q} + \mathbf{t} - \mathbf{p}_1) rplane=n⊤(Rq+t−p1)
优化:
组合残差,使用非线性优化(如 Gauss-Newton)求解 ( R , t ) (\mathbf{R}, \mathbf{t}) (R,t)。
3. 后端:Mapping
后端以较低频率运行,但使用局部地图(局部体素网格)作为目标,进一步精炼估计。
- 使用当前帧的特征点与局部地图中的特征点做 ICP 类似的匹配(仍然是点到线/点到面),
- 优化当前帧相对于全局的位姿 T w , k ∈ S E ( 3 ) \mathbf{T}_{w,k} \in SE(3) Tw,k∈SE(3),提高精度。
4. 地图管理
- 地图以滑动窗口方式维护,只保留固定范围内的点云。
- 地图点云使用 Voxel Grid 下采样,提高效率。
四、主要创新点总结
-
将 LiDAR SLAM 拆分为两个异步模块(Odometry + Mapping)
- 提高实时性与鲁棒性。
-
特征点筛选机制:基于曲率挑选边缘与平面点
- 提升匹配鲁棒性和精度,避免对全部点使用 ICP。
-
基于几何残差的快速位姿估计
- 点到直线、点到平面残差优化,效率高于传统点到点 ICP。
-
滑动局部地图管理策略
- 控制内存和计算复杂度,便于大规模运行。
-
去 IMU 化设计(不依赖IMU)
- 仅使用 LiDAR 实现高精度姿态估计,是早期纯 LiDAR-SLAM 成功代表。
五、与 LOAM 相关的改进版本(如 LeGO-LOAM、LIO-SAM)对比分析
以下是 LOAM 及其代表性改进版本 LeGO-LOAM 和 LIO-SAM 的对比分析,从系统结构、使用传感器、特征提取、地图构建、后端优化等方面进行全面总结,便于理解三者在 SLAM 技术发展中的演进关系。
1、基本信息对比总览
特性 | LOAM (2014) | LeGO-LOAM (2018) | LIO-SAM (2020) |
---|---|---|---|
输入 | LiDAR | LiDAR + IMU(可选) | LiDAR + IMU + GNSS(可选) |
特征提取 | 边缘点、平面点 | 分段提取,平整地面点优先 | 同 LOAM,但与因子图联合使用 |
地形适应 | 普通场景 | 地面平整场景(如机器人) | 通用场景,支持6D运动 |
后端优化 | 线性 ICP 式优化 | 回环检测 + 基于姿态图局部优化 | GTSAM 因子图优化(IMU预积分 + 回环 + GPS) |
里程计精度 | 中 | 中-高 | 高(IMU 强辅助) |
实时性 | 高 | 高 | 高(但依赖更强算力) |
是否闭环 | 否 | 支持(简单距离检测) | 支持(Scan Context + 因子图闭环优化) |
实现语言 | C++(原始未开源) | C++ + ROS(开源) | C++ + ROS2 + GTSAM(开源) |
发布平台 | 无正式版本 | ROS 机器人平台 | ROS/ROS2,适用于多传感器系统 |
2、核心改进点详解对比
1️.LOAM(Lidar Odometry and Mapping)
优点:
- 实时性好:前后端分离设计。
- 创新特征提取:曲率+几何分类用于高效配准。
- 架构简单,适合基础教学和入门研究。
缺点:
- 不支持闭环检测
- 不处理 IMU、GPS 数据
- 点云特征匹配鲁棒性一般,易受环境影响。
2️.LeGO-LOAM(Lightweight and Ground-Optimized LOAM)
论文:“LeGO-LOAM: Lightweight and Ground-Optimized Lidar Odometry and Mapping on Variable Terrain”
IEEE IROS 2018
创新点:
- 分段特征提取:将点云分成若干段(垂直角度通道),独立提取特征点。
- 利用地面平面性:优先提取地面点(低曲率平面点)进行配准。
- 支持低速机器人:优化移动地面场景(如无人车、机器人)。
架构改进:
- IMU 使用可选:增强了旋转估计(IMU 与 LiDAR 融合)
- 回环检测:加入简单的回环闭环处理机制(基于距离和位姿阈值)
缺点:
- 地面依赖较强,不适用于空中/无地形特征环境。
- 后端优化仍较为粗糙(无因子图建模)。
3️.LIO-SAM(Lidar-Inertial Odometry via Smoothing and Mapping)
论文:“LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping”
IEEE/RSJ IROS 2020
创新点:
- 紧耦合 Lidar-Inertial 融合:IMU 预积分 + LiDAR 特征残差共同构建因子图。
- 使用 GTSAM:滑动窗口因子图优化,提高全局一致性。
- 支持 GNSS + 回环:将 GPS、回环信息作为额外因子约束,长期建图精度高。
架构组成:
+------------------+| IMU Pre-integ |+--------+---------+|+-------------v-------------+| Factor Graph || (GTSAM: LiDAR + IMU + GPS)|+-------------+-------------+|+----------v---------+| Pose Optimization |+----------+--------+|+---------v---------+| Local Map / Poses |+------------------+
模块特性:
- 特征提取和 LOAM 类似(边缘/平面点)
- 将每一帧 LiDAR 点云与滑窗内历史帧构建约束
- IMU 作为强力初值和约束项,有效提升估计稳定性
优势:
- 精度大幅提升,适用于无人车等动态场景
- 可扩展性强(GNSS、回环、视觉)
3、对比实验结果(摘自原论文)
方法 | KITTI Pose RMSE(m) | 闭环支持 | IMU 融合 | 地面优化 | 后端优化 |
---|---|---|---|---|---|
LOAM | 0.78 | 否 | 否 | 否 | 点云配准 |
LeGO-LOAM | 0.67 | 有 | 可选 | 是 | 点云配准 + 闭环 |
LIO-SAM | 0.26 | 有 | 是 | 否 | 滑窗因子图优化 |
4、总结建议
应用场景 | 推荐方法 | 理由 |
---|---|---|
教学/原理研究 | LOAM | 结构清晰,便于学习 |
地面机器人导航 | LeGO-LOAM | 对地面优化,轻量高效 |
高精度无人车/自动驾驶 | LIO-SAM | 精度高,融合能力强 |
六 、总结
项目 | 描述 |
---|---|
输入 | 激光雷达点云(实时) |
输出 | 实时 6D 位姿 + 稠密地图 |
特征点类型 | 边缘点、平面点(基于曲率) |
匹配类型 | 点到线、点到面 |
前端频率 | 高(~10Hz) |
后端频率 | 低(~1Hz) |
优化方法 | 非线性最小二乘,6D pose |
地图管理 | 滑动窗口 + 下采样 |
创新点 | 双线程结构、几何特征提取与优化、无 IMU 依赖 |
七 、相关资料
1. 原文下载地址
官方论文链接(PDF)可以通过 CMU 或 RSS 官网访问:
- https://www.roboticsproceedings.org/rss10/p08.pdf
2. 官方开源代码(非官方原始作者)
原作者未正式开源原版 LOAM,但以下是一个高度还原论文的社区版本:
-
开源项目名:loam_velodyne
-
作者:laboshinl(GitHub 用户)
-
地址:https://github.com/laboshinl/loam_velodyne
-
说明:
- 基于 ROS 实现;
- 支持 Velodyne 16/32/64 雷达;
- 特征提取、前后端分离、实时建图均完整实现;
- 已被广泛引用和扩展(如 LeGO-LOAM 就基于它)。
衍生与改进开源版本
名称 | 简介 | 地址 |
---|---|---|
LeGO-LOAM | 针对地面车辆优化的轻量版,加入地面约束与回环检测 | https://github.com/RobustFieldAutonomyLab/LeGO-LOAM |
A-LOAM | 精简且维护良好的 LOAM 实现,方便扩展 | https://github.com/HKUST-Aerial-Robotics/A-LOAM |
LIO-SAM | LOAM + IMU + GTSAM(因子图优化) | https://github.com/TixiaoShan/LIO-SAM |