本教程将从零开始,带你全面了解语义在SLAM(同时建图与定位)中的应用。我们会先梳理传统视觉SLAM的四大核心模块,再深入探讨为什么需要引入语义信息,以及它带来的巨大优势。最后,还会详细对比几种主流的深度测量方法(ToF、结构光、立体视觉)和单目/双目VSLAM的优缺点。读完本文,你将对语义SLAM有一个清晰、完整的认知。
一、传统视觉SLAM的四大模块
SLAM(Simultaneous Localization And Mapping) 即同时建图与定位,通常可以分为以下四个部分:
- Initialization(初始化)
- Tracking(跟踪)
- Local Mapping(局部建图)
- Global Optimization(全局优化)
视觉SLAM主要依赖的知识领域包括:
- 多视角几何:投影几何、相机模型
- 图像处理:特征提取、特征点跟踪
- 优化算法:非线性优化算法(如 Levenberg-Marquardt 法)
1.1 初始化(Initialization)
初始化是SLAM系统启动的第一步,通常将第一张图像进入系统时的相机位姿作为参考坐标系。具体流程如下:
- 选取之后输入的某张图像,与第一张图像进行角点匹配并三角化,获取深度信息,生成候选的初始化地图(MAP)。
- 通过重投影计算误差,如果误差太大则重新选取图像。
- 重复上述步骤,直到误差小于设定阈值,进行一次优化,得到最终的初始化地图。
小提示:初始化的质量直接影响后续跟踪的稳定性,因此误差阈值的选择非常关键。
1.2 跟踪(Tracking)
跟踪阶段的任务是估计当前相机的大概位置,主要步骤包括:
- 计算当前图像与之前相近图像的关系(常用方法有特征点匹配、光流法、边缘跟踪等)。
- 根据计算出的关系,通过相应算法估计当前相机位姿。
- 注意:“直接法”将前两步合并为一步执行,省去了特征点提取的过程。
重点:在跟踪过程中,对动态物体的鲁棒性是决定系统稳定性的关键因素之一。
1.3 局部建图(Local Mapping)
局部建图用于维护和管理当前局部区域的地图,常见策略包括:
- 采用滑动窗口的方式,或挑选某些关键帧来建立局部地图。
- 当某一帧图像根据策略被选为关键帧后,添加到局部地图的关键帧队列中。
- 管理局部地图中存在的点云。
- 进行局部的 Bundle Adjustment(BA),优化局部地图和相机位姿。
- 最后进行关键帧的管理(如剔除冗余帧)。
1.4 全局优化(Global Optimization)
全局优化主要用于消除长时间运行产生的累积漂移,核心是回环检测:
- 利用 BOW(Bag of Words) 挑选出候选回环帧。
- 对候选回环帧进行验证,确保是正确的回环。
- 根据回环帧计算累积漂移误差。
- 最后进行全局优化,修正所有相机位姿和地图点。

二、为什么需要语义?——语义SLAM的动机
传统SLAM在动态环境、长期跟踪、人机交互等方面存在局限性,引入语义信息可以带来以下好处:
- 对环境的鲁棒性更强:尤其是在动态环境中(如行人、车辆移动),语义信息可以帮助区分静态物体和动态物体,避免错误匹配。
- 获取地图的先验信息,得到更高精度:通过添加语义约束(例如“墙面是垂直的”、“地面是平的”),可以显著提升定位和建图的精度。
- 更好的回环检测:语义信息(如“前方是一栋楼”)比单纯的视觉特征更稳定,能提高回环检测的正确率。
- 人机交互:例如机器人可以理解“椅子”这一语义,并配合CAD制图等高级任务。

