深度解讀:卡爾曼濾波,如此強大的工具 你值得弄懂!

2020-12-06 電子工程專輯


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

原文連結:http://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/


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


什麼是卡爾曼濾波?


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


連續變化的系統中使用卡爾曼濾波是非常理想的,它具有佔用內存小的優點(除了前一個狀態量外,不需要保留其它歷史數據),並且速度很快,很適合應用於實時問題和嵌入式系統。


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


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


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



我們可以說機器人有一個狀態,表示位置和速度:

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


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


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


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


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


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


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



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



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



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


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



使用矩陣來描述問題


我們基於高斯分布來建立狀態變量,所以在時刻 k 需要兩個信息:最佳估計(即均值,其它地方常用 μ 表示),以及協方差矩陣


(1)


(當然,在這裡我們只用到了位置和速度,實際上這個狀態可以包含多個變量,代表任何你想表示的信息)。接下來,我們需要根據當前狀態(k-1 時刻)來預測下一狀態(k 時刻)。記住,我們並不知道對下一狀態的所有預測中哪個是「真實」的,但我們的預測函數並不在乎。它對所有的可能性進行預測,並給出新的高斯分布。



我們可以用矩陣來表示這個預測過程:



它將我們原始估計中的每個點都移動到了一個新的預測位置,如果原始估計是正確的話,這個新的預測位置就是系統下一步會移動到的位置。那我們又如何用矩陣來預測下一個時刻的位置和速度呢?下面用一個基本的運動學公式來表示:



現在,我們有了一個預測矩陣來表示下一時刻的狀態,但是,我們仍然不知道怎麼更新協方差矩陣。此時,我們需要引入另一個公式,如果我們將分布中的每個點都乘以矩陣 A,那麼它的協方差矩陣會怎樣變化呢?很簡單,下面給出公式:


結合方程(4)和(3)得到:


外部控制量


我們並沒有捕捉到一切信息,可能存在外部因素會對系統進行控制,帶來一些與系統自身狀態沒有相關性的改變。


以火車的運動狀態模型為例,火車司機可能會操縱油門,讓火車加速。相同地,在我們機器人這個例子中,導航軟體可能會發出一個指令讓輪子轉向或者停止。如果知道這些額外的信息,我們可以用一個向量來表示,將它加到我們的預測方程中做修正。


假設由於油門的設置或控制命令,我們知道了期望的加速度,根據基本的運動學方程可以得到:



以矩陣的形式表示就是:




稱為控制矩陣,稱為控制向量(對於沒有外部控制的簡單系統來說,這部分可以忽略)。讓我們再思考一下,如果我們的預測並不是100%準確的,該怎麼辦呢?


外部幹擾


如果這些狀態量是基於系統自身的屬性或者已知的外部控制作用來變化的,則不會出現什麼問題。


但是,如果存在未知的幹擾呢?例如,假設我們跟蹤一個四旋翼飛行器,它可能會受到風的幹擾,如果我們跟蹤一個輪式機器人,輪子可能會打滑,或者路面上的小坡會讓它減速。這樣的話我們就不能繼續對這些狀態進行跟蹤,如果沒有把這些外部幹擾考慮在內,我們的預測就會出現偏差。


在每次預測之後,我們可以添加一些新的不確定性來建立這種與「外界」(即我們沒有跟蹤的幹擾)之間的不確定性模型:



原始估計中的每個狀態變量更新到新的狀態後,仍然服從高斯分布。我們可以說的每個狀態變量移動到了一個新的服從高斯分布的區域,協方差為。換句話說就是,我們將這些沒有被跟蹤的幹擾當作協方差為的噪聲來處理。



這產生了具有不同協方差(但是具有相同的均值)的新的高斯分布。



我們通過簡單地添加得到擴展的協方差,下面給出預測步驟的完整表達式:



由上式可知,新的最優估計是根據上一最優估計預測得到的,並加上已知外部控制量的修正。


新的不確定性上一不確定性預測得到,並加上外部環境的幹擾。


好了,我們對系統可能的動向有了一個模糊的估計,用來表示。如果再結合傳感器的數據會怎樣呢?


用測量值來修正估計值


