從一維到多維理解卡爾曼濾波
寫在前面
- 本文以移動機器人定位問題(Localization)爲例
- 借鑑Udacity課程:AI for Robotics
- 對於一切問題,降維思考都是個好辦法
卡爾曼濾波的核心思想
- 根據上一個狀態得到當前狀態的 “帶誤差的預測值”;
- 在當前狀態使用某種測量工具得到 “帶誤差的測量值”;
- 根據上述兩個值計算得到當前狀態的最優值;
- 在當前狀態的最優值基礎上,加上該狀態要發生的動作,得到下一狀態帶誤差的預測值
一維卡爾曼濾波
一維高斯分佈 (Gaussian Distribution)
要講卡爾曼濾波,就不得不說高斯分佈,因爲**“帶誤差的預測值”和“帶誤差的測量值”均爲高斯分佈**,卡爾曼濾波的工作就是整合這兩個值的高斯分佈。
任意高斯分佈都可以由 來表徵, 爲高斯分佈的均值,則爲方差
由圖可明顯看出,大小對高斯分佈的影響如下:
- 決定了高斯分佈對稱軸或者說峯值的位置
- 決定了高斯分佈的寬度(和高度)。
- 越大,誤差越大,Gaussian越矮胖;
- 反之,誤差越小,Gaussian越高瘦;
- 由於Gaussian曲線下的面積恆等於1,就決定了越寬的Gaussian峯值越小,越窄的Gaussian峯值越高。
公式
這裏有必要給出Gaussian的公式:
卡爾曼濾波利用Gaussian在重複地做這兩件事:
- 測量值更新(Measurement updates)
- 預測值(動作)更新(Prediction/Motion updates)
上述兩個值的更新方式分兩種:直接乘積(product) 和 卷積(convolution)
- 對於測量值使用直接乘積,貝葉斯定理來計算
- 對於預測值使用卷積,
測量值更新(Measurement updates)
現假設你正在定位一個機器人,位置的先驗分佈(上一步的預測值,在下一節介紹)爲黑色曲線,接着由傳感器測量得到了如藍色曲線一樣的測量值曲線。
那麼很明顯兩個數據融合之後的Gaussian變爲
- 均值在 和 之間,且更靠近 (因爲藍色曲線的方差更小,對位置的估計更加精確,所以我們更信任它),
- 峯值也較兩個組成的Gaussian更高(因爲在借鑑了兩組數據之後,我們對位置更加確信,方差更小)
公式
測量值Gaussian參數按如下公式更新
預測值(動作)更新(Prediction/Motion updates)
預測值的更新就簡單了,均值和方差都是直接求和。當我們將預測值視作機器人的動作更新的話,就好理解了。藍色曲線代表目前位置的最優估計(根據上一節的測量值更新得到),綠色曲線代表下一步要運動的距離(有誤差,可以理解爲要讓電機轉多少圈)。那麼下一時刻的預測位置是不是就是目前位置+運動距離了?誤差是不是也變成了二者誤差的和了?
預測值Gaussian參數按如下公式更新:
總結
以上即爲一維卡爾曼濾波。總結一下:
- 我們使用測量值更新來融合 傳感器測量到的帶誤差的位置信息 以及 基於上一狀態的預測信息,得到當前狀態的最優位置估計 (Measurement updates)
- 根據 下一步要進行的動作 以及 當前狀態的最優位置估計,得到下一狀態的預測值 (Prediction/Motion updates)
卡爾曼濾波就是這麼簡單的兩步循環,不斷藉助多方數據,逼近實際值。
多維卡爾曼濾波
在多維空間中,卡爾曼濾波不僅能估計位置(傳感器僅能夠測量位置),還能夠根據數據估計出速度信息,因此多爲卡爾曼濾波可以綜合速度信息估計出未來位置。
多元高斯
設空間維度爲n
- 均值是一個n維的向量
- 方差變爲協方差,是一個 階矩陣
以二維高斯爲例, 表示均值,兩個維度之間是相關的。
等高線越小的Gaussian不確定性越小,下圖橫軸上的不確定性很小,但縱軸方向的不確定性很大。如果將橫軸視作位置,縱軸視作速度,我們根據單次測量值得到的Gaussian就是這樣。(因爲我們假設傳感器只能測量到位置信息,所以速度的不確定性巨大)
以(1,0)爲起點,速度爲1,則下一時刻應在(2,1)點
同理,以(1,0)爲起點,速度爲2,則下一時刻應在(3,2)點
由此可知藍色的一維信息和紅色的二維信息是有關係的。
測量值更新
接下來,單看第二狀態的測量值(綠色等高線),將其與狀態先驗(紅色等高線)相乘,即得到該狀態速度和位置的最優估計(黑色等高線),很明顯得到的估計值只有很小的不確定性。
預測值更新
新位置的預測值只有位置信息,和一維的情況一樣,公式爲
新位置也可以視作當前位置加上速度
多維卡爾曼濾波器設計
參數說明 | 預測值更新公式 |
---|---|
: 當前位置估計 | |
: 協方差矩陣 | |
狀態轉移矩陣 | 測量值更新公式 |
: 動作向量 | |
測量值 | |
測量矩陣 | |
測量誤差 | |
單位矩陣 |