定位、建图与 SLAM

因子图

因子图是一张整洁的图画,它把你想求解的东西,和约束这些东西的一条条证据,干净地分了开来。它是一张有两类节点、且两类永不混在一起的图——这正是“二部”的意思。一类是变量,也就是你要求解的未知量:机器人在每一时刻所在的位置,以及每个地标在世界中的所在。另一类是因子,也就是一条条证据:每个因子都是从某次测量里抽出的一条小规则,比如“轮子说我走了一米”,或者“摄像头说那棵树在我左前方三米处”。一个因子只连向它真正约束到的那些变量,每有这样一条约束,就画一条线。

这张图画的妙处在于,它一眼就能让你看清究竟谁依赖于谁。一个写着“我在第 12 个位姿处看到了第 7 号地标”的因子,只连接这两个节点;对于楼那头第 50 个位姿,它什么也没得说。于是这张图是稀疏的——大多数变量彼此相距很远、互不相连——而正是这种稀疏,让 SLAM 求解器能够跑得很快,因为它可以只对一小簇一小簇紧密相关的东西推理,而不必面对一整团乱麻。每个因子还会悄悄告诉你它对自己那条规则有多笃信,于是当各片证据彼此矛盾时,求解器就知道该信谁。

因子图和位姿图是近亲:位姿图本质上就是一种变量只有机器人位姿的因子图,而更完整的因子图还把地标也当作变量,并让许许多多种证据——轮式里程计、摄像头观测、GPS 定位、一个惯性传感器——都作为不同的因子,插进同一张图里。正是这套共通的语言,让因子图成了现代 SLAM 的公共骨架:任何能把自己的测量表述成一个因子的传感器,都能加入这场对话。

在纸上画出来,一个小小的 SLAM 问题就变成了一串代表机器人位姿和地标的圆圈、以及一个个代表每次测量的小方块,再用线标出哪个方块约束着哪些圆圈——在动手算任何一个数字之前,整个问题的地图就已经摆在眼前。

圆圈是未知量,方块是证据——线条标明谁约束着谁。

“二部”不过是说节点分成两组,而每条边都跨在两组之间、绝不在同一组内部相连——在这里,每条线都把一个变量连到一个因子,绝不会把变量连到变量。

又称
factor graph SLAM概率因子图機率因子圖