跳至正文
杂学书库让好奇心有所归处
简体中文

自己绘出未知空间:同步定位与地图构建(Simultaneous Localization and Mapping)

设想一台机器人第一次走进陌生建筑的走廊。它没有地图,也不知道自己站在哪里。可它仍然用传感器观察四周,一点点向前移动,不知不觉间就同时弄清了房间的形状和自己的位置。这种一边绘制地图、一边估计自身位置的技术,就是“同步定位与地图构建(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是让机器人即使身处陌生空间,也能同时学会“我在哪里”和“这是什么地方”的导航骨架。它的核心思路不是把地图和位置分别做完再行动,而是一边累积不确定的观测,一边把两者一起打磨。

承认观测存在误差,同时一起修正地图和位置——这就是机器人自己摸索穿越未知的导航第一步。

SLAM反复结合对周围环境的观测与运动估计,同时更新机器人的位置和地图。回环闭合——重新认出曾经到过的地方——有助于减少路径和地图中累积的误差。
SLAM同时估计位置与地图以及回环闭合的简化示意图。来源:MathWorks,SLAM与激光雷达SLAM文档。