设想一台机器人第一次走进陌生建筑的走廊。它没有地图,也不知道自己站在哪里。可它仍然用传感器观察四周,一点点向前移动,不知不觉间就同时弄清了房间的形状和自己的位置。这种一边绘制地图、一边估计自身位置的技术,就是“同步定位与地图构建(Simultaneous Localization and Mapping,SLAM)”。
简单来说,同步定位与地图构建是指:在没有预先准备好的地图的情况下,机器人仅凭移动中获得的传感器观测,同时估计环境地图和自身的位置与姿态。要定位就得有地图,而要画地图又得先知道准确的位置——面对这种“先有鸡还是先有蛋”的循环,SLAM不是把两者分开逐一完成,而是让它们一起相互校准、共同求解。
本文将依次介绍SLAM为何是一个难题、它的历史与核心组成、代表性解法的演变,以及在实际应用中会遇到的局限。
把地图和位置一起对准的技术
什么是同步定位与地图构建?

在传统的机器人导航中,只要有像工厂那样预先绘制的地图,或像卫星导航那样位置已知的参照点就足够了。但在家里、地下仓库这类既没有地图也没有GPS的地方,机器人必须自己学习空间。SLAM正是在这种情况下,把机器人“在哪里”和“周围是什么样子”合并成一个问题。
- 定位(Localization):以已有地图为参照,求出机器人的位置和朝向(姿态)。
- 建图(Mapping):在已知机器人位置的前提下,汇集传感器观测,构建环境地图。
- 同步估计(Simultaneous Estimation):不把上述两步轮流做完,而是同时调整位置和地图,使多个时刻的观测都能解释同一个环境。
姿态不仅包括平面上的坐标,还包括机器人面朝的方向。因此,SLAM的结果中往往同时包含机器人走过的轨迹、墙壁、拐角、特征点等地图要素,以及这些估计值的不确定性。
从鸡与蛋问题到概率解法

1991年,约翰·伦纳德(John Leonard)和休·杜兰特-怀特(Hugh Durrant-Whyte)在智能机器人与系统国际会议(IROS)上,把这一问题形式化为“无先验信息的长期全局定位”。SLAM这一缩写最早出现在杜兰特-怀特、赖伊和内博特(Durrant-Whyte, Rye, Nebot)于1995年国际机器人研究研讨会(ISRR)上发表的论文中,而这一问题的源头可追溯到1986年在旧金山举行的IEEE机器人与自动化会议上的讨论。当时研究者意识到,地图中各个路标的估计值彼此高度相关,因为机器人的位置误差会作为共同误差渗入多次观测之中。
(1)路标与误差的相关性
机器人在位置仍不准确时观测到两个特征,这两点的估计位置就共享同一个位置误差。随着观测不断累积,保留这种相关性的概率模型就成了让地图保持一致的关键。
(2)用回环闭合把误差拉回来
当机器人重新认出曾经走过的地方,它不仅能修正当前位置,还能一并修正过去的轨迹和地图。这种“回环闭合(Loop Closure)”是约束漂移的核心机制——所谓漂移,就是只靠车轮或惯性推算时,位置误差随时间越积越大。
从滤波到图优化

经典SLAM起步于扩展卡尔曼滤波(Extended Kalman Filter),把机器人状态和路标当作一个大的估计向量来处理。此后,为了应对计算量和非线性问题,基于粒子滤波的方法,以及把机器人姿态与观测作为节点和边、最小化误差的图优化(Graph-based SLAM)逐渐得到广泛应用。
- 里程计(Odometry):根据车轮转动或惯性传感器预测短距离内的运动。单独使用时误差会不断累积。
- 观测更新(Observation Update):把激光雷达、相机、超声波等看到的特征与地图对照,修正位置和地图。
- 数据关联(Data Association):判断现在看到的点是之前见过的同一面墙,还是新的物体;一旦判断错误,地图就会严重错位。
传感器的选择因环境而异。室内扫地机器人和物流机器人常用二维激光雷达或深度相机,增强现实设备则采用把视觉特征与惯性测量结合起来的视觉-惯性SLAM。比传感器名称更重要的,是以概率方式处理观测不确定性、并在再次遇到同一地点时一致地修正地图的整体结构。
实际应用中要留意的SLAM局限

SLAM已经渗透到家用机器人、仓储自动化以及自动驾驶的部分模块中,但要说它已是“完全解决的问题”还为时过早。
(1)容易假设空间一成不变
一旦有人开关门或推走推车,早先记录在地图上的特征就可能消失,导致回环闭合失败。以物体为单位理解动态场景、并把它们从地图中过滤掉的研究仍在进行。
(2)在特征稀少处容易不稳
在长长的白色走廊、大面积玻璃墙、昏暗空间等重复或难以观测的环境里,数据关联经常出错。这时需要融合多种传感器的信息,或用点云、栅格、有意义的物体单位等方式丰富地图表示。
(3)精度与计算量的平衡是一道难题
在大型建筑里长时间行走,地图会越来越大,难以实时优化。只保留关键帧、把地图分成局部子图来管理等技巧,往往决定了实际性能的高低。
SLAM是让机器人即使身处陌生空间,也能同时学会“我在哪里”和“这是什么地方”的导航骨架。它的核心思路不是把地图和位置分别做完再行动,而是一边累积不确定的观测,一边把两者一起打磨。
承认观测存在误差,同时一起修正地图和位置——这就是机器人自己摸索穿越未知的导航第一步。
