卡爾曼濾波器(Kalman filter)又稱作最佳線性濾波器,它是一個純時域的濾波器(不需要做頻域變換),所以實現簡單,也因此在工程上有很多應用,像是用於估計動態系統的狀態。像當初 NASA 在登月的時候就是利用卡爾曼濾波來估計登月飛船的狀態! 可以想像在那個年代,感測器技術不如現在那麼進步,加上登月飛船在該死的太空環境中會受到各式各樣的干擾(太陽風、宇宙射線...),以至於它勢必沒有辦法準確的量測到真實的數值。但這可不行啊~ 如果速度、仰角、方向等數據的量測誤差過大,是會導致整台登月飛船墜毀在月球之上的。還有最後有卡爾曼博士出手相救,我們才得以見證這個人類工程史上的奇蹟。
然而卡爾曼濾波器不僅可以用來估計動態系統的狀態,它也可以被應用在當下正紅的自駕車上!
其實一台自駕車上,是會安裝多種不同的感測器(e.g. Radar、LIDAR、Camera),而這些感測器也各有各的用途!至於最後智能車要怎麼彙整這些來自不同感測器的資訊,我們就需要感測器融合(Sensor Fusion)技術。 卡爾曼濾波器也是一種可以用來實現感測器融合的方法。
接下來 Jaosn 也不想太數學的方式來寫,畢竟如果你真的想了解它底層數學邏輯/計算,那你隨便去 Youtube 上搜一下,就有一堆 PhD 拍的授課影片,講的可精彩了~ 我怎麼可能有他們專業 >"< 這邊呢主要還是想寫一下我對卡爾曼濾波器的理解。 卡爾曼濾波器說穿了就兩個步驟:「預估」以及「測量更新」。 舉例來說,今天張三開著車,想要從甲地前往乙地。 如果說甲地跟乙地之間的距離是 60公里,並且張三以每小時 60公里的速度均速前進的話,那我們自然就會預估張三會在一個小時後抵達目的地,但在真實世界中哪有那麼美好~ 姑且不論等紅綠燈、塞車之類的狀況,即便你能夠平穩的在道路上行駛,那車子的時速還是會受到上下坡、風阻等外在因素所影響,讓我們想讓車輛維持均速前進這件事變得相當困難。 既然沒辦法保證車輛能夠平穩地均速前行,那我們就很難 "準確" 估計下一個時間點車輛出現的位置。 這時候我們就用一個高斯機率密度函數來表示,車輛於該時間點 "可能" 出現的位置。 接著我們再通過 "量測",來輔助確認車輛的位置。 那你們一定會想說~ 啊都可以用量的了,不是比較準嗎? 那還預估的屁? 那是因為,很多時候我們量測到的數據並不會是 "真確" 的。 以今天張三的這個例子來說,如果我們使用 GPS 訊號做 "量測",一般民用 GPS 會有 10~25 公尺左右的誤差。然後我們假設用行駛速度預估出來的位置是有 100~200 公尺的誤差,而卡爾曼濾波器厲害的地方就是,它可以用這兩個不是那麼準的位置資訊,幫你預估出更加真確的位置。
Ok, 那關於卡爾曼濾波器的部分就簡單介紹到這邊,如果有想要自己動手玩玩看卡爾曼濾波器的話,其實這個演算法 OpenCV 就有 built-in 在他們 Library 裡面了! Python 的話你直接 import cv2 然後 cv2.KalmanFilter 這個就是了! 最後再附上一段使用卡爾曼濾波器追蹤滑鼠移動事件的 Python Demo Code 給你們參考~ 不過這 Code 不是我寫的,是以前學習相關知識時在網路上找到並保存下來的,應該是對岸的某論壇或某博主吧~ 至於詳細出處就不記得了~
Python Demo Code : Track Mouse Movement Using Kalman Filter
0 評論
發表回覆。 |
Jason Chen人不光是生來就擁有一切,而是靠他從學習中得到的一切來造就自己。- 歌德 文章分類
全部
封存檔
九月 2023
|