EKF学习笔记

news2024/9/30 10:37:20

扩展卡尔曼滤波,也就是EKF,常用于在动态系统中对状态的估计。比如,在机器人领域,EKF则常常用于对状态(位置,方向)的估计,也就是我们常说的数据融合,结合运动模型和观测数据,得到一个比较靠谱的状态估计。
在这里插入图片描述

目录

    • 系统模型
      • 状态方程(描述系统的演变过程)
      • 观测方程(描述如何从系统中获取观测数据)
    • EKF工作步骤
      • 预测步骤
        • 状态预测
        • 协方差预测
      • 更新步骤(Update Step)
        • 计算观测残差
        • 计算卡尔曼增益
        • 3.3 更新状态估计
        • 更新协方差
    • Appendix: 利用雅可比矩阵线性化非线性方程
      • 1. 雅可比矩阵的定义
      • 2. 泰勒展开的一阶近似
      • 3. 线性化状态方程和观测方程
      • 4. 状态方程的线性化
      • 5. 观测方程的线性化
    • Appendix: 卡尔曼增益 K k K_k Kk 的推导过程
      • 1. 观测残差(创新项)
      • 2. 状态更新公式
      • 3. 目标:最小化均方误差
      • 4. 计算协方差矩阵
      • 5. 最小化均方误差
      • 6. 总结

系统模型

在EKF中,运动模型观测模型是非常重要的。我们对运动模型都不陌生,其实就是根据运动学定律对机器人的运动规律进行建模,给定输入,输出会是什么。但是什么是观测模型呢?别着急,下面我们一个个的来解释。

状态方程(描述系统的演变过程)

x k = A x k − 1 + B u k + w k x_k = A x_{k-1} + B u_k + w_k xk=Axk1+Buk+wk

  • x k x_k xk:系统在时刻 k k k 的状态(我们希望估计的变量)。
  • A A A:状态转移矩阵,用于描述系统从上一时刻 k − 1 k-1 k1 到当前时刻 k k k 的状态演变。
  • B B B:控制输入矩阵,用于描述控制输入对系统状态的影响。
  • u k u_k uk:控制输入。
  • w k w_k wk:过程噪声,通常假设为均值为 0 的高斯噪声,表示系统中的不确定性或噪声。

所以,状态方程是利用上一时刻的状态和当前时刻的输入 u u u推导下一时刻的状态。

观测方程(描述如何从系统中获取观测数据)

z k = H x k + v k z_k = H x_k + v_k zk=Hxk+vk

其中:

  • z k z_k zk:时刻 k k k 的观测值(由传感器测量得到的数据)。
  • x k x_k xk:系统在时刻 k k k 的状态(我们希望估计的变量)。
  • H H H:观测矩阵,描述状态 x k x_k xk 和观测值 z k z_k zk 之间的关系。
  • v k v_k vk:观测噪声,通常假设为均值为 0 的高斯噪声,表示观测过程中的不确定性, v k ∼ N ( 0 , R ) v_k \sim N(0,R) vkN(0,R)

所以,观测方程到底是什么?
观测方程通过连接状态变量 x k x_k xk 和观测值 z k z_k zk,使卡尔曼滤波器可以利用传感器的测量数据修正对状态的估计。通过观测方程,系统能够利用测量值来更新状态估计,从而减小预测误差。说的更直白一点,我有一些传感器可以告诉我机器人现在的状态 x k x_k xk,我要搞一个方程,能够让我从观测值 z k z_k zk得到状态 x k x_k xk

举个例子,假设我们正在追踪一辆车的位置和速度,系统的状态向量为:

x k = [ x position x velocity ] x_k = \begin{bmatrix} x_{\text{position}} \\ x_{\text{velocity}} \end{bmatrix} xk=[xpositionxvelocity]

假设我们的传感器只能测量车辆的位置,那么观测方程为:

z k = H x k + v k z_k = H x_k + v_k zk=Hxk+vk

其中,观测矩阵 ( H ) 为:

H = [ 1 0 ] H = \begin{bmatrix} 1 & 0 \end{bmatrix} H=[10]

因此,观测方程变为:

