当前位置: 首页 > news >正文

SLAM 建图与定位 — 领域全景入门

本文面向 SLAM 领域的初学者,系统介绍这个领域的发展历程、核心问题、技术分支、主流算法、应用场景和发展趋势。读完之后你会对整个 SLAM 领域有一个完整的认知框架。


一、SLAM 是什么?

1.1 定义

SLAM = Simultaneous Localization and Mapping(同时定位与建图)

白话:机器人到了一个陌生环境,一边走一边干两件事——搞清楚"我在哪"和"周围啥样"。这两件事互相依赖:要知道自己在哪需要参照物(地图),要建地图需要知道每次观测时自己站在哪里。SLAM 就是同时解决这个问题。

1.2 为什么重要

GPS 能解决室外定位,但以下场景 GPS 不可用或精度不足:

  • 室内(商场、仓库、医院)——信号被墙遮挡
  • 地下(车库、隧道、矿井)——完全无信号
  • 城市峡谷(高楼间)——多径反射导致跳变
  • 高精度要求(自动驾驶要求厘米级,GPS只有米级)
  • AR/VR(需要毫米级跟踪手机/头显的6自由度位姿)

凡是这些场景,都需要 SLAM 或基于 SLAM 思想的技术。

1.3 SLAM 的历史脉络

年代里程碑意义
1986Smith, Self & Cheeseman 提出SLAM问题首次形式化定义
1990s基于EKF的SLAM第一代解法(2D、小环境)
2000sFastSLAM(粒子滤波)、图优化SLAM规模化、精度提升
2007MonoSLAM首个实时单目SLAM
2014LOAM、LSD-SLAM3D激光里程计、大规模直接法视觉
2015ORB-SLAM视觉SLAM的工程标杆
2016CartographerGoogle开源,工业级2D/3D SLAM
2018VINS-Mono视觉惯性融合的标杆
2020LIO-SAM因子图框架的LiDAR-IMU融合
2022FAST-LIO2极致高效的滤波式LiDAR-IMU融合
2023+Neural SLAM、3DGS-SLAM神经隐式表达、高斯泼溅建图

二、SLAM 解决的核心问题

2.1 状态估计

SLAM 的本质是一个状态估计问题。待估计的状态包括:

  • 位姿(Pose):6自由度——3个平移(x,y,z) + 3个旋转(roll,pitch,yaw)
  • 速度:线速度和角速度(融合IMU时需要)
  • 传感器偏置:IMU的零偏随时间漂移,需要在线估计
  • 地图:环境的某种表示(点云/特征点/栅格/隐式场)

2.2 定位 vs 建图 vs SLAM

任务输入输出场景
纯定位传感器数据 + 已有地图当前位姿地图已建好,日常使用
纯建图传感器数据 + 已知轨迹环境地图有外部定位源(如动捕)
SLAM传感器数据(无先验)位姿 + 地图首次到达陌生环境

实际工程中的典型流程:第一次到场景跑 SLAM 建图 → 保存地图 → 之后每次只做定位(更快更稳定)。

2.3 定位的两层含义

  • 里程计(Odometry):相对定位,估计相邻时刻的运动增量。快速但会累积漂移。
  • 全局定位(Global Localization):在已有地图中确定绝对位置。解决"绑架问题"(突然被放到未知位置)。

三、传感器体系

3.1 外部感知传感器

传感器输出频率精度优势劣势
单目相机2D图像30-60Hz像素级便宜、信息丰富(纹理颜色)无深度、怕光照变化、无绝对尺度
双目相机图像+视差深度30Hz近距cm级有深度、被动感知基线限制测量范围、计算量大
RGBD相机图像+深度图30Hzmm级(近距)直接获得深度室外/远距失效、易受阳光干扰
机械式LiDAR3D点云10-20Hzcm级精度高、不受光照影响、测距远贵、有运动畸变、无颜色
固态LiDAR3D点云(非重复扫描)10Hzcm级便宜(相对机械)、无旋转部件可靠视角小、点云分布不规则
2D LiDAR平面扫描线10-40Hzmm级便宜可靠只有2D信息
事件相机像素级亮度变化事件μs级像素级超高动态范围、无运动模糊数据处理方式完全不同

3.2 内部感知传感器

传感器输出频率作用
IMU(惯性测量单元)角速度+线加速度200-1000Hz高频运动预测、辅助去畸变、提供重力方向
轮式里程计线速度/角速度50-200Hz地面机器人的平面运动约束
气压计海拔高度10-50Hz无人机高度约束
磁力计航向角50-100Hz绝对航向参考(但容易受干扰)

3.3 外部参考传感器

传感器精度作用
GPS/GNSS2-5m (单点), 1-2cm (RTK)提供全局绝对位置,消除累积漂移
UWB10-30cm室内绝对定位
动作捕捉mm级提供ground truth,用于评估算法精度

3.4 常见传感器组合

平台传感器组合代表方案
自动驾驶汽车多线LiDAR + IMU + GPS + 相机Autoware, Apollo
室内服务机器人2D/3D LiDAR + IMUCartographer, FAST-LIO2
无人机单目/双目相机 + IMUVINS-Mono, PX4
AR眼镜/手机单目/鱼眼相机 + IMUARKit, ARCore
手持扫描仪LiDAR + IMU + 相机FAST-LIVO, R2LIVE
扫地机器人2D LiDAR + 轮式里程计GMapping, Cartographer
四足机器人LiDAR + IMU + 腿部里程计VILENS, Cerberus

四、SLAM 系统的模块划分

一个完整的 SLAM 系统一般包含以下模块:

传感器数据

数据预处理
去畸变/特征提取/时间同步

前端里程计
帧间运动估计

后端优化
全局一致性维护

回环检测
识别重访区域

地图构建
环境表示与更新

输出: 位姿+地图

4.1 数据预处理

不同传感器的预处理工作:

LiDAR

  • 运动补偿(去畸变):一帧扫描期间机器人在动,需要校正
  • 降采样:减少数据量同时保留几何信息
  • 去除无效点:过近/过远/噪声点

相机

  • 畸变校正:鱼眼/广角镜头的畸变矫正
  • 特征提取:角点、边缘、描述子
  • 直方图均衡化:应对光照变化

IMU

  • 坐标系对齐:统一到body坐标系
  • 零偏补偿:减去估计的bias
  • 时间同步:与其他传感器时间对齐

4.2 前端里程计

前端解决的是"相邻两帧之间我运动了多少",即短时相对运动估计

视觉前端的两大流派

方法代表原理优缺点
特征点法ORB-SLAM提取特征点→描述子匹配→对极几何精度高、鲁棒;计算量较大
直接法/光流法DSO, VINS直接用像素灰度或光流做匹配快、适合纹理弱区域;对光照敏感

LiDAR前端

方法代表原理
ICP经典方法最近邻点匹配+最小化距离
点到面ICPFAST-LIO2利用局部平面约束,收敛更快
GICP概率模型统一框架
NDTAutoware正态分布体素匹配
特征配准LOAM, LIO-SAM提取edge/planar特征后配准

IMU里程计

  • 对角速度积分得到旋转变化
  • 对加速度二重积分得到位移
  • 单独使用会快速漂移(秒级),必须和其他传感器融合

4.3 后端优化

后端解决的是"综合所有历史信息,最优的完整轨迹是什么"。

两大流派

方法原理优点缺点代表
滤波递推更新当前状态,边缘化历史快、实时性好无法修正历史、线性化误差累积FAST-LIO2(ESKF), MSCKF
图优化所有位姿作为变量联合优化精度高、支持回环修正计算量随规模增长LIO-SAM, ORB-SLAM, VINS

图优化的直觉理解:把每个位姿想象成一个可以移动的节点,传感器观测是节点之间的弹簧(约束)。优化就是找所有节点的位置使得弹簧总能量最小。回环检测相当于在远处两个节点之间加了一根新弹簧,拉动整条轨迹修正。

主流优化库

  • GTSAM:因子图框架,增量优化(ISAM2),LIO-SAM使用
  • g2o:通用图优化,ORB-SLAM使用
  • Ceres Solver:通用非线性最小二乘,VINS-Mono使用

4.4 回环检测