2.1 传统回环检测方法回顾
目前主流回环检测大多依赖于BoW(Bag of Visual Words)方法:
- 开源库:DBoW2(以及后续的 DBoW3、fbow)
- 连续帧匹配库:DLoopDetector
- ORB-SLAM、VINS 等知名系统均使用了 DBoW2
- 其他检索方式还有 LSH(Locality-Sensitive Hashing) 以及 LLC(Locality-constrained Linear Coding)
2.2 语义给SLAM系统带来的好处
- 支持中长期的 tracking:即使场景变化较大(如白天黑夜),语义特征相对稳定。
- 环境适应性更强(鲁棒性):对光照变化、季节变化等有更好的抵抗能力。
- 潜在的人机交互特性:机器人可以理解“把桌子上的杯子拿过来”这类指令。
重点:语义SLAM并非完全取代传统SLAM,而是在传统框架上增加语义信息作为额外的约束和指导。
语义SLAM系统与传统SLAM系统对比

三、深度测量方法详解
人类天生具备空间感,能够凭直觉判断物体的远近。但机器需要通过特定方法获取深度信息。以下是三种主流的深度测量方案:
3.1 深度相机——ToF(Time-of-Flight)
基本原理:通过连续发射光脉冲(一般为不可见光)到被观测物体上,然后用传感器接收从物体返回的光,通过探测光脉冲的飞行(往返)时间来得到目标物距离。

小提示:ToF相机测量速度快,但容易受环境光干扰,且对反射率低的物体精度下降。
3.2 深度相机——结构光
基本原理:用一个光源(常用红外)将一定的图案(如条纹、散斑)投射到物体上,再用摄像头收集变形后的图案,通过三角视差原理计算深度。
相比双目匹配,结构光参考图像是经过专门设计的图案,特征点已知,更容易提取。但存在以下缺点:
- 基线(光源与镜头光心的距离)越长精度越高,但设备体积会变大。
- 主动光,在室外阳光下容易被太阳光淹没,导致无法工作。
- 激光器寿命较短,难以满足 7×24 小时长时间工作要求。
- 一旦激光器损坏,替换后需要重新标定,通常整个模块要一起更换。

3.3 立体视觉(双目相机)
基本原理:通过左右两个相机拍摄图像,计算视差来估计深度。不依赖其他传感设备,室内外均可使用。

- 优点:纯视觉方法,成本较低,应用场景广。
- 缺点:需要逐像素计算匹配,算法复杂,计算量大,通常需要 GPU/FPGA 或专门的 ASIC 芯片协助。
常见问题:为什么单目相机无法直接测量深度?因为单张图像丢失了深度信息,只能通过平移运动后的多帧图像三角化来估算,且存在尺度不确定性。
四、单目VSLAM与双目VSLAM的对比
4.1 VSLAM(单目)
- 优势:成本低、搭建简单。
- 劣势:
- 需要专门初始化:必须通过平移运动才能计算深度。
- 尺度问题:无法确定真实尺度(例如一张图片中,物体可能很大但很远,也可能很近但很小)。
- 深度计算存在缺陷:比如 3D假图问题 和 机器学习的样本问题(训练数据与实际环境不符导致深度估计错误)。
4.2 VSLAM(双目/立体)
- 优势:
- 不需要专门初始化,开机即可获得深度。
- 能够直接计算深度,尺度确定。
- 可用于室内和室外。
- 劣势:
- 标定较为复杂(两个相机需要精确标定内外参)。
- 视差计算比较耗资源,需要GPU/FPGA 或专门的 ASIC 芯片协助。
常见问题:双目立体视觉能否在弱纹理环境下工作?
答:不能。纯视觉方法依赖纹理信息进行匹配,如果环境缺乏纹理(如纯白墙壁),双目匹配会失败,此时需要结合结构光或ToF等主动方法。
五、总结
通过本教程,我们系统地了解了SLAM系统的四大模块(初始化、跟踪、局部建图、全局优化),以及语义信息如何在其中发挥重要作用——提高鲁棒性、精度、回环检测能力和人机交互性。同时,我们对比了ToF、结构光、立体视觉三种深度测量方法的特点和适用场景,并分析了单目与双目VSLAM的优劣。希望这份指南能帮助你更好地理解语义SLAM的核心思想,并在实际项目中做出合适的技术选型。
编辑:黄飞
