转载请注明作者和出处(https://blog.csdn.net/waittingforyou12)

MSCKF2.0 

现在对论文【1】的公式进行梳理与推导,也是做一个记录。推导分为三部分,第一部分进行IMU运动模型的说明,第二部分对IMU模型的误差状态转移方程进行推导,第三部分对MSCKF系统进行能观性分析。

1. IMU运动模型

6轴imu由加速度计和陀螺仪组成,分别测量在IMU惯性坐标系下的角速度和加速度。它们对应的观测值分别收到bias和噪声的影响。

其中表示测量值,表示在IMU惯性坐标系下的真值,表示在世界坐标系下的加速度真值。

对角速度进行积分可以获得相邻两个时刻之间的旋转变化,对加速度数值分别进行一次和二次积分分别可以得到在速度和位移。

在MSCKF中,作者采用四元数表示旋转关系,用表示时刻的相对旋转。为了获得这个相对旋转,采用四元素的微分方程,将估计的角速度

带入微分方程

就可以获得相邻两个时刻的位姿变换。基于此变换可以传递到对IMU orientation在全局坐标下的估计值:

同样的,根据IMU模型可以获得加速度的关系式

对加速度值进行一次和二次积分可以分别获得在全局坐标下相邻两个时刻的速度关系和位置关系:

其中:

2. IMU误差状态转移方程

基于第一部分的IMU运动和积分模型,现在对误差状态转移方程进行推导。

A: 旋转误差状态转移方程

首先在MSCKF1.0中,orientation的误差是定义在局部坐标系上,在MSCKF2.0中,作者提出改进将orientation的误差的定义在全局坐标系,在后续的推导可以看到,这个改进结合FEJ(First Estimate Jacobian)可以使能观性矩阵的秩是4,符合真实系统的性能。定义全局坐标下导致的一个直观改变是旋转扰动由左扰动变为右扰动。

顺便提一句,这里面对扰动做减法是采用JPL的四元数表达形式,而不是采用Hamilton的四元数表达形式,对局部扰动,全局扰动,以及扰动用加法还是减法不太理解的推荐阅读文献【2】。

根据上述的表达方式,我们可以建立相邻两个时刻的旋转表达式

上式中的每一项都可以写成估计 + 扰动的方式:

将以上三个方程分别代入,两边展开化简并且忽略高次项,可以有如下的推到过程:

其中,行2中,忽略了高次项,即误差项的平方,行2到行3利用了叉乘的性质:

其中M为正交矩阵。

自然地,根据推到,可以得到旋转部分误差状态转移方程,如论文中公式34所示:

B: 速度误差状态转移方程

在IMU运动模型中,建立了前后两个时刻的在世界坐标系下速度的关系,重新梳理如下:

在上式中,我们将每一个变量写成真值加误差的形式,于是有:

其中行1到行2运用论文中的公式32,其余就是展开公式,除去误差高次项的操作。

C: 位置误差状态转移方程

因为本质上速度和位置的状态转移方程是相同的,因此仿照对速度误差的推到,可以得到位置误差状态转移方程,就不再进行具体的公式推导,直接给出论文的结论:

D: 误差状态转移方程

综合角度,速度,位置的误差状态转移方程,化简为矩阵形式可得:

其中表示IMU误差状态从上一时刻转移到当前时刻的状态矩阵,可以进一步的简写如下:

可以从状态转移矩阵得出三个结论:

  1. 矩阵对角线上都是单位矩阵块,这表明当前时刻的误差量包含了前一时刻转移过来的误差。
  2. 前一时刻的速度误差通过乘以相邻两个时刻的时间,影响着下一时刻的位姿误差。
  3. 时刻产生的旋转矩阵误差分别通过 ,造成了速度项和位置项的累计误差。

3. MSCKF系统能观性分析

首先需要说明的是

1. 为了简化证明过程,论文中对能观性分析的推导公式没有包含陀螺仪和加速度计bias项,在[2]工作中已经证明了bias是可观的,作者在论文附录中也提供了包含bias项的证明。

2. 作者证明了,在给定线性系统(或者近似线性系统)下,EKF和MSCKF的观测方程是等价的,因此对MSCKF的能观性分析可以用EKF的能观性分析的方式。

考虑[]时间段内的状态变量为IMU状态和地图点3D位置,如下所示:

对于观测方程,我们知道如果特征点是在时刻处理,那么就意味着MSCKF中对于IMU状态的雅可比都是基于到时刻时所获得的状态估计线性展开的,对地图点的雅可比都是基于三角化获得的估计位置处()线性展开的。特别说明的是,论文用

表示对状态时刻的估计,这个估计是根据时刻的观测更新而得到的。根据上述说明,MSCKF中观测方程的雅可比可以描述为:

其中表示观测对于时刻的IMU状态的雅可比,表示观测对于时刻的地图点的雅可比。

接下来具体推到观测方程中对于IMU状态和地图点的雅可比矩阵,首先有:

即首先将地图点通过IMU位姿转换到IMU坐标系,再通过IMU与相机的外参转换到相机坐标系。接着转化到归一化平面获得观测:

链式法则获取观测对位姿和地图点的雅可比分别是:

其中:

能观性矩阵:

在控制系统中,定义能观性矩阵为:

能观性矩阵的零空间描述的是,给定一段时间内的观测值为已知信息,无法成功进行参数估计的状态空间。因此零空间的维度确定是多少,那么状态空间的不可观测的维度就是多少。

A: 理想状态下的能观性矩阵

理想状态下的能观性矩阵是通过在真实状态值处展开雅克比的获取的,因此根据能观性矩阵的定义给出化简后的形式:

其中表示在时刻对应特征点的能惯性矩阵,很自然的,如果在某一帧优化的特征地图点有个,以重投影误差为例,那么对应的观测矩阵的维度应该是,其中9只是简化说明IMU的状态变量为位置,和速度和姿态。现在重点推导一下是如何计算出来的。

从时刻时刻的能惯性矩阵定义为,分别将观测矩阵和IMU误差状态转移矩阵代入,有:

注:上述推导中的状态其实对应的应该是真实值,但是在编辑过程中由于疏忽采用的是估计值的表示方式,不影响推导过程。

推导过程比较简单,唯一需要的是耐心的进行矩阵相乘并进行化简,在推导过程中可以很明显的发现,正是因为观测矩阵的雅克比展开以及状态转移矩阵都是在真实值处进行的,因此在后续的迭代推导中,会很明显的一一消除掉特征点在各个时刻的位置以及速度项

要进一步的确定MSCKF系统的不可观维度,那么需要判断能观性矩阵零空间的秩,作者通过拼凑的方式直接给出了能观性矩阵的零空间,如下所示:

能观性矩阵与N相乘化简便可以得出

B: 理想状态下能观性矩阵的零空间维度

证明过程来自于文献[]中附录C的推导

其中第二列矩阵块乘以 并且加到第一列矩阵块有

第三列矩阵块乘以 并且加到第一列矩阵块有

对应特征点的列矩阵块乘以 并且加到第一列矩阵块有

将第一列矩阵块乘以2有

最后将所有特征点的列都与第二列矩阵块相加有

从上述化简出的能观性矩阵可以看出,矩阵的第3列到第6列都是0矩阵,并且注意到矩阵的前三列组成的矩阵块是一个斜对称矩阵,斜对称矩阵的祑为2,因此可以直接得出结论,上述能观性矩阵降秩至少为4。作者在论文中进一步的通过酉矩阵来辅助进行推导。首先定义单位正交矩阵:

这里的单位向量组成的单位平面是垂直于重力加速度的矢量的,由于正交矩阵是满秩的,因此可以将它乘以能观性矩阵第一列,得到:

现在只需要证明能观性矩阵降秩确定为4,那么忽略到0矩阵的列,有:

后续证明过程略去,参考文献【3】附录C。

C: 零空间的物理意义解释

由于理想MSCKF能观性矩阵的零空间维度是4,所以可以写成如下形式:

分别对应零空间的四列,为了理解零空间基底的物理意义,只需要检验每一列的改变会对应改变相应的哪些状态空间量。首先假设初始状态为, 然后通过零空间的前三列基底改变状态空间为 ,可以看到对应的姿态和速度都不会受到影响,而位置项将会发生改变,因此零空间前三列向量组成的基底改变会相应的改变状态空间中的位置项。

接着,如果我们以重力加速度方向为旋转轴将状态空间旋转一个非常小的角度,有:

很明显的,如果要证明基底会对绕重力加速度的旋转角度产生影响,就只需要证明状态的差值与线性相关。

首先用表示绕重力加速度方向的旋转矩阵,这个旋转矩阵可以用下式近似表达:

其中表示重力方向的单位矢量,根据上述近似表达可以得到旋转前与旋转后的状态差:

接着假设代表状态向量的姿态差,那么有:

从上式的最后一项可以得出结论:

结合上述两个证明推导,可以得出结论,当对状态空间绕重力加速度方向进行旋转时,状态空间的改变量线性相关于

至此,可以最后得出结论,零空间对应的四个基底分别对应于状态空间中的位置X,Y,Z以及绕重力加速度方向的旋转。

D: MSCKF系统实际能观性矩阵及零空间维度

如果实际的对A部分理想能观性矩阵进行过公式推导就会发现,在迭代推导过程中,由于使用的是状态的真值,因此会不断的一一消除掉特征点在各个时刻的位置以及速度项。然而在真值的MSCKF系统中,我们知道会首先利用IMU的状态转移方程对IMU状态进行一个初步估计,在使用特征点的观测信息对状态进行更新,因此更新前后的状态是不同的,它们之间有着一个差值。因此按照A中的推导对实际系统的能观性矩阵进行推导有:

其中:

可以看到,项是多出的扰动项,其形式比较复杂,取决于每次滤波器对状态的修正过程,由于这个修正过程是随机的,因此

项对应的列矩阵块的祑就是不再是2,而是3。采用B中相同的分析方式也可以同样证明能观性矩阵降祑为3。这三个维度分别对应状态空间的X,Y,Z位置量。也就是说在真实的MSCKF系统中,估计器错误的从本身不可观的维度获得了更多的信息,造成的结果是对yaw角估计的不确定度降低,进一步的影响对其他状态空间量的估计,造成了系统的不一致性。

E: 提高MSCKF系统一致性的改进方法

由D中给出结论,MSCKF系统的不一致性主要来源于在观测方程中在不同线性点获取雅克比,这导致预测与更新的中的状态不同,导致出现扰动项。明显的方式是直接去除这个扰动项,如果在观测方程中,利用预测的状态,在其附近推导雅克比,就可以让消除这个状态不一致性。如下所示:

一句话总结就是永远利用状态变量的第一次估计值。即用替代。前者是第一次利用IMU状态转移方程获取的预测值,后者是基于此预测和观测进行滤波更新的值。

个人观点:虽然这种方式能够保证能观性矩阵符合真实系统的特性,然而由于每次在观测方程上都是基于第一次预测值附近展开雅克比进行线性近似,如果本身预测值偏离真实值特别多,那么这种近似展开的方式是相对不精确的,也间接的影响了优化的效果。

至此,该论文中主要思想以及公式推导都已经记录完成,建议阅读MSCKF源码对该部分进行更好的理解。

参考文献

[1] High-Precision, Consistent EKF-based Visual-Inertial Odometry

[2] Quaternion Kinematics for the error-state Kalman Filter

[3] Consistency of EKF-Based Visual-Inertial Odometry

MSCKF 2.0 理论推导以及能观性分析相关推荐

  1. 现控报告-- 分析倒立摆系统稳定性、能控性及能观性分析,设计PID控制方案(附matlab)

    目录 摘要 数学建模 1. 倒立摆系统简介 2. 直线倒立摆系统数学模型 系统传递函数模型 系统状态空间数学模型 系统分析 3. 直线一级倒立摆系统分析 (1)系统稳定性分析 (2)系统能控性和能观性 ...

  2. matlab分析能控条件,一级倒立摆MATLAB仿真、能控能观性分析、数学模型、极点配置.doc...

    一级倒立摆MATLAB仿真.能控能观性分析.数学模型.极点配置 题目一: 考虑如图所示的倒立摆系统.图中,倒立摆安装在一个小车上.这里仅考虑倒立摆在图面内运动的二维问题.倒立摆系统的参数包括:摆杆的质 ...

  3. matlab能控型模型,级倒立摆MATLAB仿真、能控能观性分析、数学模型、极点配置

    题目一: 考虑如图所示的倒立摆系统.图中,倒立摆安装在一个小车上.这里仅考虑倒立摆在图面内运动的二维问题.倒立摆系统的参数包括:摆杆的质量(摆杆的质量在摆杆中心).摆杆的长度.小车的质量.摆杆惯量等. ...

  4. 极点配置的matlab仿真,一级倒立摆MATLAB仿真能控能观性分析数学模型极点配置

    题目一: 考虑如图所示的倒立摆系统.图中,倒立摆安装在一个小车上.这里仅考虑倒立摆在图面内运动的二维问题.倒立摆系统的参数包括:摆杆的质量(摆杆的质量在摆杆中心).摆杆的长度.小车的质量.摆杆惯量等. ...

  5. matlab判断能控和能观,实验三 利用Matlab分析能控性和能观性

    实验三 利用Matlab分析能控性和能观性 实验目的:熟练掌握利用Matlab中相关函数分析系统能控能观性.求取两种标准型.系统的结构分解的方法. 实验内容: 1.能控性与能观性分析中常用的有关Mat ...

  6. matlab 能控性判别矩阵,实验三利用matlab分析能控性和能观性

    实验三利用Matlab分析能控性和能观性 实验目的:熟练掌握利用Matlab中相关函数分析系统能控能观性.求取两种标准型.系统的结构分解的方法. 实验内容: 1.能控性与能观性分析中常用的有关Matl ...

  7. matlab求能控标准型函数,实验三 利用Matlab分析能控性和能观性

    实验三利用Matlab分析能控性和能观性 实验目的:熟练掌握利用Matlab中相关函数分析系统能控能观性.求取两种标准型.系统的结构分解的方法. 实验内容: 1.能控性与能观性分析中常用的有关Matl ...

  8. matlab中能控标准型,实验三利用Matlab分析能控性和能观性

    <实验三利用Matlab分析能控性和能观性>由会员分享,可在线阅读,更多相关<实验三利用Matlab分析能控性和能观性(5页珍藏版)>请在装配图网上搜索. 1. 实验三 利用M ...

  9. MSCKF理论推导与代码解析

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 在SLAM后端中,主要有两种主流方法用于优化:基于滤波的方法和基于非线性的方法.基于滤波的方法主要有M ...

最新文章

  1. 万能系统卸载器免root_Linux umount命令:卸载文件系统
  2. HashCode和equal方法
  3. 【目录】 Git 教程
  4. python安全攻防---scapy基础---计算机网络各层协议
  5. DecExpress 帮助网站
  6. pythonfor循环列表排序_Python Day4950(for循环语句整理)
  7. HTML5文档查看器PrizmDoc发布v13.0,新增文档比较功能
  8. Nodejs教程09:实现一个带接口请求的简单服务器
  9. 新颖训练方法——用迭代投影算法训练神经网络
  10. bootstrap-treeview树形图参数详解
  11. 可以查杀计算机病毒的软件,怎样彻底查杀计算机病毒
  12. 免费手机号码归属地查询接口
  13. 阿里P9专家:程序员未来职业发展路线
  14. LINUX中ECHO命令的使用
  15. 食饵捕食者模matlab,食饵捕食者模型
  16. c语言欧几里得算法求素数,jrs直播(无插件) -官网
  17. Blender 利用遮罩剔除顶点
  18. CCO2017 Vera and Trail Building 构造+图论
  19. STM32F05x加入RDP(LV1)后,Segger无法Unlock的解决办法
  20. Spring源码整体分析

热门文章

  1. openshift介绍与应用
  2. 【特异性双端队列 | 最小调整顺序次数】
  3. 计算机总是提示网络电缆没有插,网络电缆没有插好原因与解决方法【图文教程】...
  4. JavaScript实现双色球随机一注
  5. JS实现段落的收缩与展开
  6. 【日常积累】实验室作业Socket实现多个客户端相互通信。
  7. CVPR 2021 结果出炉!最全论文下载及分类汇总(更新中)
  8. can not access a member of class xxx with modifiers “private“
  9. 33、网络地址转换(NAT)
  10. liteos简介(一)