作者:Mr.Winter`

控制原理 | 详细总结卡尔曼滤波原理+具体案例分析

0 专栏介绍

🔥附C++/Python/Matlab全套代码🔥课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。

🚀详情:图解自动驾驶中的运动规划(Motion Planning),附几十种规划算法


1 状态观测器

在工程上,部分状态参数测量的成本过高,或是用现有仪器无法测得,此时需要引入状态观测器。状态观测器以原系统输入、输出为输入,输出估计的状态变量。

原系统状态描述:
{ x k = A x k − 1 + B u k − 1 y k = C x k \begin{cases} x_k=Ax_{k-1}+Bu_{k-1}\\ y_k=Cx_k\\\end{cases} {xk=Axk1+Buk1yk=Cxk

状态观测器状态描述:
{ x ~ k = A x ~ k − 1 + B u k − 1 + f [ y k − 1 − y ~ k − 1 ] y ~ k = C x ~ k \begin{cases} \tilde{x}_k=A\tilde{x}_{k-1}+Bu_{k-1}+f\left[ y_{k-1}-\tilde{y}_{k-1} \right]\\ \tilde{y}_k=C\tilde{x}_k\\\end{cases} {x~k=Ax~k1+Buk1+f[yk1y~k1]y~k=Cx~k

定义误差向量 e k = x k − x ~ k e_k=x_k-\tilde{x}_k ek=xkx~k,则两系统状态方程相减得

系统误差传递方程 e k = ( A − f C ) e k − 1 系统误差传递方程e_k=\left( A-fC \right) e_{k-1} 系统误差传递方程ek=(AfC)ek1

其通解为矩阵指数函数,所以当 A − f C A-fC AfC特征值小于0时,误差向量 e k e_k ek各分量均趋于0,即状态观测器能直接估计原系统状态。

本质上,状态观测器是针对状态空间方程描述的确定系统,从错误的系统状态估计值不断收敛到正确的系统状态估计值的数学模型

2 状态滤波器

实际的系统往往是随机过程,状态描述为:

{ x k = A x k − 1 + B u k − 1 + w k − 1 y k = C x k + v k \begin{cases} x_k=Ax_{k-1}+Bu_{k-1}+w_{k-1}\\ y_k=Cx_k+v_k\\\end{cases} {xk=Axk1+Buk1+wk1yk=Cxk+vk

其中 w k w_k wk称为过程噪声,主要由系统运行过程中的外力导致,如旋翼飞行器运动过程中受到的阵风; v k v_k vk称为测量噪声,主要由系统测量过程中测量仪器误差、精度不足导致。

本质上,状态滤波器是针对随机状态空间方程描述的随机系统,从不确定观测中提取信息,得到系统状态最优估计的数学模型。当 w k w_k wk v k v_k vk为高斯白噪声且相互独立时,状态滤波器为卡尔曼滤波器

状态滤波器的核心是通过贝叶斯原理不断调整滤波器增益矩阵,以减小随机干扰,使估计的系统状态趋近于真实状态;而状态观测器的核心是通过极点配置确定观测器增益矩阵,使估计的状态跟踪当前系统的状态。

一般地,状态滤波器性能优于状态观测器,但在实际系统中,若随机噪声非高斯噪声,或有若干非线性环节,按常规噪声模型建立的状态滤波器可能发散,此时则更需要状态观测器的稳定性。

3 卡尔曼滤波器

考虑一个随机系统:

{ x k = A x k − 1 + B u k − 1 + w k − 1 z k = C x k + v k \begin{cases} x_k=Ax_{k-1}+Bu_{k-1}+w_{k-1}\\ z_k=Cx_k+v_k\\\end{cases} {xk=Axk1+Buk1+wk1zk=Cxk+vk

其中 w k   N ( 0 , Q ) w_k~N\left( 0, Q \right) wk N(0,Q) v k   N ( 0 , R ) v_k~N\left( 0, R \right) vk N(0,R),且 w k w_k wk v k v_k vk相互独立。

忽略噪声可建立该系统的先验数学模型(噪声仅满足随机分布,无法建模):

状态预测方程 { x ^ k − = A x ^ k − 1 + B u k − 1 z ^ k − = C x ^ k {\text{状态预测方程}\begin{cases} \hat{x}_{k}^{-}=A\hat{x}_{k-1}+Bu_{k-1}\\ \hat{z}_{k}^{-}=C\hat{x}_k\\\end{cases}} 状态预测方程{x^k=Ax^k1+Buk1z^k=Cx^k

基于上述系统,从贝叶斯方法引出卡尔曼滤波器状态更新方程:

状态更新方程 : x ^ k = x ^ k − + K k ( z k − z ^ k − ) {\text{状态更新方程}: \hat{x}_k=\hat{x}_{k}^{-}+K_k\left( z_k-\hat{z}_{k}^{-} \right) } 状态更新方程:x^k=x^k+Kk(zkz^k)

其中 x ^ k \hat{x}_k x^k是后验状态估计,即经过一次修正后,当前系统状态的最优估计值; x ^ k − \hat{x}_{k}^{-} x^k为系统状态的先验估计; z k z_k zk为当前状态的测量样本值; z ^ k − \hat{z}_{k}^{-} z^k为当前状态的先验测量值; z k − z ^ k − z_k-\hat{z}_{k}^{-} zkz^k代表实际系统与估计系统间随机误差的影响; K k K_k Kk权衡先验模型与实测数据间对后验分布的关系,称为卡尔曼增益,显然, z k − z ^ k − z_k-\hat{z}_{k}^{-} zkz^k越小表明实际与预测越接近,则后验分布越趋近于先验分布, z k − z ^ k − z_k-\hat{z}_{k}^{-} zkz^k越大表明预测越不可信,需要通过实测来大幅修正先验分布。

下面要确定 K k K_k Kk使后验模型的修正效果最佳,即 x ^ k \hat{x}_k x^k越接近真实值 x k {x}_k xk。定义误差向量

{ 后验误差向量 e k = x k − x ^ k 先验误差向量 e k − = x k − x ^ k − \begin{cases} \text{后验误差向量}e_k=x_k-\hat{x}_k\\ \text{先验误差向量}e_{k}^{-}=x_k-\hat{x}_{k}^{-}\\\end{cases} {后验误差向量ek=xkx^k先验误差向量ek=xkx^k

定义后验误差协方差矩阵为:

P k = E ( e k e k T ) = [ σ e 1 2 σ e 1 σ e 2 ⋯ σ e 1 σ e n σ e 2 σ e 1 σ e 2 2 ⋯ σ e 2 σ e n ⋮ ⋮ ⋱ ⋮ σ e n σ e 1 σ e n σ e 2 ⋯ σ e n 2 ] P_k=E\left( e_ke_{k}^{T} \right) =\left[ \begin{matrix} \sigma _{e1}^{2}& \sigma _{e1}\sigma _{e2}& \cdots& \sigma _{e1}\sigma _{en}\\ \sigma _{e2}\sigma _{e1}& \sigma _{e2}^{2}& \cdots& \sigma _{e2}\sigma _{en}\\ \vdots& \vdots& \ddots& \vdots\\ \sigma _{en}\sigma _{e1}& \sigma _{en}\sigma _{e2}& \cdots& \sigma _{en}^{2}\\\end{matrix} \right] Pk=E(ekekT)= <svg width="0.667em" height="5.400em" viewbox="0 0 667 5400"> <path d="M403 1759 V84 H666 V0 H319 V1759 v1800 v1759 h347 v-84 H403z M403 1759 V0 H319 V1759 v1800 v1759 h84z"></path> </svg>σe12σe2σe1σenσe1σe1σe2σe22σenσe2σe1σenσe2σenσen2 <svg width="0.667em" height="5.400em" viewbox="0 0 667 5400"> <path d="M347 1759 V0 H0 V84 H263 V1759 v1800 v1759 H0 v84 H347z M347 1759 V0 H263 V1759 v1800 v1759 h84z"></path> </svg>

同理也有先验误差协方差矩阵 P k − P_{k}^{-} Pk。根据最小方差估计原理,设损失函数为 t r ( P k ) \mathrm{tr}\left( P_k \right) tr(Pk),即要求

K k = a r g min ⁡ [ t r ( P k ) ] K_k=\mathrm{arg}\min \left[ \mathrm{tr}\left( P_k \right) \right] Kk=argmin[tr(Pk)]

P k P_k Pk展开为:
在这里插入图片描述
上面运用了状态更新方程与状态预测方程,考虑到 e k − e_{k}^{-} ek v k v_k vk相互独立,则进一步:

P k = ( I − K k C ) E ( e k − e k − T ) ( I − K k C ) T + K k E ( v k v k T ) K k T = ( I − K k C ) P k − ( I − K k C ) T + K k R K k T \begin{aligned}P_k&=\left( I-K_kC \right) E\left( e_{k}^{-}{e_{k}^{-}}^T \right) \left( I-K_kC \right) ^T+K_kE\left( v_kv_{k}^{T} \right) K_{k}^{T}\\&=\left( I-K_kC \right) P_{k}^{-}\left( I-K_kC \right) ^T+K_kRK_{k}^{T}\end{aligned} Pk=(IKkC)E(ekekT)(IKkC)T+KkE(vkvkT)KkT=(IKkC)Pk(IKkC)T+KkRKkT

∂ t r ( P k ) ∂ K k = 0 \frac{\partial \mathrm{tr}\left( P_k \right)}{\partial K_k}=0 Kktr(Pk)=0,即

卡尔曼增益调整方程 K k = P k − C T C P k − C T + R {\text{卡尔曼增益调整方程}K_k=\frac{P_{k}^{-}C^T}{CP_{k}^{-}C^T+R}} 卡尔曼增益调整方程Kk=CPkCT+RPkCT

K k K_k Kk代入后验误差协方差矩阵表达式,即得

协方差更新方程 P k = ( I − K k H ) P k − {\text{协方差更新方程}P_k=\left( I-K_kH \right) P_{k}^{-}} 协方差更新方程Pk=(IKkH)Pk

要更新 K k K_k Kk,则只需要确定先验误差协方差矩阵 P k − P_{k}^{-} Pk。同样地,将 P k − P_{k}^{-} Pk展开为

P k − = E ( e k − e k − T ) = E [ ( x k − x ^ k − ) ( x k − x ^ k − ) T ] = E [ ( A e k − 1 + w k − 1 ) ( A e k − 1 + w k − 1 ) T ] = A E ( e k − 1 e k − 1 T ) A T + E ( w k − 1 w k − 1 T ) \begin{aligned}P_{k}^{-}&=E\left( e_{k}^{-}e_{k}^{-T} \right) \\&=E\left[ \left( x_k-\hat{x}_{k}^{-} \right) \left( x_k-\hat{x}_{k}^{-} \right) ^T \right] \\&=E\left[ \left( Ae_{k-1}+w_{k-1} \right) \left( Ae_{k-1}+w_{k-1} \right) ^T \right] \\&=AE\left( e_{k-1}e_{k-1}^{T} \right) A^T+E\left( w_{k-1}w_{k-1}^{T} \right)\end{aligned} Pk=E(ekekT)=E[(xkx^k)(xkx^k)T]=E[(Aek1+wk1)(Aek1+wk1)T]=AE(ek1ek1T)AT+E(wk1wk1T)

考虑到 e k e_k ek w k w_k wk相互独立,进一步得到

协方差预测方程 P k − = A P k − 1 A T + Q {\text{协方差预测方程}P_{k}^{-}=AP_{k-1}A^T+Q} 协方差预测方程Pk=APk1AT+Q

至此,得到卡尔曼滤波的五大基本公式,其中核心方程为基于最小方差估计的卡尔曼增益调整方程,具体工作流程如图所示。

在这里插入图片描述

4 具体案例:船舶GPS定位

有一船舶出港沿某直线方向航行,辅助北斗卫星进行定位和测速。假设
① 船舶加速度 a ( t ) a\left( t \right) a(t)=机动加速度 u ( t ) u\left( t \right) u(t)+随机加速度 w ( t ) w\left( t \right) w(t),其中 w ( t ) w\left( t \right) w(t)符合高斯分布;
② GPS观测噪声 v ( t ) v\left( t \right) v(t)符合高斯分布。
要求用卡尔曼滤波器估计真实运动轨迹。

解决方案

首先建立随机系统的真实模型。以码头出发点为原点,采样周期(雷达扫描周期)为 T T T,用 s ( k ) s(k) s(k)表示船舶在采样时刻 k T kT kT处的真实位置,用 z ( k ) z\left( k \right) z(k)表示在时刻 k T kT kT处的GPS定位观测值,则真实系统输出方程为 z ( k ) = s ( k ) + v ( k ) z(k)=s(k)+v(k) z(k)=s(k)+v(k)

记在 k T kT kT时刻处船舶速 s ˙ ( k ) \dot{s}\left( k \right) s˙(k),加速度为 a ( k ) a\left( k \right) a(k),由匀加速公式有:

s ( k + 1 ) = s ( k ) + s ˙ ( k ) T + 1 2 a ( k ) T 2 ⇒ s ˙ ( k + 1 ) = s ˙ ( k ) + T a ( k ) s\left( k+1 \right) =s\left( k \right) +ṡ\left( k \right) T+\frac{1}{2}a\left( k \right) T^2\\\Rightarrow \dot{s}\left( k+1 \right) =ṡ\left( k \right) +Ta\left( k \right) s(k+1)=s(k)+s˙(k)T+21a(k)T2s˙(k+1)=s˙(k)+Ta(k)

其中 a ( k ) = u ( k ) + w ( k ) a(k)=u(k)+w(k) a(k)=u(k)+w(k)

定义在采样时刻 k T kT kT系统状态 x ( k ) x\left( k \right) x(k)为船舶的位置和速度,即 x ( k ) = [ s ( k ) s ˙ ( k ) ] T x(k)=\left[ \begin{matrix} s(k)& \dot{s}(k)\\\end{matrix} \right] ^T x(k)=[s(k)s˙(k)]T可得到船舶运动的状态空间模型

{ [ s ( k + 1 ) s ˙ ( k + 1 ) ] = [ 1 T 0 1 ] [ s ( k ) s ˙ ( k ) ] + [ 0.5 T T ] u ( k ) + [ 0.5 T T ] w ( k ) z ( k ) = [ 1 0 ] [ s ( k ) s ˙ ( k ) ] + v ( k ) \begin{cases} \left[ \begin{array}{c} s(k+1)\\ \dot{s}(k+1)\\\end{array} \right] =\left[ \begin{matrix} 1& T\\ 0& 1\\\end{matrix} \right] \left[ \begin{array}{c} s(k)\\ \dot{s}(k)\\\end{array} \right] +\left[ \begin{array}{c} 0.5T\\ T\\\end{array} \right] u(k)+\left[ \begin{array}{c} 0.5T\\ T\\\end{array} \right] w(k)\\ z(k)=\left[ \begin{matrix} 1& 0\\\end{matrix} \right] \left[ \begin{array}{c} s(k)\\ \dot{s}(k)\\\end{array} \right] +v(k)\\\end{cases} <svg width="0.8889em" height="0.616em" style="width:0.8889em" viewbox="0 0 888.89 616" preserveaspectratio="xMinYMin"> <path d="M384 0 H504 V616 H384z M384 0 H504 V616 H384z"></path> </svg> <svg width="0.8889em" height="0.616em" style="width:0.8889em" viewbox="0 0 888.89 616" preserveaspectratio="xMinYMin"> <path d="M384 0 H504 V616 H384z M384 0 H504 V616 H384z"></path> </svg>[s(k+1)s˙(k+1)]=[10T1][s(k)s˙(k)]+[0.5TT]u(k)+[0.5TT]w(k)z(k)=[10][s(k)s˙(k)]+v(k)

在不考虑机动目标的动力因素即 u ( k ) = 0 u(k)=0 u(k)=0时,将匀速直线运动的船舶系统扩展到四维,状态包含水平和纵向的位置和速度,则系统方程可化为

[ x ( k ) x ˙ ( k ) y ( k ) y ˙ ( k ) ] = [ 1 T 0 0 0 1 0 0 0 0 1 T 0 0 0 1 ] [ x ( k − 1 ) x ˙ ( k − 1 ) y ( k − 1 ) y ˙ ( k − 1 ) ] + [ 0.5 T 2 T 0.5 T 2 T ] [ w 1 ( k ) w 2 ( k ) w 3 ( k ) w 4 ( k ) ] z ( k ) = [ 1 0 0 0 0 0 1 0 ] [ x ( k ) x ˙ ( k ) y ( k ) y ˙ ( k ) ] + [ v 1 ( k ) v 2 ( k ) ] \left[ \begin{array}{c} x(k)\\ \dot{x}(k)\\ y(k)\\ \dot{y}(k)\\\end{array} \right] =\left[ \begin{matrix} 1& T& 0& 0\\ 0& 1& 0& 0\\ 0& 0& 1& T\\ 0& 0& 0& 1\\\end{matrix} \right] \left[ \begin{array}{c} x(k-1)\\ \dot{x}(k-1)\\ y(k-1)\\ \dot{y}(k-1)\\\end{array} \right] +\left[ \begin{matrix} 0.5T^2& & & \\ & T& & \\ & & 0.5T^2& \\ & & & T\\\end{matrix} \right] \left[ \begin{array}{c} w_1\left( k \right)\\ w_2\left( k \right)\\ w_3\left( k \right)\\ w_4\left( k \right)\\\end{array} \right] \\z(k)=\left[ \begin{matrix} 1& 0& 0& 0\\ 0& 0& 1& 0\\\end{matrix} \right] \left[ \begin{array}{c} x(k)\\ \dot{x}(k)\\ y(k)\\ \dot{y}(k)\\\end{array} \right] +\left[ \begin{array}{c} v_1\left( k \right)\\ v_2\left( k \right)\\\end{array} \right] <svg width="0.667em" height="4.800em" viewbox="0 0 667 4800"> <path d="M403 1759 V84 H666 V0 H319 V1759 v1200 v1759 h347 v-84 H403z M403 1759 V0 H319 V1759 v1200 v1759 h84z"></path> </svg>x(k)x˙(k)y(k)y˙(k) <svg width="0.667em" height="4.800em" viewbox="0 0 667 4800"> <path d="M347 1759 V0 H0 V84 H263 V1759 v1200 v1759 H0 v84 H347z M347 1759 V0 H263 V1759 v1200 v1759 h84z"></path> </svg>= <svg width="0.667em" height="4.800em" viewbox="0 0 667 4800"> <path d="M403 1759 V84 H666 V0 H319 V1759 v1200 v1759 h347 v-84 H403z M403 1759 V0 H319 V1759 v1200 v1759 h84z"></path> </svg>1000T100001000T1 <svg width="0.667em" height="4.800em" viewbox="0 0 667 4800"> <path d="M347 1759 V0 H0 V84 H263 V1759 v1200 v1759 H0 v84 H347z M347 1759 V0 H263 V1759 v1200 v1759 h84z"></path> </svg> <svg width="0.667em" height="4.800em" viewbox="0 0 667 4800"> <path d="M403 1759 V84 H666 V0 H319 V1759 v1200 v1759 h347 v-84 H403z M403 1759 V0 H319 V1759 v1200 v1759 h84z"></path> </svg>x(k1)x˙(k1)y(k1)y˙(k1) <svg width="0.667em" height="4.800em" viewbox="0 0 667 4800"> <path d="M347 1759 V0 H0 V84 H263 V1759 v1200 v1759 H0 v84 H347z M347 1759 V0 H263 V1759 v1200 v1759 h84z"></path> </svg>+ <svg width="0.667em" height="4.800em" viewbox="0 0 667 4800"> <path d="M403 1759 V84 H666 V0 H319 V1759 v1200 v1759 h347 v-84 H403z M403 1759 V0 H319 V1759 v1200 v1759 h84z"></path> </svg>0.5T2T0.5T2T <svg width="0.667em" height="4.800em" viewbox="0 0 667 4800"> <path d="M347 1759 V0 H0 V84 H263 V1759 v1200 v1759 H0 v84 H347z M347 1759 V0 H263 V1759 v1200 v1759 h84z"></path> </svg> <svg width="0.667em" height="4.800em" viewbox="0 0 667 4800"> <path d="M403 1759 V84 H666 V0 H319 V1759 v1200 v1759 h347 v-84 H403z M403 1759 V0 H319 V1759 v1200 v1759 h84z"></path> </svg>w1(k)w2(k)w3(k)w4(k) <svg width="0.667em" height="4.800em" viewbox="0 0 667 4800"> <path d="M347 1759 V0 H0 V84 H263 V1759 v1200 v1759 H0 v84 H347z M347 1759 V0 H263 V1759 v1200 v1759 h84z"></path> </svg>z(k)=[10000100] <svg width="0.667em" height="4.800em" viewbox="0 0 667 4800"> <path d="M403 1759 V84 H666 V0 H319 V1759 v1200 v1759 h347 v-84 H403z M403 1759 V0 H319 V1759 v1200 v1759 h84z"></path> </svg>x(k)x˙(k)y(k)y˙(k) <svg width="0.667em" height="4.800em" viewbox="0 0 667 4800"> <path d="M347 1759 V0 H0 V84 H263 V1759 v1200 v1759 H0 v84 H347z M347 1759 V0 H263 V1759 v1200 v1759 h84z"></path> </svg>+[v1(k)v2(k)]

现假设初始位置为(-100m,200m),水平运动初速度为2m/s,垂直运动初速度为20m/s,雷达扫描周期 T = 1 s T=1s T=1s,则系统状态空间进一步化为

{ x ( k + 1 ) = A x ( k ) + B u ( k ) + Γ w ( k ) z ( k ) = H x ( k ) + v ( k ) \begin{cases} x(k+1)=Ax(k)+Bu(k)+\varGamma w(k)\\ z(k)=Hx(k)+v(k)\\\end{cases} {x(k+1)=Ax(k)+Bu(k)+Γw(k)z(k)=Hx(k)+v(k)

其中 A = [ 1 1 0 0 0 1 0 0 0 0 1 1 0 0 0 1 ] A=\left[ \begin{matrix} 1& 1& 0& 0\\ 0& 1& 0& 0\\ 0& 0& 1& 1\\ 0& 0& 0& 1\\\end{matrix} \right] A= <svg width="0.667em" height="4.800em" viewbox="0 0 667 4800"> <path d="M403 1759 V84 H666 V0 H319 V1759 v1200 v1759 h347 v-84 H403z M403 1759 V0 H319 V1759 v1200 v1759 h84z"></path> </svg>1000110000100011 <svg width="0.667em" height="4.800em" viewbox="0 0 667 4800"> <path d="M347 1759 V0 H0 V84 H263 V1759 v1200 v1759 H0 v84 H347z M347 1759 V0 H263 V1759 v1200 v1759 h84z"></path> </svg> B = Γ = [ 0.5 1 0.5 1 ] B=\varGamma =\left[ \begin{matrix} 0.5& & & \\ & 1& & \\ & & 0.5& \\ & & & 1\\\end{matrix} \right] B=Γ= <svg width="0.667em" height="4.800em" viewbox="0 0 667 4800"> <path d="M403 1759 V84 H666 V0 H319 V1759 v1200 v1759 h347 v-84 H403z M403 1759 V0 H319 V1759 v1200 v1759 h84z"></path> </svg>0.510.51 <svg width="0.667em" height="4.800em" viewbox="0 0 667 4800"> <path d="M347 1759 V0 H0 V84 H263 V1759 v1200 v1759 H0 v84 H347z M347 1759 V0 H263 V1759 v1200 v1759 h84z"></path> </svg>, H = [ 1 0 0 0 0 0 1 0 ] H=\left[ \begin{matrix} 1& 0& 0& 0\\ 0& 0& 1& 0\\\end{matrix} \right] H=[10000100]

设过程噪声 w ∼ N ( 0 , 0. 1 2 ) w\sim N(0,0.1^2) wN(0,0.12),其四个分量独立同分布,则

Q ∗ = E ( w 4 × 1 w 4 × 1 T ) = σ w 2 [ 1 1 1 1 ] Q^*=E(w_{4\times 1}w_{4\times 1}^{T})=\sigma _{w}^{2}\left[ \begin{matrix} 1& & & \\ & 1& & \\ & & 1& \\ & & & 1\\\end{matrix} \right] Q=E(w4×1w4×1T)=σw2 <svg width="0.667em" height="4.800em" viewbox="0 0 667 4800"> <path d="M403 1759 V84 H666 V0 H319 V1759 v1200 v1759 h347 v-84 H403z M403 1759 V0 H319 V1759 v1200 v1759 h84z"></path> </svg>1111 <svg width="0.667em" height="4.800em" viewbox="0 0 667 4800"> <path d="M347 1759 V0 H0 V84 H263 V1759 v1200 v1759 H0 v84 H347z M347 1759 V0 H263 V1759 v1200 v1759 h84z"></path> </svg>

考虑噪声矩阵 Γ \varGamma Γ的加权得到过程噪声协方差矩阵

Q = Q ∗ ⋅ Γ = σ w 2 [ 0.5 1 0.5 1 ] Q=Q^*\cdot \varGamma =\sigma _{w}^{2}\left[ \begin{matrix} 0.5& & & \\ & 1& & \\ & & 0.5& \\ & & & 1\\\end{matrix} \right] Q=QΓ=σw2 <svg width="0.667em" height="4.800em" viewbox="0 0 667 4800"> <path d="M403 1759 V84 H666 V0 H319 V1759 v1200 v1759 h347 v-84 H403z M403 1759 V0 H319 V1759 v1200 v1759 h84z"></path> </svg>0.510.51 <svg width="0.667em" height="4.800em" viewbox="0 0 667 4800"> <path d="M347 1759 V0 H0 V84 H263 V1759 v1200 v1759 H0 v84 H347z M347 1759 V0 H263 V1759 v1200 v1759 h84z"></path> </svg>

观测噪声 v ∼ N ( 0 , 1 0 2 ) v\sim N(0,10^2) vN(0,102),其两个分量独立同分布,则观测噪声协方差矩阵

R = σ v 2 [ 1 1 ] R=\sigma _{v}^{2}\left[ \begin{matrix} 1& \\ & 1\\\end{matrix} \right] R=σv2[11]

依此建立卡尔曼滤波器模型。

设置最优估计初值 x ^ ( 1 ) = [ − 100 2 − 200 20 ] T \hat{x}(1)=\left[ \begin{matrix} -100& 2& -200& 20\\\end{matrix} \right] ^T x^(1)=[100220020]T、先验协方差矩阵 P 1 − = [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 ] P_{1}^{-}=\left[ \begin{matrix} 1& 0& 0& 0\\ 0& 1& 0& 0\\ 0& 0& 1& 0\\ 0& 0& 0& 1\\\end{matrix} \right] P1= <svg width="0.667em" height="4.800em" viewbox="0 0 667 4800"> <path d="M403 1759 V84 H666 V0 H319 V1759 v1200 v1759 h347 v-84 H403z M403 1759 V0 H319 V1759 v1200 v1759 h84z"></path> </svg>1000010000100001 <svg width="0.667em" height="4.800em" viewbox="0 0 667 4800"> <path d="M347 1759 V0 H0 V84 H263 V1759 v1200 v1759 H0 v84 H347z M347 1759 V0 H263 V1759 v1200 v1759 h84z"></path> </svg>,并以此开始迭代,得到实验图像如图所示。

在这里插入图片描述

在使用卡尔曼滤波器时,应至少保证系统模型或系统测量至少一个有足够的精度,否则卡尔曼滤波器无法从中提取到正确的估计信息。这是因为卡尔曼滤波调整的是对先验模型值与仪器测量值间的信任权重,若二者都不准确则卡尔曼跟踪的数值亦不准确。为验证这一结论,下面保持测量噪声不变,调整过程噪声方差,如图所示。

在这里插入图片描述
本文的完整工程代码请通过下方名片联系我获取


🔥 更多精彩专栏


👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