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

  • 相关阅读:
    标题
    Ubuntu配置 PPTP 服务器端
    网络虚拟化问题小记
    DevStack部署Openstack环境
    Ubuntu LVM扩展LV
    Gnocchi+Aodh服务简析
    部署Ceilometer +Gnocchi + Aodh
    Runing MAC on KVM 问题小记
    处理 Ceilometer UPD 丢包
    TC limit bandwidth
  • 原文地址:https://www.cnblogs.com/glxin/p/9883642.html
Copyright © 2011-2022 走看看