跳转至

SLAM (同时定位与建图)

引言

SLAM (Simultaneous Localization and Mapping,同时定位与建图) 是机器人领域中的一个核心问题,指机器人在未知环境中,在定位自身位置的同时构建环境地图。

概述

SLAM 问题可以描述为:机器人在未知环境中移动时,需要同时完成两个任务:

  1. 定位 (Localization):确定自身在环境中的位置和姿态
  2. 建图 (Mapping):构建环境的地图表示

这两个任务相互依赖:准确的定位需要精确的地图,而精确的地图又需要准确的定位信息。

SLAM 分类

按传感器类型分类

视觉 SLAM (Visual SLAM, V-SLAM)

使用摄像头作为主要传感器:

  • 单目 SLAM (Monocular SLAM):使用单个摄像头,成本低但需要初始化尺度
  • 双目 SLAM (Stereo SLAM):使用双目摄像头,可直接获得深度信息
  • RGB-D SLAM:使用深度相机(如 Kinect、RealSense),同时获得彩色图像和深度图

激光 SLAM (LiDAR SLAM)

使用激光雷达作为主要传感器:

  • 2D 激光 SLAM:使用单线激光雷达,适用于平面移动机器人
  • 3D 激光 SLAM:使用多线激光雷达,适用于三维环境

多传感器融合 SLAM

结合多种传感器:

  • 视觉-惯性 SLAM (Visual-Inertial SLAM):结合摄像头和 IMU
  • 激光-视觉融合 SLAM:结合激光雷达和摄像头
  • GPS-视觉融合 SLAM:在室外环境中结合 GPS 和视觉信息

按算法框架分类

基于滤波的方法

  • 扩展卡尔曼滤波 (EKF-SLAM)
  • 粒子滤波 (Particle Filter SLAM)
  • 信息滤波 (Information Filter SLAM)

基于优化的方法

  • 基于图优化 (Graph-based SLAM)
  • 基于因子图 (Factor Graph SLAM)
  • 基于光束法平差 (Bundle Adjustment)

基于深度学习的方法

  • 端到端 SLAM
  • 深度学习辅助的特征提取和匹配

关键技术

前端 (Frontend)

负责传感器数据处理和特征提取:

  • 特征检测与匹配

    • 角点检测(Harris、FAST、ORB)
    • 特征描述子(SIFT、SURF、ORB、BRIEF)
    • 特征匹配与跟踪
  • 直接法 (Direct Methods)

    • 无需特征提取,直接使用像素强度
    • 适用于纹理丰富的场景
  • 光流法 (Optical Flow)

    • 跟踪图像中的像素运动

后端 (Backend)

负责优化和地图构建:

  • 位姿图优化 (Pose Graph Optimization)
    • 将 SLAM 问题转化为图优化问题
    • 节点表示位姿,边表示约束
  • 回环检测 (Loop Closure Detection)
    • 识别机器人是否回到之前访问过的位置
    • 方法:词袋模型 (Bag of Words)、深度学习
  • 地图表示
    • 点云地图 (Point Cloud Map):存储三维点云
    • 栅格地图 (Grid Map):将环境划分为网格
    • 拓扑地图 (Topological Map):表示环境的结构关系
    • 语义地图 (Semantic Map):包含语义信息的地图

状态估计

SLAM 的状态估计问题可以表示为:

其中:

  • $\mathbf{x}_t$ 是机器人在时刻 $t$ 的状态(位置和姿态)
  • $\mathbf{u}_t$ 是控制输入
  • $\mathbf{z}_t$ 是观测
  • $\mathbf{m}$ 是地图
  • $\mathbf{w}_t$ 和 $\mathbf{v}_t$ 是噪声

主要算法

ORB-SLAM

基于 ORB 特征的视觉 SLAM 系统:

  • 支持单目、双目和 RGB-D
  • 使用图优化进行后端优化
  • 包含回环检测和重定位功能

LSD-SLAM

大尺度直接法单目 SLAM:

  • 使用直接法,无需特征提取
  • 可以构建半稠密地图
  • 适用于纹理丰富的场景

LOAM

激光雷达里程计与建图:

  • 使用 3D 激光雷达
  • 实时构建点云地图
  • 高精度定位

VINS-Mono / VINS-Fusion

视觉-惯性导航系统:

  • 结合视觉和 IMU 数据
  • 适用于无人机等平台
  • 支持单目和双目

Cartographer

Google 开发的实时 SLAM 系统:

  • 支持 2D 和 3D 激光 SLAM
  • 使用子图 (Submap) 和回环检测
  • 适用于大规模环境

应用场景

  • 移动机器人导航:室内服务机器人、仓储机器人
  • 自动驾驶:车辆定位与高精地图构建
  • 无人机:自主飞行与建图
  • AR/VR:虚拟物体在真实环境中的定位
  • 机器人探索:未知环境探索与地图构建

挑战与问题

尺度问题

  • 单目 SLAM 无法直接获得尺度信息
  • 需要通过初始化或传感器融合解决

累积误差

  • 长时间运行会导致误差累积
  • 需要通过回环检测和全局优化来修正

动态环境

  • 环境中存在移动物体
  • 需要区分静态和动态特征

计算复杂度

  • 实时性要求与计算资源的平衡
  • 大规模环境下的内存和计算开销

鲁棒性

  • 光照变化、纹理缺失、传感器故障等
  • 需要算法具有良好的鲁棒性

常用工具与框架

ROS 中的 SLAM 包

  • gmapping:基于粒子滤波的 2D 激光 SLAM
  • hector_slam:基于扫描匹配的 2D 激光 SLAM
  • cartographer_ros:Google Cartographer 的 ROS 接口
  • rtabmap_ros:基于 RTAB-Map 的视觉 SLAM
  • ORB_SLAM2:ORB-SLAM2 的 ROS 接口

开源 SLAM 库

  • OpenVINS:视觉-惯性 SLAM
  • Kimera:实时语义 SLAM
  • ElasticFusion:RGB-D SLAM
  • OKVIS:视觉-惯性 SLAM

评估指标

  • 绝对轨迹误差 (ATE, Absolute Trajectory Error):估计轨迹与真实轨迹的差异
  • 相对位姿误差 (RPE, Relative Pose Error):相邻位姿之间的相对误差
  • 地图精度:构建地图与真实环境的匹配程度
  • 计算效率:处理速度和资源消耗

发展趋势

  • 语义 SLAM:结合语义信息,构建更智能的地图
  • 深度学习 SLAM:使用深度学习进行特征提取和匹配
  • 多机器人 SLAM:多个机器人协作建图
  • 长期 SLAM:处理环境变化和长期运行
  • 边缘计算 SLAM:在资源受限设备上运行

参考文献

  1. Thrun, S., Burgard, W., & Fox, D. (2005). Probabilistic Robotics. MIT Press.
  2. Cadena, C., et al. (2016). Past, Present, and Future of Simultaneous Localization and Mapping: Toward the Robust-Perception Age. IEEE Transactions on Robotics, 32(6), 1309-1332.
  3. Mur-Artal, R., Montiel, J. M. M., & Tardos, J. D. (2015). ORB-SLAM: a Versatile and Accurate Monocular SLAM System. IEEE Transactions on Robotics, 31(5), 1147-1163.