SLAM 是 Simultaneous Localization and Mapping,同步定位与建图。它解决的是:机器人或设备在未知环境里,一边估计自己在哪里,一边构建周围环境地图。
SLAM 常见于机器人、无人车、无人机、AR、扫地机、移动测绘、仓储 AGV 和自动驾驶感知定位。
一句话理解
1 | 传感器数据 -> 估计当前位姿 -> 构建地图 -> 修正累计误差 -> 输出可用定位和地图 |
其中最关键的问题是误差会累积。只靠里程计或相机连续估计,走久了就会漂移,所以 SLAM 需要后端优化和回环检测来把轨迹拉回正确位置。
基本术语
| 术语 | 含义 |
|---|---|
| Pose | 位姿,通常包含位置和姿态 |
| Odometry | 里程计,估计相邻时刻运动 |
| Landmark | 路标点,环境中可重复观测的特征 |
| Front-end | 前端,负责特征提取、匹配、跟踪、里程计 |
| Back-end | 后端,负责优化轨迹和地图 |
| Loop Closure | 回环检测,识别回到旧位置 |
| Map | 地图,可以是稀疏点云、稠密点云、栅格图、语义地图 |
| IMU | 惯性测量单元,提供加速度和角速度 |
SLAM 系统常见结构
1 | 传感器输入 |
前端追求实时,后端追求全局一致性。
按传感器分类
| 类型 | 传感器 | 特点 |
|---|---|---|
| 视觉 SLAM | 单目、双目、RGB-D 相机 | 成本低,受光照和纹理影响大 |
| 激光 SLAM | 2D/3D LiDAR | 几何精度高,成本和数据量较高 |
| 视觉惯性 SLAM | 相机 + IMU | 运动估计更稳,标定要求更高 |
| 激光惯性 SLAM | LiDAR + IMU | 适合移动机器人和室外场景 |
| 多传感器 SLAM | 相机、LiDAR、IMU、轮速计、GPS | 鲁棒性更好,系统复杂度更高 |
按算法思想分类
滤波 SLAM
早期常见方法,包括 EKF-SLAM、FastSLAM 等。
特点:
- 以概率滤波方式递推状态。
- 适合理解 SLAM 基础。
- 在大规模环境里状态维度和计算压力会变大。
图优化 SLAM
现代 SLAM 常用思路,把位姿和约束表示成图,再做非线性优化。
1 | 节点:机器人位姿、地图点 |
优点:
- 更适合大规模场景。
- 能自然加入回环。
- 可以融合多传感器约束。
视觉 SLAM
视觉 SLAM 主要依赖图像。
常见路线:
| 路线 | 思路 |
|---|---|
| 特征点法 | 提取 ORB、SIFT、SURF 等特征,再匹配跟踪 |
| 直接法 | 直接利用像素灰度误差估计运动 |
| 半直接法 | 结合特征和直接法思想 |
典型问题:
- 光照变化导致匹配失败。
- 白墙、玻璃、纯色地面缺少纹理。
- 快速运动造成模糊。
- 单目相机尺度不确定。
- 动态物体干扰特征匹配。
常见处理:
- 增加 IMU。
- 使用双目或 RGB-D。
- 提高快门速度和图像质量。
- 剔除动态区域。
- 做回环检测和重定位。
激光 SLAM
激光 SLAM 依赖 LiDAR 扫描。
常见路线:
- 2D 激光 + 栅格地图。
- 3D LiDAR + 点云匹配。
- LiDAR + IMU 融合。
常见算法模块:
| 模块 | 作用 |
|---|---|
| Scan Matching | 当前扫描和地图匹配 |
| ICP | 点云配准 |
| NDT | 点云概率栅格匹配 |
| Deskew | 消除运动畸变 |
| Loop Closure | 闭环修正 |
常见问题:
- 长走廊退化,几何约束不足。
- 玻璃、雨雾、反光物体导致异常点。
- 运动太快,点云畸变严重。
- IMU 外参或时间同步不准。
VIO 视觉惯性里程计
VIO 使用相机和 IMU 融合估计运动。
优势:
- 比纯视觉更抗快速运动。
- IMU 可以补充短时间图像跟踪失败。
- 适合无人机、AR、手持设备。
难点:
- 相机和 IMU 时间同步。
- 外参标定。
- IMU 噪声建模。
- 初始化尺度、重力方向和偏置。
回环检测为什么重要
只靠前端里程计,误差会一直积累。回环检测用于识别“我又回到了曾经来过的地方”。
1 | 发现回环 -> 添加回环约束 -> 后端优化 -> 修正整条轨迹 |
没有回环时,地图可能越来越歪;有错误回环时,地图可能被拉坏。所以回环检测既要召回,也要防误匹配。
地图表示
| 地图 | 用途 |
|---|---|
| 稀疏点云 | 定位、回环、视觉地图 |
| 稠密点云 | 重建、测绘、三维展示 |
| 栅格地图 | 2D 导航、避障 |
| OctoMap | 3D 占据地图 |
| TSDF/ESDF | 三维重建和路径规划 |
| 语义地图 | 带物体类别和场景理解 |
不是地图越密越好。导航常用栅格地图,视觉定位可能只需要稀疏地图。
常见问题
SLAM 和导航是什么关系
SLAM 负责定位和建图,导航负责根据地图规划路径并控制机器人移动。导航依赖定位,但 SLAM 不等于完整导航系统。
单目 SLAM 为什么有尺度问题
单目相机只看到二维图像,无法直接知道真实距离。没有额外信息时,只能得到相对尺度。可以通过双目、RGB-D、IMU、已知物体尺寸或高度约束补尺度。
为什么机器人走久了地图会歪
前端里程计有误差,每一帧叠加一点,时间长了就会漂移。需要后端优化、回环检测、传感器融合来修正。
为什么特征点突然丢失
常见原因:
- 画面模糊。
- 光照突变。
- 纹理太少。
- 物体快速移动。
- 相机曝光不稳定。
处理:
- 降低运动速度。
- 提高图像质量。
- 使用更合适的相机。
- 融合 IMU。
激光 SLAM 在长走廊里为什么不稳
长走廊几何结构重复,横向约束不足,匹配容易退化。可以融合 IMU、轮速计、视觉,或增加人工标志物、优化环境特征。
SLAM 一定要 ROS 吗
不一定。ROS 方便传感器接入、消息通信、可视化和算法集成,但 SLAM 算法本身可以脱离 ROS 运行。学习和机器人项目中,ROS 2 会让工程组织更方便。
学习路线
- 先理解坐标系、旋转、平移、矩阵、四元数。
- 学 OpenCV 基础,理解相机模型和特征匹配。
- 学非线性优化,理解图优化思想。
- 跑通一个开源视觉 SLAM 或激光 SLAM 示例。
- 学 ROS 2、TF、rosbag、RViz。
- 再进入 VIO、LiDAR-Inertial、多传感器融合。
工程排查清单
- 传感器时间戳是否准确。
- 相机内参是否标定。
- 相机和 IMU、LiDAR 外参是否正确。
- 坐标系方向是否统一。
- rosbag 数据是否丢帧。
- 运动速度是否超过算法承受范围。
- 环境纹理或几何特征是否足够。
- 回环是否误匹配。
- CPU/GPU 性能是否足够实时运行。
常见开源方向
- ORB-SLAM 系列:经典视觉 SLAM。
- VINS 系列:视觉惯性方向。
- Cartographer:2D/3D 激光 SLAM。
- LOAM 系列:激光里程计和建图。
- LIO-SAM:LiDAR、IMU、因子图融合方向。
学习时不要一开始就追求“最强算法”,先跑通数据、理解坐标系、看懂前端和后端各自做什么。
延伸阅读
- ORB-SLAM 论文:https://arxiv.org/abs/1502.00956
- ORB-SLAM2 论文:https://arxiv.org/abs/1610.06475
- ORB-SLAM3 论文:https://arxiv.org/abs/2007.11898
- ROS 2 快速入门:/iot/ros2-quickstart
- OpenCV 快速入门:/vision/opencv