当机器人重新回到之前去过的地方时,识别出"我来过这里",提供一个全局约束消除累积漂移。

方法分类

类型方法原理
基于外观DBoW2 (视觉词袋)将图像编码为词袋向量做相似度匹配
基于结构ScanContext将3D点云编码为2D极坐标描述子
基于位置距离搜索历史轨迹中找距离近但时间远的帧
基于学习NetVLAD, PointNetVLAD深度学习提取全局描述子

回环验证:候选帧检出后,通常需要几何验证(ICP配准或PnP求解),确认是真回环而非误匹配(假阳性)。

4.5 地图表示

地图类型表示方式优势用途
稀疏特征地图3D特征点集合轻量、适合定位视觉重定位
稠密点云地图大量3D点细节丰富三维重建、检测
体素地图3D网格占据概率结构化、适合规划OctoMap
2D栅格地图鸟瞰图黑白格直观、适合2D导航扫地机器人、AGV
TSDF截断符号距离场适合融合多帧深度KinectFusion
网格Mesh三角面片表面可渲染AR、仿真
NeRF/3DGS神经辐射场/高斯泼溅照片级真实感渲染数字孪生、VR
语义地图带类别标注的地图理解环境含义智能交互

五、SLAM 技术分支详解

5.1 视觉 SLAM(Visual SLAM)

用相机作为主传感器的 SLAM。

特征点法代表 — ORB-SLAM 系列

  • 提取 ORB 特征点 → 描述子匹配 → 对极几何求位姿
  • 三线程并行:跟踪(Tracking) / 局部建图(LocalMapping) / 回环(LoopClosing)
  • ORB-SLAM3 支持单目/双目/RGBD/鱼眼 + IMU

直接法代表 — DSO(Direct Sparse Odometry)

  • 不提取特征,直接用像素灰度值做匹配(光度误差最小化)
  • 优点:纹理弱的区域也能工作;缺点:对光照变化敏感

视觉惯性代表 — VINS-Mono/Fusion

  • 相机 + IMU 紧耦合
  • 滑动窗口优化(Ceres)
  • 鲁棒初始化(恢复尺度和重力方向)
  • 是 VIO(Visual-Inertial Odometry)的标杆

5.2 激光 SLAM(LiDAR SLAM)

用 LiDAR 作为主传感器的 SLAM。

2D 激光 SLAM

  • GMapping:粒子滤波 + 栅格地图
  • Hector SLAM:扫描匹配,无需里程计
  • Cartographer:submap + branch-and-bound 回环
  • 用途:扫地机器人、AGV、室内服务机器人

3D 激光 SLAM

  • LOAM(2014):开创 edge/planar 特征提取 + 两频率优化
  • LeGO-LOAM(2018):轻量级改进,加入地面分割
  • LIO-SAM(2020):因子图 + IMU预积分 + 回环 + GPS
  • FAST-LIO2(2022):ikd-Tree + iterated ESKF,极致效率
  • KISS-ICP(2023):极简点到点ICP,开箱即用

3D LiDAR SLAM 的演化路径

LOAM(2014) → LeGO-LOAM(2018) → LIO-SAM(2020) [图优化路线] | └──→ FAST-LIO(2021) → FAST-LIO2(2022) [滤波路线] | └──→ FASTER-LIO(iVox) [更快数据结构]

5.3 多传感器融合 SLAM

融合多种传感器以互补优缺点:

融合方式优势代表
LiDAR + IMULiDAR提供精确空间约束,IMU提供高频预测和去畸变FAST-LIO2, LIO-SAM
Camera + IMU相机提供丰富纹理信息,IMU提供尺度和旋转VINS-Mono, ORB-SLAM3
LiDAR + Camera + IMU最全面的环境感知R2LIVE, FAST-LIVO2
LiDAR + GPSGPS消除全局漂移LIO-SAM (GPS因子)

融合方式分类

  • 松耦合:各传感器独立出结果再融合。模块化但信息利用不充分。
  • 紧耦合:原始测量级融合,共享状态联合优化。精度高但实现复杂。
  • 现代高精度系统基本都是紧耦合。

5.4 语义 SLAM

