VINS_MONO系列:(一)总体框架

目录

1、前言

2、整体流程

3、代码框架

4、参考文献


相关链接:

VINS_MONO系列:(一)总体框架_Derrr...的博客-CSDN博客_vins框架

VINS_MONO系列:(二)IMU预积分详细推导_Derrr...的博客-CSDN博客

VINS_MONO系列:(三)VIO初始化_Derrr...的博客-CSDN博客

VINS_MONO系列:(四)紧耦合VIO实现_Derrr...的博客-CSDN博客

 VINS_MONO系列:(五)前端特征提取_Derrr...的博客-CSDN博客

1、前言

VINS-MONO作为一种基于图优化的紧耦合VIO方法,其整体的精度和鲁棒性都是比较好的,后续也有很多基于VINS-MONO的工作,比如VINS-fusion,G-VINS,VINS on Wheel等等,因此这里对VINS-MONO中的几个重要的部分进行记录和梳理讲解,希望能对后来者能有所帮助。

2、整体流程

VINS_MONO系列:(一)总体框架_第1张图片

文章的整体pipeline比较清晰,论文中的Fig 1就比较清晰的说明了整个实现的过程,这里总结的话主要包括以下几个部分:

1、数据预处理部分

数据预处理部分整体逻辑和实现的功能比较简单,主要是对输入的图像进行特征提取和LK金字塔光流跟踪,生成新的特征点后发布出去,给后续的VIO模块使用。当然在代码中还涉及到一些细节的处理方法,比如说特征点的均匀化、外点的去除等,后续会开设专门的篇章讲解这部分的内容,这里主要是对模块功能有个整体的把握。

2、基于滑动窗口的紧耦合VIO

这部分属于是文章的主要部分,也是主要出彩的内容,我理解这里主要包括两个重点,一个是VIO的初始化方法,另一个是VIO初始化完成后的跟踪定位方法。这两个部分都是运用优化的方法去求解相机的位姿,同时还有一些工程上的一些小Trick,后续也会有专门的篇章详细介绍这两部的内容。

3、重定位与pose graph

最后的是重定位和pose grap部分,重定位的实现和ORB类似,通过词袋找出候选的关键帧,然后构建回环约束并将其作为残差块加入到VIO的优化问题中进行求解。pose graph则是对顺序边(sequential edge)和回环边(loop edge)做一个全局的pose graph。具体的细节也会在后续的篇章中详细说明。

3、代码框架

VINS是基于ROS上实现的,其中最主要的部分包括feature_tracker、vins_estimator和pose_graph等,分别实现了上面上述数据预处理、紧耦合VIO和pose graph等功能,其余部分实现的功能如下所示:

  • ar_demo:包含基于VINS实现的一个AR demo;
  • camera_model:包括各种相机模型,如PineHole、Equidistant、Scaramuzza等等;
  • feature_tracker:主要实现数据预处理功能,提取图像特征点并对外发布;
  • vins_estimator:紧耦合VIO的主要实现函数,实现了初始化和跟踪定位、重定位等主要功能;
  • pose graph:主要实现位姿图优化功能;

4、参考文献

  1. Tong Q ,  Li P ,  Shen S . VINS-Mono[J]. IEEE Transactions on Robotics, 2018.

你可能感兴趣的:(SLAM,计算机视觉,slam,c++)