Occupancy Map(Occupancy Grid)的更新

文章同步更新于github page

文章目录

  • Occupancy Map
  • Odds
  • Odds的更新
  • 对数Odds

Occupancy Map

将空间划分为一个个小网格(cell),每个cell中存储cell内是否有障碍物的概率,这样的地图称为Occupancy Map,由于所有cell构成一个网,所以也称为Grid Map。

以2D Occupancy Map为例,每个cell中都有一个概率,那整个地图可以看做一个描述障碍物分布的概率分布(严格要归一化后才是概率分布)。构建地图的过程,就是根据传感器(比如Lider)的观测,更新这个概率分布。

设每个cell的概率相对于其他cell是独立的,更新地图的概率分布就简化为更新每个cell的概率。即在已知1到t时刻所有观测的情况下,该cell中有障碍物的概率,记为

p ( m i ∣ z 1 : t ) p(m_i|z_{1:t}) p(miz1:t)

Odds

考虑到更新的方便,每个cell中实际存储的是概率对应的Odds。

Odds定义为有障碍物的概率与无障碍物概率的比,即

o ( m i ∣ z 1 : t ) = p ( m i ∣ z 1 : t ) 1 − p ( m i ∣ z 1 : t ) = p ( m i ∣ z 1 : t ) p ( ¬ m i ∣ z 1 : t ) o(m_i|z_{1:t})=\frac{p(m_i|z_{1:t})}{1 - p(m_i|z_{1:t})} = \frac{p(m_i|z_{1:t})}{p(\neg m_i|z_{1:t})} o(miz1:t)=1p(miz1:t)p(miz1:t)=p(¬miz1:t)p(miz1:t)

已知Odds,也很容易反算出对应的概率。可以将Odds理解为一个映射,将值域在 [ 0 , 1 ] [0, 1] [0,1]之间的概率映射到 [ 0 , + ∞ ) [0,+\infty) [0,+)

Odds的更新

根据贝叶斯公式,有

p ( m i ∣ z 1 : t ) = p ( z t ∣ m i , z 1 : t − 1 ) p ( m i ∣ z 1 : t − 1 ) p ( z t ∣ z 1 : t − 1 ) p(m_i|z_{1:t})=\frac{p(z_t|m_i, z_{1:t-1})p(m_i|z_{1:t-1})}{p(z_t|z_{1:t-1})} p(miz1:t)=p(ztz1:t1)p(ztmi,z1:t1)p(miz1:t1)

根据Markov假设,已知障碍物 m i m_i mi的情况下,观测结果与之前的观测无关,则

p ( m i ∣ z 1 : t ) = p ( z t ∣ m i ) p ( m i ∣ z 1 : t − 1 ) p ( z t ∣ z 1 : t − 1 ) p(m_i|z_{1:t})=\frac{p(z_t|m_i)p(m_i|z_{1:t-1})}{p(z_t|z_{1:t-1})} p(miz1:t)=p(ztz1:t1)p(ztmi)p(miz1:t1)

于是根据Odds的定义,可得

o ( m i ∣ z 1 : t ) = p ( m i ∣ z 1 : t ) p ( ¬ m i ∣ z 1 : t ) = p ( z t ∣ m i ) p ( m i ∣ z 1 : t − 1 ) p ( z t ∣ ¬ m i ) p ( ¬ m i ∣ z 1 : t − 1 ) = p ( z t ∣ m i ) p ( z t ∣ ¬ m i ) ⋅ o ( m i ∣ z 1 : t − 1 ) = p ( m i ∣ z t ) p ( z t ) / p ( m i ) p ( ¬ m i ∣ z t ) p ( z t ) / p ( ¬ m i ) ⋅ o ( m i ∣ z 1 : t − 1 )     再次利用了贝叶斯公式 = o ( m i ∣ z t ) ⋅ o ( m i ∣ z 1 : t − 1 ) ⋅ p ( ¬ m i ) p ( m i ) ⎵ prior \begin{aligned} o(m_i|z_{1:t})&=\frac{p(m_i|z_{1:t})}{p(\neg m_i|z_{1:t})} \\ &=\frac{p(z_t|m_i)p(m_i|z_{1:t-1})}{p(z_t|\neg m_i)p(\neg m_i|z_{1:t-1})} \\ &=\frac{p(z_t|m_i)}{p(z_t|\neg m_i)}\cdot o(m_i|z_{1:t-1}) \\ &=\frac{p(m_i|z_t)p(z_t)/p(m_i)}{p(\neg m_i|z_t)p(z_t)/p(\neg m_i)} \cdot o(m_i|z_{1:t-1}) \ \ \ \ \text{再次利用了贝叶斯公式} \\ &=o(m_i|z_t)\cdot o(m_i|z_{1:t-1})\cdot \underbrace{\frac{p(\neg m_i)}{p(m_i)}}_{\text{prior}} \end{aligned} o(miz1:t)=p(¬miz1:t)p(miz1:t)=p(zt¬mi)p(¬miz1:t1)p(ztmi)p(miz1:t1)=p(zt¬mi)p(ztmi)o(miz1:t1)=p(¬mizt)p(zt)/p(¬mi)p(mizt)p(zt)/p(mi)o(miz1:t1)    再次利用了贝叶斯公式=o(mizt)o(miz1:t1)prior p(mi)p(¬mi)

在没有观测的情况下,一般假设cell有障碍物的概率为0.5,即 p ( m i ) = p ( ¬ m i ) = 0.5 p(m_i)=p(\neg m_i)=0.5 p(mi)=p(¬mi)=0.5,所以最终有

o ( m i ∣ z 1 : t ) = o ( m i ∣ z t ) ⋅ o ( m i ∣ z 1 : t − 1 ) o(m_i|z_{1:t})=o(m_i|z_t)\cdot o(m_i|z_{1:t-1}) o(miz1:t)=o(mizt)o(miz1:t1)

即更新某个cell的Odds时,只需用新的观测结果对应的Odds,乘以该cell原本的Odds即可。

比如Lider击中cell中的物体,并返回一个距离值,这时可认为cell中有障碍物的概率为0.9,即 p ( m i ∣ h i t ) = 0.9 p(m_i|hit)=0.9 p(mihit)=0.9,对应的Odds就是 o ( m i ∣ h i t ) = 9 o(m_i|hit)=9 o(mihit)=9,如果激光没有击中任何东西,则其传输路径上的所有cell存在障碍物的概率就较低,设为 p ( m i ∣ l o s s ) = 0.2 p(m_i|loss)=0.2 p(miloss)=0.2,对应的Odds即 o ( m i ∣ l o s s ) = 0.25 o(m_i|loss)=0.25 o(miloss)=0.25。这样,Odds的更新就变成了根据激光的返回情况,选择乘以9还是0.25。

对数Odds

更进一步的,可以对Odds取对数,每个cell中保存的也是Odds的对数值,则Odds的更新变为

log ⁡ o ( m i ∣ z 1 : t ) = log ⁡ o ( m i ∣ z t ) + log ⁡ o ( m i ∣ z 1 : t − 1 ) \log o(m_i|z_{1:t})=\log o(m_i|z_t) + \log o(m_i|z_{1:t-1}) logo(miz1:t)=logo(mizt)+logo(miz1:t1)

即将乘法变为了加法,在 log ⁡ o ( m i ∣ z t ) \log o(m_i|z_t) logo(mizt)是几个已知常数值的情况下(如之前Lider的例子),这种方式更高效。

你可能感兴趣的:(Robotics)