z k = [ 1 0 ] [ x position x velocity ] + v k = x position + v k z_k = \begin{bmatrix} 1 & 0 \end{bmatrix} \begin{bmatrix} x_{\text{position}} \\ x_{\text{velocity}} \end{bmatrix} + v_k = x_{\text{position}} + v_k zk=[10][xpositionxvelocity]+vk=xposition+vk

这意味着观测值 z k z_k zk 是车辆的位置加上观测噪声 v k v_k vk

EKF工作步骤

为什么称之为EKF(extended KF)? 就是因为我们在使用的时候,状态方程和观测方程是非线性的,而不是像上面写的那样的线性方程。

  • 状态方程(非线性):
    x k = f ( x k − 1 , u k ) + w k \mathbf{x}_k = f(\mathbf{x}_{k-1}, \mathbf{u}_k) + \mathbf{w}_k xk=f(xk1,uk)+wk

  • 观测方程(非线性):
    z k = h ( x k ) + v k \mathbf{z}_k = h(\mathbf{x}_k) + \mathbf{v}_k zk=h(xk)+vk

基于上面的两个非线性方程,EKF的工作步骤如下:

预测步骤

状态预测

根据系统的非线性状态方程,利用当前状态 x ^ k − 1 \hat{\mathbf{x}}_{k-1} x^k1 和控制输入 u k \mathbf{u}_k uk 预测下一时刻的状态:

x ^ k − = f ( x ^ k − 1 , u k ) \hat{\mathbf{x}}_k^- = f(\hat{\mathbf{x}}_{k-1}, \mathbf{u}_k) x^k=f(x^k1,uk)

协方差预测

计算状态预测的不确定性。首先,线性化状态方程,计算雅可比矩阵 F k − 1 F_{k-1} Fk1,然后利用它预测状态协方差:

P k − = F k − 1 P k − 1 F k − 1 T + Q \mathbf{P}_k^- = F_{k-1} \mathbf{P}_{k-1} F_{k-1}^T + Q Pk=Fk1Pk1Fk1T+Q

其中:

  • F k − 1 = ∂ f ∂ x ∣ x ^ k − 1 , u k F_{k-1} = \frac{\partial f}{\partial \mathbf{x}} \Big|_{\hat{\mathbf{x}}_{k-1}, \mathbf{u}_k} Fk1=xf x^k1,uk:状态方程的雅可比矩阵。
  • Q Q Q:过程噪声的协方差矩阵。

这里需要讲一下,为什么会有协方差矩阵? 在卡尔曼滤波中,协方差矩阵 ( P ) 是用来表示状态估计的不确定性的。它反映了系统状态估计的方差和不同状态变量之间的相关性。协方差矩阵通常定义为状态估计误差的协方差:

P k = E [ ( x ^ k − x k ) ( x ^ k − x k ) T ] P_k = \mathbb{E} \left[ (\hat{x}_k - x_k)(\hat{x}_k - x_k)^T \right] Pk=E[(x^kxk)(x^kxk)T]

其中:

  • x ^ k \hat{x}_k x^k 是在时刻 (k) 的状态估计。
  • x k x_k xk 是真实的状态。
  • P k P_k Pk 的对角元素表示状态估计的方差,而非对角元素表示状态变量之间的相关性

那什么需要对这个协方差矩阵进行预测呢?
(1)评估系统的估计不确定性

协方差矩阵的预测反映了对状态预测的不确定性。如果协方差矩阵较小,意味着系统对状态的预测更精确;如果协方差矩阵较大,则表示系统对状态的预测不确定性较大。

  • P k − P_k^- Pk 较小,表示对系统状态的预测非常可靠。
  • P k − P_k^- Pk 较大,表示状态预测存在较大的不确定性。

(2)融合观测值和预测值

在卡尔曼滤波的更新步骤中,协方差矩阵用于计算卡尔曼增益,卡尔曼增益用于平衡观测值与预测值:

K k = P k − H k T ( H k P k − H k T + R ) − 1 K_k = P_k^- H_k^T (H_k P_k^- H_k^T + R)^{-1} Kk=PkHkT(HkPkHkT+R)1

  • 当协方差矩阵 P k − P_k^- Pk 较大时,卡尔曼增益 K k K_k Kk 会增大,滤波器将更多依赖观测值来修正状态估计。
  • 当协方差矩阵 P k − P_k^- Pk 较小时,卡尔曼增益 K k K_k Kk 会较小,滤波器将更多依赖状态预测。

