1. 简介
前两章讲了定位的概率方法,是一个低维度感知问题,假设地图已知。
但有些情况地图未知,或者不准确。
因此建图可以让部署机器人更容易,也会让机器人更能适应环境变化。
建图是真正的自动机器人的核心竞争力之一。
建图难在:
- 假设空间巨大:
地图定义在连续空间上,因此无限高维度;即使离散化,维度也很高。
因此贝叶斯滤波的方法不好使。 - 建图是一个“鸡-蛋”问题:
有地图定位很容易,有定位建图也不难;
但机器人的里程计精度会逐渐降低,因此建图的时候需要同时定位。
影响建图的难度的因素有:
尺寸,感知和执行的噪声,感知模糊度(不同地方的相似度),闭环场景。
本章首先假设定位已知,然后介绍一系列算法,统称为occupancy grids。
占据栅格地图课从有噪、不确定的测量数据中构建连续的地图。
其思想是用一个在均匀分布的栅格中的随机变量场来表示地图。
每一个随机变量都是二值的,对应其位置是否被占据。
占据栅格地图算法实现了这些随机变量的后验概率估计。
这种地图的用处在于后加工(post-processing)。
因为SLAM产生的地图不适于路径规划与导航,
因此经常在SLAM之后使用占据栅格地图地图算法。
2. 占据栅格建图算法
目标是计算地图后验 p ( m ∣ z 1 : t , x 1 : t ) p(m|z_{1:t},x_{1:t}) p(m∣z1:t,x1:t)。
由于假设位姿信息已知,因此无需控制信息 u u u。
算法使用的是高分辨率的栅格,最常用的领域是二维建筑平面图。
算法也可以泛化至三维,但计算量很大。
把第 i i i个格子记为 m i \bm{m}_i mi;
栅格地图由有限多个格子构成,即 m = ∑ i m i m=\sum_i\bm{m}_i m=∑imi。
每个 m i \bm{m}_i mi都可以取两个值,1为占据,0为自由。
表达式 p ( m i = 1 ) p(\bm{m}_i=1) p(mi=1)和 p ( m i ) p(\bm{m}_i) p(mi)均指格子被占据的概率。
地图后验的问题在于其维度。
解决的标准做法是估计所有小格子的概率,即 p ( m i ∣ z 1 : t , x 1 : t p(\bm{m}_i|z_{1:t},x_{1:t} p(mi∣z1:t,x1:t。
这样就不能表征相邻格子之间的相关性,即假设格子间独立:
p ( m ∣ z 1 : t , x 1 : t ) = Π i p ( m i ∣ z 1 : t , x 1 : t p(m|z_{1:t},x_{1:t})=\Pi_i p(\bm{m}_i|z_{1:t},x_{1:t} p(m∣z1:t,x1:t)=Πip(mi∣z1:t,x1:t
可以使用二项贝叶斯滤波器来估计每个格子的值,参考章节4.1.4。
滤波器中使用log-odds表示,即
l t , i = log p ( m i ∣ z 1 : t , x 1 : t ) 1 − p ( m i ∣ z 1 : t , x 1 : t ) l_{t,i}=\log\frac{p(\bm{m}_i|z_{1:t},x_{1:t})}{1-p(\bm{m}_i|z_{1:t},x_{1:t})} lt,i=log1−p(mi∣z1:t,x1:t)p(mi∣z1:t,x1:t)
这种表达的优点是可以回避逼近0值或1值时的数值不稳定问题。
由log-odds ratio计算概率表达式:
p ( m i ∣ z 1 : t , x 1 : t ) = 1 − 1 1 + exp { l t , i } p(\bm{m}_i|z_{1:t},x_{1:t})=1-\frac{1}{1+\exp \{l_{t,i}\}} p(mi∣z1:t,x1:t)=1−1+exp{
lt,i}