SLAM (同时定位与建图)
引言
SLAM (Simultaneous Localization and Mapping,同时定位与建图) 是机器人领域中的一个核心问题,指机器人在未知环境中,在定位自身位置的同时构建环境地图。
概述
SLAM 问题可以描述为:机器人在未知环境中移动时,需要同时完成两个任务:
- 定位 (Localization):确定自身在环境中的位置和姿态
- 建图 (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:在资源受限设备上运行
参考文献
- Thrun, S., Burgard, W., & Fox, D. (2005). Probabilistic Robotics. MIT Press.
- 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.
- 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.