这个系统是基于香港科技大学飞行机器人组的开源框架VINS-Mono开发的,原开源框架是针对单目SLAM。本双目SLAM系统是在原单目开源框架基础上的二次深度开发,外部接口与原框架一致。这个项目是我的研究课题项目,非商业用途,感谢HKUST的沈老师课题组提供的开源框架。该项目的github地址请点击这里

各个部分的讲解如下链接:

【SLAM】VINS-MONO解析——综述 【SLAM】VINS-MONO解析——feature_tracker 【SLAM】VINS-MONO解析——IMU预积分 【SLAM】VINS-MONO解析——vins_estimator 【SLAM】VINS-MONO解析——初始化(理论部分) 【SLAM】VINS-MONO解析——初始化(代码部分) 【SLAM】VINS-MONO解析——后端优化(理论部分) 【SLAM】VINS-MONO解析——后端优化(代码部分) 【SLAM】VINS-MONO解析——sliding window 【SLAM】VINS-MONO解析——回环检测 【SLAM】VINS-Fusion解析——流程 【SLAM】VINS-MONO解析——对vins-mono的修改使流程逻辑更清晰 【SLAM】VINS-MONO解析——基于vins-mono的slam系统开发

1.需要的基本配置

 
Ubuntu 16.04
ROS Kinetic
Ceres Solver
OpenCV 3.3.1
Eigen 3.3.3
  2.在您的ROS上构造VINS-Dual  
cd ~/catkin_ws/src
git clone https://github.com/iwander-all/VINS-Dual-VINS-Mono-VIO-.git
cd ../
catkin_make
source ~/catkin_ws/devel/setup.bash
   

3. VINS-Dual的启动

请在EuRoC MAV Dataset下载您需要测试的数据集。 打开1个控制台,输入:  
roscore
  进入devel目录,分别打开2个控制台,输入:  
source setup.bash
  再分别输入:  
roslaunch vins_estimator euroc.launch 
roslaunch vins_estimator vins_rviz.launch
    如果不使用回环检测,请输入:  
roslaunch vins_estimator euroc_no_posegraph.launch 
  再打开1个控制台,请输入:    
rosbag play YOUR_PATH_TO_DATASET/MH_01_easy.bag 
    运行效果:video

4.VINS-Dual的框架介绍

    1   VINS_dual包含两个ROS结点,分别是特征提取结点和vio结点; featureTracker node: main线程:订阅双目视觉帧,放入各自的buf中; featureTracker线程:获取2个buf中的视觉帧,对齐时间戳,分别进行光流跟踪,并发布同一时刻上双目追踪到的全部特征点的像素坐标。 vio node: main线程:订阅IMU,特征点frame信息,分别放入各自的buf中; vio线程:获取特征点和IMU信息并对齐;IMU预积分;从图像帧中获取信息并给feature类补充新的特征点;确定滑窗策略;初始化;后端优化; 初始化过程定义为class Initial,负责系统的初始化; 非线性优化定义为class Backend,负责滑动窗口和非线性优化。 其中,非线性优化所维护的H矩阵包括: (1)先验误差; (2)相邻两帧的IMU误差; (3)具有共视点的两帧之间的重投影误差 (重投影误差提供了三种残差模型纯左目的重投影误差纯右目的重投影误差融合双目的重投影误差,该项目可以通过更改yaml文件中的flag确定重投影误差模式)。

5.参考文献

T.Qin, P.L.Li, S.J.Shen, VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator.