VINS-Mono 中为了处理一些悬停的case,引入了一个 two-way marginalization: MARGIN_OLD:如果次新帧是关键帧,则丢弃滑动窗口内最老的图像帧,同时对与该图像帧关联的约束项进行边缘化处理。这里需要注意的是,如果该关键帧是观察到某个地图点的第一帧,则需要把该地图点的深度转移到后面的图像帧中去。 MARGIN_NEW:...
Monocular visual-inertial odometry with relocalization achieved via nonlinear graph optimization-based, tightly-coupled, sliding window, visual-inertial bundle adjustment. 代码(注释版):cggos/vins_mono_cg 1. 测量预处理 1.1 前端视觉处理 Simple feature processing pipeline 自适应直方图均衡化(cv::CLAHE) 掩...
last_marginalization_info的赋值出现在后面的代码里。 数据结构: last_marginalization_info 这个数据结构定义在marginalization_factor.cpp里面,比较复杂。 class MarginalizationInfo { public: ~MarginalizationInfo(); int localSize(int size) const; int globalSize(int size) const; void addResidualBlockInfo(Residual...
VINS-Mono代码中貌似没有体现, 不知道Mobile版本中是否有. Initialization(初始化): vision-only SfM用纯视觉估计相机运动和特征深度,视觉得到一个相对运动,IMU预积分得到一个相对运动, 二者做alignment, 从而标定出姿态、速度、重力向量、陀螺仪偏差
上面理论搞清楚了其实只是第一步,由于VINS-mono优化的变量较多,VINS-mono的边缘化操作实际上要复杂很多,VINS-mono的边缘化相关代码在estimator.cpp的Estimator类的optimization()函数中,该函数先会先进行后端非线性优化然后紧接着就是边缘化操作,下面就针对这个函数中的边缘化相关代码进行剖析。
Vins-mono是香港科技大学开源的一个VIO算法,用紧耦合的方法,通过单目+IMU恢复出尺度,效果非常棒。VINS的功能模块可包括五个部分:数据预处理、初始化、后端非线性优化、闭环检测及闭环优化。代码中主要开启了四个线程,分别是:前端图像跟踪、后端非线性优化(其中初始化和IMU预积分在这个线程中)、闭环检测、闭环优化。
【SLAM】VINS-MONO解析——初始化(代码部分) 6.2 代码解析 这部分代码在estimator::processImage()最后面。初始化部分的代码虽然生命周期比较短,但是,代码量巨大!主要分成2部分,第一部分是纯视觉SfM优化滑窗内的位姿,然后在融合IMU信息,按照理论部分优化各个状态量。
对应代码在InitialEXRotation::CalibrationExRotation中。 // 相机与IMU之间的相对旋转 if(ESTIMATE_EXTRINSIC == 2) { ROS_INFO("calibrating extrinsic param, rotation movement is needed"); if (frame_count != 0) { // 选取两帧之间共有的Features ...
上面说的是vins-mono的回环检测,BRIEF匹配是在loop closure中的,匹配后会通过几何方法验证并去除误匹配,得到当前帧与回环帧的回环约束,最后进行pose graph优化;vins-mono的前端部分使用的是光流匹配,没有对图像做仿射变换,对大幅度旋转不理想。 2019-06-21 回复喜欢 flyaudio “这时整个滑窗的状态量的维度...
港科vins mono 系统学习 一 .git 系统框图如下 主要分为: 1、测量数据预处理:IMU预积分、Harris特征提取和跟踪 2、外参标定和初始:手眼标定法获得外参旋转量、纯视觉SFM、Visual-Inertial调整 3、里程计...Psoe-Graph优化 有不对的地方欢迎指正! 参考文献:Technical Report:VINS-Mono: A Robust and VersatileMono...