在几何 SLAM 的基础上加入语义理解:

  • 识别物体类别(这是椅子、那是门)
  • 剔除动态物体(行人、车辆不应出现在地图中)
  • 构建物体级地图(不只是点云,而是"哪里有什么")
  • 辅助回环检测(看到同一个路标比几何匹配更可靠)

代表工作:Kimera、DS-SLAM、DynaSLAM

5.5 深度学习与 SLAM

深度学习正在渗透 SLAM 的各个模块:

模块传统方法深度学习方法
特征提取ORB, SIFTSuperPoint, R2D2
特征匹配BF/FLANN暴力匹配SuperGlue, LoFTR
深度估计双目视差/结构光MonoDepth, DPT
位姿估计PnP/ICPPoseNet(精度还不够)
回环检测DBoW2NetVLAD, CosPlace
建图点云/MeshNeRF, 3D Gaussian Splatting
动态物体几何一致性检测语义分割+运动估计

目前趋势:传统几何方法仍是主干(精度和可解释性更好),深度学习作为强力模块嵌入(特别是在特征/回环/建图方面)。


六、应用场景详解

6.1 自动驾驶

  • 高精地图构建:用采集车(LiDAR+IMU+GPS)建立厘米级道路地图
  • 实时定位:行驶中在高精地图中做点云配准定位
  • 挑战:大规模(城市级)、动态环境(车流人流)、全天候

6.2 室内服务机器人

  • 场景:仓库AGV、配送机器人、清洁机器人
  • 典型方案:2D LiDAR + Cartographer 建栅格图 → AMCL 粒子滤波定位
  • 挑战:动态环境(人流)、长期运行(地图老化)

6.3 无人机

  • 场景:室内巡检、航拍建图、自主飞行
  • 典型方案:相机+IMU (VIO),计算资源和重量受限
  • 挑战:快速运动(IMU必须)、视觉退化(仰视天花板无纹理)

6.4 AR/VR/MR

  • 需求:手机/头显在空间中的6-DoF实时跟踪
  • 代表:Apple ARKit、Google ARCore、Meta Quest SLAM
  • 特点:必须极低延迟(<20ms)、消费级硬件

6.5 三维重建与数字孪生

  • 场景:建筑BIM、文物扫描、工厂数字孪生
  • 方案:LiDAR建图 + 纹理贴图 或 NeRF/3DGS高质量重建
  • 趋势:从点云地图 → 照片级真实感渲染

6.6 矿井/隧道巡检

  • 特点:完全无GPS、环境重复性高(退化严重)
  • 方案:LiDAR+IMU紧耦合 + 多模态退化检测
  • 挑战:粉尘干扰LiDAR、狭长结构退化

七、SLAM 的核心难题

7.1 累积漂移

前端每帧估计都有小误差,时间越长越偏。像闭眼走路,每步偏一点点,走一百步就偏很远。

应对

  • 回环检测 + 图优化(检测到回到旧地方,一次性修正整条轨迹)
  • GPS/UWB等绝对位置源(定期"校准")
  • 更高精度的前端(减小单步误差)

7.2 动态环境

行人、车辆等运动物体会污染地图、干扰配准。

应对

  • 基于一致性的动态点检测(多帧不一致→动态)
  • 语义分割识别动态类别(人、车直接剔除)
  • 鲁棒核函数降权异常观测

7.3 退化场景

某些环境缺乏足够约束:

退化类型现象影响的传感器
长走廊/隧道前进方向无约束LiDAR
空旷场地测不到东西LiDAR
纯白墙无纹理特征相机
黑暗环境看不见相机
重复结构无法区分位置所有

应对:多传感器融合互补(LiDAR走廊退化时IMU补偿,相机无纹理时LiDAR补偿)、退化检测与告警。

7.4 计算效率

嵌入式平台算力有限,但SLAM需要实时。

应对

  • 高效数据结构(ikd-Tree, iVox)
  • 滤波代替全量优化
  • 降采样减少数据量
  • GPU加速/专用芯片

7.5 大规模与长时间

地图越来越大怎么办?跑几个小时地图变化了怎么办?

应对

  • 地图分块管理(子地图加载/卸载)
  • 关键帧稀疏化(不保留所有帧)
  • 长期地图更新(检测变化区域并更新)

