博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VINS_MONO marginalization机制
阅读量:4574 次
发布时间:2019-06-08

本文共 707 字,大约阅读时间需要 2 分钟。

假设WINDOW_SIZE=5(代码中为10),则buffer大小为6(WINDOW_SIZE+1),最新来的帧放到WINDOW_SIZE的位置,记作X,但是WINDOW_SIZE位置的帧不参与优化。如图:

1418770-20181031153707540-305917454.png
estimator::processImage()中首先检查新的到帧与前一帧之间的视差,如果视差大于阈值,则新来的帧会作为LoopClosure中的KeyFrame,把滑窗中最早的一帧移出去丢掉,X加入优化的滑窗,marginalization_flag记作MARGIN_OLD。
移除之后buffer状态如图:
1418770-20181031154211048-746529120.png
如果新来的帧与前一帧间的视差较小,新来的帧不作为KeyFrame,把WINDOW_SIZE-1位置处的帧丢掉,X加入优化的滑窗,marginalization_flag记作MARGIN_SECOND_NEW。如图:
1418770-20181031154558432-547706941.png

需要注意的是,放进LoopClsoure buffer中的KeyFrame是WINDOWS_SIZE-2处的帧,因为WINDOW_SIZE-1处的帧不一定是关键帧。

具体代码参考:
Estimator::processImage()
Estimator::slideWindow()
FeatureManager::addFeatureCheckParallax()。

比较奇怪的一点是Estimator::slideWindow()中对MARGIN_OLD,移除最早一帧时的循环里面不是用赋值而是用swap,虽然逻辑上没有问题,但是会更消耗资源吧,不知道是基于什么原因考虑的。

转载于:https://www.cnblogs.com/glxin/p/9883642.html

你可能感兴趣的文章
网络请求之get与post异步请求
查看>>
堆和栈的区别
查看>>
清理内存
查看>>
蓝桥杯之装箱问题
查看>>
Spark常用算子详解
查看>>
JAVA_桥接模式
查看>>
Android(java)学习笔记76:Handler用法总结 和 秒表案例
查看>>
C#畅谈“网络电视”
查看>>
解决Maximum execution time of 120 seconds exceeded
查看>>
20172328《程序设计与数据结构》第四周学习总结
查看>>
react-native ListView 性能问题
查看>>
Leetcode 332, Coin Change
查看>>
Hadoop大数据平台构建
查看>>
JVM原理相关
查看>>
获取当前地址的参数值
查看>>
基于bs4库的HTML内容查找方法
查看>>
Ubuntu安装TTF字体
查看>>
使用YII缓存注意事项
查看>>
Office转HTML
查看>>
Ping 命令的使用方法总结
查看>>