[3D LiDAR SLAM]

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 也分前端-后端框架,但模块复杂度完全不同:

  1. 前端------点云配准(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 优化求解。

  1. 运动畸变补偿(去畸变)

这是 3D SLAM 比 2D SLAM 多出来的关键环节。机械式激光雷达一圈扫描需要 ~100ms,期间车辆在运动,一帧点云里每个点对应的车辆位姿其实都不一样------点云会"扭曲"。

补偿方法:

• 匀速模型(LOAM 原始方案):假设匀速运动,线性插值

• IMU 预积分(LIO-SAM/FAST-LIO):利用高频 IMU 数据逐点补偿,精度更高

• 反向传播(FAST-LIO2):从最后一个 IMU 状态反向积分到每个点的时间戳

这直接解释了为什么后来几乎所有方案都引入了 IMU。

  1. 后端------位姿图优化 / 滤波

图优化路线(LIO-SAM 为代表)

• 构建 Pose Graph:节点=位姿,边=约束

• 约束来源:激光里程计、IMU 预积分、回环检测、GPS

• 用 g2o / GTSAM / Ceres 求解非线性最小二乘

• 优势:全局一致性强,可融合多源约束

• 劣势:计算开销大,嵌入式平台可能掉帧

滤波路线(FAST-LIO 为代表)

• 误差状态迭代卡尔曼滤波(ES-IEKF)

• IMU 状态和激光观测在同一个滤波器中联合估计

• 优势:计算效率高,硬实时,适合嵌入式平台

• 劣势:无原生回环检测,长时间漂移大于图优化方案

  1. 回环检测

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)完胜。

四、关键工程细节

  1. ikd-Tree:FAST-LIO2 的速度秘密

传统 KD-Tree 是静态构建的------地图更新时需要整体重建。FAST-LIO2 引入增量式 KD-Tree:

• 支持增量插入和删除点,O(log n) 复杂度

• 周期性下采样和重平衡

• 比传统 KD-Tree 快一个数量级

Faster-LIO 进一步用 iVox(增量式体素哈希)替代 ikd-Tree,在固态雷达上可达 1-2kHz 处理频率。

  1. LeGO-LOAM 的双阶段解耦优化

LeGO-LOAM 最精妙的设计:把 6-DOF 优化拆成两步

第一阶段:只用地面点(平面点)匹配 → 约束 pitch/roll/z(3-DOF),快速收敛

第二阶段:固定第一阶段结果,用非地面点(角点)匹配 → 约束 x/y/yaw(3-DOF)

把 6-DOF 问题降成两个 3-DOF 问题,计算量大幅下降,且数值稳定性更好。

  1. LIO-SAM 的因子图架构

LIO-SAM 把所有约束统一成因子图节点:

• IMU 预积分因子(帧间约束)

• 激光里程计因子(scan-to-map 配准结果)

• 回环检测因子(历史关键帧匹配)

• GPS 因子(全局位置约束,可选)

用 GTSAM 做滑动窗口优化,控制计算规模。这是从"滤波"到"图优化"的架构跃迁。

  1. 三种工程落位方式

自动驾驶中 3D SLAM 不只有"在线建图"一种用法:

模式 场景 特点
在线SLAM 封闭园区/地下车库/矿山 边走边建边定位,从零开始
离线建图+在线匹配 高速/城区道路主流 预先采集高精地图,运行时NDT/ICP配准
组合导航约束源 高等级自动驾驶 即使有RTK+高精度惯导,仍保留激光里程计抑制漂移

五、工程落地的真实痛点

从你做模型部署的角度来看,3D SLAM 在 ARM 嵌入式平台上的主要瓶颈:

  1. kNN 搜索:每帧需要在地图中查找最近邻,KD-Tree 查询是 O(log n),但点云量大时仍是瓶颈------FAST-LIO2 的 ikd-Tree 是目前最优解
  2. 非线性优化求解:g2o/GTSAM/Ceres 在 ARM 上求解 Pose Graph 优化时容易卡顿------LIO-SAM 在 Jetson Xavier NX 上实测帧率常跌破 8Hz
  3. IMU 预积分计算:紧耦合方案需要实时做 IMU 预积分,计算量集中在雅可比矩阵求导
  4. 内存管理:点云地图不能无限增长,需设计滑动窗口或地图分区机制
  5. 时间同步:LiDAR 和 IMU 时间戳不对齐会导致紧耦合系统直接崩溃
  6. 外参标定:LiDAR-IMU 外参标定精度直接影响配准质量,是工程中最容易被忽视的坑
  7. 退化环境检测:长走廊/隧道/开阔广场等几何特征缺失时,点云配准会退化------已有 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 的分支定界回环检测实现,都可以继续展开。

相关推荐
7yewh5 天前
SLAM 三维空间刚体运动(2)
数据结构·人工智能·机器人·嵌入式·slam
音视频牛哥19 天前
从 LLM、VLA、LLA、SLIM 到实时音视频感知底座:具身智能真正需要的不只是大模型
人工智能·llm·机器人视觉·slam·vla·多模态感知·机器人音视频
2601_962293531 个月前
第3.7章 机器人第三方库实战总结(七):OpenCV视觉SLAM核心库详解:API速查+源码实例+避坑指南
图像处理·opencv·计算机视觉·slam·第三方库
事已至此_先吃饭吧1 个月前
ORB_SLAM2: Optimizer::PoseOptimization
slam
事已至此_先吃饭吧1 个月前
ORB_SLAM2:词袋模型 Bag of Words
slam
熊猫_豆豆1 个月前
家庭扫地机器人路径规划Python版本
机器人·扫地机器人·slam·路径规划
事已至此_先吃饭吧2 个月前
调试 ORB_SLAM2 非ROS版本
slam
全息数据2 个月前
里程计运动模型及标定【激光slam(一)】
slam·激光slam·定位与建图
zh路西法2 个月前
【3D SLAM源码解读系列】(四) GTSAM与iSAM2——从回环约束到位姿图优化
c++·slam·gtsam·pgo·isam2