我們可能會有多個傳感器來測量系統當前的狀態,哪個傳感器具體測量的是哪個狀態變量並不重要,也許一個是測量位置,一個是測量速度,每個傳感器間接地告訴了我們一些狀態信息。



注意,傳感器讀取的數據的單位和尺度有可能與我們要跟蹤的狀態的單位和尺度不一樣,我們用矩陣來表示傳感器的數據。



我們可以計算出傳感器讀數的分布,用之前的表示方法如下式所示:



卡爾曼濾波的一大優點就是能處理傳感器噪聲,換句話說,我們的傳感器或多或少都有點不可靠,並且原始估計中的每個狀態可以和一定範圍內的傳感器讀數對應起來。



從測量到的傳感器數據中,我們大致能猜到系統當前處於什麼狀態。但是由於存在不確定性,某些狀態可能比我們得到的讀數更接近真實狀態。



我們將這種不確定性(例如:傳感器噪聲)用協方差表示,該分布的均值就是我們讀取到的傳感器數據,稱之為


現在我們有了兩個高斯分布,一個是在預測值附近,一個是在傳感器讀數附近。



我們必須在預測值(粉紅色)和傳感器測量值(綠色)之間找到最優解。


那麼,我們最有可能的狀態是什麼呢?對於任何可能的讀數,有兩種情況:(1)傳感器的測量值;(2)由前一狀態得到的預測值。如果我們想知道這兩種情況都可能發生的概率,將這兩個高斯分布相乘就可以了。



剩下的就是重疊部分了,這個重疊部分的均值就是兩個估計最可能的值,也就是給定的所有信息中的最優估計。


瞧!這個重疊的區域看起來像另一個高斯分布。



如你所見,把兩個具有不同均值和方差的高斯分布相乘,你會得到一個新的具有獨立均值和方差的高斯分布!下面用公式講解。


融合高斯分布


先以一維高斯分布來分析比較簡單點,具有方差和 μ 的高斯曲線可以用下式表示:



如果把兩個服從高斯分布的函數相乘會得到什麼呢?



將式(9)代入到式(10)中(注意重新歸一化,使總概率為1)可以得到:



將式(11)中的兩個式子相同的部分用 k 表示:



下面進一步將式(12)和(13)寫成矩陣的形式,如果 Σ 表示高斯分布的協方差,表示每個維度的均值,則:



矩陣稱為卡爾曼增益,下面將會用到。放鬆!我們快要完成了!


將所有公式整合起來


我們有兩個高斯分布,預測部分,和測量部分,將它們放到式(15)中算出它們之間的重疊部分:



由式(14)可得卡爾曼增益為:



將式(16)和式(17)的兩邊同時左乘矩陣的逆(注意裡面包含了)將其約掉,再將式(16)的第二個等式兩邊同時右乘矩陣的逆得到以下等式:



上式給出了完整的更新步驟方程。就是新的最優估計,我們可以將它和放到下一個預測和更新方程中不斷迭代。



總結


以上所有公式中,你只需要用到式(7)、(18)、(19)。(如果忘了的話,你可以根據式(4)和(15)重新推導一下)


我們可以用這些公式對任何線性系統建立精確的模型,對於非線性系統來說,我們使用擴展卡爾曼濾波,區別在於EKF多了一個把預測和測量部分進行線性化的過程。

(ps: 第一次用Markdown,添加圖片和公式心累啊,什麼時候能直接拖拽就好了~~)


(轉自網絡,感謝原作者辛苦分享)

相關焦點

  • 深度解讀:卡爾曼濾波,如此強大的工具 你值得弄懂
    意外的是很少有軟體工程師和科學家對對它有所了解,這讓我感到沮喪,因為卡爾曼濾波是一個如此強大的工具,能夠在不確定性中融合信息,與此同時,它提取精確信息的能力看起來不可思議。什麼是卡爾曼濾波?你可以在任何含有不確定信息的動態系統中使用卡爾曼濾波,對系統下一步的走向做出有根據的預測,即使伴隨著各種幹擾,卡爾曼濾波總是能指出真實發生的情況。
  • 卡爾曼濾波,如此強大的工具,你值得弄懂!
    原文連結:http://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/我不得不說說卡爾曼濾波,因為它能做到的事情簡直讓人驚嘆!意外的是很少有軟體工程師和科學家對對它有所了解,這讓我感到沮喪,因為卡爾曼濾波是一個如此強大的工具,能夠在不確定性中融合信息,與此同時,它提取精確信息的能力看起來不可思議。
  • 深度解讀:卡爾曼濾波原理
    原文連結:http://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/我不得不說說卡爾曼濾波,因為它能做到的事情簡直讓人驚嘆!意外的是很少有軟體工程師和科學家對對它有所了解,這讓我感到沮喪,因為卡爾曼濾波是一個如此強大的工具,能夠在不確定性中融合信息,與此同時,它提取精確信息的能力看起來不可思議。
  • 卡爾曼與卡爾曼濾波
    60年代初,卡爾曼(R.E.Kalman)和布塞(R. S.Bucy)發表了一篇重要的論文《線性濾波和預測 理論的新成果》,提出了一種新的線性濾波和預測理由論,被稱之為卡爾曼濾波。特點是在線性狀態空間表示的基礎上對有噪聲的輸入和觀測信號進行處理,求取系統狀態或真實信號。
  • 詳解卡爾曼濾波原理
    意外的是很少有軟體工程師和科學家對對它有所了解,這讓我感到沮喪,因為卡爾曼濾波是一個如此強大的工具,能夠在不確定性中融合信息,與此同時,它提取精確信息的能力看起來不可思議。什麼是卡爾曼濾波?你可以在任何含有不確定信息的動態系統中使用卡爾曼濾波,對系統下一步的走向做出有根據的預測,即使伴隨著各種幹擾,卡爾曼濾波總是能指出真實發生的情況。
  • 卡爾曼濾波是怎麼回事?
    對於更複雜的濾波,比如維納濾波,則要根據信號的統計知識來設計權重。從統計信號處理的角度,降噪可以看成濾波的一種。降噪的目的在於突出信號本身而抑制噪聲影響。從這個角度,降噪就是給信號一個高的權重而給噪聲一個低的權重。維納濾波就是一個典型的降噪濾波器。卡爾曼濾波Kalman Filter 算法,是一種遞推預測濾波算法。
  • 卡爾曼濾波算法解析(一)
    ,但是在如今的資訊時代,卡爾曼濾波依舊是機器人導航中最為常見的一種算法。但我們都知道傳感器測量出來的數據是存在誤差的,假如你有一個傳感器GPS,這時候你得到的GPS信息:經度、緯度、高度跟實際值是有誤差的,而這個誤差如果剛好符合正態分布,那就能通過卡爾曼估計得到一個最優解。假如你有兩個傳感器,測的都是同一個位置信號,可是它們每次的讀數都不太一樣,應該怎麼辦呢?
  • 看完這篇卡爾曼濾波原理,我被驚到了!
    意外的是很少有軟體工程師和科學家對對它有所了解,這讓我感到沮喪,因為卡爾曼濾波是一個如此強大的工具,能夠在不確定性中融合信息,與此同時,它提取精確信息的能力看起來不可思議。 什麼是卡爾曼濾波? 你可以在任何含有不確定信息的動態系統中使用卡爾曼濾波,對系統下一步的走向做出有根據的預測,即使伴隨著各種幹擾,卡爾曼濾波總是能指出真實發生的情況。
  • 車載毫米波雷達之大話卡爾曼濾波
    所以,卡爾曼濾波在毫米波雷達的應用上,就扮演著至關重要的角色。卡爾曼&卡爾曼濾波什麼是卡爾曼濾波?卡爾曼濾波和傅立葉變換、泰勒級數一樣,都是以其發明人命名。稍微不同的是,卡爾曼是個現代人!卡爾曼是匈牙利數學家,1930年出生於匈牙利首都布達佩斯。
  • 卡爾曼濾波應用實例
    打開APP 卡爾曼濾波應用實例 發表於 2017-10-30 09:27:47
  • 透徹理解擴展卡爾曼濾波
    卡爾曼濾波是貝葉斯濾波的一種特例,是在線性濾波的前提下,以最小均方誤差為最佳準則的。估計線性高斯模型,是對線性模型和高斯分布的優化方法。邊緣分布和條件分布的模型:卡爾曼濾波器的主要參數卡爾曼濾波器假設x(paths), z(observations)都為線性高斯的:主要參數:A是在沒有命令的情況下,由於環境因素造成的機器人的位置移動。
  • 卡爾曼濾波及其衍生算法在SOC估計中的應用
    卡爾曼濾波作為一種去除幹擾數據,獲得優質估計結果的優秀算法,在許多領域得到應用。無人機定位、實驗數據處理以及動力電池的SOC、SOH等,需要作出參數估計的領域都有應用。本文意在初步的表述我可以理解到的卡爾曼濾波及其衍生算法的物理意義和算法間的區別。
  • 卡爾曼濾波的原理
    我們現在要學習的卡爾曼濾波器,正是源於他的博士論文和1960年發表的論文《A New Approach to Linear Filtering and Prediction Problems》(線性濾波與預測問題的新方法)。簡單來說,卡爾曼濾波器是一個「optimal recursive data processing algorithm(最優化自回歸數據處理算法)」。
  • 一篇教你看懂航天領域殿堂級理論——卡爾曼濾波
    在航天領域,卡爾曼濾波是一種殿堂級的理論,應用的到處都是,比如各種衛星軌道/姿態確定、狀態估計和預測、軌道任務設計等。這篇文章,筆者儘可能通俗解釋卡爾曼濾波理論。先來點背景音樂:我種下一顆種子,終於長出了果實。。好吧,假設你在去一個風景區旅遊的時候,種下了一棵果樹,但顯然從果樹幼苗到果實不是一天兩天能完成的啊,需要慢慢長高。
  • 深入淺出講解卡爾曼濾波(附Matlab程序)
    我們現在要學習的卡爾曼濾波器,正是源於他的博士論文和1960年發表的論文《A New Approach to Linear Filtering and Prediction Problems》(線性濾波與預測問題的新方法)。
  • 卡爾曼濾波在電容觸控螢幕坐標定位中的應用
    結果表明,卡爾曼濾波確實能夠有效去除噪聲,從而提高觸控螢幕坐標定位的準確性,具有很高的實用性。為此,針對主要影響因素——系統噪聲進行濾波,還原初始數據的有效信號有利於提高觸控螢幕的坐標定位準確度。在眾多的濾波方法中,經過實驗分析和對比,最終證實,卡爾曼濾波在還原原始數據和算法實現方面都有較好的優勢。
  • 金融時序預測:狀態空間模型和卡爾曼濾波
    在考慮狀態空間架構時,通常我們感興趣的有三個主要方面: 預測,預測狀態的後續值 濾波,根據過去和現在的觀測值來估計狀態的當前值 平滑,根據觀測值估計狀態的過去值 我們將使用卡爾曼濾波器來執行上述各種類型的推理。
  • 卡爾曼濾波應用於自動駕駛
    自主車輛的組成部分卡爾曼濾波器使用的數據來自LIDAR和RADAR 。所以現在只關注這兩個方面。為何使用卡爾曼濾波器?我們可以使用卡爾曼濾波器進行有根據的猜測,在我們對某些動態系統有不確定信息的任何地方,系統將要做什麼。在自主車輛的情況下,卡爾曼濾波器可用於根據我們的車輛接收的數據預測我們的自動駕駛車輛前方的車輛將採取的下一組動作。這是一個使用兩步預測和更新的迭代過程。
  • 技術|基於改進擴展卡爾曼濾波的鋰電池SOC估計
    傳統的擴展卡爾曼濾波算法(EKF)算法是採用固定的模型參數進行SOC估計,在電池放電末期,電池極化作用會導致電池的模型參數發生變化,此時用傳統的EKF算法估計SOC,尾端的誤差將會變大。本文提出了一種改進的擴展卡爾曼濾波算法,先利用遺忘因子最小二乘法估計電池模型參數,再將估計的模型參數與電池電壓、電流進行局部加權回歸(Lowess)擬合,用擬合的函數計算每組電壓、電流所對應的模型參數,以此減小模型參數變化帶來的影響。
  • 卡爾曼濾波 – Kalman Filter 通俗的解釋及原理
    我們最終的預測值或濾波值是後驗預測值^X(k+1|k+1),因此最後的預測也應使 ~X(k+1|k+1) 的期望為0且方差最小(這與讓8式兩端的差最小是一致的,下面的式9體現了這一點),這樣預測值才最可靠。下面詳細說明。