7.6 鲁棒性

实际环境千变万化:雨雪雾、强光逆光、传感器故障、剧烈运动…

应对

  • 多传感器冗余
  • 异常检测与降级策略
  • 鲁棒统计方法(M-estimator、RANSAC)

八、SLAM 与相关领域的关系

SLAM

定位/导航

三维重建

自动驾驶

机器人自主移动

AR/VR/MR

状态估计理论

计算机视觉

数值优化

信号处理

深度学习

  • 计算机视觉:视觉SLAM大量依赖CV技术(特征、光流、深度估计)
  • 状态估计/控制论:卡尔曼滤波、图优化的理论基础
  • 机器人学:SLAM是自主导航的基础模块
  • 数值优化:非线性最小二乘、流形优化
  • 深度学习:越来越多模块被学习方法增强

九、发展趋势

9.1 与深度学习的融合

  • 端到端 SLAM(从图像直接出位姿,但目前精度不足)
  • 学习增强的传统 SLAM(学习做特征/匹配/回环,几何仍用传统方法)
  • 神经隐式建图(NeRF/3DGS 替代点云地图)

9.2 多机协作 SLAM

  • 多个机器人同时建图,共享和融合各自的地图
  • 挑战:通信带宽有限、相对位姿估计、地图合并

9.3 语义化与场景理解

  • 不只是几何地图,还要理解"这是什么、有什么意义"
  • 物体级SLAM:地图中的元素是"桌子""门"而非一堆点
  • 为机器人决策提供更高层次信息

9.4 长期自主运行

  • 环境会变化(施工、季节、家具搬动),地图要能更新
  • 长期运行的稳定性(内存泄漏、数值精度、地图膨胀)
  • 终身学习:从经验中改进自身

9.5 新型传感器

  • 4D毫米波雷达:穿透雾雨雪,成本低
  • 事件相机:超高动态范围,微秒级时间分辨率
  • 固态LiDAR阵列:多个小型固态LiDAR拼接全视角

十、学习路线建议

阶段一:建立感性认识(1-2周)

  • 跑通一个开源 SLAM demo(推荐 FAST-LIO2,代码最精简)
  • 用 rviz 看点云地图生成的过程
  • 跑不同数据集感受不同环境的效果
  • 不需要看代码,先知道"这东西能干嘛"

阶段二:补数学基础(2-4周)

  • 坐标系变换与齐次坐标
  • 旋转表示(旋转矩阵、四元数、轴角)
  • 最小二乘与非线性优化基础
  • 概率论基础(高斯分布、贝叶斯)
  • 推荐:高翔《视觉SLAM十四讲》前8章

阶段三:精读一个系统(4-8周)

  • 选一个系统看源码(推荐FAST-LIO2:代码量最小、结构最清晰)
  • 对照论文理解每个模块
  • 修改参数看效果变化

阶段四:对比不同方案(4周)

  • 对比滤波vs图优化(FAST-LIO2 vs LIO-SAM)
  • 对比视觉vs激光(VINS-Mono vs FAST-LIO2)
  • 理解各自的取舍和适用场景

阶段五:工程实践(持续)

  • 换自己的传感器跑
  • 处理实际问题(标定、时间同步、异常数据)
  • 根据场景需求改算法(加回环、加GPS、处理退化)

推荐资源

类型资源适合阶段
入门书高翔《视觉SLAM十四讲》阶段二
进阶书Barfoot《State Estimation for Robotics》阶段三
视频Cyrill Stachniss SLAM课程 (YouTube)阶段二
代码FAST-LIO2 / LIO-SAM / VINS-Mono阶段三
论文各算法的原始论文阶段三-四
社区知乎SLAM话题、泡泡机器人、古月居全程

十一、常见误解澄清

“SLAM就是建图”

不是。SLAM 的重点是定位(“我在哪”),建图是实现定位的手段。很多应用中地图建完后主要用定位功能。

“有了GPS就不需要SLAM”

GPS室内不可用、城市中精度差、频率低(10Hz)。即使室外有GPS,也通常和SLAM融合使用(GPS修正漂移,SLAM提供高频高精度)。

