- rewrite
feature_manager.cpp
and changetrianglute()
which use left and right to triangulate. - rewrite
initial_sfm.cpp
: (1)addtriangulateLeftAndRight()
which use left and right to triangulate. (2)usetriangulateLeftAndRight()
inconstruct()
. (3)rewrite window BA inconstruct()
.
In VIO with two cameras, the input information of vision doubled. So it is easier to recover 3D coordinates of features. But it is more computational consuming in frontend tracking. In next update, reduce tracking time and fuse information of 2 cameras in backend are expected.
这个系统是基于香港科技大学飞行机器人组的开源框架VINS-Mono开发的,原开源框架是针对单目SLAM。本双目SLAM系统是在原开源框架基础上的二次深度开发,外部接口与原框架一致。对VINS-Mono的深度分析请见我的博客或support_files,您可以依此对比原开源框架VINS-Mono或VINS-Fusion与本系统的区别。这个项目是我的研究课题项目,非商业用途,感谢HKUST的沈老师课题组提供的开源框架。
下一步迭代计划: (1)通过yaml文件设置,可以自由选择 左目+IMU,右目+IMU,或双目+IMU 三种VIO形式。 (2)利用极线搜索为左右目光流提供初始值; (3)三角化改为左右目方式;
之前有哥们提醒我无法运行,后来发现忘记把config的yaml文件上传上来,现在已经上传。另外如果需要运行回环检测,请将vins-mono的support files里的brief_k10L6.bin放到这个项目的同名目录下,否则无法实现回环检测的功能。
Ubuntu 16.04
ROS Kinetic
Ceres Solver
OpenCV 3.3.1
Eigen 3.3.3
cd ~/catkin_ws/src
git clone https://github.com/iwander-all/VINS-Dual-VINS-Mono-VIO-.git
cd ../
catkin_make
请在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。
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确定重投影误差模式)。
T.Qin, P.L.Li, S.J.Shen, VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator.
我将持续对代码进行更新和改进。