深度解讀卡爾曼濾波原理

2020/6/24 10:43:03??????點擊:

在網(wǎng)上看了不少與卡爾曼濾波相關的博客、論文,要么是只談理論、缺乏感性,或者有感性認識,缺乏理論推導。能兼顧二者的少之又少,直到我看到了國外的一篇博文,真的驚艷到我了,不得不佩服作者這種細致入微的精神,翻譯過來跟大家分享一下。


我不得不說說卡爾曼濾波,因為它能做到的事情簡直讓人驚嘆!意外的是很少有軟件工程師和科學家對對它有所了解,這讓我感到沮喪,因為卡爾曼濾波是一個如此強大的工具,能夠在不確定性中融合信息,與此同時,它提取精確信息的能力看起來不可思議。


什么是卡爾曼濾波?


你可以在任何含有不確定信息的動態(tài)系統(tǒng)中使用卡爾曼濾波,對系統(tǒng)下一步的走向做出有根據(jù)的預測,即使伴隨著各種干擾,卡爾曼濾波總是能指出真實發(fā)生的情況。


連續(xù)變化的系統(tǒng)中使用卡爾曼濾波是非常理想的,它具有占用內存小的優(yōu)點(除了前一個狀態(tài)量外,不需要保留其它歷史數(shù)據(jù)),并且速度很快,很適合應用于實時問題和嵌入式系統(tǒng)。


在Google上找到的大多數(shù)關于實現(xiàn)卡爾曼濾波的數(shù)學公式看起來有點晦澀難懂,這個狀況有點糟糕。實際上,如果以正確的方式看待它,卡爾曼濾波是非常簡單和容易理解的,下面我將用漂亮的圖片和色彩清晰的闡述它,你只需要懂一些基本的概率和矩陣的知識就可以了。


我們能用卡爾曼濾波做什么?


用玩具舉例:你開發(fā)了一個可以在樹林里到處跑的小機器人,這個機器人需要知道它所在的確切位置才能導航。


注意這個狀態(tài)只是關于這個系統(tǒng)基本屬性的一堆數(shù)字,它可以是任何其它的東西。在這個例子中是位置和速度,它也可以是一個容器中液體的總量,汽車發(fā)動機的溫度,用戶手指在觸摸板上的位置坐標,或者任何你需要跟蹤的信號。


這個機器人帶有GPS,精度大約為10米,還算不錯,但是,它需要將自己的位置精確到10米以內。樹林里有很多溝壑和懸崖,如果機器人走錯了一步,就有可能掉下懸崖,所以只有GPS是不夠的。

或許我們知道一些機器人如何運動的信息:例如,機器人知道發(fā)送給電機的指令,知道自己是否在朝一個方向移動并且沒有人干預,在下一個狀態(tài),機器人很可能朝著相同的方向移動。當然,機器人對自己的運動是一無所知的:它可能受到風吹的影響,輪子方向偏了一點,或者遇到不平的地面而翻倒。所以,輪子轉過的長度并不能精確表示機器人實際行走的距離,預測也不是很完美。


GPS 傳感器告訴了我們一些狀態(tài)信息,我們的預測告訴了我們機器人會怎樣運動,但都只是間接的,并且伴隨著一些不確定和不準確性。但是,如果使用所有對我們可用的信息,我們能得到一個比任何依據(jù)自身估計更好的結果嗎?回答當然是YES,這就是卡爾曼濾波的用處。


卡爾曼濾波是如何看到你的問題的


下面我們繼續(xù)以只有位置和速度這兩個狀態(tài)的簡單例子做解釋。


我們并不知道實際的位置和速度,它們之間有很多種可能正確的組合,但其中一些的可能性要大于其它部分:

卡爾曼濾波假設兩個變量(位置和速度,在這個例子中)都是隨機的,并且服從高斯分布。每個變量都有一個均值 μ,表示隨機分布的中心(最可能的狀態(tài)),以及方差

,表示不確定性。

在上圖中,位置和速度是不相關的,這意味著由其中一個變量的狀態(tài)無法推測出另一個變量可能的值。下面的例子更有趣:位置和速度是相關的,觀測特定位置的可能性取決于當前的速度:

這種情況是有可能發(fā)生的,例如,我們基于舊的位置來估計新位置。如果速度過高,我們可能已經(jīng)移動很遠了。如果緩慢移動,則距離不會很遠。跟蹤這種關系是非常重要的,因為它帶給我們更多的信息:其中一個測量值告訴了我們其它變量可能的值,這就是卡爾曼濾波的目的,盡可能地在包含不確定性的測量數(shù)據(jù)中提取更多信息!


這種相關性用協(xié)方差矩陣來表示,簡而言之,矩陣中的每個元素表示第 i 個和第 j 個狀態(tài)變量之間的相關度。(你可能已經(jīng)猜到協(xié)方差矩陣是一個對稱矩陣,這意味著可以任意交換 i 和 j)。協(xié)方差矩陣通常用“”來表示,其中的元素則表示為“”。