SLAM後端:濾波的方法+優化的方法
大神解答
一.前提
最一般的狀態估計問題,我們會根據系統是否線性,把它們分為線性/非線性系統。同時,對於噪聲,根據它們是否為高斯分布,分為高斯/非高斯噪聲系統。現實中最常見的,也是最困難的問題,是非線性-非高斯(NLNG, Nonlinear-Non Gaussian)的狀態估計。下面先說最簡單的情況:線性高斯系統。
線性高斯系統在線性高斯系統中,運動方程、觀測方程是線性的,且兩個噪聲項服從零均值的高斯分布。這是最簡單的情況。簡單在哪裏呢?主要是因為高斯分布經過線性變換之後仍為高斯分布。而對於一個高斯分布,只要計算出它的一階和二階矩,就可以描述它(高斯分布只有兩個參數)。 (其中過程可以參考貝葉斯法則-最大似然估計) 現在的問題是如何求解這個最大化問題。對於高斯分布,最大化問題可以變成最小化它的負對數。當我對一個高斯分布取負對數時,它的指數項變成了一個二次項,而前面的因子則變為一個無關的常數項,可以略掉(這部分我不敲了,有疑問的同學可以問)。於是,定義以下形式的最小化函數: 寫成矩陣的形式,類似最小二乘的問題: 另一方面,能否直接求解(*)式,得到呢?答案是可以的,而且這就是優化方法(batch optimization):將所有的狀態放在一個向量裏,進行求解。與卡爾曼濾波不同的是,在估計前面時刻的狀態(如)時,會用到後面時刻的信息(等)。從這點來說,優化方法和卡爾曼處理信息的方式是相當不同的。 |
二.擴展卡爾曼濾波器 --- EKF自己總結(針對非線性非高斯系統)
濾波器自己的局限性:
那麽,怎麽克服以上的缺點呢?途徑很多,主要看我們想不想維持EKF的假設。如果我們比較乖,希望維持高斯分布假設,可以這樣子改:
如果不那麽乖,可以說:我們不要高斯分布假設,憑什麽要用高斯去近似一個長得根本不高斯的分布呢?於是問題變為,丟掉高斯假設後,怎麽描述輸出函數的分布就成了一個問題。一種比較暴力的方式是:用足夠多的采樣點,來表達輸出的分布。這種蒙特卡洛的方式,也就是粒子濾波(PF)的思路。 |
三.IEKF
四.UKF無跡卡爾曼
五. PF 粒子濾波
六. 非線性優化
非線性優化,計算的也是最大後驗概率估計(MAP),但它的處理方式與濾波器不同。對於上面寫的狀態估計問題,可以簡單地構造誤差項: 然後最小化這些誤差項的二次型: 這裏僅用到了噪聲項滿足高斯分布的假設,再沒有更多的了。當構建一個非線性優化問題之後,就可以從一個初始值出發,計算梯度(或二階梯度),優化這個目標函數。常見的梯度下降策略有牛頓法、高斯-牛頓法、Levenberg-Marquardt方法。 非線性優化方法現在已經成為視覺SLAM裏的主流,尤其是在它的稀疏性質被人發現且利用起來之後。它與濾波器最大不同點在於, 一次可以考慮整條軌跡中的約束。它的線性化,即雅可比矩陣的計算,也是相對於整條軌跡的。相比之下,濾波器還是停留在馬爾可夫的假設之下,只用上一次估計的狀態計算當前的狀態。可以用一個圖來表達它們之間的關系: 當然優化方式也存在它的問題。例如優化時間會隨著節點數量增長——所以有人會提double window optimization這樣的方式,以及可能落入局部極小。但是就目前而言,它比EKF還是優不少的。 |
總結
- 卡爾曼濾波是遞歸的線性高斯系統最優估計。
- EKF將NLNG系統在工作點附近近似為LG進行處理。
- IEKF對工作點進行叠代。
- UKF沒有線性化近似,而是把sigma point(采樣點)進行非線性變換後再用高斯近似。
- PF去掉高斯假設,以粒子作為采樣點來描述分布。
- 優化方式同時考慮所有幀間約束,叠代線性化求解。
PS: SLAM中,狀態變量經常是六自由度的位姿,由旋轉矩陣和平移向量構成。然而問題是,旋轉矩陣並不存在加法,只有對應到李代數上才可以清楚地定義它的運算。因此,當我們討論這個位姿的噪聲,說它服從高斯分布時,需要了解李群李代數的知識。
SLAM後端:濾波的方法+優化的方法