(3)传播过程噪声

协方差矩阵的预测公式中,过程噪声协方差矩阵 Q Q Q反映了系统中的随机扰动或噪声。随着状态预测的进行,噪声可能会对状态估计产生影响,因此我们需要在协方差矩阵中加入这些噪声。

P k − = F k − 1 P k − 1 F k − 1 T + Q P_k^- = F_{k-1} P_{k-1} F_{k-1}^T + Q Pk=Fk1Pk1Fk1T+Q

通过这个过程,协方差矩阵考虑了系统噪声对状态预测的不确定性影响。

(4)动态调整不确定性

协方差矩阵不仅反映当前时刻的估计不确定性,还会随着时间不断更新。每当有新观测值时,协方差矩阵会被更新,以反映状态估计和观测的最新不确定性。

(5)协方差矩阵的更新

在卡尔曼滤波的更新步骤中,协方差矩阵也会随着状态的修正而调整。更新后的协方差矩阵公式如下:

P k = ( I − K k H k ) P k − P_k = (I - K_k H_k) P_k^- Pk=(IKkHk)Pk

更新后的协方差矩阵反映了结合观测值后的状态估计的不确定性。

更新步骤(Update Step)

计算观测残差

获取观测值 z k \mathbf{z}_k zk,通过非线性观测方程计算预测的观测值 h ( x ^ k − ) h(\hat{\mathbf{x}}_k^-) h(x^k),然后计算观测残差:

y k = z k − h ( x ^ k − ) \mathbf{y}_k = \mathbf{z}_k - h(\hat{\mathbf{x}}_k^-) yk=zkh(x^k)

计算卡尔曼增益

首先,线性化观测方程,计算雅可比矩阵 H k H_k Hk,然后计算卡尔曼增益 K k K_k Kk

K k = P k − H k T ( H k P k − H k T + R ) − 1 K_k = \mathbf{P}_k^- H_k^T (H_k \mathbf{P}_k^- H_k^T + R)^{-1} Kk=PkHkT(HkPkHkT+R)1

其中:

  • H k = ∂ h ∂ x ∣ x ^ k − H_k = \frac{\partial h}{\partial \mathbf{x}} \Big|_{\hat{\mathbf{x}}_k^-} Hk=xh x^k:观测方程的雅可比矩阵。
  • R R R:观测噪声的协方差矩阵。
3.3 更新状态估计

利用卡尔曼增益 K k K_k Kk修正状态预测 x ^ k − \hat{\mathbf{x}}_k^- x^k,得到更新后的状态估计:

x ^ k = x ^ k − + K k y k \hat{\mathbf{x}}_k = \hat{\mathbf{x}}_k^- + K_k \mathbf{y}_k x^k=x^k+Kkyk

更新协方差

更新状态协方差矩阵,以反映状态估计的不确定性:

P k = ( I − K k H k ) P k − \mathbf{P}_k = (\mathbf{I} - K_k H_k) \mathbf{P}_k^- Pk=(IKkHk)Pk

总结

  1. 预测步骤

    • 通过非线性状态方程预测系统的状态 $ \hat{\mathbf{x}}_k^-$。
    • 通过线性化状态方程(使用雅可比矩阵 F k − 1 F_{k-1} Fk1)预测协方差 P k − \mathbf{P}_k^- Pk
  2. 更新步骤

    • 通过非线性观测方程计算预测的观测值。
    • 计算观测残差 y k \mathbf{y}_k yk
    • 通过线性化观测方程(使用雅可比矩阵 H k H_k Hk)计算卡尔曼增益 K k K_k Kk
    • 利用观测值更新状态估计 x ^ k \hat{\mathbf{x}}_k x^k 和协方差 P k \mathbf{P}_k Pk

Appendix: 利用雅可比矩阵线性化非线性方程

在扩展卡尔曼滤波(EKF)中,非线性系统的状态方程和观测方程无法直接应用于经典卡尔曼滤波器的线性框架。因此,我们需要通过 雅可比矩阵 将非线性函数 局部线性化,以便在滤波过程中使用。这种线性化过程通过 泰勒展开 的一阶近似来实现。

1. 雅可比矩阵的定义

对于一个非线性函数 f ( x ) f(\mathbf{x}) f(x),其 雅可比矩阵 是函数对每个状态变量的偏导数矩阵,表示该函数在某个点上的局部线性变化情况。雅可比矩阵的定义如下:

J f ( x ) = ∂ f ∂ x = [ ∂ f 1 ∂ x 1 ∂ f 1 ∂ x 2 ⋯ ∂ f 1 ∂ x n ∂ f 2 ∂ x 1 ∂ f 2 ∂ x 2 ⋯ ∂ f 2 ∂ x n ⋮ ⋮ ⋱ ⋮ ∂ f m ∂ x 1 ∂ f m ∂ x 2 ⋯ ∂ f m ∂ x n ] J_f(\mathbf{x}) = \frac{\partial f}{\partial \mathbf{x}} = \begin{bmatrix} \frac{\partial f_1}{\partial x_1} & \frac{\partial f_1}{\partial x_2} & \cdots & \frac{\partial f_1}{\partial x_n} \\ \frac{\partial f_2}{\partial x_1} & \frac{\partial f_2}{\partial x_2} & \cdots & \frac{\partial f_2}{\partial x_n} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial f_m}{\partial x_1} & \frac{\partial f_m}{\partial x_2} & \cdots & \frac{\partial f_m}{\partial x_n} \end{bmatrix} Jf(x)=xf= x1f1x1f2x1fmx2f1x2f2x2fmxnf1xnf2xnfm

其中:

  • f ( x ) f(\mathbf{x}) f(x) 是一个从 n n n 维状态空间到 m m m 维观测空间的非线性函数。
  • x = [ x 1 , x 2 , … , x n ] T \mathbf{x} = [x_1, x_2, \dots, x_n]^T x=[x1,x2,,xn]T 是系统的状态向量。
  • 每个元素 ∂ f i ∂ x j \frac{\partial f_i}{\partial x_j} xjfi 是函数 f i ( x ) f_i(\mathbf{x}) fi(x) 对状态变量 x j x_j xj 的偏导数。

2. 泰勒展开的一阶近似

为了将非线性函数线性化,我们通常使用 泰勒展开 对函数进行近似。对于非线性函数 f ( x ) f(\mathbf{x}) f(x),我们可以在某个参考点 x 0 \mathbf{x}_0 x0 处做泰勒展开,并忽略高阶项,仅保留一阶近似:

f ( x ) ≈ f ( x 0 ) + J f ( x 0 ) ( x − x 0 ) f(\mathbf{x}) \approx f(\mathbf{x}_0) + J_f(\mathbf{x}_0) (\mathbf{x} - \mathbf{x}_0) f(x)f(x0)+Jf(x0)(xx0)

其中:

  • f ( x 0 ) f(\mathbf{x}_0) f(x0) 是在参考点 x 0 \mathbf{x}_0 x0 处的函数值。
  • J f ( x 0 ) J_f(\mathbf{x}_0) Jf(x0) 是在参考点 x 0 \mathbf{x}_0 x0 处的雅可比矩阵。
  • ( x − x 0 ) (\mathbf{x} - \mathbf{x}_0) (xx0) 是状态偏差。

通过这一展开式,非线性函数在参考点附近被近似为线性函数。

3. 线性化状态方程和观测方程

在扩展卡尔曼滤波器中,我们需要线性化以下两个非线性方程:

  • 状态方程:

x k = f ( x k − 1 , u k ) + w k \mathbf{x}_k = f(\mathbf{x}_{k-1}, \mathbf{u}_k) + \mathbf{w}_k xk=f(xk1,uk)+wk

  • 观测方程:

z k = h ( x k ) + v k \mathbf{z}_k = h(\mathbf{x}_k) + \mathbf{v}_k zk=h(xk)+vk

其中:

  • f ( x k − 1 , u k ) f(\mathbf{x}_{k-1}, \mathbf{u}_k) f(xk1,uk) 是状态转移的非线性函数。
  • h ( x k ) h(\mathbf{x}_k) h(xk) 是从状态到观测值的非线性映射函数。

