VINS_MONO marginalization機制


假設WINDOW_SIZE=5(代碼中為10),則buffer大小為6(WINDOW_SIZE+1),最新來的幀放到WINDOW_SIZE的位置,記作X,但是WINDOW_SIZE位置的幀不參與優化。如圖:

estimator::processImage()中首先檢查新的到幀與前一幀之間的視差,如果視差大於閾值,則新來的幀會作為LoopClosure中的KeyFrame,把滑窗中最早的一幀移出去丟掉,X加入優化的滑窗,marginalization_flag記作MARGIN_OLD。
移除之后buffer狀態如圖:

如果新來的幀與前一幀間的視差較小,新來的幀不作為KeyFrame,把WINDOW_SIZE-1位置處的幀丟掉,X加入優化的滑窗,marginalization_flag記作MARGIN_SECOND_NEW。如圖:

需要注意的是,放進LoopClsoure buffer中的KeyFrame是WINDOWS_SIZE-2處的幀,因為WINDOW_SIZE-1處的幀不一定是關鍵幀。
具體代碼參考:
Estimator::processImage()
Estimator::slideWindow()
FeatureManager::addFeatureCheckParallax()。

比較奇怪的一點是Estimator::slideWindow()中對MARGIN_OLD,移除最早一幀時的循環里面不是用賦值而是用swap,雖然邏輯上沒有問題,但是會更消耗資源吧,不知道是基於什么原因考慮的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM