跳过正文
  1. Notes/

SLAM(Simultaneous Localization and Mapping)入门

· loading · loading · ·
AI Embodied AI
目录
SLAM(Simultaneous Localization and Mapping)入门

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 框架
#

框架类型前端方法后端方法回环地图类型
CartographerLiDAR/多传感器Scan matchingPose Graph (Ceres)占据栅格
ORB-SLAM3视觉/VIOORB 特征BA (g2o)稀疏点云
DSO/LDSO视觉直接法光度BALDSO有半稠密/稀疏
RTAB-MapRGB-D/LiDAR特征法PGO稠密点云
LIO-SAMLiDAR+IMUScan matchingPGO点云
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-SLAM2ORB-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. 参考文献
#

1.SLAM技术详解:从扫地机器人到自动驾驶-CSDN博客

2.一文彻底搞懂SLAM关键技术–机器视觉网

3.ChatGPT

4.SLAM技术综述 - 知乎