4. 状态方程的线性化

为了将状态方程线性化,我们对函数 f ( x k − 1 , u k ) f(\mathbf{x}_{k-1}, \mathbf{u}_k) f(xk1,uk) 在当前状态 x ^ k − 1 \hat{\mathbf{x}}_{k-1} x^k1 处进行泰勒展开,并求取雅可比矩阵 F k − 1 F_{k-1} Fk1,即对 x k − 1 \mathbf{x}_{k-1} xk1 求偏导:

F k − 1 = ∂ f ( x k − 1 , u k ) ∂ x k − 1 ∣ x ^ k − 1 F_{k-1} = \frac{\partial f(\mathbf{x}_{k-1}, \mathbf{u}_k)}{\partial \mathbf{x}_{k-1}} \Big|_{\hat{\mathbf{x}}_{k-1}} Fk1=xk1f(xk1,uk) x^k1

此时,线性化后的状态方程为:

x ^ k − = f ( x ^ k − 1 , u k ) \hat{\mathbf{x}}_k^- = f(\hat{\mathbf{x}}_{k-1}, \mathbf{u}_k) x^k=f(x^k1,uk)

预测的协方差矩阵为:

P k − = F k − 1 P k − 1 F k − 1 T + Q P_k^- = F_{k-1} P_{k-1} F_{k-1}^T + Q Pk=Fk1Pk1Fk1T+Q

其中, Q Q Q 是过程噪声协方差矩阵。

5. 观测方程的线性化

同样地,为了将观测方程线性化,我们对函数 h ( x k ) h(\mathbf{x}_k) h(xk) 在当前状态 x ^ k − \hat{\mathbf{x}}_k^- x^k 处进行泰勒展开,并求取雅可比矩阵 H k H_k Hk,即对 x k \mathbf{x}_k xk 求偏导:

H k = ∂ h ( x k ) ∂ x k ∣ x ^ k − H_k = \frac{\partial h(\mathbf{x}_k)}{\partial \mathbf{x}_k} \Big|_{\hat{\mathbf{x}}_k^-} Hk=xkh(xk) x^k

线性化后的观测方程为:

z ^ k = h ( x ^ k − ) \hat{\mathbf{z}}_k = h(\hat{\mathbf{x}}_k^-) z^k=h(x^k)

协方差矩阵更新步骤中的卡尔曼增益为:

K k = P k − H k T ( H k P k − H k T + R ) − 1 K_k = P_k^- H_k^T (H_k P_k^- H_k^T + R)^{-1} Kk=PkHkT(HkPkHkT+R)1

其中, R R R 是观测噪声协方差矩阵。

总结

通过雅可比矩阵,我们可以将非线性函数在局部线性化,使其能够应用于卡尔曼滤波的线性框架。具体步骤如下:

  1. 对状态方程和观测方程进行泰勒展开,并只保留一阶项。
  2. 计算雅可比矩阵,用以近似线性系统。
  3. 在扩展卡尔曼滤波器中,利用线性化的方程进行预测和更新。

Appendix: 卡尔曼增益 K k K_k Kk 的推导过程

卡尔曼增益 K k K_k Kk 是卡尔曼滤波器中的关键参数,它决定了如何平衡预测值和观测值,使状态估计达到最优。我们通过最小化观测值和预测值之间的误差来推导出卡尔曼增益。

1. 观测残差(创新项)

首先,我们定义观测残差,它表示实际观测值与预测观测值之间的差异:

y k = z k − H k x ^ k − y_k = z_k - H_k \hat{x}_k^- yk=zkHkx^k

其中:

  • y k y_k yk 是观测残差(创新项),表示观测值与预测观测值的差异。
  • z k z_k zk 是时刻 k k k实际观测值,由传感器直接测量得到。
  • x ^ k − \hat{x}_k^- x^k 是时刻 k k k状态预测值注意这里和观测模型中的 x k x_k xk真实值不一样
  • H k H_k Hk 是观测模型的雅可比矩阵,用于将状态空间映射到观测空间。

2. 状态更新公式

