目前的研究方向能够总结为在滤波算法中实现高精度,在优化算法中追求实时性.当加入IMU后,研究方向分为松耦合和紧耦合,松耦合分别单独计算出IMU测量获得的状态和视觉里程计获得的状态而后融合,紧耦合则将IMU测量和视觉约束信息放在一个非线性优化函数中去优化.紧耦合的框架使得IMU数据能够对视觉里程计进行矫正,同时视觉里程计信息也能够矫正IMU的零偏,所以通常认为紧耦合的定位精度较高.我的认为松耦合和滤波融合的方法相似,紧耦合则主要基于非线性优化.算法
IMU融合后能够处理视觉失效的状况,例如光照变化,遮挡,模糊,快速运动;同时视觉也能够对IMU的本质偏差零偏(漂移)进行很好的估计.app
视觉和IMU融合目前主要基于三类方法,在设计时,主要考虑精确度和计算量的平衡.框架
1. 滤波
- 状态向量只包含当前状态.因为线性化偏差和计算能力的限制,一般只能构建不多的landmark/mappoint.或者建立structureless的状态向量(将landmark/mappoint边缘化),典型表明为MSCKF.
- 边缘化是将旧状态融合进当前状态的先验中,滤波方法主要的缺陷也就存在于边缘化过程当中:首先当前测量的structure信息须要延迟处理,下降当前状态的更新精度,其次边缘化对线性化近似和外点(outlier)都比较敏感,容易形成滤波器状态失准.(这里有不少坑,还不太理解).
2. Fixed-Lag Smoothing
- 也就是滑动窗口优化(Sliding Window Optimization).状态向量包含随时间滑动的窗口内多个状态.可是也须要将旧状态边缘化到高斯先验中.所以在滤波算法中存在的边缘化问题,这里都存在.
- 可是因为采用了多个状态的窗口,状态估计更精确,同时能够创建鲁棒的优化代价函数,下降外点对状态估计的影响.
- 状态向量中能够加入测量的structure,可是太多strcuture会形成高斯先验矩阵是稠密的,一般会想办法减小structure的数量.
3. Full Smoothing
- 也就是batch non-linear least-squares或者全局优化,状态向量包含全部相机位姿和strcuture信息,作大规模的非线性优化.显然是最精确的方法,虽然说稀疏性下降了计算量,可是依然比滤波大.主要工做集中于下降计算量.
- 能够采用只优化关键帧,以及将优化放在独立线程中.
- 最新的研究采用因子图,增量式地根据测量更新部分状态,典型表明为iSAM.
- 当引入IMU后,因为IMU频率一般在100Hz-1kHz量级,没法每次IMU测量都更新状态向量.一般的作法是在关键帧之间对IMU进行积分,初始状态由上一帧状态提供,根据IMU的微分运动方程,积分出当前状态,再将视觉测量引入更新.
- 然而,因为优化过程当中上一帧的状态是会变化的,这样积分的初始状态改变了,须要从新算积分,为了不每一次优化调整后都须要重复计算IMU积分,利用预积分preintegration将相对运动约束再参数化.
参考:less
1. https://bitbucket.org/gtborg/gtsam函数
2. https://arxiv.org/abs/1512.02363优化