對於機器人感知任務而言,經常需要預判物體的運動,保證機器人在物體與自身接觸之前進行規避。比如無人機與障礙物的碰撞,足球機器人判斷足球的位置。預判的前提是對當前狀態進行准確的估計,比如足球的速度,障礙物靠近的速度。一般認為,測量是存在誤差的 —— 眼見未必為實。
1、物體的運動學模型
物體的運動學模型使用狀態向量來表達。以2維空間的質點運動為例,物體的運動學模型可以表達為 x = [ px py vx vy ]' 。其中 px py 表示物體的位置,vx vy 表示物體的速度。如果能夠准確估計物體當前狀態x 就可以對其一段時間后的狀態進行判斷。然而當前狀態的測量噪聲會對x 的估計產生干擾。Kalman Filter 的作用就是去除這些干擾。
卡爾曼濾波器的原理是使用馬爾科夫鏈來對隨機變量進行推測。馬爾科夫鏈是一種特殊的貝葉斯網絡,所以卡爾曼濾波器實際上是一種貝葉斯濾波器。其Graph Model 如下所示:
這里需要指出的是 Xt-1 實際是未知的,但是我們以其估計量來作為實際值的最優估計。對於給定PGM,我們使用高斯分布來對隨機變量進行建模 —— 高斯分布的幾大優點見上篇博客。在不考慮子節點(還沒有發生),父節點又被認為是給定的情況下,當前節點的CPD可以認為是父節點與觀測節點的Factor product. 如果我們使用高斯模型進行建模,則factor 如下:
其中,A代表轉移矩陣,給定 t 時刻的狀態,t+1時刻則由轉移矩陣確定。vm 則表示轉移噪聲 —— t+1 時刻與 t 時刻中,速度不是常量。 vo 表示觀測噪聲 —— 我們對測量的肯定程度。使用高斯模型建模后,我們可以得到p(xt+1|xt) 與p(zt|xt) 的分布。第一個定義了xt+1|xt 的 factor ,第二個定義了觀測模型的factor. 於是,我們可以用貝葉斯公式求取 p(xt|xt-1, zt-1 ) .
這里需要指出的是,一旦給定了zt 的父節點 xt , 那么zt 和 xt-1 是 d- Seperate 的。所以 P(zt|xt,xt-1) = P(zt|xt).
2、最大后驗估計
最大后驗估計對象如上,按照上述公式即可實現卡爾曼濾波器。實現后的誤差及預測結果如圖:
卡爾曼濾波器的設計技巧在於,如果物體不是勻加速運動(如足球的滾動),那么位置方差可以給的較小(認為我們的運動跟蹤算法幀率足夠高,且相機檢測夠准),但是!!!速度方差一定要給的夠大,以保證能夠模擬變加速狀態!!!