状态更新公式表示我们如何根据观测残差 y k y_k yk 修正预测状态 x ^ k − \hat{x}_k^- x^k,得到更新后的状态估计 x ^ k \hat{x}_k x^k

x ^ k = x ^ k − + K k y k \hat{x}_k = \hat{x}_k^- + K_k y_k x^k=x^k+Kkyk

其中:

  • x ^ k \hat{x}_k x^k 是更新后的状态估计。
  • K k K_k Kk卡尔曼增益,它决定了我们应该在多大程度上依赖观测残差来修正预测状态。

3. 目标:最小化均方误差

我们希望通过选择合适的卡尔曼增益 K k K_k Kk最小化状态估计的均方误差(MSE)。均方误差定义为:

E [ ( x k − x ^ k ) ( x k − x ^ k ) T ] \mathbb{E} \left[ (x_k - \hat{x}_k)(x_k - \hat{x}_k)^T \right] E[(xkx^k)(xkx^k)T]

将状态更新公式 x ^ k = x ^ k − + K k y k \hat{x}_k = \hat{x}_k^- + K_k y_k x^k=x^k+Kkyk 代入这个均方误差中,展开后得到:

E [ ( x k − ( x ^ k − + K k y k ) ) ( x k − ( x ^ k − + K k y k ) ) T ] \mathbb{E} \left[ (x_k - (\hat{x}_k^- + K_k y_k))(x_k - (\hat{x}_k^- + K_k y_k))^T \right] E[(xk(x^k+Kkyk))(xk(x^k+Kkyk))T]

展开括号后可以得到:

E [ ( ( x k − x ^ k − ) − K k ( z k − H k x ^ k − ) ) ( ( x k − x ^ k − ) − K k ( z k − H k x ^ k − ) ) T ] \mathbb{E} \left[ \left((x_k - \hat{x}_k^-) - K_k (z_k - H_k \hat{x}_k^-)\right)\left((x_k - \hat{x}_k^-) - K_k (z_k - H_k \hat{x}_k^-)\right)^T \right] E[((xkx^k)Kk(zkHkx^k))((xkx^k)Kk(zkHkx^k))T]

其中, ( x k − x ^ k − ) (x_k - \hat{x}_k^-) (xkx^k) 是预测误差, ( z k − H k x ^ k − ) (z_k - H_k \hat{x}_k^-) (zkHkx^k) 是观测残差。

4. 计算协方差矩阵

我们定义预测误差协方差为 P k − P_k^- Pk,观测噪声协方差为 R R R,这样就可以表示误差项的期望值。对于 y k = z k − H k x ^ k − y_k = z_k - H_k \hat{x}_k^- yk=zkHkx^k,它的协方差为:

S k = H k P k − H k T + R S_k = H_k P_k^- H_k^T + R Sk=HkPkHkT+R

其中:

  • S k S_k Sk 是观测残差的协方差矩阵,表示我们对观测残差的不确定性。
  • P k − P_k^- Pk 是预测状态的协方差矩阵。
  • R R R 是观测噪声的协方差矩阵。

5. 最小化均方误差

为了最小化均方误差,我们对卡尔曼增益 K k K_k Kk 进行优化。我们可以通过对误差项对 K k K_k Kk 求导,并设导数为 0 来找到最优解。最终,最优的卡尔曼增益 K k K_k Kk 通过下列公式表示:

K k = P k − H k T S k − 1 K_k = P_k^- H_k^T S_k^{-1} Kk=PkHkTSk1

由于 S k = H k P k − H k T + R S_k = H_k P_k^- H_k^T + R Sk=HkPkHkT+R,因此卡尔曼增益的完整形式为:

K k = P k − H k T ( H k P k − H k T + R ) − 1 K_k = P_k^- H_k^T (H_k P_k^- H_k^T + R)^{-1} Kk=PkHkT(HkPkHkT+R)1

6. 总结

