Loading [MathJax]/jax/output/CommonHTML/jax.js

2020年6月28日 星期日

構建地圖 Occupancy Grid Mapping(機器人學簡介)

本篇文章主要內容是簡介 Probabilistic Robotics 書中的 9.2 章:Occupancy Grid Mapping。本文延續了前文狀態估計的內容,所用的數學記號跟前文一樣。

如何表示場景中的地圖?

Occupancy Grid Mapping 的模型是將整個場景分成許多的小網格 mi,並且用 m 表示整張地圖。每個小網格都有兩個值 0 或 1,代表此網格是否被占用,被占用的小網格上面可能就是有牆壁或是其他障礙物等等。在計算地圖時我們想要算的是以下式子: p(mz1:t,x1:t) 意思是利用到目前為止所有的狀態 x1:t 以及觀測資料 z1:t 給定的情況之下來算出整個地圖的機率。

上式的問題在於 m 的維度,比如說如果整個場景中有 10000 個小網格,整個場景地圖的所有可能性為 210000,因此為了方便計算我們先假設每個小網格都是獨立的,也就是: p(mz1:t,x1:t)=ip(miz1:t,x1:t) 接下來的部分就是要從上式推導出一個實務上可用的演算法。

推導 Occupancy Grid Mapping 式子

我們從上式開始推導。推導的過程中會用到一些數學假設,在前文中有比較詳細的介紹: p(miz1:t,x1:t)=p(ztmi,z1:t1,x1:t)p(miz1:t1,x1:t)p(ztz1:t1,x1:t) 上式用了貝氏定理。接下來我們利用前文提到的馬可夫假設可以把 p(ztmi,z1:t1,x1:t) 代換成 p(ztmi,xt),再用貝氏定理把 p(ztmi,xt) 代換一次: p(ztmi,xt)=p(mizt,xt)p(ztxt)p(mixt)
另外同樣用馬可夫假設把 p(miz1:t1,x1:t) 代換成 p(miz1:t1,x1:t1),因為少一個 xt 並不會影響計算地圖網格 mi 的結果。

將上述兩者代回原式: p(miz1:t,x1:t)=p(ztmi,z1:t1,x1:t)p(miz1:t1,x1:t1)p(ztz1:t1,x1:t)=p(mizt,xt)p(ztxt)p(miz1:t1,x1:t1)p(mixt)p(ztz1:t1,x1:t) 另外,光是只有 xt 不會影響計算地圖網格 mi 的結果,所以 p(mixt)=p(mi),代回上式可得: p(miz1:t,x1:t)=p(mizt,xt)p(ztxt)p(miz1:t1,x1:t1)p(mi)p(ztz1:t1,x1:t)

如何從 t-1 時間的地圖推得 t 時間的地圖?

跟前文一樣,我們想要一步一步隨著時間更新地圖,也就是從 t-1 時間的地圖來推至 t 時間的地圖。這裡會用到的技巧是計算機率的發生比(Odds),也就是:p(x)1p(x)把 Occupancy Grid Mapping 的發生比寫出來可以得到以下式子: p(miz1:t,x1:t)p(¬miz1:t,x1:t)=p(mizt,xt)p(ztxt)p(miz1:t1,x1:t1)p(mi)p(ztz1:t1,x1:t)p(¬mi)p(ztz1:t1,x1:t)p(¬mizt,xt)p(ztxt)p(¬miz1:t1,x1:t1)=p(mizt,xt)p(miz1:t1,x1:t1)p(¬mi)p(¬mizt,xt)p(¬miz1:t1,x1:t1)p(mi) 接下來用一個函數 l(x)=log(p(x)/1p(x)) 來代換上式: l(miz1:t,x1:t)=l(mizt,xt)+l(miz1:t1,x1:t1)l(mi) 上面的式子就是我們要的結果了!因為 t 時間的 l(miz1:t,x1:t) 可以從 t-1 時間的 l(miz1:t1,x1:t1) 推導而來。另外 l(mi) 為此地圖的先驗,而 l(mizt,xt) 稱為 inverse sensor model,計算的細節請參考 Probablistic Robotics 書中的介紹。

結論

本文介紹了 Occupancy Grid Mapping 的模型,並且也推導了演算法用到的式子。跟前文狀態估計一樣,我們推導的是遞迴式子,也就是從 t-1 時間可以推導出 t 時間的地圖機率。

沒有留言:

張貼留言