zoukankan      html  css  js  c++  java
  • 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,虽然逻辑上没有问题,但是会更消耗资源吧,不知道是基于什么原因考虑的。

  • 相关阅读:
    软件需求模式阅读笔记02
    软件需求模式阅读笔记1
    问题账户需求分析
    浅谈软件架构师的工作过程
    架构之美阅读笔记五
    架构之美阅读笔记四
    架构之美阅读笔记三
    架构之美阅读笔记二
    架构之美阅读笔记一
    软件需求与分析课堂讨论一
  • 原文地址:https://www.cnblogs.com/glxin/p/9883642.html
Copyright © 2011-2022 走看看