SLAM中的边缘化舒尔补
SLAM的Bundle Adjustment上,隨著時間的推移,路標特征點和相機的位姿越來越多,BA的計算量隨著變量的增加而增加。因此,要限制優化變量的多少,不能只一味的增加待優化的變量到BA里,而應該去掉一些變量。如何丟變量就是很重要的問題!
比如有frame1,frame2,frame3 以及這些frame上的特征點pt1…ptn。新來了一個frame4,為了不再增加BA的變量,出現在腦海里的直接做法是把frame1以及相關特征點pt直接丟棄,只優化frame2,frame3,frame4及相應特征點。然而,直接丟掉變量,就導致損失了信息,frame1可能能更多的約束相鄰的frame,直接丟掉的方式就破壞了這些約束。
在SLAM中,一般概率模型都是建模成高斯分布,如相機的位姿都是一個高斯分布,軌跡和特征點形成了一個多元高斯分布p(x1,x2,x3,pt1…),然后圖優化或者BA就從一個概率問題變成一個最小二乘問題。因此,從這個多元高斯分布中去掉一個變量的正確做法是把他從這個多元高斯分布中邊緣化出去。邊緣化就是使用Schur complement(舒爾補)
我們知道SLAM中的圖優化和BA都是最小二乘問題,通過高斯牛頓迭代求得,即
其中,,J是誤差對位姿等的雅克比,W是權重。我們關注的marginalize. 就是說只去求解我們希望保留的變量,那些我們要marg的變量就不關心了,從而達到減少計算的目的。假設變量x中可以分為保留部分和marg部分,那么上面的線性方程可以寫成如下形式:
這里我們要marg掉,而計算, 對上面這個方程進行消元得到:
其中?就稱為在中的舒爾補。有了這個上三角形式,我們就可以直接計算出了:
這樣我們就能夠迭代的更新部分變量,從而維持計算量不增加。在上面這個過程中,我們要注意,構建出來的Hx=b是利用了marg變量的信息,也就是說我們沒有人為的丟棄約束,所以不會丟失信息,但是計算結果的時候,我們只去更新了我們希望保留的那些變量的值。在slam的過程中,BA不斷地加入新的待優化的變量,并marg舊的變量,從而使得計算量維持在一定水平。
ref:
http://blog.csdn.net/heyijia0327/article/details/52822104
《視覺SLAM十四講》
總結
以上是生活随笔為你收集整理的SLAM中的边缘化舒尔补的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows下获得当前目录下的所有文件
- 下一篇: 计算机基础知识论文统一格式,大一计算机基