綜上所述,在g2o中選擇優化方法一共需要三個步驟:
選擇乙個線性方程求解器,從pcg、csparse、choldmod三個選一
選擇乙個blocksolver
選擇乙個迭代器,從gn、lm、doglog中選
其中read和write函式可以不進行覆寫,僅僅宣告一下就可以了,settooriginimpl設定為優化變數的初始值,oplusimpl比較重要,我們根據增量方程計算出增量後,就通過這個函式對估計值進行調整。
其中read和write函式同上,computeerror函式是使用當前頂點的值計算的測量值與真實值之間的誤差,linearizeoplus函式是在當前頂點的值下,該誤差對優化變數的偏導數,即jacobian矩陣
- 注意:如果沒有定義邊的linearizeoplus函式,就會呼叫數值求導,運算比較慢
注:資訊矩陣等於協方差矩陣的逆,可以理解為權重,協方差越大,說明不確定度越大,那麼在優化的時候就要給予較小的權重,不至於誤差較大的頂點或者邊帶偏了整個優化
g2o學習 g2o整體框架
進來對g2o優化庫進行了學習,雖然才模仿著寫了兩個例程,但是對於整個g2o的理解和使用方面還是多了不少的感觸,特此寫下部落格,對這些天的學習進行記錄。說到整體的結構,不得不用一張比較概括的圖來說明 這張圖最好跟著畫一下,這樣能更好的理解和掌握,例如我第一次看的時候根本沒有注意說箭頭的型別等等的細節。...
g2o擬合曲線
cmakelists cmake minimum required version 3.7 project g2o curve fitting robin set cmake cxx standard 11 新增g2o的cmake modual path find package g2o requi...
g2o使用記錄
幾元邊就有幾個jacobian 例如g2o定義的二元邊就有 jacobianoplusxi和 jacobianoplusxj 原始碼中baseedge定義如下 d決定了誤差的維度 template int d,typename e class baseedge public optimizableg...