卡爾曼濾波
Github: https://github.com/bob800530/CarND-Extended-Kalman-Filter-Project
簡介
雷達與光達
現今的自駕車除了使用雷達來探測物體外,還有使用另一種Sensor那就是光達, 光達是一種光學遙感技術,它通過向目標照射一束光,通常是一束脈衝雷射來測量目標的距離等參數。光達在還用於機載雷射地圖測繪、雷射測高、雷射雷達等高線繪製等等具體應用中。
然而,光達的偵測精度較雷達高,但光達也有它的弱點,像是
- 無法跟雷達一樣透過繞射偵測物體
- 容易被塵土、細小碎片干擾
- 無法偵測速度
因此一輛優秀的自駕車,須具備光達及雷達兩項Sensor。
Extended Kalman Filter
世界上任何測量儀器都還是會有誤差,光達與雷達也不例外,而卡爾曼濾波就是用來濾除這些誤差的濾波器,藉由預測量與觀測量的變化,逐步修正其測量到的誤差。
若是當狀態轉換和觀測模型不是線性函數時,就需要用Extended Kalman Filter的幫忙了。
實際演練
課程中一步步推導Kalman濾波的公式,並教導如何將其運用於C/C++,學會基本的使用後,套用到下圖的遊戲中,必須能夠準確地預測出正確的路徑。
其中紅點跟藍點分別是光達跟雷達觀測到的位置,藉由這些觀測數據,必須求出正確的位置及速度,其中光達可直接偵測到物體的x,y座標,而雷達則是偵測到物體的rho,phi, rho_dot,雷達需先將rho,phi, rho_dot轉換成x,y後,才能匯入Kalman Filter並計算正確的位置及速度。
心得
這個的Project有別於前四個Project,使用的是C++而非Python,對於本來就熟悉C++的我順手許多,有更多時間去推導並學習複雜的Extend Kalman Filter,完成Project後,深深的感受到,C/C++在韌體上的地位是無可取代的,任何需要Real-time即時偵測的感測器,C/C++絕對是值得考慮的語言之一。