0. 前言#
SLAM(Simultaneous Localization and Mapping)意思是同步定位与地图构建,目的是将机器人放入未知环境中的未知位置,找到一个办法让机器人一边绘制周边的地图,一边定位机器人,并决定应该往何方向前进。
SLAM 是一个历史悠久的课题,经过几十年的研究,各类方法层出不穷,也基本上形成了固定的框架。SLAM 主要分为五个步骤:
- 传感器信息读取,在视觉SLAM中主要为相机图像信息的读取和预处理。
- 前端处理,进行特征提取与匹配,估算相邻图像间相机的运动,以及局部地图的样子。
- 回环检测,判断机器人是否到达过先前的位置。如果检测到回环,它会把信息提供给后端进行处理。
- 后端优化,后端接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对它们进行优化,得到全局一致的轨迹和地图。
- 地图构建与更新,根据估计的轨迹,建立与任务要求对应的地图。

根据方法的不同,也有不同的模块:
- 传感器:激光雷达、摄像头、惯性测量单元(IMU)、里程计、GPS、磁力计等。这些传感器可以提供设备在运动过程中所需要的信息,如距离、角度、速度、方向等。
- 设备运动模型:运动模型用于估计设备的位姿,例如里程计模型、速度模型、加速度模型等。
- 视觉算法:视觉算法主要用于设备在环境中的感知和定位,如特征提取、特征匹配、图像配准等。
- 滤波算法:滤波算法用于估计设备的位姿和地图中不同位置的概率分布,如卡尔曼滤波器、粒子滤波器等。
- 优化算法:优化算法用于优化设备的位姿和地图,如扩展信息滤波器、位姿图优化等。
- 地图表示:地图表示方式可以有多种,如栅格地图、拓扑地图、点云地图等。
1. 传感器数据(Sensor Input & Preprocessing)#
在 SLAM 中,输入数据形式取决于系统设计和应用场景,但大体上可以分为几类:视觉数据、IMU 数据、LiDAR 数据等。
1. 视觉数据#
单目图像(Monocular):普通相机拍摄的二维图像,拥有 RGB 三通道数据,需要通过运动推算深度信息。
双目图像(Stereo):两台相机同时拍的两张图,通过视差计算深度。
RGB-D 图像:既有彩色 RGB 图像,又有深度图(Depth),深度信息由深度相机直接提供。
2. IMU 数据#
IMU(Inertial Measurement Unit)意思是惯性测量单元,主要测量机器人的加速度和角速度,有的 IMU 还能测量磁场。主要用于提供短时间内的运动信息,能在视觉数据丢失时维持估计,但长时间估计会漂移,所以要和视觉数据融合。
3. LiDAR 数据#
激光雷达扫描环境得到点云数据,精度高、抗光照变化,但数据量大、设备昂贵,少部分 SLAM 会使用。
4. 其他数据#
GPS / RTK(室外环境用);轮速计 / 里程计(机器人或车上的);气压计(高度辅助)等。
5. 常见预处理#
- 畸变矫正(Radial/Tangential distortion correction)
- 图像去噪、直方图均衡(增强对比度)
- 图像金字塔构建(不同分辨率,用于多尺度特征)
- 时间同步(特别是和 IMU 联用时):将从不同传感器或不同时间戳接收到的数据进行同步,以便后续配准。
2. 前端处理(Visual Odometry / Tracking)#
从传感器中获取原始数据,并将这些数据与已有地图进行关联,从而确定机器人轨迹的过程。如果是相机,则是从图像中提取特征点(位置 + 描述子),在相邻帧间匹配特征点,并利用这些匹配推算相机的相对运动,同时维护一个局部地图(Local Map),不断添加新的三维点和关键帧。
常用的方法有:特征法(ORB、SIFT、SuperPoint 等)、直接法(LSD-SLAM、DSO 等)、匹配优化法(RANSAC + PnP、光流法等)。现在也有深度学习的替代方案,如 SuperPoint + LightGlue、D2-Net、LoFTR 等。
- 特征提取:从采集的数据中提取用于建图的特征点,如关键点、特征描述等。
- 数据融合:将不同传感器获取的数据融合起来,提高建图的准确性和稳定性。
- 数据关联:将当前帧的特征与之前的地图,或者其他帧之间的特征进行匹配,以确定机器人的运动轨迹。
- 运动估计:通过数据关联得到机器人的运动轨迹,可以是平移、旋转等运动。
3. 回环检测(Loop Closure Detection)#
识别机器人经过的相似位置,避免累积误差的产生。可以有效降低机器人的定位误差,提高 SLAM 算法的精度和鲁棒性。具体为检测当前相机位置是否与过去到达过的位置相同(形成回环),如果检测到回环,把这个信息作为约束交给后端优化,消除累计漂移。
常用方法有:
- 基于 Bag-of-Words (BoW):DBoW2(ORB-SLAM 使用的)
- 基于全局描述子:NetVLAD、DELG
- 深度学习匹配:SuperGlue/LightGlue 等直接比对特征
- 位置相似后,还需几何验证(比如 PnP 验证匹配对)
4. 后端优化(Back-End Optimization)#
根据前端获取的运动轨迹、地图信息和回环约束,对机器人的状态、地图和传感器误差等进行估计和优化的过程。通过非线性最小二乘法等,对机器人姿态和地图进行优化,使得机器人的位置和地图更加准确。
常用方法有:
- Bundle Adjustment (BA):联合优化相机位姿和三维点位置
- Pose Graph Optimization (PGO):只优化相机位姿(节点)和相对位姿约束(边)
- 求解器常用 g2o、Ceres Solver、GTSAM 等
5. 地图构建与更新(Mapping)#
根据优化后的轨迹和观测到的特征点,生成任务所需的地图。地图类型取决于应用场景,可以分为:稀疏点云、稠密点云或网格、占据网格、语义地图等。
常用方法有:
- 点云融合:TSDF(Truncated Signed Distance Function)、OctoMap、KinectFusion
- 多视图立体(MVS)
- 神经隐式表示(NeRF、iMAP 等)
6. 常见 SLAM 框架#
框架 | 类型 | 前端方法 | 后端方法 | 回环 | 地图类型 |
---|---|---|---|---|---|
Cartographer | LiDAR/多传感器 | Scan matching | Pose Graph (Ceres) | 有 | 占据栅格 |
ORB-SLAM3 | 视觉/VIO | ORB 特征 | BA (g2o) | 有 | 稀疏点云 |
DSO/LDSO | 视觉 | 直接法 | 光度BA | LDSO有 | 半稠密/稀疏 |
RTAB-Map | RGB-D/LiDAR | 特征法 | PGO | 有 | 稠密点云 |
LIO-SAM | LiDAR+IMU | Scan matching | PGO | 有 | 点云 |
DROID-SLAM | 视觉 | 深度学习 | 可微优化 | 有 | 稠密/稀疏 |
1. Cartographer#
Cartographer 是由谷歌开发的一款基于激光雷达和 RGB-D 相机数据的 SLAM 算法。开源地址为 Cartographer 。
- 支持 2D / 3D SLAM
- 使用 子地图(submap)+ scan matching,将激光数据匹配到局部子地图
- 回环检测和优化通过 Pose Graph 完成(基于 Ceres Solver)
- 重点是实时建图,结果是稠密的 占据栅格地图
稳定、质量高,对闭环场景适应性强;但主要依赖激光雷达,纯视觉支持很弱,且对计算资源要求高。
2. ORB-SLAM 系列(ORB-SLAM, ORB-SLAM2, ORB-SLAM3)#
ORB-SLAM 是视觉 / 视觉-惯性 SLAM(单目 / 双目 / RGB-D / VIO)。开源地址:ORB-SLAM2 和 ORB-SLAM3
- 使用 ORB 特征(FAST + BRIEF)
- 三个主要线程:Tracking、Local Mapping、Loop Closing
- ORB-SLAM3 支持多地图(multi-map)和全传感器模式(包括 IMU 融合)
- 后端是 g2o 进行 BA 优化
高精度,但对动态场景适应性差。
3. LDSO / DSO / LSD-SLAM#
这类方法是直接法(Direct Method)的视觉 SLAM 。不依赖特征点检测与描述子,直接优化像素光度误差,对低纹理区域比特征法更稳;但对光照变化和相机曝光差异敏感,初始化要求高。
开源地址:tum-vision/LDSO
4. RTAB-Map#
RTAB-Map 是基于激光雷达和 RGB-D 相机数据的多传感器 SLAM 。开源地址:RTAB-Map 。
- 基于 Bag-of-Words 回环检测(类似 ORB-SLAM 思路)
- 支持多传感器融合(RGB-D + LiDAR + IMU)
- 自带图形化界面和点云地图构建
上手简单,ROS 集成好;但大场景内存占用大。
5. LOAM 系列(LOAM, A-LOAM, LIO-SAM)#
LOAM(Lidar Odometry And Mapping)方法是激光雷达里程计与建图方法。分离前端里程计(高频)与后端优化(低频)。一部分追求实时性(里程计),一部分追求精度(建图)。开源地址:TixiaoShan/LIO-SAM 。
激光雷达场景精度高;但对稀疏和动态环境敏感。
6. 深度学习 SLAM#
- DROID-SLAM:端到端可微 SLAM
- DeepFactors:将深度学习引入相机位姿和深度估计
- ORB-SLAM + SuperPoint + LightGlue:替换前端特征提取与匹配
- iMAP / NICE-SLAM:神经隐式表示地图(NeRF)
无论是端到端的 SLAM 方法,还是将某个模块替换成深度学习方法,都属于深度学习 SLAM 。在弱纹理和光照变化大场景下更稳,并且还能结合语义信息;但计算量大、有数据集泛化性问题。
7. 参考文献#
3.ChatGPT