一、引言:为什么要了解 SLAM?
随着机器人、自主导航、增强现实(AR)、元宇宙和三维重建等技术的快速发展,SLAM(Simultaneous Localization and Mapping,同步定位与建图) 成为了支撑这些系统的核心能力。
SLAM 的独特之处在于:它能让一台设备在完全陌生、无 GPS 的环境中,边走边构建地图,边定位自己在哪儿。
这项技术不仅是机器人“看清”和“走对”的基础,更是连接现实与数字世界的桥梁。本文将从原理、结构、输入输出、可视化图解到应用场景,全方位深入解析 SLAM 的核心机制与技术内涵,帮助研究人员建立系统的理解。
二、SLAM 是什么?一句话定义
SLAM 是一项让设备在“未知环境”中,
👉 一边构建地图(Mapping),一边实时估计自己的位置(Localization) 的关键技术。
它的核心目标就是两个字:自定位 + 自建图。
SLAM 系统通过摄像头、激光雷达、IMU 等传感器感知环境,并在每一帧输入下,完成这两个核心任务:
- 定位(Localization):估计当前相对于起点的位置和姿态(即6DoF位姿)。
- 建图(Mapping):记录环境中的关键特征点或障碍物,构建稀疏/稠密地图。
举例说明:
假如一个机器人进入一个陌生建筑物内:
-
它没有地图也没有 GPS
-
通过相机连续拍照、分析环境特征
-
SLAM 系统就会:
实时估计机器人从哪里走到哪里 记录所见环境结构,构建地图
-
最终,它能知道:“我在这张地图的哪里”,并实现自主导航
SLAM 是机器人/设备在未知环境中“自我定位”和“自建地图”的能力,是实现智能移动、虚拟现实与空间感知的基础技术。
三、SLAM 的工作原理
3.1 同时进行“定位”与“建图”
-
定位:确定当前时刻的相机/机器人在世界坐标系中的位置与姿态(6DoF)
-
建图:提取图像中的特征点,利用三角测量估计其三维坐标,逐步形成地图
定位必须依赖地图,地图又依赖定位来构建,二者密不可分。
3.2 主要工作流程
3.2 三大核心模块
模块 | 功能说明 |
---|---|
特征提取与匹配 | 提取图像关键点(如 ORB、SIFT)并进行帧间匹配 |
位姿估计 | 利用匹配点计算当前相机相对于上一帧/地图的位姿 |
地图优化 | 通过 Bundle Adjustment 或因子图优化,提高地图一致性 |
3.3 SLAM 的输入与输出
📥 输入:
类型 | 内容说明 |
---|---|
图像流 | 单目、双目或 RGB-D 图像序列 |
传感器数据 | 可选,如 IMU、激光雷达、GPS |
相机内参 | 焦距、主点等(需标定) |
📤 输出:
输出内容 | 用途与意义 |
---|---|
相机位姿(轨迹) | 表示机器人/相机在空间中的轨迹 |
地图(稀疏/稠密) | 表示周围环境中的特征点/障碍物 |
回环检测信息 | 用于修正漂移、闭环优化 |
四、SLAM 的作用
应用场景 | 具体作用说明 |
---|---|
🤖 机器人导航 | 实时估计位置+生成环境地图 → 路径规划、避障、自主移动 |
🚗 自动驾驶 | 与 GPS / LiDAR / HDMap 联合 → 实现精确定位与导航 |
🧠 AR/VR/MR | 实时跟踪用户头部位置,确保虚拟图像与现实场景匹配 |
🏗️ 建筑测绘 | 在无 GPS 环境下完成建筑内部空间扫描和重建 |
🛰️ 无人机飞行 | 实现自主飞行、自定位、自降落(特别适合 GPS 盲区) |
五、SLAM 的分类(按传感器类型)
类型 | 描述与代表算法 |
---|---|
🖼️ 视觉SLAM | 输入是相机图像,如 ORB-SLAM、DSO |
🧲 惯性SLAM | 加入 IMU 传感器,如 VINS-Fusion |
📡 激光SLAM | 输入是激光雷达点云,如 LOAM、Cartographer |
🤝 多模态SLAM | 相机 + 雷达 + IMU,增强鲁棒性 LVI-SAM、FAST-LIO |
六、SLAM中的定位
6.1 什么是“定位”?SLAM 中定位的含义
在 SLAM 中,“定位”是指估计设备自身在空间中的位置与朝向。
这个过程叫做 “位姿估计”(Pose Estimation),通常表示为一个 6 自由度(6-DoF)变换:
- 位置(x, y, z)+ 姿态(roll, pitch, yaw)
6.2 定位是“相对于谁”定位的?以什么为基准?
👉是相对于 SLAM 构建中的“地图坐标系”进行定位的。
也就是说:
-
初始位置(第一帧相机看到的世界)被定义为 原点。
-
后续每一帧,系统都会估计相机相对于这个初始坐标系的变换矩阵(也叫 Tcw 或 Twc,camera-to-world 或 world-to-camera)。
-
这个“参考系”由地图中的特征点共同确定,通常称为 世界坐标系(World Coordinate System)。
6.3 定位是在建的图中的定位吗?
✔️定位依赖于当前建图过程中建立起来的局部/全局地图。
换句话说:SLAM 中的“定位”与“建图”是互相依赖、同步进行的过程。
-
如果地图不准确,定位也会漂移。
-
如果定位不准,地图也会扭曲。
因此才叫做 Simultaneous Localization and Mapping(同步定位与建图)。
6.4 举例说明
假设机器人进入一个房间:
-
第一帧相机图像 → 设为世界原点 (0, 0, 0)
-
第十帧时,SLAM估计出相机位于 (x=2.3, y=0.1, z=1.5),朝向有一定旋转角度。
-
这就是:你现在位于构建中的地图坐标系的第 10 个位置处。
问题 | 分析解释 |
---|---|
定位指什么? | 指设备当前相对于地图原点的空间位置与朝向(6DoF) |
是相对于什么定位? | 相对于当前构建的地图 / 第一帧图像所定义的世界坐标系 |
是否是“在建图中的定位”? | 是的,定位依赖于建图结果,同时反过来定位结果也影响建图精度 |
七、SLAM 中的“世界坐标系 - 地图 - 相机位姿”
7.1 SLAM 的核心空间关系:
下面这张图展示了SLAM 的核心空间关系:
📌 图解说明:
元素 | 说明 |
---|---|
🧭 世界坐标系 | 所有地图点和相机位姿的参考坐标系,系统初始化时建立 |
📍 相机位姿 | 相机在不同时间点的位置与朝向,用箭头表示方向 |
🔵 地图点 | SLAM 提取的图像特征点,通过三角测量计算空间位置形成稀疏地图 |
➰ 轨迹线 | 相机连续运行的路径,用于导航与重定位 |
7.2 左下角的坐标轴:世界坐标系(World Coordinate System)
-
图中左下角的三轴坐标是一个三维空间的原点,表示SLAM 系统所使用的“全局参考系”。
-
所有地图点的位置、所有相机位姿的位置与方向,都是相对于这个坐标系来定义的。
-
在实际中,这个坐标系一般是在初始化时由第一帧相机图像自动定义为 (0,0,0)。
7.2 蓝色点:地图点(Map Points)
-
整张图中散布着大量的蓝点,代表 SLAM 过程中提取的特征点或关键点,用于构建地图。
-
这些点来自图像中的纹理、边缘等位置,如角点、SIFT、ORB等特征。
-
SLAM系统通过三角测量这些点的空间坐标,构成一个稀疏地图(Sparse Map)。
-
这些地图点的空间位置都以世界坐标系为参考。
7.3 相机图标与箭头:相机位姿(Camera Poses)
-
图中的三个相机图标表示系统在不同时刻的位置与朝向。
-
相机图标旁边的黑色箭头表示相机的“观察方向”或“前方视角”。
-
每一个相机位姿都可以表示为一个变换矩阵:
其中 R 表示旋转,t 表示平移(即相机的位置)。
7.3 灰色连线:相机运动轨迹
-
三个相机图标通过灰色线段连接,表示的是相机(或机器人)在运动过程中产生的轨迹轨道。
-
这些轨迹是 SLAM 的核心输出之一,可以用于机器人导航、路径规划、回访等任务。
-
每个轨迹点都是相对于世界坐标系计算出来的位置,保持全局一致性。
7.4 三者之间的关系
元素 | 含义 | 所在坐标系 | |
---|---|---|---|
世界坐标系 | SLAM系统建立的统一参考系 | 全部元素相对于它来定义 | |
地图点(蓝点) | 相机从图像中提取的空间特征点 | 空间坐标为 (x,y,z) | |
相机位姿 | 相机在每一帧时刻的位置与朝向 | 表示为变换矩阵 [R | t] |
7.5 应用拓展
- 在 NeRF / 3DGS 中,这些 相机位姿 + 图像 会作为输入,用于训练重建模型。
- 在 机器人 中,这些 地图点 + 当前位姿 会用于导航、避障、规划路径。
八、SLAM中的建图
8.1 什么是 SLAM 中的“建图”?
在 SLAM(同步定位与建图)系统中,“建图(Mapping)”指的是:
机器人在运动过程中,从传感器(如相机、激光雷达、IMU)中获取信息,逐步建立起环境的空间表达。
这个“地图”不是传统意义上的纸质地图,而是机器能够理解、用于定位、导航和任务规划的数字地图,形式可以是:
类型 | 描述 | 形式举例 |
---|---|---|
稀疏地图 | 提取图像中特征点重建的三维点云 | ORB-SLAM 中的稀疏点地图 |
稠密地图 | 每像素深度都估计出位置 | KinectFusion、ElasticFusion 等 |
占据栅格地图 | 表示每个网格是否被障碍物占据 | 2D/3D 激光雷达地图,适合路径规划 |
拓扑地图 | 使用图结构表示空间连接关系 | 回环图、导航图 |
语义地图 | 附加语义信息的几何地图 | “墙、桌子、门”等可识别空间物体 |
8.2 建图的过程是怎样的?
以下是视觉 SLAM 中典型的建图流程(与定位同时进行):
-
图像中提取特征点(如 ORB/SIFT/FAST)
-
通过帧间匹配建立对应点
-
使用三角测量重建这些点在 3D 空间中的坐标
-
将这些 3D 点统一转换到世界坐标系中
-
随着机器人移动,不断补充新特征、优化旧地图点
8.3 建图是“以什么为基准”建的?
SLAM 中的地图,是相对于世界坐标系(world coordinate system)建立的,这个坐标系通常在系统初始化时定义。
🧭 世界坐标系的定义方式:
情况 | 世界坐标系的定义 |
---|---|
单目视觉 SLAM | 通常将第一帧相机所在位置定义为原点 |
双目 / RGB-D SLAM | 左相机或深度图的参考帧定义为世界原点 |
IMU 融合 SLAM | 可能使用 IMU 初始朝向 + 重力方向定义 |
地图中的所有三维点,都是相对于这个坐标系来表示的。
同样,相机/机器人在运行过程中的轨迹(位姿)也是这个坐标系下的连续变换(R, t)。
8.4 建图与定位之间的关系是什么?
SLAM 的两大核心是 定位(Localization) 和 建图(Mapping),两者相互依赖、互为支持:
动作 | 如何依赖 |
---|---|
建图依赖定位 | 你要知道相机在哪里,才能把特征点放对位置(否则地图漂移) |
定位依赖建图 | 你要有地图,才能匹配当前位置与环境对应(否则无法追踪) |
这就是“同步定位与建图”的本质。
8.5 建图的最终目的是干什么?
构建出的地图可用于:
目标 | 对应的地图类型与用途 |
---|---|
🎯 自主导航 | 占据地图 + 稠密地图,用于路径规划、避障 |
🎯 回访路径 | 稀疏地图 + 拓扑图,用于 SLAM 回环检测与轨迹闭合优化 |
🎯 三维重建 | 稀疏 / 稠密点云地图,可作为 NeRF / 3DGS 重建输入 |
🎯 空间理解与任务规划 | 加入语义信息后构成语义地图,用于高层次任务控制(如抓取、避障) |
8.6 举例说明
你控制一个机器人进入办公室:
-
它从摄像头里提取了桌子角、墙角、电脑边等 3D 特征点;
-
同时估计自己的位置不断变化;
-
系统记录这些点的位置 → 构成稀疏地图;
-
随着机器人行走,它看到更多新特征 → 地图被动态扩展;
-
最终你得到了一个“机器能理解的办公室三维结构”。
8.7 总结
问题 | 回答 |
---|---|
“建图”指的是什么? | 指的是 SLAM 系统从传感器数据中提取空间特征,构建可用于定位与导航的地图 |
是以什么为基准? | 以 SLAM 初始化时设定的 世界坐标系 为基准 |
建图和定位的关系? | 建图依赖定位结果确定三维点位置,定位又依赖地图保持准确追踪 |
建图的最终意义? | 支持导航、重定位、路径规划、三维建模、空间理解等应用 |
九、SLAM 的本质与挑战
9.1 本质:
SLAM 的本质是“在构建地图的过程中定位自己”,这是一种闭环优化任务。
9.2 挑战:
-
动态场景干扰(如行人、车辆)
-
弱纹理环境(如纯白墙体)
-
尺度漂移(尤其是单目 SLAM)
-
数据同步问题(相机与IMU时间不同步)
-
回环检测与全局一致性优化成本大
十、SLAM 与三维重建的结合趋势
近年来,SLAM 已不再仅仅用于导航,还开始与 NeRF、3DGS 等新型重建技术深度融合:
-
SLAM 提供初始轨迹 → NeRF / 3DGS 训练高保真三维模型
-
NeRF 学习场景 → 反向优化 SLAM 位姿(如 iMAP、NICE-SLAM)
-
构建可漫游、可导航、可语义分割的地图,助力智能机器人与虚拟现实系统升级
🔮 未来的 SLAM 不再只是定位,而是智能空间理解的入口!
十一、结语
SLAM 作为连接现实世界与虚拟空间的桥梁,已经成为机器人感知与理解环境不可替代的核心能力。它不仅仅是技术系统的底层引擎,更是打开高阶空间智能的大门。
无论你从事的是三维重建、视觉导航、增强现实、无人驾驶,还是数字孪生等3D视觉领域,理解 SLAM 都将为你在科研和工程实践中打下坚实的基础。
📌 推荐尝试:使用开源的 ORB-SLAM3、VINS-Fusion、DROID-SLAM 等项目,基于采集或者公共数据集的数据搭建并运行一套完整的 SLAM 系统,才能真正“体验SLAM的魅力”。