Trifo-VIO:Roubst and Efficient Stero Visual Inertial Odometry using Points and Lines论文笔记
这是2018-IROS上的一篇文章,亮点是作者提出了Lines特征的VIO方案,还有就是提出一个新颖的回环检测,不是用传统的基于优化的方法或者BA,另外作者还发布了一个新的用于VIO的数据集。亮点主要还是在线特征的使用上,有更强的鲁棒性,能适应低纹理和光照变化的环境。
Abstract:
提出Trifo-VIO系统,使用点和线特征的基于滤波的紧耦合立体VIO系统。线特征可以帮助点特征处理低纹理和光照变化的环境。在不使用全局BA或位姿图优化情况下,提出一个新的轻量级基于滤波的闭环检测以减少累计误差。当EKF更新时,制定了闭环,以最优地将由滤波器维护的当前滑动窗口重新定位到过去的关键帧。还介绍了Trifo-Ironsides数据集,一个新的视觉惯性数据集,具有高质量的同步立体摄像机和IMU数据。
Introduction:
描述了两种VIO的分类方法。基于when visual and inertial measurements are fused,分为松耦合和紧耦合;基于how visual and inertial measurements are fused,分为滤波和优化方法。介绍中提出了作者发现VIO存在的两个问题,然后提出了自己的改进方法。
1)现在大多数的VIO系统使用点特征,很少有使用线特征的。其次点特征在低纹理和光照变化环境中表现不好,然而,许多这样的低纹理环境包含了丰富的线性形状的平面元素,而且边缘的检测对自然光线变化不那么敏感。基于上面的实际情况提出了结合使用线特征的VIO,就是为了使系统更加鲁棒。但引入线特征必然会带计算复杂度的问题,增加计算开销,作者是怎么处理得呢?原话描述是通过使用多状态约束卡尔曼滤波器(MSCKF),立体点和线特征在滑动窗口中仅以特征数量的线性为代价进行处理。即使用滑动窗口的方法,只对滑动窗口的内容进行特征匹配和特征追踪,计算开销只和特征数量有关。
2)现在VIO系统为了处理漂移问题,大多数采用基于优化或者BA的方法,但是计算开销大。所以作者提出一个轻量级的回环检测方法,不使用图优化或者BA。
作者的贡献:
1)他提出的Trifo-VIO方法是第一个基于紧耦合滤波的立体VIO,它同时使用点和线特征。
2)介绍了一种全新的基于轻量级滤波的回环方法,定义为EFK更新时,它将当前的滑动窗口重新定位到被检测到的回环上;
3)与最先进的VIO系统进行比较和公开了新的用于VIO的数据集;
Related Work:
主要介绍最新的的里程计或slam系统中使用点和线特征,还有回环方面的相关工作。
在点和线特征的使用,在slam系统中已经有相关的应用,如PL-slam等等。但是在VIO系统中,使用点和线特征方面的工作还很少。作者对线特征的使用介于直接方法和基于特征的方法之间。尽管具有无特征操作的优点,但直接方法依赖于亮度恒定假设,通常会受到环境光照变化和相机增益和曝光设置的影响。与此相反,特别是对于ROVIO,作者使用点重投影误差和点对线距离作为滤波器更新的创新,而不是光度误差。
参考VINS-MONO的两步闭环方法:(1)局部紧耦合重定位,使滑动窗口与过去的位姿对齐;(2)全局位姿图优化。作者提出的轻量级回环类似于VINS-MONO使用的第一步,只是作者在滤波器框架中实现了它,为了提高效率,没有全局优化。
Estimator Description:
估计器的主干是MSCKF,它的关键思想是维护和更新一个使用特征跟踪观测的滑动窗口,而不包括滤波状态中的特征。相反,三维特征位置是通过最小二乘多视觉三角剖分进行估计,然后被边缘化,在一定程度上类似于无结构的BA。这样做的优点是可以考虑减少计算成本,使MSCKF的复杂度在特征数量上是线性的,而不是像EKF-SLAM那样的立方。
介绍了两种类型的EKF更新:(1)基于点和线特征的更新,以应对具有挑战性的场景和增强鲁棒性;(2)循环闭合更新,以减少累积漂移。
作者下面介绍了各个部分的一些工作:
状态参数化、EKF传播、点特征的测量模型即是左右相机点的重投影误差、线特征的测量模型主要是线段的前后两个端点和线段上的一个点的残差。
E、EKF更新:点和线特征。每当点或线特性不再被跟踪,或者滑动窗口大小超过预定义的最大大小,就会触发EKF更新。点特征和线特征随后被边缘化,因为它们的位置与状态估计直接相关,这使得算法复杂度在特征数量上呈线性。边缘化是利用特征雅可比矩阵的左零空间来实现的,它抵消了线性化残差中的特征项。然后将变换后的残差和点、线的状态雅可比矩阵累加起来,形成最终的残差和观测矩阵。
F、EKF更新:闭环。当一个新的摄像机状态被添加到滑动窗口时,在并行线程中执行关键帧选择和触发循环检测(如果选择)。 如果关键帧仍在滑动窗口中时检测到循环,则将触发闭环更新。 否则,关键帧将与其特征描述符和3D位置一起添加到数据库中。由于回环检测在当前关键帧和过去关键帧之间建立了特征匹配,我们使用过去关键帧的特征位置进行EKF更新,而不是使用漂移的当前姿势对它们进行重新三角化。 更新过程与点特征的更新几乎相同,除了我们将这种闭环特征的3D位置视为先验知识,因此不执行特征边缘化。 这是有道理的,因为这样的“地图”点在过去与被插入到回环检测数据库中的关键帧一起被边缘化。
Image Processing:
对于每个新图像,我们通过KLT光流(OF)跟踪现有点特征,对于非跟踪图像区域,通过FAST特征检测器检测新特征。 对于线特征,使用线段检测器(LSD)来提取线段。对于检测到的每个线段,使用线带描述符(LBD)提取二进制描述符。 线要素的立体和时间匹配均基于LBD描述符匹配。
Loop Detection:
对于每个新图像,根据跟踪的特征数量和循环检测数据库中现有关键帧的姿态距离进行关键帧选择。如果选择了一个关键帧,我们提取ORB描述符进行回环检测。回环检测是基于DBoW2 实现的,它既快又可靠,并且它运行在主VIO线程的并行线程中。对于候选回环,在RANSAC框架内执行两步异常值拒绝:2D-2D基本矩阵测试和3D-2D PnP测试。如果内部特征匹配的数量高于预定义的阈值,我们标记检测到的回环并触发回环,关闭EKF更新。如果当前关键帧不包含循环,将它从滤波器维护的活动滑动窗口边缘化时,将其位姿、特征的2D和3D位置及其描述符添加到数据库。考虑到内存要求和检测速度,我们在数据库中设置了最大关键帧数,以确保它在一个相机帧内返回结果。