【VSLAM】VINS-Fusion原理及源码解析(一)——初识VINS-Fusion

前言

我最近看了下VINS-Fusion的源码及各种解析帖子,想着汇总写一个VINS-Fusion源码解析系列博客,记录一下自己看时的心得体会。本系列博客以VINS-Fusion源码流程为导向,从入口函数一步步讲解前端和后端,最后完成仿真和真机实验部署,希望可以细致入微地对VINS-Fusion作一个完整全面的讲解。

一、如何优雅的看本系列博客

第一,先下载本博客的学习资料,里面包括了带注释的源码,以及程序流程图;

# 相关论文和思维导图(用xmind软件打开)在下载的源码的学习资料文件夹中
git clone https://github.com/dongdong-cai/VINS_FUSION.git

第二,不要桎梏于本系列博客,因为本系列博客的方法都是我自己的理解,不一定对也不一定适合你,可以多看一下参考的帖子,它们都十分优秀;

第三,试着带着问题去看代码,一味的跟着代码顺序去看,容易沉陷下去,体会不到作者为什么要如此设计,我这里抛砖引玉几个问题:

(1)VINS-FUSION在特征点识别、特征点匹配上和ORB2有什么异同?

(2)VINS-FUSION如何将IMU数据和相机数据紧耦合,多考虑了哪些约束?

(3)如何进一步改进VINS-FUSION(如何水一篇论文)?

二、初识VINS-Fusion

VINS-FUSION是在VINS-Mono的基础上,添加了GPS等可以获取全局观测信息的传感器,使得VINS-FUSION可以利用全局信息消除累计误差,进而减小闭环依赖。如果你不关心GPS等全局传感器,只关心IMU、摄像头传感器的处理,那么VINS-FUSION代码和VINS-Mono几乎一样,本博客也只介绍VINS-FUSION的前端和后端处理。

我们先看一下VINS-FUSION的总体框架:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1zbhBBd2-1692172168065)(/home/caiqidong/snap/typora/82/.config/Typora/typora-user-images/image-20230816154206572.png)]

VINS 的功能模块可包括五个部分:前端数据预处理、初始化、后端非线性优化、闭环检测、闭环优化。如果读者之前看过ORB2会发现二者框架很像,也是一个很典型的VSLAM框架流程:(1)系统刚启动时,我们需要对前面几帧进行初始化,得到高质量的地图点,用于后续PnP求解位姿;(2)每来一帧图像,我们需要对图像进行前端数据预处理,进行特征点识别、特征点匹配,基于匹配特征点使用PnP求解相对位姿;(3)后端使用视觉重投影不断优化前端筛选出的关键帧及其地图点,使结果更精确;(4)闭环检查判断有无闭环,减少全局误差;

三、初识VINS-Fusion源码

下载好VINS-Fusion源码后,我们先看一下源码的文件夹组成:

  • camera_models:定义抽象相机类,后续的单目相机和双目相机都统一变为一个相机类实例即可;
  • config:里面存放了程序运行需要的配置文件,我们跑自己的相机,只需要按照里面的配置文件照葫芦画瓢写一个自己的配置文件即可运行;
  • docker:使用docker运行VINS-Fusion
  • global_fusionVINS-Fusion新增加的GPS等全局传感器处理;
  • loop_fusion:局部回环检测部分的代码,我们跑VINS默认是只跑前端和后端,如果需要回环检测需要再单独运行回环检测的代码;
  • support_files:作者介绍自己代码的一些资料,如运行图片、论文这些;
  • vins_estimator:前端和后端代码,这部分是我们的重点看的地方;

修整一下,我们下一讲开始正式讲解VINS-Fusion

参考

https://blog.csdn.net/BeeGreen/article/details/128514160
https://blog.csdn.net/yhy_yhy13053117/article/details/127874690
https://www.guyuehome.com/15066
https://zhuanlan.zhihu.com/p/407892357
https://mp.weixin.qq.com/s/hoPDnZhT7ltkKib6mqSTcA
https://github.com/kuankuan-yue/VINS-FUSION-leanrning
https://blog.csdn.net/weixin_39926594/article/details/103408620
https://blog.csdn.net/weixin_40084095/article/details/124647161
https://blog.csdn.net/xiaojinger_123/article/details/127403364
https://www.zhihu.com/column/c_1543603130763534336?utm_id=0
https://github.com/ShuyueLin/VINS-Fusion-NotedByLSY
https://zhuanlan.zhihu.com/p/534577566
https://mp.weixin.qq.com/s/opInITC_BDWz12j1_nUseA
https://blog.csdn.net/qq_41904635/article/details/106092472
https://blog.csdn.net/qqGHJ/article/details/127440699
https://blog.csdn.net/LDST_CSDN/article/details/130310175

猜你喜欢

转载自blog.csdn.net/caiqidong321/article/details/132320618