前言
看過(guò)很多關(guān)于卡爾曼濾波的資料哲银,發(fā)現(xiàn)很多資料寫(xiě)的都很晦澀,初學(xué)者很難看懂。在網(wǎng)上找了很多資料之后词顾,發(fā)現(xiàn)了這篇博文講的非常清晰易懂炸裆,特此翻譯記錄垃它,以備后用。為保證翻譯的原滋原味烹看,以下均用第一人稱(chēng)表述国拇。
背景
我不得不說(shuō)一說(shuō)卡爾曼濾波,因?yàn)樗茏龅降氖虑楹?jiǎn)直令人驚嘆惯殊。
很可惜的是酱吝,很少有軟件工程師和科學(xué)家對(duì)此有深入了解。這讓我感到很沮喪土思,因?yàn)榭柭鼮V波是如此通用且強(qiáng)大的工具务热,它能在不確定情況下組合信息。有時(shí)己儒,它提取準(zhǔn)確信息的能力似乎幾乎是不可思議的崎岂。如果聽(tīng)起來(lái)我講的太多了,那么請(qǐng)看一下之前發(fā)布的視頻闪湾,其中演示了一個(gè)利用卡爾曼濾波觀察自由浮動(dòng)物體的速度來(lái)確定它的方向冲甘。真棒!
卡爾曼濾波是什么途样?
你可以在任何含有不確定信息的動(dòng)態(tài)系統(tǒng)中的使用卡爾曼濾波江醇,對(duì)系統(tǒng)的下一步動(dòng)作做出有根據(jù)的猜測(cè)。即使伴隨著各種干擾何暇,卡爾曼濾波總是能指出真實(shí)世界發(fā)生的情況嫁审。它可以利用怪異現(xiàn)象之間的關(guān)聯(lián),你可能不會(huì)想到利用這些關(guān)聯(lián)赖晶!
卡爾曼濾波對(duì)于持續(xù)變化的系統(tǒng)是理想的選擇律适。由于卡爾曼濾波除了記憶前一個(gè)狀態(tài)而不需要保留其他的歷史記憶信息,因此卡爾曼濾波具有輕量化的特點(diǎn)遏插,運(yùn)行速度非澄婊撸快,非常適合處理實(shí)時(shí)的問(wèn)題和嵌入式系統(tǒng)胳嘲。
你在Google上找到的大部分關(guān)于卡爾曼濾波的數(shù)學(xué)描述是晦澀難懂的闪萄。那是非常糟糕的狀況襟锐!因?yàn)榭柭鼮V波能被簡(jiǎn)單和容易的方式所理解的间影。因此,本文是一個(gè)非常不錯(cuò)的文章主題辰妙,本文將嘗試用許多清晰、美觀的圖片來(lái)闡明它甫窟。 本文的前提很簡(jiǎn)單密浑,你僅僅需要對(duì)概率和矩陣有基本的了解。
本文將從一個(gè)簡(jiǎn)單的例子開(kāi)始粗井,說(shuō)明卡爾曼濾波可以解決的問(wèn)題尔破。但如果你想直接接觸精美的圖片和數(shù)學(xué),請(qǐng)隨時(shí)跳轉(zhuǎn)浇衬。
我們能用卡爾曼濾波做什么懒构?
舉一個(gè)簡(jiǎn)單的小例子:你已經(jīng)做了一個(gè)能在叢林中游走的小機(jī)器人,為確保其能導(dǎo)航耘擂,機(jī)器人需要知道它所在的位置胆剧。
將機(jī)器人的運(yùn)動(dòng)狀態(tài)表示為
我們的機(jī)器人也有GPS傳感器移宅,精確大約10米归粉,但它需要更精確地知道自己的位置。在樹(shù)林中有很多溝壑和懸崖漏峰,如果機(jī)器人的誤差超過(guò)幾英尺糠悼,它可能會(huì)從懸崖上掉下去。所以僅依賴GPS進(jìn)行定位是遠(yuǎn)遠(yuǎn)不夠的浅乔。
我們可能還知道機(jī)器人是如何移動(dòng)的:機(jī)器人知道發(fā)送給車(chē)輪馬達(dá)的指令倔喂,如果它朝一個(gè)方向前進(jìn),沒(méi)有任何干擾靖苇,下一刻它可能會(huì)繼續(xù)朝同一方向前進(jìn)席噩。當(dāng)然,它對(duì)自己的運(yùn)動(dòng)并不完全了解:它可能會(huì)受到風(fēng)的沖擊贤壁,車(chē)輪可能會(huì)打滑悼枢,或者在崎嶇不平的地形上滾動(dòng);所以輪子轉(zhuǎn)動(dòng)的數(shù)量可能不能準(zhǔn)確地代表機(jī)器人實(shí)際行走了多遠(yuǎn)脾拆,這個(gè)預(yù)測(cè)也不會(huì)完全準(zhǔn)確馒索。
GPS傳感器告訴我們一些關(guān)于狀態(tài)的信息莹妒,但只是間接的,帶有一些不確定性而且并不精準(zhǔn)绰上。我們的預(yù)測(cè)告訴了機(jī)器人是如何移動(dòng)的旨怠,但只是間接的,并且也是不確定和不精準(zhǔn)的渔期。
但是运吓,如果我們利用所有可用的信息,我們能得到一個(gè)比這兩個(gè)估計(jì)本身更好的答案嗎?當(dāng)然疯趟,答案是肯定的拘哨,這就是卡爾曼濾波器的作用。
如何從卡爾曼濾波的角度看待問(wèn)題信峻?
讓我們來(lái)看看我們想要詮釋的一個(gè)場(chǎng)景倦青。我們繼續(xù)上一個(gè)例子,機(jī)器人僅僅包含一個(gè)位置和速度的簡(jiǎn)單狀態(tài)盹舞。
我們不知道實(shí)際的位置和速度是什么产镐;有一系列可能的位置和速度組合可能是正確的,但其中一些狀態(tài)比其他的狀態(tài)更可能:
卡爾曼濾波器假設(shè)兩個(gè)變量(例子中為位置和速度)都是隨機(jī)變量且服從高斯分布的踢步。隨機(jī)變量的均值為
在上圖中述雾,位置和速度是不相關(guān)的,這意味著一個(gè)變量的狀態(tài)不能推測(cè)出其他變量的狀態(tài)兼丰。
更有趣的是下面的例子:位置和速度是呈相關(guān)性的玻孟。觀察特定位置的可能性取決于你的速度:
這種情況可能會(huì)出現(xiàn)。例如:根據(jù)一個(gè)舊的位置估計(jì)一個(gè)新的位置鳍征,如果速度很快黍翎,可能會(huì)走得更遠(yuǎn),所以位置會(huì)更遠(yuǎn)艳丛。如果走得很慢匣掸,那么就不會(huì)走的很遠(yuǎn)。
這種關(guān)系非常重要氮双,因?yàn)樗o我們提供了更多的信息:一個(gè)測(cè)量值告訴我們其他測(cè)量值可能是什么旺聚。我們要盡可能多地從不確定的目標(biāo)中壓縮卡爾曼濾波器的信息!
這種相關(guān)性被稱(chēng)為協(xié)方差矩陣眶蕉。簡(jiǎn)而言之砰粹,矩陣的每個(gè)元素
矩陣化描述問(wèn)題
我們基于高斯分布來(lái)建立狀態(tài)變量嵌器,所以在時(shí)間
(在這里本文只使用了位置和速度,但是該狀態(tài)可以包含任意數(shù)量的變量爽航,并表示任何需要表示的東西蚓让,這對(duì)于處理其他問(wèn)題是非常有益的)。
接下來(lái)讥珍,我們需要某種方式來(lái)知道目前狀態(tài)(時(shí)刻
用矩陣
它將我們?cè)脊烙?jì)中的每個(gè)點(diǎn)都移動(dòng)到了一個(gè)新的預(yù)測(cè)位置氏义,如果原始估計(jì)是正確的話锄列,這個(gè)新的預(yù)測(cè)位置就是系統(tǒng)下一步會(huì)移動(dòng)到的位置。那我們又如何用矩陣來(lái)預(yù)測(cè)下一個(gè)時(shí)刻的位置和速度呢惯悠?下面用一個(gè)基本的運(yùn)動(dòng)學(xué)公式來(lái)表示:
外部控制變量
外部干擾
利用外部觀測(cè)值修正估計(jì)量
聯(lián)合高斯分布
整合上述公式
總結(jié)
對(duì)于上述所有的數(shù)學(xué)公式邻邮,你僅僅需要實(shí)現(xiàn)公式(7)、(18)和(19)克婶。(如果你忘記了上述公式筒严,你也能從公式(4)和(5)重新推導(dǎo)。)
這將允許你精確地建模任何線性系統(tǒng)鸠补。對(duì)于非線性系統(tǒng)萝风,需要用到擴(kuò)展卡爾曼濾波嘀掸,區(qū)別在于EKF多了一個(gè)把預(yù)測(cè)和測(cè)量部分進(jìn)行線性化的過(guò)程紫岩。