ORB_SLAM2视觉惯性紧耦合定位算法详解

ORB_SLAM2的作者在2017年提出了具有地图重用功能的单目视觉惯性定位算法,该算法的具体思路和港科大的VINS有着异曲同工之妙,整体过程可分为下面几个部分:
1.整体流程与基础知识总结
2.基于流型的IMU预积分
3.IMU初始化(视觉惯性联合初始化)
4.紧耦合优化模型
下面主要通过这三个方面对整个思路做详细的说明。还是按照VINS相同的方式来讲解,首先对整个理论知识做详细的分析,然后从代码角度做深入理解。
其中代码参考王京大神的开源方案:
https://github.com/jingpang/LearnVIORB
论文参考主要下面两篇:
Visual-Inertial Monocular SLAM with Map Reuse
On-Manifold Preintegration for Real-Time Visual–Inertial Odometry

1.整体流程与基础知识总结
(1)整体框架
对于整个ORB_SLAM2的框架大家有一定的了解,主要分为三个线程Tracking、LocalMapping和Loopclosing。我对VIO这块的理解目前只局限于前两个线程,因此整体框架就包含前两个线程中的理解。
这里写图片描述
(2)基础知识总结
这里所提到的基础知识都会在下面的理论推导公式中使用,因此都是十分重要的公式,需要牢记。
①叉积的基本性质
叉积的定义式
这里写图片描述
叉积的一个最重要的性质,在后面的雅各比矩阵推导中起到至关重要的作用,需要谨记
这里写图片描述
②指数一阶泰勒近似
这里写图片描述
这个式子就是以前数学中指数一阶泰勒展开,很简单,因为旋转涉及到李群和李代数的指数转换关系,所以这个式子在后面的优化雅各比推导中很重要。
③李群和李代数指数转换关系
这里写图片描述
这里写图片描述
李群和李代数是指数映射关系,是三维向量(旋转向量)与三维旋转矩阵之间的转换,上图中可以看到流型的李群上的切平面(李代数)可以由李群一阶近似(李群扰动表示李代数扰动)
这里写图片描述
上面的公式参考视觉SLAM十四讲中,原文预积分中给出的是李代数“向量”形式,感觉不太好理解,所以还是用反对称矩阵来表示,其中Jr是李代数上的右雅各比
这里写图片描述
同样的李代数扰动可以表示李群扰动
这里写图片描述
指数映射还有另外一个性质,在李群原点处的一阶展开可以推导下面的公式,性质和推导攻入如下
这里写图片描述
这里写图片描述

2.基于流型的IMU预积分
这一部分主要参考论文(2)中的内容,ORB_SLAM2融合惯性数据的算法中预积分处理是参照论文(2)中实现的。前面关于VINS的详解说过预积分计算过程,那篇使用的是四元数旋转求解,和这里的过程是一样的,主要计算三个量,分别是IMU预积分值,预积分测量值的协方差矩阵以及残差的雅各比矩阵,各自用途就不多说,有不懂的可以参照VINS的详解
https://blog.csdn.net/wangshuailpp/article/details/78461171
(1)IMU预积分计算
世界坐标系W、IMU坐标系B以及相机坐标系C的关系和转换如下图2所示,所有的位姿和特征点坐标最终都是在世界坐标系下表示,我们会将相机坐标系下的的状态量首先转换到IMU坐标系下然后再转换到世界坐标系下。TBC代表在IMU坐标系B下相机到IMU之间的外参转换矩阵,TWB=(RWB,wp)代表世界坐标系W下IMU到世界坐标的转换矩阵。关于坐标之间的关系比较重要,刚接触会感觉比较复杂,需要多思考。下面所有的公式和变量前下标代表参考坐标系,例如wp就是世界坐标系下的位移,后下标第一个下标是参考坐标系,例如RWB是世界坐标系下。
这里写图片描述
由IMU的加速度计和陀螺仪可以获得IMU坐标系下的加速度Ba和角速度BwWB,可以表示成下面的公式(27)(28),公式左边是IMU直接输出的数据。这里写图片描述
旋转、平移和速度的导数可表示为公式(29)
这里写图片描述
世界坐标系下的旋转、平移和速度可由一般的积分公式求得
这里写图片描述
离散时间下采用欧拉积分可以将上面连续时间积分改写成下面式(30)
这里写图片描述
联立公式(27)(28)可以得到公式(31)
这里写图片描述
这时候状态量是世界坐标系下的。设现在有i和j两个相邻关键帧,需要已知i时刻对应的IMU状态量,求解离散时间下j时刻关键帧对应的IMU预积分值,
这里写图片描述
这里写图片描述
为避免重复积分采用IMU预积分方法计算i、j时刻的状态量的相对变化。也就是将参考坐标系由世界坐标系转换到IMU的i时刻坐标系下,计算得到IMU状态量在i和j时刻之间的相对量,这个相对量是只取积分算式内的值,而不是旋转、速度和位移的变化量,和VINS的处理方式相同。
这里写图片描述
从上面的公式中可以看出,整个预积分公式和偏置,噪声都有关系,相当于一个二元方程,因此需要分别分析偏置和噪声对系统的影响,噪声服从高斯正态分布,相对来说比较简单,而偏置服从随机游走模型,关系很复杂,因此两者的处理方式不同。对于噪声分量采用噪声高斯传播方程来求解,而偏置采用一阶泰勒展开方式。总体思路是首先将偏置在i时刻的bi处进行一阶展开,得到公式(44)
这里写图片描述
这里的数值就是IMU最终的预积分数值,但值得注意的是在初始化使用的IMU预积分是没有偏置的一阶项,也就只是等式右边前面一项而已,等式后面的雅各比矩阵是在初始化完成后进行优化之前才计算而来,得到IMU准确的预计分值(真值),和估计值从而得到IMU的残差。所以我们首先要手推一下上面公式右边的前面一项,注意这里所有的指数映射中都省去了写反对称符号。
这里写图片描述
这里写图片描述
至此IMU预积分的数值就计算出来,也就是等式右边的第一项。
(2)预积分雅可比和协方差矩阵
下面需要计算出噪声传播项的协方差矩阵和对应偏置的雅各比矩阵。这部分推导在附录部分A和B,和VINS的过程出奇的一致,只不过这里是将状态量分开讨论的,分别是(deta_Rj,deta_vj,deta_pj)和(deta_Rj-1,deta_vj-1,deta_pj-1)、(nba,nbg)以及(deta_Rj,deta_vj,deta_pj)和(deta_ba,deta_bg)的关系,把两者合并就和VINS相同。,这部分推导相对简单就直接贴公式了。
下面是求协方差矩阵:
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
系统是服从高斯分布的,协方差矩阵是按照高斯分布计算得到,是个9*9的矩阵。
下面是求预积分对偏置的雅各比矩阵:
这里写图片描述
这里写图片描述
(3)残差雅可比
这里写图片描述
这里写图片描述
这里写图片描述
位移残差对应的雅可比如上图所示,J时刻相应的雅可比可按照图片方式进行推导,注意对pi和pj时刻的雅可比公式原文有错误,推导过程已经给出。对于速度残差和旋转的雅可比公式与平移相似,就不进行推导直接给出,至此IMU预计分就完成了。
这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/wangshuailpp/article/details/80640663