Kalman Filter應用實例:
第二個例子則是GPS定位系統,GPS訊號可能在車子進入隧道後訊號變弱、雜訊增加,車子的系統要依賴自己內部儀器(IMU、里程表)輔助計算目前所在位置,Kalman Filter能幫助我們融合各種測量值找到汽車精確位置的最佳估計值。
簡單的說,Kalman Filter能融合各種測量值得到最佳估計值。(Wiki是這樣寫:卡爾曼濾波會根據各測量量在不同時間下的值,考慮各時間下的聯合分布,再產生對未知變數的估計,因此會比只以單一測量量為基礎的估計方式要準。)
Kalman Filter Model:
首先,推薦看這個blog,講解得非常清楚:How a Kalman filter works, in pictures
參數意義:
x : filter state estimate
P : covariance matrix
Q : process uncertainty/noise
R : measurement uncertainty/noise
H : measurement function
F : state transition matrix
u : control vector
B : control transition matrix
K : kalman gain
從上圖的流程中我們可以看到 Kalman Filter分成兩步驟:首先是 predict,再來是 update。
Prediction Step:
ˆxk=Fkˆxk−1+Bk→ukPk=FkPk−1FTk+Q
這裡比較像我們一般在建立馬可夫鏈模型一樣,這裡我們以等速運行的車為例,車子的狀態有四個變數:x座標、y座標、x方向速度、y方向速度,車子知道的只有速度資訊。
x=[xyvxvy]T
F=[10Δt0010Δt00100001]
xF=[x+vxΔty+vyΔtvxvy]T
B和u是人為操縱給的影響,像是我們操縱遙控器讓車子進行加速,但若沒有這樣的人為操控的話,就不須計算B和u。而P和Q的計算是考量進Uncertainty。
P0=[σ2x0000σ2y0000σ2vx0000σ2vy]
Q=[σ2xσxyσxxvσxyvσyxσ2yσyxvσyyvσxvxσxvyσ2xvσxvyvσyvxσyvyσyvxvσ2yv]
Update Step:
Kk=PkHT(HPkHT+R)−1ˆx′k=ˆxk+Kk(→zk−Hˆxk)
P′k=Pk−KkHPk
update步驟相當於修正predict步驟得出的state值。
H是measurement matrix,在我們上面的等速模型實際測量的值只有vx和vy兩個速度值,因此
H=[00100001]
R=[σ2vx00σ2vy]
而→zk是我們這次的k時間點測到的速度值[v′xv′y]T
經過update後的ˆx′k即我們經過修正過後的狀態,即是Kalman Filter得到的目前時間點的最佳估測值!
上面等速模型的例子是源於這裡,這個也推薦可以看一下:Kalman-Filter-CV.ipynb
寫Python若想要用Kalman Filter,參考這個:FilterPy
參考資料:
1. Matlab youtube: https://www.youtube.com/watch?v=mwn8xhgNpFY
2. https://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/
3. https://github.com/balzer82/Kalman
4. https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Python (這裡寫的很細,想更了解細節請看這裡)
沒有留言:
張貼留言