卡尔曼增益 K k K_k Kk 的推导步骤如下:

  1. 定义观测残差 y k = z k − H k x ^ k − y_k = z_k - H_k \hat{x}_k^- yk=zkHkx^k
  2. 状态更新公式 x ^ k = x ^ k − + K k y k \hat{x}_k = \hat{x}_k^- + K_k y_k x^k=x^k+Kkyk
  3. 目标:最小化均方误差 E [ ( x k − x ^ k ) ( x k − x ^ k ) T ] \mathbb{E} \left[ (x_k - \hat{x}_k)(x_k - \hat{x}_k)^T \right] E[(xkx^k)(xkx^k)T]
  4. 计算残差协方差 S k = H k P k − H k T + R S_k = H_k P_k^- H_k^T + R Sk=HkPkHkT+R
  5. 推导卡尔曼增益 K k = P k − H k T ( H k P k − H k T + R ) − 1 K_k = P_k^- H_k^T (H_k P_k^- H_k^T + R)^{-1} Kk=PkHkT(HkPkHkT+R)1

最终,卡尔曼增益 K k K_k Kk 是通过最小化实际观测值和预测观测值之间的误差推导得到的,它用于平衡状态预测和观测数据,使得状态估计最优。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2179403.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vscode使用yarn 启动vue项目记录

第一次启动yarn项目,这个是公司的老项目,遇到了点问题,记录下首先是我一般使用的是npm命令,所以没有安装yarn vscode安装yarn vscode进入到该项目文件夹下,输入命令:npm install -g yarn 安装成功后&…

河南人社厅:注册满两年可按条件认定副高

河南省工程系列建筑专业中高级职称 申报评审标准 总则 一、为培养造就高素质、社会化的工程建设领域专业技术人才队伍,充分发挥工程建设领域专业技术人才在科技发展和经济建设中的作用,推动技术创新、科技成果转化和实现高新技术产业化,根据…

CSS给一行按钮统一设置间隔

使用css的&#xff0b;&#xff08;相邻兄弟选择器&#xff09;&#xff0c;找到指定元素后面的相邻元素。 <div class"btn-list"><button class"btn">按钮1</button><button class"btn">按钮2</button><butto…

Arthas memory(查看 JVM 内存信息)

文章目录 二、命令列表2.1 jvm相关命令2.1.11 memory&#xff08;查看 JVM 内存信息&#xff09;举例1&#xff1a;查看 JVM 内存信息 本人其他相关文章链接 二、命令列表 2.1 jvm相关命令 2.1.11 memory&#xff08;查看 JVM 内存信息&#xff09; 基本用法&#xff1a; mem…

第一讲-环境安装

PyCharm安装 官网下载 https://www.jetbrains.com/pycharm/ 点击Download跳转到下载界面,会有专业版跟社区版两个选择,专业版需要购买,可自行在淘宝上买个激活码。一般开发社区版够用了。 这是专业版: 这是社区版:

WinRAR技巧:如何给多个压缩包设置同一个密码

RAR压缩包是大家经常使用的文件&#xff0c;并且可以进行加密&#xff0c;也是一种文件加密方式&#xff0c;那么当你有很多文件都需要压缩加密&#xff0c;b并且想要设置同一个密码&#xff0c;防止以后忘记密码&#xff0c;该如何高效的完成这个工作呢&#xff1f;今天分享如…

vue2中使用tailwindCss 详细教程

1、先看官方文档&#xff1a;https://www.tailwindcss.cn/ 2、先安装&#xff1a;npm install -D tailwindcss ---------------通过 npm 安装 tailwindcss&#xff0c;然后创建你自己的 create your tailwind.config.js 配置文件。 npm install -D tailwindcss 3、初始化文件…

解决Java调用通义接口出现依赖爆红与API-key找不到(日常小记)

1.依赖dashscope-sdk-java爆红 解决方法&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>dashscope-sdk-java</artifactId><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId…

跑批系统设计

需求分析 将大批量的数据&#xff0c;从一个地方&#xff0c;迁移到另外一个地方&#xff0c;如何处理 主要的涉及到的问题 亿级数据怎么存怎么防止重复调度怎么做到负载均衡同一个节点&#xff0c;任务怎么并行如何动态调整并发度机器节点挂了怎么办 概要设计 数据存储 …

springboot整合MybatisPlus+MySQL

