
3D SLAM 的核心难点不在算法理论本身,而在实时性约束下的点云处理效率和多传感器紧耦合的状态估计。
一、3D LiDAR SLAM 与 2D 的本质区别
2D SLAM 把世界压成平面,3D LiDAR SLAM 处理的是完整的 6-DOF(三平移+三旋转)位姿估计和三维点云地图构建。核心挑战急剧升级:
| 维度 | 2D SLAM | 3D LiDAR SLAM |
|---|---|---|
| 状态空间 | 3-DOF (x, y, θ) | 6-DOF (x, y, z, roll, pitch, yaw) |
| 数据量 | 单线,~1K 点/帧 | 多线,10K100K 点/帧 |
| 运动畸变 | 几乎可忽略(扫描快) | 严重------机械雷达一圈 ~100ms,期间车辆在动 |
| 地图表示 | 2D 栅格概率图 | 3D 点云 / 体素 / Surfel |
| 计算瓶颈 | 粒子滤波重采样 | kNN 搜索 + 非线性优化 |
| 典型场景 | 室内扫地机/AGV | 自动驾驶、无人机、室外大场景 |
3D SLAM 最核心的工程问题可以浓缩成一句话:怎么在嵌入式算力上,对海量点云做实时配准,同时抑制累积漂移。
二、系统架构:四大核心模块
和 2D 一样,3D SLAM 也分前端-后端框架,但模块复杂度完全不同:
- 前端------点云配准(Scan Matching)
3D 点云配准是整个系统的计算热点,主要分三大流派:
(a) 基于 ICP 及其变体
经典 ICP 通过最小化点对距离求刚体变换,但计算量大、易陷局部最优。3D SLAM 中常用的改进版本:
| 变体 | 核心改进 | 特点 |
|---|---|---|
| PP-ICP(点到面) | 点到平面距离 | 二阶收敛,比点到点快 |
| PL-ICP(点到线) | 点到线距离 | 适合结构化场景 |
| GICP(广义ICP) | 概率框架统一 ICP + PL-ICP | 全局优化能力强 |
| NICP | 加入法向量和曲率 | 鲁棒性提升 |
| IMLS-ICP | 隐式移动最小二乘表面建模 | 处理非刚性配准 |
ICP 类方法精度高但计算慢,且强依赖初始位姿------这直接催生了特征法和滤波法的出现。
(b) 基于 NDT(正态分布变换)
将点云划分为体素网格,用高斯分布描述每个体素内的点分布,把"找最近点"问题变成"最大化概率密度"问题:
• 优势:速度快、稳定性好、无需建立点对应关系
• 劣势:精度略低于 ICP,体素分辨率影响精度
• 典型应用:自动驾驶地图匹配定位(如 Autoware 的 NDT 定位模块)
© 基于几何特征(LOAM 系核心)
LOAM 的核心创新:不配准全部点云,只提取少量高质量特征点
• 边缘点(edge/sharp points):局部曲率大,约束旋转
• 平面点(planar/flat points):局部曲率小,约束平移
计算每个点在其邻域(前后各5个点)的曲率,按曲率排序,选取最大的若干个作为边缘点、最小的若干个作为平面点。用点到线距离(边缘点)和点到面距离(平面点)构建残差,通过高斯-牛顿或 LM 优化求解。
- 运动畸变补偿(去畸变)
这是 3D SLAM 比 2D SLAM 多出来的关键环节。机械式激光雷达一圈扫描需要 ~100ms,期间车辆在运动,一帧点云里每个点对应的车辆位姿其实都不一样------点云会"扭曲"。
补偿方法:
• 匀速模型(LOAM 原始方案):假设匀速运动,线性插值
• IMU 预积分(LIO-SAM/FAST-LIO):利用高频 IMU 数据逐点补偿,精度更高
• 反向传播(FAST-LIO2):从最后一个 IMU 状态反向积分到每个点的时间戳
这直接解释了为什么后来几乎所有方案都引入了 IMU。
- 后端------位姿图优化 / 滤波
图优化路线(LIO-SAM 为代表)
• 构建 Pose Graph:节点=位姿,边=约束
• 约束来源:激光里程计、IMU 预积分、回环检测、GPS
• 用 g2o / GTSAM / Ceres 求解非线性最小二乘
• 优势:全局一致性强,可融合多源约束
• 劣势:计算开销大,嵌入式平台可能掉帧
滤波路线(FAST-LIO 为代表)
• 误差状态迭代卡尔曼滤波(ES-IEKF)
• IMU 状态和激光观测在同一个滤波器中联合估计
• 优势:计算效率高,硬实时,适合嵌入式平台
• 劣势:无原生回环检测,长时间漂移大于图优化方案
- 回环检测
3D 回环检测比 2D 更难------不能简单用栅格地图相关性搜索。主流方案:
• Scan Context:将点云投影为极坐标距离图,生成全局描述子做检索
• LiDAR BoW:类似视觉词袋,用点云局部特征构建字典
• 基于距离的关键帧匹配:最简单,当前位姿与历史关键帧距离小于阈值时触发 ICP 验证
回环确认后,将新约束加入 Pose Graph 做全局优化,修正整条轨迹。
三、算法演进谱系:从 LOAM 到 FAST-LIO2
LOAM (2014, CMU, Ji Zhang) ─── 3D激光SLAM奠基之作
│
├── A-LOAM (2019, 港科大) ──── Ceres重构,代码清晰,入门首选
│ └── F-LOAM ──────────── 去掉特征提取,进一步加速
│
├── LeGO-LOAM (2018, Tixiao Shan) ── 地面分割+双阶段解耦优化+轻量回环
│ └── LIO-SAM (2020) ──────── 因子图+IMU预积分+GPS+回环,工业级
│ └── LVI-SAM (2021) ── +视觉惯性系统,三重冗余
│
├── LOAM-Livox ──────────── 适配 Livox 固态雷达(非重复扫描)
│
└── FAST-LIO (2021, 港大)
├── FAST-LIO2 (2022) ──── ikd-Tree + 直接法原始点云配准
└── FAST-LIVO/2 (2022-24) ─ +视觉紧耦合
└── Faster-LIO ──── iVox 增量体素哈希,极致实时
核心算法横向对比
| 维度 | LOAM | LeGO-LOAM | LIO-SAM | FAST-LIO2 | LVI-SAM |
|---|---|---|---|---|---|
| 核心方法 | 特征提取+双线程 | 地面优化+解耦 | 因子图+IMU预积分 | IEKF+ikd-Tree直接法 | 因子图+视觉惯性 |
| 传感器 | 纯LiDAR | LiDAR+IMU(松耦合) | LiDAR+IMU+GPS | LiDAR+IMU | LiDAR+相机+IMU+GPS |
| 耦合方式 | 无 | 松耦合 | 紧耦合 | 紧耦合 | 紧耦合 |
| 回环检测 | 无 | 轻量级 | 成熟(SC) | 无 | 成熟 |
| 实时性 | 中(10Hz) | 高 | 中(易掉帧) | 极高(100Hz+) | 低 |
| ARM部署 | 可行 | 适合 | 吃力 | 适合 | 不适合 |
| 大场景漂移 | 严重 | 中等 | 小(回环修正) | 中等 | 最小 |
| 退化环境 | 容易发散 | 一般 | 有风险 | 鲁棒 | 最鲁棒 |
| 固态雷达 | 不支持 | 不支持 | 不支持 | 原生支持 | 支持 |
隧道实测对比(RMSE,越小越好)
| 算法 | RMSE (米) | 说明 |
|---|---|---|
| FAST-LIO2 | 3.40 | 直接法不依赖特征提取,低特征场景表现最好 |
| HDL-Graph SLAM | 6.12 | 依赖特征,隧道特征少时退化 |
| SC-LIO-SAM | 8.62 | 加了 Scan Context 但IMU特征不足 |
| LIO-SAM | 8.74 | 有IMU但特征提取在隧道中失效 |
| SC-LeGO-LOAM | 9.03 | 同上 |
| F-LOAM | 9.53 | 特征法在隧道中最差 |
这个数据很直观------特征提取派系在低特征环境中集体翻车,直接法(FAST-LIO2)完胜。
四、关键工程细节
- ikd-Tree:FAST-LIO2 的速度秘密
传统 KD-Tree 是静态构建的------地图更新时需要整体重建。FAST-LIO2 引入增量式 KD-Tree:
• 支持增量插入和删除点,O(log n) 复杂度
• 周期性下采样和重平衡
• 比传统 KD-Tree 快一个数量级
Faster-LIO 进一步用 iVox(增量式体素哈希)替代 ikd-Tree,在固态雷达上可达 1-2kHz 处理频率。
- LeGO-LOAM 的双阶段解耦优化
LeGO-LOAM 最精妙的设计:把 6-DOF 优化拆成两步
第一阶段:只用地面点(平面点)匹配 → 约束 pitch/roll/z(3-DOF),快速收敛
第二阶段:固定第一阶段结果,用非地面点(角点)匹配 → 约束 x/y/yaw(3-DOF)
把 6-DOF 问题降成两个 3-DOF 问题,计算量大幅下降,且数值稳定性更好。
- LIO-SAM 的因子图架构
LIO-SAM 把所有约束统一成因子图节点:
• IMU 预积分因子(帧间约束)
• 激光里程计因子(scan-to-map 配准结果)
• 回环检测因子(历史关键帧匹配)
• GPS 因子(全局位置约束,可选)
用 GTSAM 做滑动窗口优化,控制计算规模。这是从"滤波"到"图优化"的架构跃迁。
- 三种工程落位方式
自动驾驶中 3D SLAM 不只有"在线建图"一种用法:
| 模式 | 场景 | 特点 |
|---|---|---|
| 在线SLAM | 封闭园区/地下车库/矿山 | 边走边建边定位,从零开始 |
| 离线建图+在线匹配 | 高速/城区道路主流 | 预先采集高精地图,运行时NDT/ICP配准 |
| 组合导航约束源 | 高等级自动驾驶 | 即使有RTK+高精度惯导,仍保留激光里程计抑制漂移 |
五、工程落地的真实痛点
从你做模型部署的角度来看,3D SLAM 在 ARM 嵌入式平台上的主要瓶颈:
- kNN 搜索:每帧需要在地图中查找最近邻,KD-Tree 查询是 O(log n),但点云量大时仍是瓶颈------FAST-LIO2 的 ikd-Tree 是目前最优解
- 非线性优化求解:g2o/GTSAM/Ceres 在 ARM 上求解 Pose Graph 优化时容易卡顿------LIO-SAM 在 Jetson Xavier NX 上实测帧率常跌破 8Hz
- IMU 预积分计算:紧耦合方案需要实时做 IMU 预积分,计算量集中在雅可比矩阵求导
- 内存管理:点云地图不能无限增长,需设计滑动窗口或地图分区机制
- 时间同步:LiDAR 和 IMU 时间戳不对齐会导致紧耦合系统直接崩溃
- 外参标定:LiDAR-IMU 外参标定精度直接影响配准质量,是工程中最容易被忽视的坑
- 退化环境检测:长走廊/隧道/开阔广场等几何特征缺失时,点云配准会退化------已有 P2d-DO 等方法检测退化状态并抑制干扰
六、选型决策树
传感器配置?
纯LiDAR → LOAM/A-LOAM(学习)或 LeGO-LOAM(地面车辆)
LiDAR+IMU
追求实时性/嵌入式 → FAST-LIO2 / Faster-LIO
追求全局精度/大场景 → LIO-SAM
固态雷达(Livox) → FAST-LIO2(原生支持)
高速运动/无人机 → FAST-LIO系列(IEKF+反向传播补偿)
LiDAR+IMU+相机
需要高鲁棒性/退化环境 → LVI-SAM
有预建地图
高速/城区 → NDT地图匹配定位
计算资源?
受限(Jetson/ARM) → LeGO-LOAM / FAST-LIO2 / Faster-LIO
充足(x86服务器) → LIO-SAM / LVI-SAM
七、当前趋势
• 多源紧耦合:LiDAR+Vision+IMU 融合(FAST-LIVO2、R3LIVE)------视觉提供语义和纹理,激光提供几何
• 固态雷达适配:Livox MID-360 等非重复扫描雷达催生了直接法复兴
• 语义 SLAM:SuMa++ 等利用语义分割区分动态/静态点云
• 退化感知:自动检测几何退化场景并切换策略
• 多机器人协同建图:集群 SLAM 在无人机编队中的应用
• 深度学习渗透:用神经网络做回环检测描述子、动态物体剔除、特征提取替代
知乎上这个领域的优质内容不少。有一篇LOAM 系列算法深度解读 https://zhuanlan.zhihu.com/p/544864651从论文到代码把 LOAM 的特征提取和双线程架构讲得很透彻;还有一篇多个 SLAM 框架室外实测对比 https://zhuanlan.zhihu.com/p/441386977,作者用速腾 16 线雷达在真实场景跑了 A-LOAM、LeGO-LOAM、LIO-SAM,配了实车截图和 RViz 效果,工程直觉很强;另外FAST-LIO2 的通俗解析 https://zhuanlan.zhihu.com/p/2048019334426056164用很口语化的方式把 IEKF+紧耦合+ikd-Tree 这套设计逻辑讲明白了,适合快速建立直觉。
有什么具体模块想深挖的------比如 IEKF 的状态变量设计、IMU 预积分的雅可比推导、ikd-Tree 的增量插入算法、或者 Cartographer 3D 的分支定界回环检测实现,都可以继续展开。