视觉SLAM十四讲 第9讲 卡尔曼滤波
視覺(jué)SLAM十四講 第9講 卡爾曼濾波
- 1. 什么是卡爾曼濾波
- 2. SLAM的狀態(tài)估計(jì)
- 3. 卡爾曼濾波器的推導(dǎo)
- 4. 擴(kuò)展卡爾曼濾波
1. 什么是卡爾曼濾波
百度百科定義:卡爾曼濾波(Kalman filtering)是一種利用線(xiàn)性系統(tǒng)狀態(tài)方程,通過(guò)系統(tǒng)輸入輸出觀測(cè)數(shù)據(jù),對(duì)系統(tǒng)狀態(tài)進(jìn)行最優(yōu)估計(jì)的算法。由于觀測(cè)數(shù)據(jù)中包括系統(tǒng)中的噪聲和干擾的影響,所以最優(yōu)估計(jì)也可以看作是濾波過(guò)程。
有簡(jiǎn)單一點(diǎn)的話(huà)術(shù)來(lái)總結(jié):
卡爾曼濾波是一種系統(tǒng)狀態(tài)最優(yōu)估計(jì)的方法。
2. SLAM的狀態(tài)估計(jì)
在后端優(yōu)化中,我們可以根據(jù)所考慮時(shí)刻(幀數(shù))信息的多少來(lái)進(jìn)行分類(lèi):
- k時(shí)刻的狀態(tài)和前面所有時(shí)刻的信息有關(guān),甚至用未來(lái)的信息來(lái)更新,這樣的處理方式稱(chēng)為“批量的(Batch)”。這種處理方式常用非線(xiàn)性?xún)?yōu)化方法。
- k時(shí)刻的狀態(tài)只和k-1時(shí)刻的狀態(tài)有關(guān),即馬爾科夫性,并且是一階馬爾科夫性。這種處理方式稱(chēng)為濾波器方法(卡爾曼濾波器)。
3. 卡爾曼濾波器的推導(dǎo)
根本思路:記住卡爾曼濾波器是對(duì)系統(tǒng)狀態(tài)進(jìn)行最優(yōu)估計(jì)的方法,且利用的是線(xiàn)性系統(tǒng)狀態(tài)方程。
第一步:狀態(tài)估計(jì):
根據(jù)運(yùn)動(dòng)方程的狀態(tài)方程(式9.3),我們用貝葉斯法則,利用0到k時(shí)刻的數(shù)據(jù)來(lái)估計(jì)k時(shí)刻狀態(tài)分布:
P(xk∣x0,u1:k,z1:k)∝P(zk∣xk)P(xk∣x0,u1:k,z1:k?1)P(x_k|x_0,u_{1:k},z_{1:k})\propto P(z_k|x_k)P(x_k|x_0,u_{1:k},z_{1:k-1})P(xk?∣x0?,u1:k?,z1:k?)∝P(zk?∣xk?)P(xk?∣x0?,u1:k?,z1:k?1?)
- 正比于符號(hào)∝\propto∝的左邊即k時(shí)刻的狀態(tài)分布(后驗(yàn)分布,它根據(jù)了zkz_kzk?觀測(cè)數(shù)據(jù)來(lái)求狀態(tài),是知果求因)
- 符號(hào)右邊第一項(xiàng)是似然(知因求果)
- 符號(hào)右邊第二項(xiàng)是先驗(yàn)(歷史求因)
實(shí)際上,整個(gè)式子就是如下公式:后驗(yàn)∝似然×先驗(yàn)后驗(yàn) \propto 似然 \times 先驗(yàn)后驗(yàn)∝似然×先驗(yàn)
我們卡爾曼濾波器,求的就是這個(gè)式子,我們希望估計(jì)k時(shí)刻的后驗(yàn)分布,那么只要求得k時(shí)刻的似然和先驗(yàn)即可,整個(gè)推導(dǎo)過(guò)程牢記這個(gè)式子,以免在推導(dǎo)的過(guò)程中迷失了自己。(甚至可以粗暴的認(rèn)為,卡爾曼濾波器就是一個(gè)矩陣A,假設(shè)k-1時(shí)刻的后驗(yàn)為x,通過(guò)Ax=b我們就求得的k時(shí)刻的后驗(yàn)分布b。)
然后,我們將先驗(yàn)以xk?1x_{k-1}xk?1?時(shí)刻為條件概率展開(kāi):
x時(shí)刻的先驗(yàn):(下面為了簡(jiǎn)便用A、B表示)
P(xk∣x0,u1:k,z1:k?1)=P(A∣B)=∫P(A∣B,xk?1)P(xk?1∣B)dxk?1P(x_k|x_0,u_{1:k},z_{1:k-1}) = P(A|B)=\int P(A|B,x_{k-1})P(x_{k-1}|B)dx_{k-1}P(xk?∣x0?,u1:k?,z1:k?1?)=P(A∣B)=∫P(A∣B,xk?1?)P(xk?1?∣B)dxk?1?
然后我們?cè)偌僭O(shè)馬爾科夫性,簡(jiǎn)化這個(gè)式子,會(huì)得到一個(gè)抽象關(guān)系式:
x時(shí)刻的先驗(yàn)=k時(shí)刻的運(yùn)動(dòng)方程×(k?1)時(shí)刻的狀態(tài)分布(后驗(yàn))x時(shí)刻的先驗(yàn) = k時(shí)刻的運(yùn)動(dòng)方程 \times (k-1)時(shí)刻的狀態(tài)分布(后驗(yàn))x時(shí)刻的先驗(yàn)=k時(shí)刻的運(yùn)動(dòng)方程×(k?1)時(shí)刻的狀態(tài)分布(后驗(yàn))
這兩步想說(shuō)明的是,我們實(shí)際在做的是“如何把k-1時(shí)刻的狀態(tài)分布推導(dǎo)至k時(shí)刻”,即我們用k-1時(shí)刻的后驗(yàn)分布,計(jì)算k時(shí)刻的先驗(yàn),最后求得k時(shí)刻的后驗(yàn)(狀態(tài)分布)。我們只要維護(hù)一個(gè)狀態(tài)量(后驗(yàn)),對(duì)它不斷迭代和更新即可。
后面的證明不會(huì)用到這兩步。只需要知道,我們假設(shè)k-1時(shí)刻的后驗(yàn)已知,后驗(yàn)分布均值為x^k?1\hat{x}_{k-1}x^k?1?,后驗(yàn)分布協(xié)方差為P^k?1\hat{P}_{k-1}P^k?1?
第二步:線(xiàn)性高斯系統(tǒng)
我們知道卡爾曼濾波器利用的是線(xiàn)性系統(tǒng)狀態(tài)方程,所以我們要假設(shè)運(yùn)動(dòng)方程和觀測(cè)方程可以用線(xiàn)性方程描述:
{xk=Akxk?1+uk+wkzk=Ckxk+vkk=1,...,N\begin{cases}x_k=A_kx_{k-1}+u_k+w_k \\ z_k = C_kx_k+v_k\end{cases} k=1,...,N{xk?=Ak?xk?1?+uk?+wk?zk?=Ck?xk?+vk??k=1,...,N
這里的噪聲服從零矩陣高斯分布wk~N(0,R).vk~N(0,Q)w_k \sim N(0,R). \ \ v_k \sim N(0,Q)wk?~N(0,R).??vk?~N(0,Q)
實(shí)際上,運(yùn)動(dòng)方程這里隱藏的信息是:k時(shí)刻的先驗(yàn)=k-1時(shí)刻的后驗(yàn)的線(xiàn)性映射
第三步:預(yù)測(cè)
預(yù)測(cè),意思是如何從上一個(gè)時(shí)刻的狀態(tài)(即后驗(yàn),假設(shè)已知),根據(jù)輸入信息(有噪聲,服從高斯分布)推斷當(dāng)前時(shí)刻的狀態(tài)分布(先驗(yàn))。然后根據(jù)線(xiàn)性方程即運(yùn)動(dòng)方程和附錄A.3(高斯系統(tǒng)復(fù)合即加、乘之后的均值和協(xié)方差的變化情況),可以將k時(shí)刻的先驗(yàn)分布求出來(lái):
P(xk∣x0,u1:k,z1:k?1)=N(Akx^k?1+uk,AkP^k?1Ak?+R)P(x_k|x_0,u_{1:k},z_{1:k-1})=N(A_k\hat{x}_{k-1}+u_k,A_k\hat{P}_{k-1}A^\top_k + R)P(xk?∣x0?,u1:k?,z1:k?1?)=N(Ak?x^k?1?+uk?,Ak?P^k?1?Ak??+R)
我們記預(yù)測(cè)的兩個(gè)式子為預(yù)測(cè):(k時(shí)刻的先驗(yàn)=線(xiàn)性k-1時(shí)刻的后驗(yàn))
xˇk=Akx^k?1+uk,Pˇk=AkP^k?1Ak?+R\check{x}_k = A_k\hat{x}_{k-1}+uk, \ \ \check{P}_k=A_k\hat{P}_{k-1}A^\top_k+Rxˇk?=Ak?x^k?1?+uk,??Pˇk?=Ak?P^k?1?Ak??+R
第四步:卡爾曼增益和后驗(yàn)分布的推導(dǎo)
P(zk∣xk)=N(Ckxk,Q)P(z_k|x_k)=N(C_kx_k,Q)P(zk?∣xk?)=N(Ck?xk?,Q)
至于這里為什么協(xié)方差不是附錄4.3中的形式即CkP^kCk?+QC_k\hat{P}_kC^\top_k+QCk?P^k?Ck??+Q,這個(gè)問(wèn)題,博客zkk9527給出了解釋。而我的理解是,回顧整個(gè)推導(dǎo)過(guò)程,xkx_kxk?(既不是后驗(yàn)也不是先驗(yàn))的作用是作為一個(gè)參考量,我們利用與xkx_kxk?相關(guān)的一次項(xiàng)系數(shù)和二次項(xiàng)系數(shù)來(lái)求得預(yù)測(cè)和卡爾曼增益。它不存在于我們最后的卡爾曼濾波器5個(gè)公式中,所以這里的xkx_kxk?是一個(gè)定值,如果是定值則沒(méi)有協(xié)方差之說(shuō),而均值就等于它本身。
N(x^k,P^k)=ηN(Ckxk,Q)?N(xˇk,Pˇk)N(\hat{x}_k,\hat{P}_k)=\eta N(C_kx_k,Q)\cdot N(\check{x}_k,\check{P}_k)N(x^k?,P^k?)=ηN(Ck?xk?,Q)?N(xˇk?,Pˇk?)
(回顧書(shū)上P236式9.5中的貝葉斯公式,分母evidence即P(A∣B)=P(B∣A)P(A)P(B)P(A|B)=\frac{P(B|A)P(A)}{P(B)}P(A∣B)=P(B)P(B∣A)P(A)?中的P(B)P(B)P(B)被省略掉了,所以等式用了正比于符號(hào)∝\propto∝表示。而后推導(dǎo)出兩邊高斯分布的均值和協(xié)方差后,又把正比于符號(hào)用等號(hào)代替,增加了一個(gè)比例系數(shù)η\etaη,那么嚴(yán)格來(lái)說(shuō)這里的η\etaη,就是前面的evidence的倒數(shù),即使知道了這個(gè),書(shū)上的推導(dǎo)還是假設(shè)了兩邊的因子相等,不知道為什么)
所以接下來(lái)我們把指數(shù)部分展開(kāi):
至此,我們已經(jīng)推導(dǎo)了卡爾曼濾波器的整個(gè)過(guò)程。再來(lái)總結(jié)一下,卡爾曼濾波器推導(dǎo)后有5個(gè)公式(2個(gè)預(yù)測(cè)即先驗(yàn)的均值和協(xié)方差,1個(gè)卡爾曼增益,還有2個(gè)即后驗(yàn)分布的均值和協(xié)方差):
- 預(yù)測(cè):
- xˇk=Akx^k?1,Pˇk=AkP^k?1Ak?+R\check{x}_k=A_k\hat{x}_{k-1}, \ \ \check{P}_k=A_k\hat{P}_{k-1}A^\top_k + Rxˇk?=Ak?x^k?1?,??Pˇk?=Ak?P^k?1?Ak??+R
- 更新
- 卡爾曼增益:
- K=PˇkCk?(CkPˇkCk?+Qk)?1K=\check{P}_kC^\top_k(C_k\check{P}_kC^\top_k+Q_k)^{-1}K=Pˇk?Ck??(Ck?Pˇk?Ck??+Qk?)?1
- 后驗(yàn):
- x^k=xˇk+K(zk?Ckxˇk)\hat{x}_k=\check{x}_k+K(z_k-C_k\check{x}_k)x^k?=xˇk?+K(zk??Ck?xˇk?)
- P^k=(I?KCk)Pˇk\hat{P}_k = (I-KC_k)\check{P}_kP^k?=(I?KCk?)Pˇk?
- 卡爾曼增益:
如何更好的記憶呢?
k時(shí)刻的先驗(yàn)和k-1時(shí)刻的后驗(yàn)成線(xiàn)性映射;k時(shí)刻后驗(yàn)的均值等于先驗(yàn)均值加上一個(gè)卡爾曼增益和觀測(cè)誤差的乘積。
卡爾曼的濾波全部推導(dǎo)完了,現(xiàn)在我們總結(jié)一下簡(jiǎn)化的步驟:
4. 擴(kuò)展卡爾曼濾波
我們知道,卡爾曼濾波利用的是線(xiàn)性系統(tǒng)方程,而SLAM中的運(yùn)動(dòng)方程和觀測(cè)方程通常是非線(xiàn)性的,特別是加入了相機(jī)內(nèi)參模型和李代數(shù)表示的位姿,更不可能是一個(gè)線(xiàn)性系統(tǒng)。一個(gè)高斯分布,經(jīng)過(guò)非線(xiàn)性變換后,往往不再是高斯分布。
所以我們需要將卡爾曼濾波器的結(jié)果拓展到非線(xiàn)性系統(tǒng)中。處理方法是:在某個(gè)點(diǎn)附近考慮運(yùn)動(dòng)方程及觀測(cè)方程的一階泰勒展開(kāi),只保留一階項(xiàng),即線(xiàn)性的部分。然后按照線(xiàn)性系統(tǒng)進(jìn)行推導(dǎo)。總的來(lái)說(shuō),就是把非線(xiàn)性近似到線(xiàn)性,再利用相似的推導(dǎo)推導(dǎo)出擴(kuò)展卡爾曼濾波。
流程:
總結(jié)
以上是生活随笔為你收集整理的视觉SLAM十四讲 第9讲 卡尔曼滤波的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: fastreport 直接调网络打印机_
- 下一篇: 21天自学c语言漫画版,21天学通C语言