本篇文章主要內容是簡介 Probabilistic Robotics 書中的 9.2 章:Occupancy Grid Mapping。本文延續了前文狀態估計的內容,所用的數學記號跟前文一樣。
如何表示場景中的地圖?
Occupancy Grid Mapping 的模型是將整個場景分成許多的小網格 mi,並且用 m 表示整張地圖。每個小網格都有兩個值 0 或 1,代表此網格是否被占用,被占用的小網格上面可能就是有牆壁或是其他障礙物等等。在計算地圖時我們想要算的是以下式子:
p(m∣z1:t,x1:t)
意思是利用到目前為止所有的狀態 x1:t 以及觀測資料 z1:t 給定的情況之下來算出整個地圖的機率。
上式的問題在於 m 的維度,比如說如果整個場景中有 10000 個小網格,整個場景地圖的所有可能性為 210000,因此為了方便計算我們先假設每個小網格都是獨立的,也就是:
p(m∣z1:t,x1:t)=∏ip(mi∣z1:t,x1:t)
接下來的部分就是要從上式推導出一個實務上可用的演算法。
推導 Occupancy Grid Mapping 式子
我們從上式開始推導。推導的過程中會用到一些數學假設,在前文中有比較詳細的介紹:
p(mi∣z1:t,x1:t)=p(zt∣mi,z1:t−1,x1:t)p(mi∣z1:t−1,x1:t)p(zt∣z1:t−1,x1:t)
上式用了貝氏定理。接下來我們利用前文提到的馬可夫假設可以把 p(zt∣mi,z1:t−1,x1:t) 代換成 p(zt∣mi,xt),再用貝氏定理把 p(zt∣mi,xt) 代換一次:
p(zt∣mi,xt)=p(mi∣zt,xt)p(zt∣xt)p(mi∣xt)
另外同樣用馬可夫假設把 p(mi∣z1:t−1,x1:t) 代換成 p(mi∣z1:t−1,x1:t−1),因為少一個 xt 並不會影響計算地圖網格 mi 的結果。
將上述兩者代回原式:
p(mi∣z1:t,x1:t)=p(zt∣mi,z1:t−1,x1:t)p(mi∣z1:t−1,x1:t−1)p(zt∣z1:t−1,x1:t)=p(mi∣zt,xt)p(zt∣xt)p(mi∣z1:t−1,x1:t−1)p(mi∣xt)p(zt∣z1:t−1,x1:t)
另外,光是只有 xt 不會影響計算地圖網格 mi 的結果,所以 p(mi∣xt)=p(mi),代回上式可得:
p(mi∣z1:t,x1:t)=p(mi∣zt,xt)p(zt∣xt)p(mi∣z1:t−1,x1:t−1)p(mi)p(zt∣z1:t−1,x1:t)
如何從 t-1 時間的地圖推得 t 時間的地圖?
跟前文一樣,我們想要一步一步隨著時間更新地圖,也就是從 t-1 時間的地圖來推至 t 時間的地圖。這裡會用到的技巧是計算機率的發生比(Odds),也就是:p(x)1−p(x)把 Occupancy Grid Mapping 的發生比寫出來可以得到以下式子:
p(mi∣z1:t,x1:t)p(¬mi∣z1:t,x1:t)=p(mi∣zt,xt)p(zt∣xt)p(mi∣z1:t−1,x1:t−1)p(mi)p(zt∣z1:t−1,x1:t)∗p(¬mi)p(zt∣z1:t−1,x1:t)p(¬mi∣zt,xt)p(zt∣xt)p(¬mi∣z1:t−1,x1:t−1)=p(mi∣zt,xt)p(mi∣z1:t−1,x1:t−1)p(¬mi)p(¬mi∣zt,xt)p(¬mi∣z1:t−1,x1:t−1)p(mi)
接下來用一個函數 l(x)=log(p(x)/1−p(x)) 來代換上式:
l(mi∣z1:t,x1:t)=l(mi∣zt,xt)+l(mi∣z1:t−1,x1:t−1)−l(mi)
上面的式子就是我們要的結果了!因為 t 時間的 l(mi∣z1:t,x1:t) 可以從 t-1 時間的 l(mi∣z1:t−1,x1:t−1) 推導而來。另外 l(mi) 為此地圖的先驗,而 l(mi∣zt,xt) 稱為 inverse sensor model,計算的細節請參考 Probablistic Robotics 書中的介紹。
結論
本文介紹了 Occupancy Grid Mapping 的模型,並且也推導了演算法用到的式子。跟前文狀態估計一樣,我們推導的是遞迴式子,也就是從 t-1 時間可以推導出 t 時間的地圖機率。
沒有留言:
張貼留言