VINS-Mono源码解读(一):特征跟踪 FeatureTracker的主要作用是跟踪特征并三角化恢复深度以后发给后端去优化。 FeatureTracker功能相关的代码不只是存放在一个文件中,它存放在VINS-Mono/feature_tracker/src文件夹下的所有文件中,这包括: feature_tracker_node.cpp:特征跟踪功能的可执行文件,也就是main函数所在的文件 featu...
4)关键帧选取:1、当前帧相对最近的关键帧的特征平均视差大于一个阈值就为关键帧(因为视差可以根据平移和旋转共同得到,而纯旋转则导致不能三角化成功,所以这一步需要IMU预积分进行补偿)2、当前帧跟踪到的特征点数量小于阈值视为关键帧; 代码框架 代码流程如下图:主要三个源程序,feature_tracker_node是特征跟踪线程的...
代码解读 VINSMono中相机模型对应代码在/VINS-Mono/cameramodel/src/camera_models/CataCamera.cc文件**liftSphere**()函数中,该函数是将$2d$ 投影到$3d$ 点(单位球面上),首先对$2d$去畸变,然后再投影到单位球面上。 去畸变过程代码如下: //去畸变过程 int n = 6; Eigen::Vector2d d_u; distortion(Eige...
这里应该还有个很重要的步骤, IMU和图像的数据同步, VINS-Mono代码中貌似没有体现, 不知道Mobile版本中是否有. 2. Initialization: vision-only SfM用纯视觉估计相机运动和特征深度, 视觉得到一个相对运动, IMU预积分得到一个相对运动, 二者做alignment, 从而标定出尺度, 重力加速地, 速度, 和bias. 3. Local BA...
代码解读 VINSMono中相机模型对应代码在/VINS-Mono/cameramodel/src/camera_models/CataCamera.cc文件**liftSphere**()函数中,该函数是将$2d$ 投影到$3d$ 点(单位球面上),首先对$2d$去畸变,然后再投影到单位球面上。 去畸变过程代码如下: 代码语言:javascript ...
VINS-mono 论文解读(IMU预积分+Marg边缘化) 前面,我们已经对接下来的VIO系列主要内容有所介绍(感兴趣的可以关注:视觉与惯性传感器如何融合?),本文是VIO系列的第一节内容:VINS-mono论文解读(IMU预积分+Marg边缘化)。 论文《VINS-Mono: A Robust and Versatile ...
而在VINSMONO中将视觉跟踪模块(featuretrackers)为其前端。在视觉跟踪模块中,首先,对于每一幅新图像,KLT稀疏光流算法对现有特征进行跟踪。然后,检测新的角点特征以保证每个图像特征的最小数目,并设置两个相邻特征之间像素的最小间隔来执行均匀的特征分布。接着,将二维特征点去畸变,然后在通过外点剔除后投影到一个单位...
VINS_Mono中相机模型对应代码在 /VINS-Mono/camera_model/src/camera_models/CataCamera.cc 文件liftSphere函数中,该函数是将2d投影到3d点(单位球面上),首先对2d畸变,然后再投影到单位球面上。 去畸变过程代码如下: //去畸变过程 intn =6; Eigen::Vector2d d_u; ...
VINS-Mono 代码详细解读4——feature_manager.cpp 文章内容:在对关键函数 processImage()以及 IMU预积分的 integrationBase类进行解读后,本文将深入解析 estimator.cpp 中的 feature_manager.cpp 文件,重点聚焦于特征点管理。主要涉及的类有 FeatureManager、FeaturePerId、FeaturePerFrame。特征点管理器的...
vins-mono代码分析 vins-mono的关键帧选择策略 1 与前一帧的平均视差。如果跟踪特征的平均视差超过某个阈值,我们会将此图像视为关键帧。 2 另一个是跟踪质量。如果跟踪特征的数量低于一个阈值,我们把这一帧看做一个新的关键帧。 具体在bool FeatureManager::addFeatureCheckParallax()中实现。