4)关键帧选取:1、当前帧相对最近的关键帧的特征平均视差大于一个阈值就为关键帧(因为视差可以根据平移和旋转共同得到,而纯旋转则导致不能三角化成功,所以这一步需要IMU预积分进行补偿)2、当前帧跟踪到的特征点数量小于阈值视为关键帧; 代码框架 代码流程如下图:主要三个源程序,feature_tracker_node是特征跟踪线程的...
1、一种是倒数第二帧如果是关键帧的话,将最旧的pose移出Sliding Window,将最旧帧关联的视觉和惯性数据边缘化掉。把第一个老关键帧及其测量值被边缘化;Margin_Old作为先验值。 2、如果倒数第二帧不是关键帧的话,那么就只剔除倒数第二帧的视觉观测,而不剔除...
1、当前帧相对最近的关键帧的特征平均视差大于一个阈值就为关键帧(因为视差可以根据平移和旋转共同得到,而纯旋转则导致不能三角化成功,所以这一步需要IMU预积分进行补偿) 2、当前帧跟踪到的特征点数量小于阈值视为关键帧; 输入的是特征点,但是会把能观测到这个特征点的所有帧也都放进去,第一个索引是特征点ID,第...
vins_estimator 概述 基本上VINS里面绝大部分功能都在这个package下面,包括IMU数据的处理(前端),初始化(我觉得可能属于是前端),滑动窗口(后端),非线性优化(后端),关键帧的选取(部分内容)(前端)。我第一次看的时候,总是抱有一个疑问,就是为什么把这么多内容全都放在这
视觉传感器 : 1)提取Harris角点, KLT金字塔光流跟踪相邻帧 ; 2)2 维特征点先矫正为不失真的,然后在通过外点剔除后投影到一个单位球面上 ; 3)去除异常点:先进行F矩阵测试,通过RANSAC去除异常点; 4)关键帧选取:1、当前帧相对最近的关键帧的 特征平均视差大于一个阈值就为关键帧 (因为视差可以根据平移和旋转共同...
Vins-mono是香港科技大学开源的一个VIO算法 是用紧耦合方法实现的,通过单目+IMU恢复出尺度,效果非常棒。 1.特征点跟踪 首先用cv::goodFeaturesToTrack在第一帧图像上面找最强的150个特征点,非极大值抑制半径为30。新的特征点都有自己的新的对应的id。然后在下一帧过来时,对这些特征点用光流法进行跟踪,在下一帧上...
VINS-MONO中,为了处理一些悬停的case,引入了一个two-way marginalization,简单来说就是:如果倒数第二帧是关键帧, 则将最旧的pose移出slidingwindow, 也就是MARGIN_OLD,如果倒数第二帧不是关键帧, 则将倒数第二帧pose移出sliding window, 也就是MARGIN_NEW。选取关键帧的策略是视差足够大,在悬停等运动较小的情况...
VINS_MONO原文中还将关键帧的选取作为前端分,本文暂不讨论, 后续文章会详细介绍。 VINS-Mono将前端封装为一个ROS节点,该节点的实现在feature_tracker目录下的src中,src里共有3个头文件和3个源文件: featuretrackernode.cpp构造了一个ROS节点featuretrackernode,该节点订阅相机图像话题数据后,提取特征点,然后用KLT光流...
图1 VINS-Mono系统框图 1、测量值预处理 对于相机和IMU采集到的数据需要进行预处理。对于视觉数据,需要在相邻两帧中跟踪特征并且在最新帧中检测特征;对于IMU数据,需要对相邻两帧中的IMU数据进行预积分。 1.1 前端视觉处理 一方面,对于每张新图像,用KLT光流法对现有特征进行跟踪;另一方面,不断检测新角点,使得每张图像...
关键帧也在这一步中选取。我们有两种关键帧选取标准。第一个是从过去关键帧之外的平均视差法。如果跟踪特征的平均视差是在当前帧和最新帧之间超过了某个阈值,我们将该帧作为新的关键帧。注意,不仅平移,而且旋转也会引起视差。然而,特征在纯旋转运动中是不能进行三角化。为了避免这种情况,我们在计算视差时采用陀螺仪...