三、卡尔曼五大公式推导

相信大家已经看了我的上一篇文章吧,其实上一篇通过例子讲了卡尔曼滤波思想,卡尔曼滤波又称最优递归数字处理算法,他就是一处理数据的算法,目的是获取更为准确的数据。接下来,我要开始超级硬核的推导,推导非常详细,而且容易立即额,希望你们可以和我一起推导

相信大家都了解过状态方程与观测器吧,现代控制理论比较基础的内容,我举一个简单的例子,就是控制中最常见的弹簧阻尼系统,如图1

三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程

该系统的力平衡方程可以用以下式子表示(不明白的可以去https://wenku.baidu.com/view/f800e6e1ddccda38376bafa0.html看看,有详细推导过程)三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_三轴加速度计 卡尔曼滤波 python_02

在状态方程中,我们一般习惯用x表示,做一个简单的变量替换,用x代替y,然后让两边同时乘以k,可以得到三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_03

在弹簧阻尼系统中,这个外力F实际就是我们的输入,可以将其表示为u。我们令三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_04,所以上式我们可以改写为三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_05将其改写为矩阵形式三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程_06假设我们有一位置观测器,用于观测三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_07的值,我们观测值分别为三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波_08,用数学式表达如下三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_数据_09这两个式子就是我们的状态方程与观测方程,这是一个简单的例子,推广为一般形式,连续系统的表达式为三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波_10三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波_11其离散形式三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_12三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程_13由此来看,我们可以从状态方程算出系统状态,但是这是处于理想条件下的情况,往往现实中状态方程和观测方程不会这么理想,会有各种各样的干扰,那么系统的状态方程可以写成下面的形式三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_三轴加速度计 卡尔曼滤波 python_14三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程_15其中三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波_16为过程噪声,三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_三轴加速度计 卡尔曼滤波 python_17是测量噪声,它们是服从正态分布的而且是获取不了的,这时我们怎么得到更加接近真实值的三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_18?

还记得上一篇文章我讲了一个用两个有误差的传感器获取更加准确的硬币直径的例子吗?我们现在的思路和那个例子一样,我们使用状态方程计算出来的值就可以看成传感器1测出来的值,用观测器得到的值就可以看为传感器2获得的值,按照那个例子的思路,我们开始推导

首先我们假设过程噪声w它是满足三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_19即w满足正态分布,其均值为0,协方差矩阵为Q(统计概率方面的知识),为什么用协方差而不是方差,这是因为我们过程噪声三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_20并不是标量,它是一个向量;同理,测量噪声同样满足正态分布,其数学表达式如下三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波_21在实际中,我们往往得不到w和v的值,于是我们采用状态方程已知的部分来计算Xk,其数学表达式如下:三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_三轴加速度计 卡尔曼滤波 python_22大家仔细观察一下,我这个式子出现了一些新的符号,三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程_23这个符号我们一般将其称为第k次的先验估计,三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程_24这个符号代表第k-1次的估计值。现在我来解释一下这两个参数的意义,三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程_23是通过一个有误差的状态方程计算出来的值,后面我们会使用观测方程得到的值对这个值进行修正,即进行数据融合,因此我们称其为先验估计。三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程_24则是上一次我们估计的值,这个值是在第k-1次计算中最接近真实值的值,所以我们在第k次计算中使用,以减弱干扰。

同理,在不考虑噪声时,通过观测方程我们也可以得到一个三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程_27,其数学表达式如下:三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波_28为了和先验估计三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程_23区别,我们用三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波_30表示,叫做测量估计,mea代表measure(测量)。由上一篇数据融合的思想,我们第k次的估计值三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程_27可以由先验估计和测量估计表示,表达式如下:三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程_32三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波_33式中,G是一个系数,当G=0,三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程_34;当G=1时,三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程_35

做一个简单的数学变换,令三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程_36,则上式变换如下:三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波_37这个式子眼熟不?这个公式就和上篇文章数据融合的公式形式一致,按照数据融合的思想,我们现在就要找到一个参数三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_38使得我们的估计值三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程_27最接近真实值三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_18,接下来要开始推导了,建议拿起笔一起计算,过程不难的。

首先定义三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程_41,从状态方程和观测方程可知,真实值三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_18与估计值三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程_27只相差三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_20三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_三轴加速度计 卡尔曼滤波 python_17的线性组合,而三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_20三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_三轴加速度计 卡尔曼滤波 python_17都服从正态分布,因此三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_数据_48也服从正态分布。现在假设三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_数据_48服从正态分布三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_三轴加速度计 卡尔曼滤波 python_50三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_51三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_数据_48的协方差矩阵,按照概率论的知识我们可以知道三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波_53E代表求数学期望,三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_数据_48是列向量,其数学期望为0,满足正态分布(关于协方差不太懂可以转到)。为了使三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程_27更加接近真实值三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_18我们需要选择合适的三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程_57使三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_58的方差最小,即三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程_59的对角线之和最小,所以接下来化简三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_51

三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_三轴加速度计 卡尔曼滤波 python_61三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_三轴加速度计 卡尔曼滤波 python_62带入三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_三轴加速度计 卡尔曼滤波 python_63,可得三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波_64三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波_65代入(2),得到三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_66仿照三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_数据_48的定义,我们定义三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_三轴加速度计 卡尔曼滤波 python_68将(3)式和(4)式代入(1),并化简三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波_69因为三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_三轴加速度计 卡尔曼滤波 python_70;三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波_71,所以三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_数据_72因为三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_三轴加速度计 卡尔曼滤波 python_73三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_38都是常数,所以

三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波_75

三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波_76

三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波_77

三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_数据_78

由概率论知识可知,当A与B相互独立,E(AB)=E(A)E(B),所以三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_数据_79;因为三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_三轴加速度计 卡尔曼滤波 python_80,而三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_三轴加速度计 卡尔曼滤波 python_17是测量噪声,两者之间相互独立,又因为三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_三轴加速度计 卡尔曼滤波 python_17满足正态分布,所以三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波_83,因此,我们可以得到以下式子:

三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_84

仔细观察这个式子,出现了三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程_85,参考前面三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_数据_48的协方差矩阵的计算公式三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_数据_87,我们可以将三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程_85定义为三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波_89,即先验误差的协方差矩阵,即三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_三轴加速度计 卡尔曼滤波 python_90又因为测量噪声三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_三轴加速度计 卡尔曼滤波 python_17满足三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_92,所以三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程_93

此时三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_51的表达式为

三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_数据_95此时三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_51化简完毕,对三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_51矩阵取迹,即三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_51对角线元素之和,对三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_51矩阵取迹写作三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_数据_100所以三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_101矩阵转置并不会改变主对角线上元素,所以三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_数据_102

为了求取参数三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_38的值,我们令三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_三轴加速度计 卡尔曼滤波 python_104

补充两个数学公式三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程_105三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波_106

将这两个公式运用于三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_数据_100三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_38求导,推导过程如下:三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_三轴加速度计 卡尔曼滤波 python_109

三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波_110又因为三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波_89是协方差矩阵,所以三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程_112,即三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_状态方程_113

三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_数据_114

三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_115

三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_数据_116三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_38的值推导完毕,结合后验估计公式三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_118来分析一下式子

(1)、当R大时,代表测量噪声大,三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_38小,表示我们更愿意使用先验估计,即计算值

(2)、当R小时,代表测量噪声小,三轴加速度计 卡尔曼滤波 python 卡尔曼滤波 推导_卡尔曼滤波算法_38大,表示我们更愿意相信测量值

其实这篇文章标红的公式便是卡尔曼滤波的五大公式,在本文中我们完成了最困难的3个公式的推导,下一篇将完成卡尔曼滤波的五大公式推导