1. 程式人生 > >用俗話講講卡爾曼濾波與粒子濾波

用俗話講講卡爾曼濾波與粒子濾波

一,卡爾曼濾波

卡爾曼濾波可以根據一些已知的量來預測未知的量,這些量受到的干擾必須得近似高斯噪聲。這個東西可以用來幹什麼呢?例如我們可以用來預測明天,後天,未來好幾天的溫度。我們可以在前幾天用溫度計記錄下一系列的溫度資料作為我們未來預測的參考資料之一,然後我們根據一年四季的溫度變化作為參考資料之二,我們給這2個參考資料各加一個權重綜合起來預測未來的溫度。如果前幾天記錄下來的資料與真實溫度很切合(畢竟溫度計也是有誤差),我們就把它的權重加大。用這個方法卡爾曼先生對近期未來的資料的預測還是很精確的,只要我們的資料只受到高斯噪聲的干擾。

我想起來我以前做過的一個專案,基於KINECT的實時三維地圖構建與位姿估計,其中攝像頭的位姿估計就用到了卡爾曼濾波演算法,我們在三維地圖中畫出了估計出來的攝像頭朝向,是怎麼做到的呢?我們用了大約10秒鐘的標定資料,即讓攝像頭做上下左右位移,這個過程大約10秒,10秒之後再開啟所有的程式,這10秒就是用來參考的歷史資料,我們捕捉畫面中觀察到了向上,向下的向量運動(這個用仿射變換就能搞定),然後我們就知道了怎樣的向量方向表示攝像頭在向上運動,怎樣的矢量表示攝像頭在向下等等,這樣我們就能在只捕捉畫面中的的移動向量就能用卡爾曼濾波演算法估計出此時此刻攝像頭的正確朝向。

這樣我們就在沒有慣導單元的情況下成功知道了攝像頭的旋轉、移動狀態,是不是很酷!

二,粒子濾波

 粒子濾波演算法源於蒙特卡洛思想,即以某事件出現的頻率來指代該事件的概率。通俗的講,粒子濾波也是能用已知的一些資料預測未來的資料,但是粒子濾波可以不侷限於高斯噪聲,原理上粒子濾波可以駕馭所有的非線性、非高斯系統。粒子濾波還廣泛運用與各種軍事領域,對於上述的哪個SLAM專案於是同樣駕馭。

舉個栗子,假設美帝的愛國者防空導彈裡面的程式用的是粒子濾波。三胖某天閒來無事射個導彈過去玩玩,導彈在剛出朝鮮領土時就被美帝的衛星間諜發現,衛星間諜神情高度緊張,它的程式虛擬出來一塊包含朝鮮與美國的巨大立體三維空間,在這個空間中加入地球大氣阻力系數,地心引力等等引數。然後順手撒了一把沙子,並給這些沙子賦予初始動量,和模擬導彈質量與外觀的係數。這些沙子開始在空間中從朝鮮向著美帝飛去,剛剛進入太平洋的時候,位於夏威夷軍事基地上的愛國者導彈發射了,它朝著太平洋中心飛去,因為程式中的那一大堆沙子構成的軌跡最多最粗的那一根10分鐘後要經過太平洋中心的一個點。10分鐘後2個導彈在太平洋中心相遇了,粒子濾波成功預測了導彈的軌跡。

   寫 粒子濾波程式碼的5個步驟:

     在粒子濾波過程中,X(t)實際上是通過對大量粒子的狀態進行處理得到的。

    1)初始狀態:用大量粒子模擬X(t),粒子在空間內均勻分佈;

    2)預測階段:根據狀態轉移方程,每一個粒子得到一個預測粒子;

    3)校正階段:對預測粒子進行評價,越接近於真實狀態的粒子,其權重越大;

    4)重取樣:根據粒子權重對粒子進行篩選,篩選過程中,既要大量保留權重大的粒子,又要有一小部分權重小的粒子;

    5)濾波:將重取樣後的粒子帶入狀態轉移方程得到新的預測粒子,即步驟2。