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 问题分为两部分并行执行

  1. Lidar Odometry(前端):快速估计当前帧相对于上一帧的位姿,频率高(如 10Hz~20Hz),追求实时性。
  2. 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 下采样,提高效率。

四、主要创新点总结

  1. 将 LiDAR SLAM 拆分为两个异步模块(Odometry + Mapping)

    • 提高实时性与鲁棒性。
  2. 特征点筛选机制:基于曲率挑选边缘与平面点

    • 提升匹配鲁棒性和精度,避免对全部点使用 ICP。
  3. 基于几何残差的快速位姿估计

    • 点到直线、点到平面残差优化,效率高于传统点到点 ICP。
  4. 滑动局部地图管理策略

    • 控制内存和计算复杂度,便于大规模运行。
  5. 去 IMU 化设计(不依赖IMU)

    • 仅使用 LiDAR 实现高精度姿态估计,是早期纯 LiDAR-SLAM 成功代表。

五、与 LOAM 相关的改进版本(如 LeGO-LOAM、LIO-SAM)对比分析

以下是 LOAM 及其代表性改进版本 LeGO-LOAMLIO-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 官网访问:


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
相关推荐
开开心心就好8 天前
高效Excel合并拆分软件
开发语言·javascript·c#·ocr·排序算法·excel·最小二乘法
啊阿狸不会拉杆21 天前
人工智能数学基础实验(三):最小二乘法-数值计算
人工智能·算法·最小二乘法
倒霉蛋小马1 个月前
最小二乘法拟合直线,用线性回归法、梯度下降法实现
算法·最小二乘法·直线
灏瀚星空1 个月前
量化交易之数学与统计学基础2.3——线性代数与矩阵运算 | 线性方程组
笔记·python·信息可视化·数据挖掘·回归·开源·最小二乘法
点云SLAM3 个月前
C++ 平面拟合原理和最小法实现示例
c++·线性代数·平面·最小二乘法·平面拟合·pca算法
Mr.Winter`5 个月前
轨迹优化 | 基于ESDF的非线性最小二乘法路径平滑(附ROS C++仿真)
人工智能·科技·机器人·自动驾驶·ros·最小二乘法·ros2
胖哥真不错6 个月前
Python实现应用最小二乘法融合SVM-LSTM回归模型电力负荷预测项目实战
python·支持向量机·项目实战·最小二乘法·lstm回归模型·电力负荷预测
、南城不南 ╯6 个月前
最小二乘法拟合出二阶响应面近似模型
算法·最小二乘法
Adunn7 个月前
算法基础 - 最小二乘法(线性拟合)
c++·人工智能·算法·机器学习·自动驾驶·最小二乘法