1、前端流程概述 VINS-Mono的前端整个封装成了一个ROS节点其订阅的topic是: 相机或者数据集发来的图片 其发布topic是: 由pub_img发布的"feature",发布的是当前帧的特征点,特征点分装成了sensor_msgs::PointCloudPtr类型,里
第一类特征点有比较精确的深度信息,它在世界坐标系下的3维坐标是已知的,在old keyframe中找到它们的匹配点就可以用solvePnP的方法获得当前keyframe和old keyframe的相对位姿。如果两个关键帧之间的yaw和T小于某个阈值才认为是一个真正的闭环。 需要注意的是FAST点和第一类点是通过不同方式检测出来的点,它们往往是不...
类里保存的是观测到路标点的相机帧的属性,其中主要包括路特征点的归一化坐标,特征点的像素坐标,像素运动速度等。示意图如下所示: (3)list\<FeaturePerId> feature 以上两种类都是对于单个特征点,如果要管理观测到一个路标点的所有相机帧的话,可以构建list容器,对应的示意图如下: 对应的代码为: class FeatureManage...
这就是vins - mono的厉害之处啊。 它的算法也很有讲究。这里面有好多复杂的数学公式和计算过程,我一开始看的时候,脑袋都大了,就像看天书一样。可是一旦你理解了其中的一些关键部分,就会发现,哇塞,这简直是天才的设计。它会对采集到的图像进行特征提取,就像从一幅画里找出那些独特的标记一样。然后根据这些特征和...
(1) 得到观测值(IMU数据和图像特征点数据) 定义观测值数据类measurements,包含了一组IMU数据和一帧图像数据的组合的容器,这里比较有意思的是使用了互斥锁和条件等待的功能,互斥锁用来锁住当前代码段,条件等待是等待上面两个接收数据完成就会被唤醒,然后从imu_buf和feature_buf中提取观测数据measurements = getMeasurement...
SLAM的前端、后端系统本身没有特别明确的划分,但是在实际研究中根据处理的先后顺序一般认为特征点提取和跟踪为前端部分,然后利用前端获取的数据进行优化、回环检测等操作,从而将优化、回环检测等作为后端。 而在VINS_MONO中将视觉跟踪模块(feature_trackers)为其前端。在视觉跟踪模块中,首先,对于每一幅新图像,KLT稀疏光流...
本文提出了一种基于紧耦合滑动窗口非线性优化方法的单目视觉-惯性系统,来自港科大沈老师实验室。这篇论文的亮点包括提出了效果最佳的IMU预积分理论、估计器初始化机制、故障检测和复原机制、外参在线校订、基于优化的紧耦合VIO、重定位机制以及全局位姿图优化模块等内容。论文开源地址:HKUST-Aerial-Robotics/VINS-Mono。
根据设定的提取特征点数目进行特征点提取 voidFeatureTracker::detectFeatures(){// 设置新提取的特征点数目,为最大数量减去已有数量 int n_max_cnt = _max_cnt_ - static_cast<int>(forw_pts_.size()); // 如果需要提取 if (n_max_cnt > 0) { if(mask_.empty()) cout << &...
从上面的流程图中可以看出,初始化共分为两大步,第一是纯视觉初始化,第二是视觉惯性联合初始化。另外,如果没有提供相机和IMU之间的外参,VINS-Mono还提供了相应的标定程序。因此我们梳理代码就按照这三部分来梳理。 首先看文件结构,初始化流程相关的代码在vins_estimator/src/estimator.cpp中,具体讲就是initialStructure...
vins-mono(1)数据预处理 查看原文 MedianFlow中值流跟踪算法&源码 不到50%的特征点,对应地留在points1和points2中。跟踪的原理基于Forward-Backward Error的中值流跟踪方法,对于points1中的每个点,使用前向跟踪,即上一帧的点A...中所有点两两之间的距离d1和points2中所有点两两之间的距离d1,将d2/d1都放到...