“LiDAR SLAM比视觉SLAM好”

各有所长。LiDAR精度高不怕光照但贵;视觉便宜信息丰富但怕光照和无纹理。实际趋势是融合使用。

“深度学习会取代传统SLAM”

短期内不会。端到端学习方法精度和泛化能力不足。当前趋势是传统几何方法为主干,深度学习增强特定模块(特征提取、回环检测、建图)。

“SLAM问题已经解决了”

实验室demo层面基本解决,但工程落地仍有大量挑战:动态环境鲁棒性、极端天气、长期运行稳定性、大规模地图管理、计算效率等。这也是为什么SLAM算法工程师仍然大量需求。


延伸阅读

  • 入门:高翔《视觉SLAM十四讲》
  • 综述论文:Cadena C, et al. “Past, Present, and Future of Simultaneous Localization and Mapping.” IEEE T-RO, 2016.
  • 视觉SLAM综述:Kazerouni I, et al. “A Survey of State-of-the-Art on Visual SLAM.” Expert Systems with Applications, 2022.
  • LiDAR SLAM综述:Zhang J, et al. “A Survey on LiDAR-based SLAM.” Robotics and Autonomous Systems, 2023.
  • 本系列后续:第1-12篇逐步深入各个具体算法和源码实现
http://www.jsqmd.com/news/997769/

相关文章:

  • 企业级AI化转型服务概念深度解析+选型指南:将AI注入iPaaS系统集成全生命周期
  • 2026北京朝阳区百达翡丽回收:五家谁更专业?真相来了 - 逸程
  • MuleSoft AI编排:企业级LLM集成的治理、合规与可审计实践
  • Anthropic模型能力演进与安全发布机制解析
  • Python 高手编程系列三千四百零二:处理错误与速率限制
  • 告别电源噪声!用ME6211这颗高PSRR LDO,搞定你的蓝牙耳机/麦克风电路设计
  • Android Java点餐界面源码:带进度页和双样式弹窗的列表实现
  • MuleSoft+LLM企业级AI编排:构建可审计、可治理的智能服务总线
  • 3分钟颠覆传统:如何用智能化手机号码定位系统解决企业精准营销难题
  • 百度网盘提取码智能获取:3秒解密加密资源的终极指南
  • 【uniapp实战】集成支付宝扫码插件,打造媲美原生体验的扫码功能
  • AI技术简报如何成为工程师的决策仪表盘
  • 图解STM32F103 USB数据流:从寄存器配置到SRAM缓冲区,一次讲清数据到底存哪了
  • 【echo-agent系列文章】给 Agent 加一个可恢复的状态层
  • 全志V853/V851s等平台LCD闪屏、花屏?可能是你的lcd_dclk_freq算错了
  • 220V转5V1A模块电源WT5105
  • 深度解析Harepacker-resurrected:一站式MapleStory游戏资源编辑解决方案
  • Python 并发安全与线程局部存储:多线程环境下的数据一致性
  • 想在周口考 CPPM,怎么报名、在哪报名? - 中供国培
  • 给半导体设备装上‘普通话’:一文搞懂SECS/GEM协议栈(从HSMS到GEM)
  • 2026 年 AI 搜索工具对比:Perplexity、ChatGPT Search 与 Gemini 怎么选
  • STM32 RTC备份寄存器的数据安全实战:一次“入侵”如何清空你的关键数据?
  • NLP新闻语义解析流水线:结构化解码与工业级落地实践
  • 【论文复现】风光制氢合成氨系统优化研究【Cplex求解】(Matlab代码实现)
  • 手把手带你玩转i.MX 93的NPU:从飞凌开发板看NXP Neutron NPU与模型水印
  • 别再死记硬背了!用‘普遍性与特殊性’搞定你的LeetCode刷题与系统设计面试
  • Android 13 GMS认证避坑:手把手教你搞定RKP配置,解决GTS测试fail
  • 终极语音克隆指南:用10分钟数据打造专属AI声音 [特殊字符]
  • 福州钻石回收水太深?2026 权威实测排行教你卖高价 - 禹竞
  • NSK高刚性重载滚珠丝杠DFT8016-7.5技术详解