创新点:
新型的多传感器融合策略及移动端优化闭环检测两个部分。
1、新型的多传感器融合策略:
不同的传感器观测都以优化窗口中的通用帧来表示。每一个通用帧都对应一个定位状态量,而不是多个观测共同约束一个状态量。该系统中,双目相机帧之间构成视觉约束,通用帧之间利用高频IMU预积分进行约束。该设计模式避免了多个传感器之间时间戳对齐及数据近似等问题。
2、移动端优化:
本文中SLAM算法前端采用了角点检测和光流的方式,程序运行时间主要集中在后端非线性优化中。为了面向ARM平台进行优化,从软件开发和算法设计两个方面设计。软件开发方面,利用CPU特点进行多线程程序编写,同时对涉及到使用Eigen线性代数库进行矩阵计算的代码,开启Neon指令优化。算法设计方面,利用滑动窗口优化,虽然全局BA优化可以保持信息的全局一致性,而且也被证明在纯视觉SLAM中要优于基于滤波的优化算法,但对于融合IMU的SLAM算法,IMU状态估计带来的参数成倍增加,全局方式的BA优化在计算上变得不可行。为了将计算范围限制在一定的区域内,本文将选取一些在时序上接近当前时刻的关键帧进行优化,利用滑动窗口优化提高计算效率同时又保证计算精度,对关键帧的处理仅保留该帧在IMU参考系下的位姿。随着系统不断在位置环境中运行,新的相机帧很快就会超过滑动窗口的数量,此时需要处理窗口中旧的信息,从而加入新观测的信息。本文处理的方式是对要丢弃的变量采取边缘化处理。根据前面视觉约束和IMU约束的介绍,本文已经把所有的噪声模型建模成了高斯分布。因此在多元高斯分布中去掉一个变量最合理的方式就是将该变量从多元高斯分布中边缘化掉。本文中采用的边缘化策略是当最近帧数目大于阈值时,进行边缘化处理。
对最近帧队列中时序上最早的一帧进行判断,有如下两种情况。
(1)若不是关键帧,则边缘化掉该帧的所有状态;
(2)若是关键帧,边缘化掉速度分量v和IMU偏置b,保留位姿分量和该帧三角化的路标点。同时选取关键帧队列中和地图联系最少的一帧,边缘化该帧位姿和对应的路标点。
通过引入滑动窗口机制,避免了关键帧和路标点的无限制增长。
但因为滑动窗口的边缘化操作,其边缘化掉的变量所带来的先验信息会加入到信息矩阵中,使得BA问题中原本条件独立的装填变得相关,这将会带来系统不一致的问题,本文采用FEJ方法解决该问题。当状态变量被边缘化后线性化点便固定,所有当前窗口和先验中有联系变量的线性化点,都采用上述固定的线性化点,在状态更新过程中相对固定的线性化点进行参数更新。
回环检测:
闭环检测的核心目的就是检测并利用当前状态和过去位置的约束。当前主流的方法是建立相机轨迹上不同关键帧之间的共视关系。形成众多伪观测数据加入后端优化中。大多是实时SLAM系统会采取双线程的方式限制轨迹漂移,一个线程用于当前窗口闭环相似帧的检测,另一个线程进行全局带闭环约束的关键帧位姿图优化校正轨迹漂移。本文提出一个单线程的闭环检测算法。除去了全局位姿图优化的线程,默认滑动窗口边缘化时绝对正确
(因为本文提出的闭环检测算法采用紧耦合的方式,将闭环约束直接添加至优化的目标函数进行联合的滑动窗口优化)。
学习到了:
1、ORB-SLAM中使用词袋模型建立当前帧和地图点的共视图约束,采取全局BA方式联合优化相机约束和闭环约束。
2、由于VINS-Mono采用了滑动窗口策略无法保持全局地图的一致性,因此将闭环检测视为一个相机重定位过程,检测关键帧和过去相似帧的相对变换,从而校正整个窗口的轨迹漂移。
3、SLAM后端采用滑动窗口进行优化,同时采用预积分的方式处理高频IMU信息。为了减少近似线性化对系统能关性的改变,使用首次估计雅可比的方式固定线性化点减小累积误差。
4、由于一般SLAM模型中的空间点都假设为符合高斯分布,但实际世界坐标系下的空间点分布往往是不满足的,为了避免此问题带来的误差,利用逆深度来进行参数化操作。