同时定位与建图(SLAM)
同时定位与建图,几乎总是被简称为 SLAM,是机器人在同一时间同时解开两个纠缠在一起的难题:一边给一个它从未见过的地方画地图,一边又在这张正在画的地图上随时记着自己身处何处。想象你被蒙上眼,扔进一座漆黑、陌生的房子里,被要求既画出它的平面图,又在摸索前行的同时,在图上标出自己的位置。你没有一张地图可以拿来给自己定位,也没有一个固定的位置可以据以画图——可你偏偏要把两样都做出来,而且每一样都倚靠着另一样。
这种循环依赖正是全部的难处所在,却也是让 SLAM 得以成立的诀窍。机器人一边移动,一边认出周围的特征——这里一个角、那里一根柱子——并记下每一个特征离它多远、在哪个方向。凭着这些方位,它既能修正自己“以为身在何处”,又能把这些特征钉到它正在生长的地图上。两个估计互相撑着对方,就像两个人靠在一起、彼此稳住身形:对自己位置稍好一点的判断,会让地图更清晰;而稍好一点的地图,又会让你对自己位置的判断更清晰。麻烦在于,每走一步都会悄悄渗进一点小误差,并不声不响地累积起来,于是地图会慢慢扭曲变形。
对治这种漂移的解药,是 SLAM 系统极为看重的一个时刻,叫作回环闭合:当机器人重新走到一处它从前来过的地方、并认出了它,这一认出便把累积的误差“啪”地拉回正轨,一举把整张地图收紧——就像拿一处你早已信得过的地标来核对你的工作,会把这中间所有的猜测一并纠正过来。SLAM 在它现代的各种形式中——在激光雷达 SLAM 里用激光扫描仪,在视觉 SLAM 里用普通摄像头——正是扫地机器人、自动驾驶汽车、无人机,以及那些在你客厅里摆上虚拟家具的增强现实应用,引擎盖之下的技术。
一台新的扫地机器人第一次探索你的家时,手里根本没有地图。它四处游走,一边发现墙、一边把墙画下来,并在这些墙之间追踪自己的路径;当它绕了一圈、回到出发时的那道厨房门口、并认出了它,整张地图便利落地“方正”了起来——那一认出,正是回环闭合在起作用。
一边建地图、一边在地图上找到自己,两件事同时进行——而起步时既没有地图,也没有给定的位置。
人们常把 SLAM 想成两半协同工作:一个前端,负责读取原始传感器数据、认出特征和重访过的地点;以及一个后端,负责把所有这些观测算成一张最一致的地图和一条最一致的轨迹。