LARVIO代码学习以及基本框架
LARVIO代码学习以及基本框架
最近由于项目原因,对MSCKF进行了一定的研究,在其基础上进行开发,但是17年开源的代码不管是初始化还是后期跟踪、悬浮等问题,均为解决,在20年3月份qxc开源了LARVIO(https://github.com/PetWorm/LARVIO),基于MSCKF基本框架开发的一个可使用版本的VIO。
在传统的MSCKF的基础上其主要做了以下改进:
1、引入Hybrid EKF;
2、在线对IMU进行标定;
3、初始化部分:静态初始化、动态初始化,其中静态初始化采用视觉来判断是否存在移动,动态初始化为借鉴VINS初始化模块;
4、在视觉前端对特征点跟踪过程中,添加了ORB描述子剔除策略,提高特征点精度;
5、采用ZUPT(零速校正)应对静态、悬浮情况;
等等。。。。。。。。。。。。。。。。。。
下面我们来看程序,程序主要有三个主程序:System.cpp、ImageProcessor.cpp、LarVio.cpp ,其中System.cpp为程序主框架,负责系统参数初始化(不包括SLAM初始化)等;ImageProcessor.cpp主要为视觉前端,特征点的跟踪剔除等功能;LarVio.cpp为滤波跟踪,包括系统初始化、IMU预计分、添加特征点、扩充状态量、ZUPT校正、管理跟踪特征点等功能;
首先来看System.cpp;主要程序流程如下所示:
ImageProcessor.cpp主要流程图如下所示:
LarVio.cpp主要流程图如下所示: