这个系统是基于香港科技大学飞行机器人组的开源框架VINS-Mono开发的,原开源框架是针对单目SLAM。本双目SLAM系统是在原单目开源框架基础上的二次深度开发,外部接口与原框架一致。这个项目是我的研究课题项目,非商业用途,感谢HKUST的沈老师课题组提供的开源框架。该项目的github地址请点击这里。
各个部分的讲解如下链接:
【SLAM】VINS-MONO解析——feature_tracker
【SLAM】VINS-MONO解析——vins_estimator
【SLAM】VINS-MONO解析——sliding window
【SLAM】VINS-MONO解析——回环检测
【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的框架介绍
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.