前言我個(gè)人有近10年AI教育經(jīng)驗(yàn)了,,中間獲得過一些名號,,比如北理工校外導(dǎo)師,微軟MVP兼CSDN技術(shù)專家,,本博客也有1700多萬PV了,,在AI圈內(nèi)有極高知名度。后2015年和團(tuán)隊(duì)一塊創(chuàng)業(yè)創(chuàng)辦AI職教平臺「七月在線」,,至今已近7年,,這6 7年我們把AI職教做透了,同行沒做的我們做,,同行沒有的廣度我們有,,同行不到的深度我們到(本處同行僅指AI社會培訓(xùn)機(jī)構(gòu))。 六年多來,,在專注成人AI職教的同時(shí),,面對過很多行業(yè)的刺激,但自始至終都堅(jiān)持專注AI,??蛇^程中也越發(fā)深刻意識到,AI只有與行業(yè)深度結(jié)合綁定才能真正發(fā)揮出超級價(jià)值,,考慮到我們的使命始終是“推動(dòng)社會智能化發(fā)展”,,加之國家的制造強(qiáng)國戰(zhàn)略特別提到新能源汽車、智能汽車,,而AI可以很好的賦能自動(dòng)駕駛,,所以一個(gè)月前我司平臺的定位由“AI職教平臺”改為“AI與汽車職教平臺”(后最終為:智能時(shí)代在線職教與行業(yè)解決方案商)。 一個(gè)月的時(shí)間,,我們組織了50位汽車專家/講師(年底100人),,與原有的300+AI專家/講師區(qū)分開,大家討論中都深感傳統(tǒng)車企向智能化轉(zhuǎn)型的急迫,。偶然中,,在一車企客戶現(xiàn)場聊到感知融合的經(jīng)典算法:卡爾曼濾波(Kalman Filter),故新一篇博客就寫這個(gè),。這算法神到什么程度呢,,比如有人號稱當(dāng)年阿波羅就靠它登陸上的月球 :) ???? 關(guān)于卡爾曼濾波,,網(wǎng)上有一篇經(jīng)典文章《How a Kalman filter works, in pictures》,也有不少朋友對它進(jìn)行過翻譯,。我看過幾遍,,覺得還可以把卡爾曼濾波解釋的更通俗些,畢竟把相對復(fù)雜的算法盡可能解釋的更通俗易懂,,從而讓更多初學(xué)者更好更快的理解,,是我現(xiàn)在繼續(xù)更新博客的唯一動(dòng)力了。 此外,,為照顧一些傳統(tǒng)汽車人甚至之前沒聽說過智能網(wǎng)聯(lián),、自動(dòng)駕駛的朋友也能從本文有所收獲,故我會從智能網(wǎng)聯(lián),、無人駕駛開始講起,,直到講透卡爾曼濾波算法,最后到卡爾曼濾波的相關(guān)擴(kuò)展算法,,且過程中得到了盛,、曉、葉等相關(guān)七月講師的校正,,也歡迎讀者批評指正,,thanks。 第一部分 智能網(wǎng)聯(lián)與無人駕駛1.1 什么是自動(dòng)駕駛/無人駕駛一般而言,,智能網(wǎng)聯(lián)包含了自動(dòng)駕駛和車聯(lián)網(wǎng),,高級別的自動(dòng)駕駛又稱無人駕駛。 現(xiàn)在是個(gè)車企都在往自動(dòng)駕駛方面投入(動(dòng)輒就是上百億),,到了好像沒有自動(dòng)駕駛,,就不是一輛可以上得了臺面的車,畢竟智能三電(電池,、電機(jī),、電控)、智能座艙,、自動(dòng)駕駛已代表未來汽車的發(fā)展趨勢,,所謂沒自動(dòng)駕駛沒未來。而自動(dòng)駕駛的門檻相對高,,技術(shù)種類也不少,,所以市面上類似的書、課程都不多(比如有一本《第一本無人駕駛技術(shù)書》,,七月在線也曾于2019年推出過一個(gè)《無人駕駛實(shí)戰(zhàn)》,,后面則陸續(xù)推出過目標(biāo)檢測,、目標(biāo)跟蹤,、slam,、感知融合等等小課)。 而無人駕駛的軟件系統(tǒng)一般會被定義為六大模塊(當(dāng)然,,有的模塊會在不同的場景中合并)
在無人駕駛里有存在四大狀態(tài)的估計(jì)問題:1) 定位,估計(jì)自身狀態(tài),;2)跟蹤,,估計(jì)周圍物體狀態(tài)(比如隨時(shí)間變化的位置速度等);3)建圖,,估計(jì)周圍靜態(tài)環(huán)境狀態(tài),;4)標(biāo)定,估計(jì)傳感器之間的時(shí)空關(guān)系,。而下文將提到的SLAM(同時(shí)定位與構(gòu)圖技術(shù))便是解決同時(shí)定位與建圖的問題,。 更具體的,之前七月在線《無人駕駛實(shí)戰(zhàn)》的授課老師盛老師有寫過一篇關(guān)于自動(dòng)駕駛L4級技術(shù)的短文,,現(xiàn)引用部分內(nèi)容如下:
1.2 智能網(wǎng)聯(lián)相關(guān)崗位針對上文智能網(wǎng)聯(lián)汽車的定義,可以看出涉及的技術(shù)不少,,每項(xiàng)技術(shù)背后都對應(yīng)著一個(gè)個(gè)崗位 我們來具體分析其中幾個(gè)崗位,,比如視覺SLAM算法工程師。 那什么是slam呢,?我們知道,,傳統(tǒng)的圖像處理基本上是基于二維圖像,而人眼是通過兩只眼睛的視差(雙目立體視覺)來感知周圍的三維空間。隨著三維視覺傳感器的飛速發(fā)展,,三維視覺核心技術(shù):SLAM(全稱 Simultaneous Localization And Mapping,,譯為同時(shí)定位與地圖構(gòu)建)技術(shù),本質(zhì)是對運(yùn)動(dòng)主體自身和周遭環(huán)境不確定性的估計(jì),,相當(dāng)于核心解決兩個(gè)問題:1 因?yàn)榈貓D是未知的,,所以需要估計(jì)地圖(周遭環(huán)境),2 位置也是未知的,,所以需要估計(jì)位置,。至于常用手段則有攝像頭,也有通過各種激光雷達(dá)探測距離或獲取周遭環(huán)境圖像的,。 視覺SLAM中的傳感器即為攝像頭(通過攝像頭同時(shí)解決定位與地圖的問題)
可能有同學(xué)問了,,如果從零學(xué)視覺SLAM都要求掌握哪些技術(shù)呢(當(dāng)然,,以下所有這些技術(shù)都可以通過這個(gè)slam課掌握好)?
對于以上六點(diǎn),,有兩點(diǎn)值得再提的是:比如針對第3點(diǎn),不要忌憚數(shù)學(xué),,因?yàn)?u>凡是涉及到數(shù)據(jù)相關(guān)的技術(shù),,最后都是算法,最深入都是數(shù)學(xué)(可能你此刻還不這么覺得,,但當(dāng)你看完全文后你一定會深以為然),;針對第4點(diǎn),下面是“RGB-D相機(jī)中的直接法運(yùn)用”的示意圖 再比如視覺感知算法工程師,,會涉及
最后,再比如傳感器融合算法高級工程師,,這個(gè)崗位的崗位職責(zé)一般是:通過融合攝像頭,、激光雷達(dá)、毫米波雷達(dá)等傳感器的感知信息,,實(shí)現(xiàn)對周圍動(dòng)靜環(huán)境的精確描述及預(yù)測,,具體包括
反應(yīng)到崗位要求,,一般有以下幾點(diǎn)
可見,,卡爾曼濾波在感知融合里應(yīng)用很廣,,可以對各種傳感器獲取到的數(shù)據(jù)進(jìn)行進(jìn)一步的綜合處理,達(dá)到更佳的估計(jì)狀態(tài),。 第二部分 卡爾曼濾波算法2.1 什么是卡爾曼濾波關(guān)于什么是卡爾曼濾波,,下面是維基百科上的解釋(當(dāng)然,為了通俗起見,,我修改了部分描述)
恩,,Wikipedia上的定義向來準(zhǔn)確嚴(yán)謹(jǐn),唯一問題就是不夠通俗,、不夠易懂,,怎么理解更好懂呢?很簡單,,抽絲剝繭,,一個(gè)算法相對復(fù)雜,一般來講是因?yàn)樯婕暗谋尘爸R比較多,,那咱們就來一一剖析,,切開了揉碎了自然就好懂了。 首先,,回顧一下正太分布(又稱高斯分布,,一個(gè)意思)的定義 至于數(shù)學(xué)期望和方差則分別如下圖所示 其次,通過一個(gè)例子理解下卡爾曼濾波的思想,。 1 假設(shè)你現(xiàn)在有一輛車,,并且已知小車在初始狀態(tài)的位置如下圖所示(小車的位置服從正態(tài)分布,,比如可能位于正態(tài)分布的均值附近),橫坐標(biāo)為小車前進(jìn)坐標(biāo),。 有人會問,,為什么是正態(tài)分布而不是確定點(diǎn)呢?因?yàn)樵谶@里我們給出的是它此刻的狀態(tài)估計(jì)量,,對于地圖上的物體,,我們無法確切得出其具體的位置信息,即便你使用GPS來定位也始終會有一定的誤差,。因此你只能通過系統(tǒng)的輸入(如小車的速度)和系統(tǒng)的輸出(GPS給定的位置信息)來估算它當(dāng)前的狀態(tài)(真實(shí)的位置信息),。 2 然后,根據(jù)初始時(shí)刻小車的位置,,我們可以預(yù)測出它在下一個(gè)時(shí)間步長的可能的位置分布,。下圖中可以看出,它的正態(tài)分布函數(shù)明顯比上一時(shí)刻來的更寬一些,。這是因?yàn)樵谛≤囘\(yùn)動(dòng)過程中會不可避免地遇到一些隨機(jī)因素的干擾,,如坑洼、風(fēng),、輪子打滑等,,因此我們估算的位置值的不確定性變大,小車實(shí)際經(jīng)過的距離與模型預(yù)測的距離不同,。 3 到此刻為止,,上述過程均是由我們的數(shù)學(xué)模型推算估計(jì)出來的結(jié)果,但實(shí)際上,,相同的數(shù)據(jù)也可以通過傳感器測量來獲取,,而測量值往往也呈正態(tài)分布(總之,頻率派里未知值是一個(gè)確定的值,,在貝葉斯派里,,未知值都是一個(gè)概率分布,此點(diǎn)不用皺眉,,很快你會有更深刻的認(rèn)知),,并且與我們的模型預(yù)測值有所不同,如下圖中紅色正態(tài)分布曲線所示,,方差表示噪聲測量中的不確定性,。 4 這個(gè)時(shí)候咋辦呢?可能你會脫口而出:將數(shù)學(xué)模型的預(yù)測值與傳感器的測量值相互結(jié)合起來來獲得小車的最佳位置估計(jì)值,,怎么結(jié)合呢,?加權(quán)平均再迭代!具體到這個(gè)例子中,,咱們把這兩者的概率密度函數(shù)相乘得出了當(dāng)前時(shí)刻的最佳狀態(tài)估計(jì)值,,如圖中灰色正態(tài)分布曲線所示,,這就是卡爾曼濾波的核心思想,因此卡爾曼濾波也經(jīng)常被稱作傳感器融合算法,。 再然后,,我們把前面的時(shí)間信息換一下,比如我們知道了上一時(shí)刻即k-1時(shí)刻小車的位置估算值,,并且通過數(shù)學(xué)模型預(yù)測得到了k時(shí)刻的位置估算值,,然后將其與小車傳感器的測量值進(jìn)行結(jié)合,得到了當(dāng)前k時(shí)刻小車的最佳位置估算值,。 那么問題來了,,這里我們并沒有給出初始狀態(tài),因此k-1時(shí)刻的位置估算值又是怎么來的呢,?沒錯(cuò),,我們是通過k-2時(shí)刻的狀態(tài)量估算得來了。 2.2 卡爾曼濾波的完整流程與數(shù)學(xué)推導(dǎo)通過上一節(jié)的例子,,我們知曉了卡爾曼濾波的核心思想,,接下來我們通過另一個(gè)例子來討論其完整流程與數(shù)學(xué)建模推導(dǎo)下的細(xì)節(jié)、原理,。 2.2.1 針對機(jī)器人的位置和速度建模假如你開發(fā)了一款小型機(jī)器人,,它可以在樹林里自主移動(dòng)。 我們可以通過一組狀態(tài)變量來描述機(jī)器人的狀態(tài),,包括位置和速度: 下面,,我們需要機(jī)器人需要明確自己的位置以便進(jìn)行導(dǎo)航。怎么確定位置呢,? 首先,,我們給機(jī)器人安了一個(gè)GPS傳感器,但精度只在10m,。考慮到對于在機(jī)器人所處的樹林里有很多溪谷和斷崖,,如果機(jī)器人對位置誤判了哪怕只是幾步遠(yuǎn)的距離,,它都有可能掉到坑里,所以僅靠這個(gè)精度的GPS來定位是不夠的,。 我們得有更多的辦法確定位置,。比如我們可以獲取到一些機(jī)器人的運(yùn)動(dòng)的信息:驅(qū)動(dòng)輪子的電機(jī)指令。如果沒有外界干擾,,僅僅是朝一個(gè)方向前進(jìn),,那么下一個(gè)時(shí)刻的位置只是比上一個(gè)時(shí)刻的位置在該方向上移動(dòng)了一個(gè)固定距離。但如果有外界干擾呢,?比如逆風(fēng)行駛,,輪子打滑,,滾落顛簸地形……所以輪子轉(zhuǎn)過的距離并不能完全表示機(jī)器人移動(dòng)的距離,這就導(dǎo)致通過輪子轉(zhuǎn)動(dòng)預(yù)測機(jī)器人的位置不會非常準(zhǔn)確,。 如此,,相當(dāng)于
行到水窮處換個(gè)思路:如果我們綜合“GPS + 輪子轉(zhuǎn)動(dòng)預(yù)測”兩者的信息呢,?是否可以得到比只依靠單獨(dú)一個(gè)信息來源更精確的結(jié)果?顯然,,這就是卡爾曼濾波要解決的問題,。 強(qiáng)調(diào)一下,前言中所說的這篇文章《How a Kalman filter works, in pictures》,,形象的闡述了卡爾曼濾波的算法流程,,我看過幾遍,覺得還可以把卡爾曼濾波解釋的更通俗些,,所以我在原文圖片和公式的基礎(chǔ)上加了很多原文沒有且網(wǎng)上其他文章也沒有的大量解釋,、說明,以提高文章的可讀性,。 針對上邊的系統(tǒng),,我們建立包括位置和速度的系統(tǒng)狀態(tài): 我們不知道位置和速度的準(zhǔn)確值,但是我們可以列出一個(gè)準(zhǔn)確數(shù)值可能落在的區(qū)間范圍,。在這個(gè)區(qū)間范圍里,,一些數(shù)值組合的可能性要高于另一些組合的可能性。 卡爾曼濾波假設(shè)所有的變量(在我們的例子中為位置和速度)是隨機(jī)的且符合正態(tài)分布,。每個(gè)變量有一個(gè)均值u 代表了隨機(jī)分布的中心值(代表這是可能性最大的值),,和一個(gè)方差 ,用于衡量不確定度,。 在上圖中,,位置和速度是不相關(guān)的,這意味著我們不能從一個(gè)變量推測另一個(gè)變量,。 實(shí)際上呢,,位置和速度是相關(guān)的。比如已知上一個(gè)狀態(tài)的位置值,,現(xiàn)在要預(yù)測下一個(gè)狀態(tài)的位置值:
這種關(guān)系在跟蹤系統(tǒng)狀態(tài)時(shí)很重要,,因?yàn)樗o了我們更多的信息:一個(gè)測量值告訴我們另一個(gè)測量值可能是什么樣子。 為了捕獲這種相關(guān)性,,我們可以使用協(xié)方差矩陣,。簡而言之,矩陣中的每個(gè)元素表示了第個(gè)變量和第個(gè)變量之間的關(guān)系(協(xié)方差矩陣是對稱的,,即交換下標(biāo)和并無任何影響),。 協(xié)方差矩陣通常表示為Σ,它的元素則表示為 ,,從而有 2.2.2 利用矩陣進(jìn)一步描述系統(tǒng)狀態(tài)為了把以上關(guān)于狀態(tài)的信息建模為正態(tài)分布,,所以在k時(shí)刻我們需要兩個(gè)信息:最佳預(yù)估值 (均值,也就是u),,和它的協(xié)方差矩陣 (這里我們只記錄了位置和速度,,但只要和問題相關(guān),我們可以把任何數(shù)據(jù)變量放進(jìn)系統(tǒng)狀態(tài)里) 接下來,,我們要通過k-1時(shí)的狀態(tài)來預(yù)測下一個(gè)狀態(tài)(k時(shí)),。但我們不知道狀態(tài)的準(zhǔn)確值,怎么辦呢,?預(yù)測函數(shù)會對k-1時(shí)刻所有可能值的范圍進(jìn)行預(yù)測,,然后得出一個(gè)k時(shí)刻新值的分布范圍。 我們可以通過一個(gè)狀態(tài)轉(zhuǎn)移矩陣來表示這個(gè)預(yù)測過程,,把k-1時(shí)刻所有可能的狀態(tài)值轉(zhuǎn)移到一個(gè)新的范圍內(nèi)(它從原始預(yù)測中取每一點(diǎn),,并將其移動(dòng)到新的預(yù)測位置),這個(gè)新的范圍代表了系統(tǒng)新的狀態(tài)值可能存在的范圍,,如果k-1時(shí)刻估計(jì)值的范圍是準(zhǔn)確的話,。 考慮到勻速狀態(tài)下,S(路程)=v(速度)x t(時(shí)間),,我們通過下述公式來描述這個(gè)'預(yù)測下個(gè)狀態(tài)'的過程(別忘了,,): 進(jìn)而整理為矩陣則是: 我們現(xiàn)在有了一個(gè)預(yù)測矩陣,可以簡單預(yù)測下個(gè)狀態(tài),,但怎么更新協(xié)方差矩陣呢? 試想,,如果我們對每個(gè)點(diǎn)進(jìn)行矩陣A轉(zhuǎn)換,,它的協(xié)方差矩陣Σ會發(fā)生什么變化,比如 結(jié)合(4)和(3): 2.2.3 不確定外部因素的估計(jì):貝葉斯理論到目前為止,,我們還沒有考慮到所有的影響因素,,因?yàn)橄到y(tǒng)狀態(tài)的改變并不只依賴上一個(gè)系統(tǒng)狀態(tài),,外界作用力也可能會影響系統(tǒng)狀態(tài)的變化。外界作用力分兩種
對于貝葉斯的理論有必要提一下(特引用我之前寫的一篇貝葉斯筆記,,詳見參考文獻(xiàn)5)
針對第一種外力,,在我們機(jī)器人例子中,,導(dǎo)航軟件可能發(fā)出一些指令啟動(dòng)或者制動(dòng)輪子。這個(gè)好解決,,通過一個(gè)向量 來描述這些信息,,把它添加到我們的預(yù)測方程里作為一個(gè)修正。 假如我們通過發(fā)出的指令得到預(yù)期的加速度a,,根據(jù)速度-加速度公式,,以及加速度-位移公式,上邊的運(yùn)動(dòng)方程可以變化為: 再次整理為矩陣則是: 稱作控制矩陣,, 稱作控制向量(當(dāng)沒有任何外界動(dòng)力影響的系統(tǒng)時(shí),,則可以忽略該項(xiàng))。 針對第二種外力,,則相對麻煩些了,,比如受到風(fēng)力影響或輪子打滑、地面上的坑坑洼洼,、突起異物都使得我們跟蹤的物體的速度發(fā)生不可控的變化,。 怎么辦呢?可以把“世界”中的這些不確定性統(tǒng)一建模,,在預(yù)測步驟中增加一個(gè)不確定項(xiàng),。 相當(dāng)于原始狀態(tài)中的每一個(gè)點(diǎn)可以都預(yù)測轉(zhuǎn)換到一個(gè)范圍,而不是某個(gè)確定的點(diǎn),。轉(zhuǎn)換為數(shù)學(xué)表達(dá)是: 中的每個(gè)點(diǎn)移動(dòng)到一個(gè)符合協(xié)方差的高斯分布里(也就是藍(lán)色的高斯分布移動(dòng)到紫色高斯分布的位置),,或者說,,把這些不確定的外部因素描述為協(xié)方差為的高斯噪聲,,具體根據(jù)預(yù)測的傳感器噪聲來定(比如imu或者輪速計(jì)): 加入外部因素協(xié)方差后,,擴(kuò)大后的紫色高斯分布和原來沒有外部因素的小范圍紫色高斯分布相比,兩者之間有相同的均值,,但協(xié)方差不同 對 簡單疊加,,可以拿到擴(kuò)展的協(xié)方差,這樣就得到了預(yù)測步驟的完整表達(dá)式: 解釋下上面(7)中的那兩個(gè)式子
到這里,,我們得到了一個(gè)模糊的估計(jì)范圍,,一個(gè)通過 和描述的范圍。如果再結(jié)合我們傳感器的數(shù)據(jù)呢,? 2.2.4 數(shù)學(xué)模型之外再通過測量值修正預(yù)測值實(shí)際生活當(dāng)中,,我們經(jīng)常會用到不止一種手段來多方論證我們的預(yù)測結(jié)果,上節(jié)我們通過建立數(shù)學(xué)模型預(yù)測,,此外,,我們可能還有一些傳感器來測量系統(tǒng)的狀態(tài)。 當(dāng)然,,我們可能有好幾個(gè)傳感器,,比如一個(gè)測量位置一個(gè)測量速度,每個(gè)傳感器可以提供一些關(guān)于系統(tǒng)狀態(tài)的數(shù)據(jù)信息(每個(gè)傳感器檢測一個(gè)系統(tǒng)變量并且產(chǎn)生一些讀數(shù)),。 考慮到傳感器測量的范圍和單位可能與我們跟蹤系統(tǒng)變量所使用的范圍和單位不一致,,所以需要對傳感器做下建模:通過矩陣。 初學(xué)者剛看到這的時(shí)候可能會有疑問,,這個(gè)到底是干啥用的,?
把得到的傳感器讀數(shù)的分布范圍轉(zhuǎn)換為一般形式: 換言之,,我們的傳感器也是有自己的精度范圍的,對于一個(gè)真實(shí)的位置和速度,,傳感器的讀數(shù)受到高斯噪聲的影響會在某個(gè)范圍內(nèi)波動(dòng),。 我們觀測到的每個(gè)數(shù)據(jù),可以認(rèn)為其對應(yīng)某個(gè)真實(shí)的狀態(tài),。但是因?yàn)榇嬖诓淮_定性,,某些狀態(tài)的可能性比另外一些的可能性更高。 我們將這種測量值與真實(shí)值之間的不確定性(即觀測傳感器噪聲)的協(xié)方差設(shè)為,,均值設(shè)為,,具體根據(jù)觀測傳感器的噪聲來定(比如相機(jī)、lidar),。 所以現(xiàn)在我們有了兩個(gè)數(shù)據(jù),,一個(gè)來自于我們通過數(shù)學(xué)模型的預(yù)測值,另一個(gè)來自傳感器的測量值,。 我們必須嘗試去把兩者的數(shù)據(jù)預(yù)測值(粉色)與測量值(綠色)融合起來,。 實(shí)際上對于任何狀態(tài),都有兩個(gè)可能性:
怎么融合呢,?概率論里,,兩個(gè)事件如果同時(shí)發(fā)展則相乘,所以我們嘗試將兩個(gè)高斯塊(Gaussian blob)相乘試下: 相乘之后得到的即為重疊部分,,這個(gè)區(qū)域同時(shí)屬于兩個(gè)高斯塊,,并且比單獨(dú)任何一個(gè)區(qū)域都要精確。這個(gè)區(qū)域的平均值取決于我們更取信于哪個(gè)數(shù)據(jù)來源,,這樣通過我們手中的數(shù)據(jù)得到了一個(gè)最好的估計(jì)值,。 恩,又是另一個(gè)高斯塊,。 事實(shí)證明,,當(dāng)你把兩個(gè)高斯分布相乘時(shí)(各自的均值和協(xié)方差矩陣相乘),你會得到一個(gè)擁有獨(dú)立均值和協(xié)方差矩陣的新高斯分布,。最后剩下的問題就不難解決了:新高斯分布的均值和方差均可以通過老的均值方差求得,! 2.2.5 融合兩個(gè)高斯斑:卡爾曼增益出場首先,針對一維數(shù)據(jù)開始,,一維高斯(均值u,,方差)的方程被定義為: 如果兩個(gè)高斯分布相乘會發(fā)生什么呢(如之前所說,預(yù)測值是粉紅色,,測量值是綠色),,下圖的藍(lán)色曲線代表了兩個(gè)高斯分布的交集部分: 把(9)帶入(10)然后做一些變換,,可以得到 且慢,上述公式11的推導(dǎo)如果不一步步展開,,則會導(dǎo)致初學(xué)的你在千篇一律的人云亦云中看的還是很頭疼,,所以我們把上面的變換展開下:
因式分解出一個(gè)部分,,這部分用k表示: 相當(dāng)于如果是一維數(shù)據(jù)下,對于之前的預(yù)測值,,僅僅是簡單將兩者疊加相乘就可以得到新的預(yù)測值。 如果是一個(gè)多維矩陣呢,?我們將(12)與(13)表示為矩陣形式,。Σ表示協(xié)方差矩陣, 表示平均向量: 上述的這個(gè)矩陣K 就是卡爾曼增益,。 現(xiàn)在,,我們有兩個(gè)獨(dú)立的維度去估計(jì)系統(tǒng)狀態(tài): 預(yù)測值 測量值 將兩者相乘帶入(15)尋找他們的重疊區(qū)域: 從(14)可知,卡爾曼增益為 到了關(guān)鍵步驟,!原文是一句帶過,,但為本文的通俗考慮,我多解釋兩句:
以為就這樣了?我對正在讀此文的你提一個(gè)問題,,上面為何要從(16)(17)除以變到(18)(19)呢,,這就要談到卡爾曼增益的本質(zhì)了??柭鲆娴谋举|(zhì)其實(shí)就是把(11)里面經(jīng)常用到的一個(gè)中間結(jié)果定義了一個(gè)變量,,它的物理意義在于:
2.2.6 全流程回顧:從預(yù)測傳感器噪聲到觀測傳感器噪聲至此,原外文針對卡爾曼濾波的過程差不多了,,但為考慮增加本文的可讀性,,所以我再總結(jié)如下:
終于,,我們得到了最佳預(yù)測值,,可以把它繼續(xù)放進(jìn)去做另一輪預(yù)測,持續(xù)迭代(獨(dú)立于),。 以上所有公式,,僅需要實(shí)現(xiàn)(7)(18)(19),這使你可以對任何線性系統(tǒng)建模,。 公式7類似于預(yù)測未來,,公式18、19類似修正當(dāng)下,,簡言之,,則是前者預(yù)測 后者更新。 另外,,有一點(diǎn)值得一提的是,,公式18中括號里的部分就是所謂的“更新量”,這個(gè)更新量的物理意義是實(shí)際與期望測量值的誤差,,而卡爾曼增益則是這部分更新量對于預(yù)測值的權(quán)重,。 當(dāng)然,卡爾曼濾波的推導(dǎo)思路很多:1 從加權(quán)的角度,;2 從貝葉斯的角度,;3 從最小二乘角度,。限于篇幅,本文只介紹加權(quán)的角度,,至于后兩者,,讀者可以自行查閱相關(guān)文章,比如參考文獻(xiàn)14的《機(jī)器人學(xué)中的狀態(tài)估計(jì)》,,這本書講得不錯(cuò),,可能相關(guān)符號的表示有所差別(比如本文里的、,、,、在書中分別是、,、,、),但不影響理解,,拍圖如下,最后還可以看下參考文獻(xiàn)18,、19,。 至于非線性系統(tǒng),則可以使用擴(kuò)展卡爾曼濾波(Extended Kalman Filter,,EKF),,相當(dāng)于對測量和預(yù)測值的平均值進(jìn)行簡單線性化,下部分會詳細(xì)介紹,。 第三部分 卡爾曼濾波的相關(guān)擴(kuò)展算法3.1 擴(kuò)展卡爾曼濾波EKF3.1.1 什么是EKF:KF的非線性擴(kuò)展還記得前言中說的這句話不:“這算法神到什么程度呢,,比如有人號稱當(dāng)年阿波羅就靠它登陸上的月球 :) ”???? ,哈哈,,實(shí)際上,,此言不虛。 當(dāng)年登月的美國宇航工程師就曾把卡爾曼濾波用于阿波羅計(jì)劃非常的軌跡估計(jì)問題中,,進(jìn)而導(dǎo)出了后面發(fā)展而來的擴(kuò)展卡爾曼濾波器,,具體工作包括
換言之
3.1.2 EFK的一個(gè)示例:跟蹤汽車運(yùn)動(dòng)軌跡為形象說明,,我們再看另外一個(gè)例子,,即通過毫米波雷達(dá)跟蹤汽車的運(yùn)動(dòng)軌跡 首先,定義如下變量(圖引自Udacity) 其次,,假定我們把觀測值z與預(yù)測值x'之間的差值記為y,,則可以有 用、以及,、表示預(yù)測后的位置及速度,,可得 通過一系列的換算可得(中間換算過程可以看參考文獻(xiàn)20,本文限于篇幅則不再把中間換算過程一一列出,,畢竟本部分不是本文重點(diǎn),,了解下思想即可) 從上面的公式很容易看出,等式兩邊的轉(zhuǎn)化是非線性的,,并不存在一個(gè)常數(shù)矩陣H,,能夠使得等式兩邊成立。 如果將高斯分布作為輸入,,輸入到一個(gè)非線性函數(shù)中,,得到的結(jié)果將不再符合高斯分布,也就將導(dǎo)致卡爾曼濾波的公式不再適用,。 因此我們需要將上面的非線性函數(shù)轉(zhuǎn)化為近似的線性函數(shù)求解,。 在大學(xué)課程《高等數(shù)學(xué)》中我們學(xué)過,非線性函數(shù)y=h(x)可通過泰勒公式在點(diǎn)處展開為泰勒級數(shù): 忽略二次以上的高階項(xiàng),,即可得到近似的線性化方程,,用以替代非線性函數(shù)h(x),即: 將非線性函數(shù)h(x)拓展到多維,,即求各個(gè)變量的偏導(dǎo)數(shù),,即: 對x求偏導(dǎo)數(shù)所對應(yīng)的這一項(xiàng)被稱為雅可比(Jacobian)式。
我們將求偏導(dǎo)數(shù)的公式與之前推導(dǎo)的公式對應(yīng)起來看x的系數(shù),會發(fā)現(xiàn)這里的測量矩陣H其實(shí)就是泰勒公式中的雅可比式,。 多維的雅可比式的推導(dǎo)過程有興趣的同學(xué)可以自己研究一下,,這里我們直接使用其結(jié)論: 求得非線性函數(shù)h(x')對 、,、,、 的一階偏導(dǎo)數(shù),并排列成的矩陣,,最終得到雅克比(Jacobian)矩陣H: 其中 接下來就是考驗(yàn)各位高等數(shù)學(xué)求偏導(dǎo)數(shù)功底的時(shí)候了,! 經(jīng)過一系列計(jì)算,最終得到測量矩陣H為: 根據(jù)以上公式可知,,在每次預(yù)測障礙物的狀態(tài)后,,需要根據(jù)預(yù)測的位置和速度計(jì)算出對應(yīng)的測量矩陣H,這個(gè)測量矩陣為非線性函數(shù)h(x')在x'所在位置進(jìn)行求導(dǎo)的結(jié)果,。 3.2 無跡卡爾曼濾波UKF既然EKF已經(jīng)能夠很好的解決非線性問題了,,為什么還需要UKF? 可以看到原始高斯分布經(jīng)過非線性變換之后其實(shí)是一個(gè)不規(guī)則的非線性分布,,在EKF中我們在高斯均值點(diǎn)附近用泰勒級數(shù)近似非線性分布,從而獲得近似高斯分布,。但是問題在于,,這個(gè)近似高斯分布有時(shí)不是足夠精確,單單一個(gè)均值點(diǎn)往往無法預(yù)測上圖中這種很不規(guī)則的分布的,。這個(gè)時(shí)候我們就需要無跡卡爾曼濾波UKF了,。 UKF從原始高斯分布中提取包括均值點(diǎn)在內(nèi)的一系列代表點(diǎn),并將代表點(diǎn)帶入到非線性等式中,,圍繞這些點(diǎn)進(jìn)行近似,,從而獲得更好的近似結(jié)果。 在上圖中我們可以看到,,藍(lán)色橢圓代表的UKF近似高斯分布更接近真實(shí)的不規(guī)則分布,。 參考文獻(xiàn)與擴(kuò)展閱讀
后記總算成文了,,坦誠講,,我在寫本篇博客之前雖然看過很多文章、資料,,但在動(dòng)筆之前并沒有對卡爾曼濾波及其相關(guān)算法有足夠清晰透徹的理解,,是邊寫邊清晰的。 包括中秋三天一直在完善本文,,寫博十年以來,,心中總有一個(gè)執(zhí)念,那就是要讓沒有學(xué)過計(jì)算機(jī)的也能看懂我寫的文章(否則何必寫),,所以會特別注重這兩點(diǎn):
因?yàn)橹挥凶銐蛲ㄋ滓锥?,才可以讓更多初學(xué)者更快入門,才能讓我更有成就感,、滿足感,,當(dāng)然,歡迎大家不吝批評指正,最后,,更深入的可以看下七月在線相關(guān)的課,。 以下是本文的修改記錄(開寫后的一周內(nèi),基本一天一改進(jìn)/深入):
|
|