上一篇&#xff1a;springboot整合sentinel和对feign熔断降级 文章目录 一、准备二、主要工作三、具体步骤3.1 准备数据库环境3.20 pre引入依赖3.2 引入依赖3.3 bootstrap.yml配置mybatisplus3.40 pre引入service、mapper3.4 引入实体类、service、mapper 四、测试目录结构 五…

数据结构 ——— 单链表oj题:移除链表中所有 val 的元素

目录 题目要求 手搓简易单链表 代码实现 题目要求 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回新的头节点 手搓简易单链表 在实现以上逻辑函数前&#xff0c;要先手搓一个单链表出来&#xff…

iOS--App启动过程及优化

前言 App启动是用户对于一个app的第一印象&#xff0c;因此如何使用户在最短的时间打开进入app显得格外重要。启动优化因此成为了App调优至关重要的一项。 只有具体了解了App的启动过程&#xff0c;我们才能对其进行优化。 App启动过程 App启动分为冷启动和热启动 热启动&…

公司申请商标注册需要什么材料

申请商标注册的&#xff0c;应当向商标局提交《商标注册申请书》及其它文件&#xff0c;具体要求是&#xff1a; 1、申请人必须按一类商品一件商标一份申请的原则&#xff0c;提交《商标注册申请书》一份。也即一份申请书上填报的商品或服务只能限定在《商标注册用商品和服务国…

Debian 配置 Python 开发与运行环境

配置 Python 开发与运行环境。 1.3.1. Debian下的安装与配置 Debian 是一个致力于自由软件开发并宣扬自由软件基金会理念的自愿者组织。 Debian 计划创建于 1993 年。当时&#xff0c;Ian Murdock 发出一份公开信&#xff0c; 邀请软件开发者们参与构建一个基于较新的 Linux …

Java8/9/10/11新特性

目录 一、 Lambda表达式二、函数式(Functional)接口三、方法引用与构造器引用3.1、方法引用3.2 构造器引用和数组引用3.2.1 构造器引用3.2.2 数组引用 四、 强大的Stream API4.1 Stream API说明4.2 Stream 的操作三个步骤4.3 创建 Stream方式4.4 、Stream 的中间操作4.4.1 筛选…

Python | Leetcode Python题解之第447题回旋镖的数量

题目&#xff1a; 题解&#xff1a; class Solution:def numberOfBoomerangs(self, points: List[List[int]]) -> int:ans 0for p in points:cnt defaultdict(int)for q in points:dis (p[0] - q[0]) * (p[0] - q[0]) (p[1] - q[1]) * (p[1] - q[1])cnt[dis] 1for m i…

使用DolphinScheduler调度实现sqoop增量导入时遇到 Caused by:Class QueryResult not found 错误解决

解决方法&#xff1a; 拷贝一个 QueryResult.jar 到 sqoop 的 lib 下 【临时解决方案】 报错信息中有一个相关路径&#xff01;拷贝该路径下的QueryResult.jar到sqoop的lib下&#xff1a; cp /tmp/sqoop-root/compile/dc8e6e7d48be670d676323bf76fd9fe9/QueryResult.jar /op…

通信工程师笔记

第一章 1.支撑网是使业务网正常运行,增强网络功能,提供全网服务质量以满足用户要求的网络。 2.常见的有线通信线路包括&#xff08;1&#xff09;双绞线&#xff0c;&#xff08;2&#xff09;同轴电缆&#xff0c;&#xff08;3&#xff09;光纤等&#xff0c;无线通信线路是…

过渡到内存安全语言:挑战和注意事项

开放源代码安全基金会 ( OpenSSF )总经理 Omkhar Arasaratnam 讨论了内存安全编程语言的演变及其为应对 C 和 C 等语言的局限性而出现的现象。 内存安全问题已存在五十多年&#xff0c;它要求程序员从内存管理任务中抽离出来。 Java、Rust、Python 和 JavaScript 等现代语言通…

NLP_情感分类_机器学习(w2v)方案

文章目录 项目背景数据清洗导包导入数据切分评论及标签Word2Vec构造w2v 数据切分模型训练查看结果 同类型项目 项目背景 项目的目的&#xff0c;是为了对情感评论数据集进行预测打标。在训练之前&#xff0c;需要对数据进行数据清洗环节&#xff0c;前面已对数据进行清洗&…