VINS代码主要包含在两个文件中,分别是feature_tracker和vins_estimate,feature_tracker就像文件的名字一样,总体的作用是接收图像,使用KLT光流算法跟踪;vins_estimate包含相机和IMU数据的前端预处理(也就是预积分过程)、单目惯性联合初始化(在线的标定过程)、基于滑动窗口的BA联合优化、全局的图优化和回环检测等。要想真正...
github官方上开源了VINS-mono,VINS-Fusion和VINS-mobile,还有另一个VINS-course是贺一家基于VINS-MONO的手写后端版(不用ceres/ROS)的代码,这个代码对VINS的理解,尤其是后端的理解非常有帮助。 后续有时间的话,我会写一下vins-fusion的全流程解析。实际上,mono和fusion的区别不是很大,如果mono彻底明白了,fusion(的主...
首先我们在时刻L有一个m行的能观性矩阵M或者叫O,对于VINS系统,我们已经知道零空间有四个维度,就是N1,然后现在我们再构建一个N向量叫做Ns,这个向量是根据我们目前的假设(系统在恒定加速度下运动)而构建的,那么接下来我们就要证明MkNs总是等于0(对于M的任意一行),最终,通过一系列计算,和定理“Hck的右零空间是imu...
VINS-MONO中,为了处理一些悬停的case,引入了一个two-way marginalization,简单来说就是:如果倒数第二帧是关键帧, 则将最旧的pose移出slidingwindow, 也就是MARGIN_OLD,如果倒数第二帧不是关键帧, 则将倒数第二帧pose移出sliding window, 也就是MARGIN_NEW。选取关键帧的策略是视差足够大,在悬停等运动较小的情况...
首先初始化设置节点vins_estimator,同时读取参数和设置相应的参数,为节点发布相应的话题,为节点订阅三个话题,分别用来接收和保存IMU数据、图像特征数据和原始图像数据,分别是在三个回调函数中imu_callback、feature_callback和raw_image_callback,每当订阅的节点由数据送过来就会进入到相应的回调函数中。
首先,来证明一下加入这些观测,就会使得VINS系统可观 里程计提供了线速度的二维平面分量测量: 对于涉及到的状态的测量雅克比有以上关系 除了与相机观测值相对应的块行外,里程计测量值在可观测矩阵中提供了额外的块行(注意,能观性矩阵的行数就是观测方程数,现在多了一个传感器,肯定就多了几行阿)。由(37)和状态转...
首先,我们要计算imu预积分,目的是得到imu的测量值 在这个过程中,预积分分为两个部分,第一个部分是预积分的主体,用中值积分或者欧拉积分去做,第二部分是临时状态量,需要求一...