卡爾曼濾波—機(jī)器人無人機(jī)離不開的神器
你有沒有過這樣的經(jīng)歷?打開導(dǎo)航軟件走路,明明站著沒動,定位點(diǎn)卻在屏幕上“漂移”;戴運(yùn)動手表測心率,偶爾會跳出一個離譜的數(shù)值;甚至用體重秤,換個站姿數(shù)字就差了兩斤。
這些“不靠譜”的情況,本質(zhì)上都是同一個問題:傳感器數(shù)據(jù)總會“說謊”。而卡爾曼濾波,就是專門給數(shù)據(jù)“打假”的技術(shù)——它像一位精明的偵探,從雜亂的信息中篩選出真相,讓數(shù)據(jù)變得靠譜起來。
今天我們不用復(fù)雜公式,就用快遞員送貨的故事,把卡爾曼濾波講明白。
一、先搞懂:為什么數(shù)據(jù)會“偏離”?
在說卡爾曼濾波之前,得先明白數(shù)據(jù)“偏離”的兩個根源,這也是卡爾曼濾波要解決的核心問題:
1. 測量噪聲:傳感器的“手抖”
你用尺子量桌子,再小心也會有毫米級誤差;IMU傳感器測加速度,電子元件的微小波動就會讓數(shù)值跳變。這種隨機(jī)的、無規(guī)律的誤差,就像傳感器在“手抖”,我們叫它“測量噪聲”。
2. 系統(tǒng)誤差:模型的“預(yù)判偏差”
導(dǎo)航軟件會根據(jù)你的速度預(yù)判下一秒位置,但如果突然刮陣風(fēng)讓你減速,預(yù)判就會不準(zhǔn);快遞車按規(guī)劃路線該到小區(qū)門口了,卻因?yàn)槎萝囃砹?分鐘——這種基于經(jīng)驗(yàn)的“預(yù)判偏差”,就是系統(tǒng)誤差。
卡爾曼濾波的核心思路特別簡單:把“傳感器的測量值”和“系統(tǒng)的預(yù)估值”結(jié)合起來,取一個最靠譜的中間值。就像你既聽導(dǎo)航的路線建議,也看路邊的路牌,兩者結(jié)合才不會走錯。
二、用快遞員故事理解卡爾曼濾波的5步邏輯
假設(shè)快遞員小K要給你送快遞,我們需要實(shí)時定位他的位置。這時候有兩個信息來源:
一是快遞APP的“系統(tǒng)預(yù)判”(根據(jù)他的行駛速度算出來的位置)
二是他手機(jī)GPS的“測量值”(可能有漂移)。
卡爾曼濾波的思想其實(shí)很簡單,就是 不斷進(jìn)行“預(yù)測”和“修正”:
預(yù)測:基于之前的數(shù)據(jù),估算當(dāng)前的值。
修正:用傳感器或測量數(shù)據(jù),對預(yù)測值進(jìn)行調(diào)整,使其更加準(zhǔn)確。
重復(fù)上述步驟,不斷優(yōu)化,使誤差越來越小。
卡爾曼濾波就是這么工作的:
第1步:先猜一個“預(yù)估值”——我覺得你大概在這
快遞APP知道小K10分鐘前在A點(diǎn),行駛速度是30km/h,方向是朝你家。按照這個信息推算,現(xiàn)在他應(yīng)該到B點(diǎn)了——這就是“系統(tǒng)預(yù)估值”,專業(yè)說法叫“先驗(yàn)估計”。
但光有預(yù)判不夠,得知道這個預(yù)判有多靠譜。如果小K走的是暢通的主干道,預(yù)判就準(zhǔn);如果是擁堵的老街區(qū),預(yù)判誤差就大——這個“靠譜程度”,卡爾曼濾波會用一個叫“協(xié)方差”的指標(biāo)來量化,你不用記這個詞,知道是“可信度評分”就行。
第2步:再拿一個“測量值”——GPS說你在這
同時,小K的手機(jī)GPS傳來信號,顯示他現(xiàn)在在C點(diǎn)。但我們知道GPS不是100%準(zhǔn),尤其是在高樓多的地方,可能會偏差幾十米——這就是“測量值”。
和預(yù)判一樣,測量值也有“可信度評分”:晴天開闊地,GPS可信度高;陰天高樓區(qū),可信度低。
第3步:算“信任權(quán)重”——該信預(yù)判多一點(diǎn),還是測量多一點(diǎn)?
這是卡爾曼濾波最關(guān)鍵的一步:誰的可信度高,就多聽誰的。
比如:
如果小K在高速上(預(yù)判準(zhǔn),可信度90%),GPS又因?yàn)樵茖佑悬c(diǎn)飄(可信度50%)——那最終位置就更靠近預(yù)判的B點(diǎn)。
如果小K在老街區(qū)(預(yù)判不準(zhǔn),可信度30%),GPS在開闊路口信號好(可信度90%)——那最終位置就更靠近測量的C點(diǎn)。
這個“信任權(quán)重”,就是卡爾曼濾波里的核心概念“卡爾曼增益”。簡單說,就是“用兩個數(shù)據(jù)的可信度,算出一個加權(quán)比例”。
第4步:出“最優(yōu)值”——綜合一下,你應(yīng)該在這
根據(jù)算好的權(quán)重,把“預(yù)判值”和“測量值”結(jié)合起來,就能得到一個最靠譜的位置D點(diǎn)——這就是“后驗(yàn)估計”,也是我們最終用的定位結(jié)果。
舉個具體數(shù)字:預(yù)判B點(diǎn)在坐標(biāo)(100,200),測量C點(diǎn)在(105,203)。算出來權(quán)重是“預(yù)判占60%,測量占40%”,那最優(yōu)位置就是(100×60%+105×40%, 200×60%+203×40%)=(102, 201.2),既修正了GPS的漂移,也彌補(bǔ)了預(yù)判的誤差。
第5步:更新“經(jīng)驗(yàn)”——為下一次預(yù)判做準(zhǔn)備
最后一步很重要:用這次算出的最優(yōu)值,更新系統(tǒng)的“經(jīng)驗(yàn)庫”。比如,發(fā)現(xiàn)小K實(shí)際行駛速度比預(yù)判慢了5km/h,那下一次預(yù)判時就會把這個誤差考慮進(jìn)去,讓后續(xù)的預(yù)判越來越準(zhǔn)。
這就是卡爾曼濾波的“閉環(huán)邏輯”——每一次計算都在修正過去的偏差,讓下一次更精準(zhǔn)。
三、不是消除誤差,而是“管理”誤差
看到這你可能會問:卡爾曼濾波能把誤差完全去掉嗎?答案是不能。但它的厲害之處在于,能在誤差不可避免的情況下,找到“最優(yōu)解”。
它就像一位經(jīng)驗(yàn)豐富的老司機(jī):
儀表盤速度表(測量值)偶爾跳變,他會結(jié)合自己的駕駛感受(系統(tǒng)預(yù)判),知道真實(shí)速度大概是多少;
遇到突發(fā)情況(大的測量誤差),他不會完全相信儀表盤,也不會只靠感覺,而是兩者結(jié)合做出判斷。
這種“在不確定中找確定”的能力,讓卡爾曼濾波成了工程領(lǐng)域的“萬金油”。
下面結(jié)合實(shí)際,來簡單的講述卡爾曼濾波的公式:
假設(shè)一個汽車:
當(dāng)前在 5 米的位置。
速度是 2 米/秒。
你想預(yù)測它 1 秒后的位置。
那么:預(yù)測位置=5+2=7 米
這就是卡爾曼濾波的預(yù)測階段:
狀態(tài)轉(zhuǎn)移矩陣,描述狀態(tài)如何從上一個時刻 k?1 變化到當(dāng)前時刻 k。(例如速度的影響)可以把狀態(tài)轉(zhuǎn)移矩陣 A理解為一個“時間推進(jìn)器”,它決定了當(dāng)前狀態(tài)如何變化到下一時刻。表示:1. 新位置 = 舊位置 + 速度 × 時間 2. 速度保持不變

控制輸入對狀態(tài)的影響程度(控制矩陣)
控制輸入(Control Input),表示 外部施加的影響,例如 加速、剎車、方向調(diào)整等(加速度)。如果沒有外部輸入,B 這部分可以忽略。
以上就是你預(yù)測汽車位置的一個過程,這在卡爾曼濾波中被定義為:預(yù)測階段(Prediction Step),但是現(xiàn)實(shí)世界并不是完美的,測量數(shù)據(jù)會受到噪聲影響,所以就還有接下來的過程,被稱作修正階段(Correction Step)如果你用測距儀器(有誤差)發(fā)現(xiàn)汽車的位置是 6.5 米,而預(yù)測是 7 米,你會怎么辦?
你不會完全相信預(yù)測值(速度或者位置是有一定偏差的 不是確定的5米初始位置和確定的2米/s的速度),也不會完全相信測量值(因?yàn)闇y量值也有誤差),而是取一個折中值!取折中值的方式就是其實(shí)就是取一個權(quán)重。



——卡爾曼增益,決定如何在預(yù)測和測量之間取折中。其實(shí)就相當(dāng)于一個權(quán)重:如果測量值很可靠(傳感器誤差很小),那么取較大值,我們更相信測量值。如果測量值噪聲較大,那么取較小值,我們更依賴預(yù)測值。
比如我們讓=0.75(假設(shè)我們認(rèn)為傳感器測量較準(zhǔn)確,但也不是說非常非常非常準(zhǔn))
按照公式:汽車真實(shí)的位置=0.75?6.5+0.25?7=6.625 米
上面就是最簡單的卡爾曼濾波的過程。
四、原來它無處不在
別以為卡爾曼濾波只存在于實(shí)驗(yàn)室,它早就滲透到我們的日常生活中:
1. 導(dǎo)航定位:讓你的高德/百度地圖不“漂移”
手機(jī)導(dǎo)航時,卡爾曼濾波會同時處理GPS信號(測量值)、手機(jī)陀螺儀/加速度計數(shù)據(jù)(系統(tǒng)預(yù)判)、路網(wǎng)信息(輔助修正)。哪怕GPS信號暫時中斷,它也能根據(jù)你之前的行駛狀態(tài),精準(zhǔn)預(yù)判你的位置,不會讓定位點(diǎn)“飛起來”。
2. 運(yùn)動健康:讓你的手環(huán)數(shù)據(jù)更靠譜
智能手環(huán)測心率時,偶爾會因?yàn)槟闾帧⒊龊钩霈F(xiàn)異常值(比如突然跳到150)。卡爾曼濾波會識別這種“突變”是噪聲,結(jié)合你之前的心率趨勢(比如一直在80左右),把異常值修正為合理范圍,讓你的運(yùn)動數(shù)據(jù)更真實(shí)。
3. 自動駕駛:幫汽車“看清”路況
自動駕駛汽車的激光雷達(dá)、攝像頭、毫米波雷達(dá)會產(chǎn)生大量數(shù)據(jù)。卡爾曼濾波會融合這些傳感器的信息:比如攝像頭看到“前方有障礙物”(測量值),結(jié)合汽車的行駛速度和方向(系統(tǒng)預(yù)判),排除攝像頭因光影產(chǎn)生的誤判,精準(zhǔn)識別障礙物位置。
4. 無人機(jī)/機(jī)器人
無人機(jī)飛行時,IMU傳感器會不斷傳回姿態(tài)數(shù)據(jù)(角度、加速度),但這些數(shù)據(jù)有噪聲,容易導(dǎo)致無人機(jī)晃動。卡爾曼濾波會修正這些噪聲,讓無人機(jī)的姿態(tài)控制更平穩(wěn),不會因?yàn)橐稽c(diǎn)數(shù)據(jù)波動就“失控”。












評論