卡尔曼滤波器从入门到放弃

2023-05-16

 

目录

 

前言

【个人总结】

【总结卡尔曼滤波器使用流程】

【从一维卡尔曼滤波器】

         【不带过程噪声的一维卡尔曼滤波器】

EXAMPLE 5 – ESTIMATING THE HEIGHT OF A BUILDING

数值例子:

【一维卡尔曼滤波器的完整模型-带过程噪声】

数值例子

示例 7 – 估计加热液体的温度

示例 8 – 估计加热液体的温度Ⅱ

多维卡尔曼滤波器

矩阵相关知识回顾:

卡尔曼滤波器的五个方程:

        示例 - 飞机 - 无控制输入

示例 - 带有控制输入的飞机

 示例 - 自由下落的物体

LINEAR TIME-INVARIANT SYSTEMS

示例:等速移动体

 示例:恒加速度运动体

示例续:等速运动体 

协方差外推方程:

在没有过程噪声时估计不确定的推导:

 在有过程噪声时估计不确定的推导:

离散噪声模型

 如何选择噪声模型?

测量方程

中间总结

 

协方差更新方程

卡尔曼增益方程

简化的协方差更新方程:

卡尔曼滤波器总结

【用自己的话表达卡尔曼滤波器使用流程】

使用多维卡尔曼滤波器的实例:

 测量方程

 测量的不确定性


前言

本文翻译自以色列工程师Alex Becker的博客Kalman Filter Tutorial

        卡尔曼滤波器是一个简单的话题。但是,许多书籍和教程并不容易理解。大多数都需要广泛的数学背景,并且缺乏实际的数值示例,本文的目的就是通过数值实例来推导和理解卡尔曼滤波器。并教你怎么设置对应的参数,为什么如此设置。

【个人总结】

【总结卡尔曼滤波器使用流程】

1.第一步,我们根据前一时刻的状态X和前一时刻的估计不确定性P,根据系统的模型,包括是否带有控制,系统的微分方程得到系统的外推方程,通过系统模型,来估计下一时刻的状态。

这包含的输入为前提条件:初始估计X(先验)和初始估计的不确定性P。初始估计的不确定维度和状态维度一致。反映出每一个状态的估计不确定性(方差)。

需要计算的:建立微分方程,获得外推方程的状态转移矩阵F控制矩阵G

2.估计系统的过程噪声,过程噪声的设定,是选用离散形式还是连续形式,其值怎么确定?

3.根据状态转移矩阵和过程噪声,外推当前状态的估计不确定。

4.然后计算卡尔曼增益

5.得到卡尔曼增益之后,就能够结合当前预测的估计当前的观测值,得到加权后的估计(后验,和这个观测条件结果有关)。

6.得到后验之后,同时更新后验状态估计的不确定性P。

【从一维卡尔曼滤波器】

不带过程噪声的一维卡尔曼滤波器:

前面我们学习了卡尔曼滤波器五个方程的其中两个:

  • 状态更新方程;
  • 动态模型递推方程;

回顾前面的金条例子,我们多次测量求平均值。

        在上图中,可以看到真值,估计值、测量值和测量数量。

        测量值与真值之间的差值为测量误差,如蓝色和绿色曲线所示。因为测量误差是随机的,我们将其建模为0均值的高斯分别,方差为\sigma ^{2},即为测量的不确定性,此方差能够通过标定的方式获取或者供应商提供

        我们将测量不确定度表示为r。估计值(红线)和真实值(绿线)之间的差异是估计误差。正如你所看到的,随着我们进行额外的测量,估计误差变得越来越小,并且它向0收敛,而估计值向真实值收敛。我们不知道估计误差,但我们可以估计在估计中的不确定性。将估计不确定性表示为p。

下图显示了金条重量的十个测量值。

  • 蓝色圆圈描述了测量值。
  • 真实值由红色虚线描述。
  • 绿线描述了测量的概率密度函数。
  • 粗体绿色区域是标准差 (σ) 的测量值,即测量值位于该区域内的概率为 68.26%。

如您所见,10 个测量值中有 8 个足够接近真实值。它位于1 σ边界。

 卡尔曼增益方程的直观推导

        卡尔曼增益(表示为K_n) 是赋予当前状态估计和测量值的权重。不像α-β-γ参数,为每个滤波器迭代动态计算卡尔曼增益。

        在一维中,卡尔曼增益方程如下:

 0\leq K_n \leq1

重写更新方程:

\hat{x}_{n,n}=\hat{x}_{n,n-1}+K_n(z_n-\hat{x}_{n,n-1})=(1-K_n)\hat{x}_{n,n-1}+K_nz_n

        可以看到K_n是测量值的权重,(1-K_n)为当前状态估计的权重,通过前面的数据预测当前时刻的状态。当测量不确定性很大,估计的不确定小的时候,卡尔曼增益接近0,因此我们给很大权重给状态估计,很小的权重给观测。若测量不确定性很小,估计的不确定性很大时,即卡尔曼增益接近1,这时给很大权重给观测,很小权重给预测。

卡尔曼滤波器是最优的因为他最小化估计的不确定性。

一维的估计的不确定更新

         上式称为协方差更新方程。很明显的就是状态的不确定性在经过迭代之后是逐渐缩小的,因为(1-K_n)\leq 1若测量的不确定较大,卡尔曼增益就比较小,因而估计的协方差收敛的比较慢。当测量的不确定较小,那么卡尔曼增益就比较大,估计的不确定就会很快收敛到0。

估计的不确定外推

和状态外推一样,估计的不确定性外推是通过动态模型方程进行的。

如在第二个例子中,预测方程为

 

那么它的状态不确定外推就是

估计的不确定外推方程又称为协方差外推方程

滤波器的输入为:

  • Initialization

 初始化只做一次,它提供两个参数:其一为初始的状态;其二为初始的不确定性。初始值的提供可以从别的系统而来。

  • Measurement

输出为:

  • System State Estimate
  • Estimate Uncertainty

以下为卡尔曼滤波器的五个方程:

EXAMPLE 5 – ESTIMATING THE HEIGHT OF A BUILDING

        假设我们想使用一个非常不精确的高度计来估计建筑物的高度

数值例子:

  • 真实建筑高度为50米。
  • 高度计测量误差(标准偏差)为 5 米。
  • 十个测量值分别为:48.54m、47.11m、55.01m、55.15m、49.89m、40.85m、46.72m、50.05m、51.27m、49.95m。

迭代0次:初始化:看一眼估算出建筑物高度 估计为60米。\hat{x}_{0,0}=60

现在我们将初始化估计不确定性。一个人的估计误差(标准差)约为 15 米:σ= 15. 因此方差为 225:\sigma ^{^{2}} = 225\hat{p}_{0,0}=225

预测:根据初始化值预测下一个状态。由于我们系统的动态模型是恒定的,即建筑物不会改变其高度。

\hat{x}_{1,0}=\hat{x}_{0,0}=60

\hat{p}_{1,0}=\hat{p}_{0,0}=225

第一次迭代

第一个测量是:z1= 48.54米,由于标准差 (σ) 的高度计测量误差为 5\sigma ^{^{2}} = 25,因此测量的不确定度为r_1=25

第二步更新:k_1=\frac{p_{1,0}}{p_{1,0}+r_1}=\frac{225}{225+25}=0.9,依次进行计算可得如下曲线图

估计值在 7 次测量后收敛到约 49.5 米。

下图比较了测量不确定度和估计不确定度。

         在第一次滤波器迭代中,估计不确定度接近测量不确定度并迅速降低。10 次测量后,估计不确定度 (σ2) 为 2.47,即估计误差标准差为:σ=1.57米。

下图显示了卡尔曼增益:

卡尔曼增益正在减少,使测量权重越来越小 。卡尔曼滤波器使用的初始值并不精确。因此,状态更新方程中的测量权重较高,估计不确定性较高。每次迭代,测量权重较低;因此,估计的不确定性较低。

【一维卡尔曼滤波器的完整模型-带过程噪声】

        我们需要将过程噪声变量添加到协方差外推方程中。

过程噪声PROCESS NOISE

        在现实世界中,系统动态模型存在不确定性。例如,当我们要估计电阻器的电阻值时,我们假设一个恒定的动态模型,即电阻在测量之间没有变化。但是,由于环境温度的波动,电阻会略有变化。用雷达跟踪弹道导弹时,动态模型的不确定性包括目标加速度的随机变化。由于可能的飞机机动,不确定性对于飞机来说更为显著。另一方面,当我们使用 GPS 接收器估计静态对象的位置时,动态模型的不确定性为零,因为静态对象不移动。动态模型的不确定性称为过程噪声。也称为模型噪声和系统噪声。

带上过程噪声得协方差外推方程为:

p_{n+1,n}=p_{n,n}+q_n,其中q_n为过程噪声

那么卡尔曼的五个方程分别就变成了

示例 6 – 估计罐中液体的温度

我们想估计罐中液体的温度:

        我们假设在稳定状态下,液体温度是恒定的。然而,真实液体温度的一些波动是可能的。我们可以通过以下等式来描述系统动态模型:

x_n=T+\omega_n ,\omega_n为方差为q的随机噪声。

数值例子

  • 让我们假设真实温度为 50 摄氏度。
  • 我们假设模型是准确的。因此我们设置过程噪声方差(q) 到 0.0001。
  • 测量误差(标准偏差)为 0.1 摄氏度。
  • 每 5 秒进行一次测量。
  • 测量值为:49.95℃, 49.967℃, 50.1℃, 50.106℃, 49.992℃, 49.819℃, 49.933℃, 50.007℃, 50.023℃ 和 49.99℃。

迭代0次

初始化:设置初始状态和初始估计不确定性

我们猜测温度为10℃,即\hat{x}_{0,0}=10,我们猜测的不准确,因此设置我们的不确定度的误差

σ到 100,即初始不确定性Estimate Uncertainty\sigma ^{2} = p_{0,0}=100^{2}=10000

这个方差非常大。如果我们使用更有意义的值进行初始化,我们会获得更快的卡尔曼滤波器收敛。

预测:现在,我们将根据初始化值预测下一个状态。由于我们的模型具有恒定的动态,因此预测估计值等于当前估计值:

\hat{x}_{1,0}=10

外推估计的不确定性:

p_{1,0}=p_{0,0}+q=10000.0001

第1次迭代

第 1 步 - 测量--测量值:z_1=49.95,由于测量误差为0.1(\sigma),因此方差为\sigma ^{2}为0.01;因此测量的不确定度为r_1=0.01

第 1 步 - 更新-卡尔曼增益计算

k_1=\frac{p_{1,0}}{p_{1,0}+r_1}=\frac{10000.0001}{10000.0001+0.01}=0.9999999

可以看到卡尔曼增益非常接近1,也就是我们估计的误差远大于测量误差,因此估计的权重可以忽略不计,而测量权重几乎也为1。

\hat{x}_{1,1}=\hat{x}_{1,0}+k_1(z_1-\hat{x}_{1,0})=10+0.999999(49.95-10)=49.95

更新当前估计不确定性:

p_{n,n}=(1-K_n)p_{n,n-1}=(1-0.999999)\cdot 10000.0001=0.01

外推估计不确定性(方差)为

p_{2,1}=p_{1,1}+q=0.01+0.0001=0.0101

第2次迭代

第 1 步 - 测量--测量值:z_2=49.967,由于测量误差为0.1(\sigma),因此方差为\sigma ^{2}为0.01;因此测量的不确定度为r_2=0.01

第 2 步 - 更新

 k_2=\frac{p_{2,1}}{p_{2,1}+r_2}=\frac{0.0101}{0.0101+0.01}=0.5

如此继续...,

        卡尔曼增益正在下降,使测量权重越来越小。估计的不确定性迅速下降。10 次测量后,估计不确定度 (σ2) 为 0.0013,即估计误差标准差为:0.036℃。

示例 7 – 估计加热液体的温度

在这种情况下,系统的动态模型不是恒定的 - 液体以 0.1 的速率加热℃/s。

但是我们按照上述例子的模型,还是认为系统的动态模型是恒定的,即有:

  • 我们假设模型是准确的。因此我们设置过程噪声方差(q) 到 0.0001。
  • 测量误差(标准偏差)为 0.1℃.
  • 每 5 秒进行一次测量。
  • 系统的动态模型是恒定的。

数值例子:

测量值为: 

50.45℃, 50.967℃, 51.6℃, 52.106℃, 52.492℃, 52.819℃, 53.433℃, 54.007℃, 54.523℃和 54.99℃.

过程和上例类似,依次求解即可。

但卡尔曼滤波器未能提供可靠的估计。卡尔曼滤波器估计存在滞后误差。

滞后误差有两个原因:

  • 动态模型不适合这种情况。
  • 我们选择了非常低的过程噪声( q= 0.0001 )而真实的温度波动要大得多。

解决方法: 

(1)如果我们知道液体温度可以线性变化,我们可以定义一个考虑液体温度可能线性变化的新模型。但是,如果不能对温度变化进行建模,则这种方法没有作用;

(2)另一方面,由于我们的模型没有很好的定义,我们可以通过增加过程噪声来调整过程模型的可靠性( q) ,如下面这个例子。

示例 8 – 估计加热液体的温度Ⅱ

        此示例与上一个示例类似,只有一处更改。由于我们的过程没有明确定义,我们增加了过程的不确定性( q)从 0.0001 到 0.15。

        

        估计值遵循测量值。没有滞后误差,由于过程不确定性高,测量权重远高于估计权重。因此,卡尔曼增益很高,收敛到 0.94。

        

总结:

        最好的卡尔曼滤波器实现将涉及一个非常接近现实的模型,几乎没有留下过程噪声的空间。然而,精确的模型并不总是可用的——例如,飞机飞行员可能决定执行改变预测飞机轨迹的突然机动。

多维卡尔曼滤波器

 如空中有一个飞机,其位置的状态量为三维\left [ x,y,z \right ],若加上速度和加速度,则

\left [ x,y,z,\dot{x},\dot{y},\dot{z},\ddot{x},\ddot{y},\ddot{z} \right ]

假设一个恒定加速度动态模型,我们可以描述外推的飞机状态为:

        通常的做法是用矩阵形式的单个方程来描述多维过程。

矩阵相关知识回顾:

 

 

卡尔曼滤波器的五个方程:

        状态外推方程:根据当前状态的知识预测下一个系统状态。它从当前(时间步长)推断状态向量nn)到未来(时间步长n + 1n+1),状态外推方程描述了动态系统的模型。它也被称为:预测方程、

 下图提供了状态外推方程的示意图描述

状态变量可以表示我们希望知道的系统属性,如移动的飞机具有三个属性:位置、速度和加速度。

哪些属性是状态变量,哪些属性是系统的输入?

  • 运动机械系统具有位置、速度、加速度和阻力等属性。
  • 作用在系统上的力应该被认为是一个外力函数,即控制状态向量的系统输入(在恒定加速度情况下的位置和速度)

如: 作用在弹簧上的力,可以表示为F(t)就能够作为系统的输入u(t),弹簧的位移x(t)可以作为系统的状态。

示例 - 飞机 - 无控制输入

我们定义了飞机的状态外推方程,假设一个恒定的加速度模型,状态向量 X描述在笛卡尔坐标系中估计的飞机位置、速度和加速度。

则状态外推方程为

写成矩阵的形式就是:

 

示例 - 带有控制输入的飞机

例子与上一个类似,不同的是传感器连接着飞机的控制器,就具有额外的信息获取飞机的加速度。

 示例 - 自由下落的物体

 状态量为高度和速度,

 虽然我们没有传感器测量加速度,但是我们知道自由落体的加速度为重力加速度

 

LINEAR TIME-INVARIANT SYSTEMS

线性系统是方程组,其中变量从不相互相乘,而只是与常数相乘,然后相加。

 时不变系统的 系统函数不是时间的直接函数。

 线性系统建模:

状态外推方程的推导:

         我们需要对动态系统进行建模。换句话说,要弄清楚动态系统的状态空间表示。以下两个方程是 LTI 系统的状态空间表示。

为了得到状态转移矩阵,和控制输入矩阵,需要求解状态空间的微分方程。步骤如下图所示。

 

示例:等速移动体

由于没有外力施加到身体上,系统没有输入:u(t)=0

 我们得到了微分形式的第一个方程。

系统的输出y(t)为物体的位移p(t),

 高阶动态系统建模

        许多动态系统模型由高阶微分方程描述。微分方程的阶是微分方程中最高导数的个数。为了解决一个高阶方程,我们应该通过定义新变量并将它们代入最高阶项来将其简化为一阶微分方程.

 一个普通的n阶线性微分方程可以表达成n个一阶微分方程。如

 控制方程完全表征了系统的动态状态 。降低方程的阶数:将最高阶移至左边。

定义一个新变量:

 然后就可以写成:

 示例:恒加速度运动体

 使用牛顿第二定律就可以获得其控制方程:

m\ddot{p}=F

这是一个二阶微分方程,通过上述方式,将其转为一阶多项式微分方程

 

系统的输出为物体的位移

 求解微分方程

 我们需要确定状态外推方程的形式为:

 线性时不变系统在不带外部输入的微分方程可以表示为一阶微分方程:

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \dot{x}=Ax

我们的目标是获取状态转移矩阵F

若是单维系统:

 两边积分即可获得:

 同理,对于多维情况有:

示例续:等速运动体 

 

具有输入变量的动态系统

对于零阶保持采样,假设输入是分段常数,状态空间方程

的通解形式为:

 如果输入量为0时,则方程的解就和上面描述的一样。

例子续:恒加速移动物体:

 

 例续:带阻尼的弹簧系统

 其微分方程可以写为

 矩阵指数的计算并不容易,因为 A 的高次方不是零。使用计算机软件来解方程。

协方差外推方程:

我们在一维的卡尔曼滤波章节中已经推导了协方差的外推方程,扩展到多维时,协方差的矩阵外推方程为:

 多了一个状态转移矩阵的计算。

在没有过程噪声时估计不确定的推导

 

 在有过程噪声时估计不确定的推导

         我们已经看到,过程噪声方差对卡尔曼滤波器的性能有重要影响。太小的过程噪声Q导致滞后误差;如果Q值太大,卡尔曼滤波器将跟随测量值并产生估计噪声。

        过程噪声在不同状态变量之间可以是独立的。在这种情况下,过程噪声协方差矩阵Q是一个对角矩阵。过程噪声也可能是相关的。

 

        我们将看到一个恒速模型示例。该模型假设加速度为零(a = 0)。然而,加速度的随机变化σ2将导致速度和位置的变化。在这种情况下,过程噪声在状态变量之间是相互关联的

离散噪声模型

离散噪声模型假设噪声在每个时间段内是不同的,但在时间段之间是恒定的

对于恒速模型: 

我们使用加速度随机噪声\sigma^2_a来表示

 

使用状态转移矩阵进行投影

 若一个动态模型没有控制输入,我们可以通过投影加速度的随机噪声\sigma^2_a使用状态转移矩阵。

使用控制矩阵进行投影 

         如果动态模型包括控制输入,我们可以计算Q矩阵更快。我们可以预测加速度的随机方差\sigma^2_a在我们使用状态转移矩阵的动态模型上。G为控制矩阵

连续噪声模型 

 如何选择噪声模型?

        什么时候Δt 非常小,可以使用离散噪声模型,当Δt较大时最好使用连续噪声模型。我建议尝试这两种模型,并检查哪一个模型在卡尔曼滤波器上表现更好。过程噪声方差选择正确的值。您可以使用随机统计公式计算它,也可以根据您的工程实践选择一个合理的值。

雷达世界中,\sigma^2_a取决于目标特征和模型的完整性。对于机动目标,如飞机,\sigma^2_a应该相当大。对于非机动目标,例如火箭,可以使用较小的\sigma^2_a。 模型完整性也是选择过程噪声方差的一个因素,如果模型包括空气阻力等环境影响,则过程噪声随机性的程度较小,反之亦然。

测量方程

到目前为止,我们推导出了两个卡尔曼滤波器预测方程:

  • 状态外推方程
  • 协方差外推方程

        测量值表示除随机测量噪声外的真实系统状态vn,由测量设备引起。 测量噪声方差 rn每次测量都可以是常数,如果我们有精度为 0.5kg(标准偏差)的秤。另一方面,测量噪声方差 rnrn每次测量都可能不同 - 例如,如果我们有一个精度为 0.5%(标准偏差)的温度计。

         观测矩阵H:在许多情况下,测量值不是所需的系统状态。例如,数字电子温度计测量电流,而系统状态是温度。需要将系统状态(输入)转换为测量(输出)。H是使用线性变换将系统状态转换为输出。

如测距仪通过发射光并接收返回光获得距离。

 状态选择

        有时某些状态会被测量,而其他状态则不会。例如,五维状态向量的第一个、第三个和第五个状态是可测量的,而第二个和第四个状态是不可测量的:

 状态组合

        有时可以测量一些状态组合而不是每个单独的状态。例如,也许三角形的边长就是状态,只能测量总周长:

 测量方程维数

 

中间总结

卡尔曼滤波器计算基于五个方程

两个预测方程:

  • 状态外推方程- 基于已知的当前估计对未来状态的预测或估计。
  • 协方差外推方程——我们预测中不确定性的度量。

两个更新方程:

  • 状态更新方程- 当前状态的估计,基于已知的过去估计和当前测量。
  • 协方差更新方程——我们估计中不确定性的度量。

 卡尔曼增益方程——计算更新方程所必需的。卡尔曼增益实际上是测量和过去估计的“加权”参数。它定义了过去估计的权重和估计当前状态的测量权重。

状态更新方程

在“α - β- γα−β−γ滤波器”部分和“一维卡尔曼滤波器部分”。已经讲过状态更新方程

矩阵形式的状态更新方程由下式给出:

 应该注意矩阵的维度,例如,如果状态向量有 5 个维度,而只有 3 个维度是可测量的(第一、第三和第五个状态):

 状态更新方程维数:

 

协方差更新方程

 下面推导其由来:

已知:

 那么就有:

卡尔曼增益方程

 让我们重新排列协方差更新方程:

         因为卡尔曼滤波器是最优滤波器,因此我们需要找到一个最优的K使得估计的方差最小。

        为了最小化估计方差,我们需要最小化协方差矩阵P_{n,n}的主对角线元素(从左上到右下),前面已经讲了协方差的意义,因此这里不难理解协方差矩阵的主对角元素对应状态量的方差。而主对角线的元素的和就是该矩阵的迹。因此我们将协方差矩阵的迹关于卡尔曼增益K求导,并获取其驻点。有:

 

简化的协方差更新方程:

将上面算出来的卡尔曼增益代入上式,就有以下简化式 

         这个等式更优雅,更容易记住,并且在许多情况下表现良好。然而,即使是计算卡尔曼增益的最小误差(由于四舍五入)也可能导致巨大的计算误差,因为这替代式(I-KH)可能会由于浮点数误差导致一个非对称的矩阵,这个式子是数值上不稳定的。

卡尔曼滤波器总结

一旦初始化,卡尔曼滤波器将在下一个时间步预测系统状态。它还提供了预测的不确定性。

【用自己的话表达卡尔曼滤波器使用流程】

1.第一步,我们根据前一时刻的状态X和前一时刻的估计不确定性P,根据系统的模型,包括是否带有控制,系统的微分方程得到系统的外推方程,通过系统模型,来估计下一时刻的状态。

这包含的输入为前提条件:初始估计X(先验)和初始估计的不确定性P。初始估计的不确定维度和状态维度一致。反映出每一个状态的估计不确定性(方差)。

需要计算的:建立微分方程,获得外推方程的状态转移矩阵F控制矩阵G

2.估计系统的过程噪声,过程噪声的设定,是选用离散形式还是连续形式,其值怎么确定?

3.根据状态转移矩阵和过程噪声,外推当前状态的估计不确定。

4.然后计算卡尔曼增益

5.得到卡尔曼增益之后,就能够结合当前预测的估计当前的观测值,得到加权后的估计(后验,和这个观测条件结果有关)。

6.得到后验之后,同时更新后验状态估计的不确定性P。

使用多维卡尔曼滤波器的实例:

 车辆在二维平面的定位问题,其动力模型为:恒加速度模型

本例中状态量为xy的位置,速度,加速度:

获得状态外推方程:

 写为矩阵形式为:

 获取估计不确定性协方差外推矩阵:

p_x为X方向位置的方差,其他同理类推。可以发现,X,Y是独立的,因此XY的协方差为0,即得到简化的协方差矩阵:

 对于过程噪声Q:

 我们将假设一个离散噪声模型 - 每个时间段的噪声都不同,但在时间段之间它是恒定的。二维恒加速度模型的过程噪声矩阵如下:

 看不懂的往前翻到过程噪声那。

因此就有

 测量方程

测量通常只能测量到车子的XY坐标,因此仅XY是可观的。

 测量的不确定性

 假设X和Y的测量也是不相关的,即误差X坐标测量不依赖于误差是的Y坐标测量。

 在实际应用中,测量不确定度可能因测量而异。在许多系统中,测量不确定性取决于测量 SNR(信噪比)、传感器(或传感器)与目标之间的角度、信号频率和许多其他参数。

本例中认为测量的不确定是固定的,即

 然后就计算卡尔曼增益:

 这里没有使用简化式的卡尔曼增益计算。

算出卡尔曼增益后就更新状态:状态更新方程

 之后更新协方差:

 依次迭代。

这个例子是不带控制量的,还有带有控制输入的卡尔曼滤波器使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

卡尔曼滤波器从入门到放弃 的相关文章

  • 【2】uC/OS-III应用开发————>启动流程(STM32F767)

    简述 xff1a 上电启动 xff0c 分为三个阶段 CPU内核的初始化 xff0c ARM公司编写 xff0c 所用CPU的 s文件外设模块的初始化OS相关操作的初始化 启动 调度等等系统的启动 上电执行启动文件里面的复位函数Reset
  • Windows11原版镜像

    Windows 11 xff08 企业版 xff09 版本 22H2 xff08 2023年02月发布 xff09 64 位简体中文 文件 xff1a zh cn windows 11 business editions version 2
  • 树莓派操作系统

    树莓派操作系统 树莓派操作系统 介绍更新和升级树莓派操作系统 使用 APT使用 rpi 更新播放音频和视频 OMXPlayer 应用程序如何播放音频如何播放视频播放期间的选项在后台播放使用 USB 网络摄像头 基本用法自动化图像捕获延时拍摄
  • ARM平台FS6818/s5p6818开发板实验7 —— 通过I2C读取MMA8451三轴加速度传感器芯片实现计步器功能的实验

    实验目的 掌握I2C协议的内容 xff0c 了解I2C接口的特点 了解陀螺仪MMA8451的用途及数据采集过程 熟悉s5p6818处理器的I2C配置 xff0c 完成通过I2C读取MMA8451三轴加速度传感器芯片和加速度的改变实现计步功能
  • uC/OS-II 一些细节问题

    最高和最低优先级的任务最好不要使用 xff0c 而用户使用的任务多达56个 xff0c 0表示最高优先级 建立任务的函数有两个 OSTaskCreate OSTaskCreateExt xff08 可设置更多任务细节 xff09 OSSta
  • CubeMX配置FreeRTOS

    01 说在前面 RTOS为了提高任务调度效率一般都包含汇编程序 xff0c 因此移植起来需要一些汇编知识 xff0c 就算网上肯定有移植教程 xff0c 初次搞起来还是挺费劲的 初学时对RTOS代码不熟悉 xff0c 一开始就打击了积极性可
  • 云台控制协议VISCA、PELCO-D、PELCO-P

    1 VISCA部分协议命令 控制 命令 格式 备注 预置点 清除预置点 8X 01 04 3F 00 ZZ FF X 61 1 7 8是广播码 xff0c 下同 xff1b ZZ 61 00 3F xff0c 共64个预置点 设预置点 8X
  • lpms-ig1 IMU使用

    1 xff09 打开网址 https bitbucket org lpresearch lpmsig1opensourcelib 实现1 2 3块编译 2 xff09 给串口 ttyUSB0 赋予权限sudo chmod 777 dev t
  • Vitis AI1.1 系列教程1 - 软件安装

    这里写自定义目录标题 我的安装环境 安装过程在VMware中安装ubuntu 16 04安装Vitis AI几个常见的docker指令 我的安装环境 windows 10VMware 15 5Vitis AI 1 1ubuntu 16 04
  • PX4/Pixhawk - 编译环境搭建

    最近在学习px4的二次开发 xff0c 发现网上的环境搭建教程五花八门 xff0c 大多复杂 xff0c 重重踩坑之后 xff0c 发现还是官方的教程好使 xff0c 总结如下 xff1a 环境准备 采用vmware虚拟机搭建环境系统是ub
  • PX4/Pixhawk 教程 - 任务线程 - workqueue 和 task

    介绍 一个完整的px4的应用程序 xff08 或者叫任务 xff09 分为前台部分和后台部分 xff0c 前台部分是跑在shell任务中的 xff0c 比如helloworld那个程序就只有前台部分 xff0c 敲入指令即可在ssh中运行
  • PX4/Pixhawk 教程 - 可视化参数配置和自启动 - param

    px4常见的设置模块自启动的方式有两种 xff0c 一种是在rx xxx文件中添加需要启动的项 xff0c 另一种是通过yaml参数配置文件 通过添加系统启动项 通过修改系统的启动项实现模块的自启动 xff1a 在px4 ROMFS px4
  • PX4/Pixhawk 教程 - uavcan v1 - libcanard传输层最简例子

    介绍 上一篇主要是介绍libcanard的基础知识和函数 xff0c 比较偏理论一点 xff0c 这一篇呢主要注重于实践 主要解决以下问题 xff1a xff08 1 xff09 如何把uavcan v1编译到default标签 xff08
  • 如何把git的submoudule变为本仓库依赖

    介绍 一些著名的开源项目往往运用了大量的其他submodule xff0c 但是对于嵌入式开发 xff0c 我们希望可以维护一个稳定的完整的仓库 xff0c 因此需要把submodule的外部依赖改成本仓库依赖 步骤 删掉仓库根目录下的 g
  • qgroundcontrol编译环境搭建

    qgc编译环境搭建和编译 qt安装 从官网下载安装程序 http www qt io download open source 给安装程序授权 span class token function chmod span 43 x qt uni
  • STM32F4教程从零开始0——从官网获取固件库

    从大二到现在玩stm32也有两年了 xff0c 估计以后用stm32 的机会不多了 xff0c 所以打算写一系列的教程来纪念一下陪我走过大学时光 xff0c 成为我的科技竞赛重要利器的STM32F4 这系列的教程将用stm32F407VGT
  • STM32F4教程从零开始1——建工程

    今天 xff0c 新买的机械到手 xff0c 很开心 xff0c 用得很爽 xff0c 所以决定再写一篇 xff0c 话说这是我第一次买机械键盘 xff0c 我现在也支持程序员可以没有一个好的电脑 xff0c 但必须有一个好的键盘的说法了
  • '\0'就是 字符串结束标志

    39 0 39 就是 字符串结束标志 比如说 xff0c 把一个字符串赋值给数组 xff1a u8 str1 61 34 cxjr 21ic org 34 实际上数组str1在内存中的实际存放情况为 xff1a c x j r 2 1 i
  • Git教程之局域网服务器搭建教程(Gitlab)

    Gitlab局域网服务器搭建教程 简介在ubuntu服务器上安装Gitlab安装过程登入界面常见问题Group项目push失败 xff08 403错误 xff09 如何删除项目 简介 Git是一个程序员必备的版本管理软件 xff0c 个人使
  • QuadrotorFly-四旋翼无人机动力学仿真环境介绍

    QuadrotorFly四旋翼无人机动力学模型 主要目的是开发一个用于无人机动力学仿真的简单易用 功能相对齐全的仿真环境 xff08 也许是水论文环境 xff09 这个仿真是基于python编写的 xff0c GPL开源 git的地址在 x

随机推荐

  • HTML5 APP项目展示响应式网页模板

    简介 xff1a 国外的一款APP项目展示HTML单页模板 1 该模板代码干净整洁 xff1b 2 效果相当的炫酷 xff0c 相当简洁大气高端 xff0c 模板简单 xff0c 全部已数据调用 3 网站手工DIV 43 css xff0c
  • 自动驾驶仿真工具之AirSim简介

    简介 开源 xff0c 跨平台 xff0c 支持Linux Windows PX4 xff0c 基于Unreal Engine xff0c 有Unity版本 xff08 实验版 xff09 Github链接 多种语言API xff0c 包括
  • MobaXterm 远程linux服务器图像界面打不开

    如图所示 xff0c 本人用的是 MobaXterm软件 远程连接linux系统 xff0c 但是显示图形界面的时候 这里无法显示 xff0c 报错 xff1a demo 895 Gtk WARNING 23 06 41 170 canno
  • linux+opencv 将摄像头视频通过UDP协议发送给服务器端并显示

    我这边有一块rock3a开发板 xff0c 并童工USB接口外接一个USB 海康威视高清摄像头 200万像素 首先源码编译aarch版本的opencv xff0c 之前的博客中有讲 xff0c 这里不再赘述 进入linux开发界面 xff0
  • ROS入门之Cmakelist说明

    Cmakelist http wiki ros org catkin CMakeLists txt 1 Overall Structure and Ordering Your CMakeLists txt file MUST follow
  • DELL 暗夜精灵无法进入BIOS系统

    1 1 开始菜单 设置 2 单击 更新和安全 3 单击右边列表项中的 恢复 4 单击左侧的 立即重启 xff0c 这时电脑就会立即重启 xff0c 所以单击前请保存好未保存文件 5 当电脑重启之后会进入如下界面 xff0c 单击 疑难解答
  • Simulink永磁同步电机控制仿真系列八:使用自抗扰控制(adrc)实现速度闭环以及扰动估计

    引言 最近对环路进行了一些思考 xff0c 我们知道对于永磁同步电机的电流环控制 xff0c 往往假定电流环的控制对象是电阻和电感的串联 xff0c 这样的一个系统开环响应类似于一阶惯性系统 xff0c 适合使用pi控制 xff0c 并且可
  • STM32之RTC实时时钟

    RTC实时时钟简介 STM32的RTC外设 实质是一个掉电后还继续运行的定时器 从定时器的角度来看 相对于通用定时器TIM外设 它的功能十分简单 只有计时功能 也可以触发中断 但是从掉电还能继续运行来看 它是STM32中唯一一个具有这个功能
  • VS2019 错误 MSB8066 自定义生成已退出,代码为 3

    最近使用VS2019调试一个项目 xff0c 一直遇到以下错误 xff1a 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 MSB8066 D MyItems CDMatrix Build CMakeFiles 3800edc586
  • RTOS与linux区别

    一句话解释 xff1a linux是分时系统 xff0c 不过可以通过配置内核改成实时 嵌入式Linux 系统是在原来Linux的发行版本之上进行了优化和改进的 xff0c 用于嵌入式的移动终端等设备的嵌入式Linux系统现在基本上都是实时
  • QT绘图控件QWT的安装及配置

    1 QWT库下载 解压下载的压缩包 xff0c 我们可以看到里面包含多个文件夹 有源码 有参考程序 有说明文档等等 xff0c 有时间建议把参考程序都看一下 xff0c 这样都每个控件有什么功能都很熟悉 2 QWT编译 网上介绍QWT编译有
  • QT多线程的使用(moveToThread方法)

    QT有两种实现多线程的方法 xff0c 一种是 子类化QThread xff0c 然后去重写run函数 xff0c 实现多线程 一种是 子类化QObject xff0c 然后使用moveToThread函数实现多线程 由于QT官方推荐使用第
  • 嵌入式Linux学习1——Linux常用指令1

    写在前面 xff1a Linux本系列的所有学习内容都是我在购买 正点原子Alpha Linux开发板 后 xff0c 根据官方提供的资料 整理而来 后面将不再做介绍 目录 ls xff1a 用于显示当前目录下的内容 a xff1a 显示当
  • 嵌入式Linux学习2——Linux常用指令2

    目录 touch xff1a touch命令用来创建空文件 cp xff1a cp命令用来复制文件或目录 rm xff1a rm命令用于删除一个文件或者目录 mkdir xff1a 用于创建文件夹 mv xff1a mv命令用来为文件或目录
  • 基于STM32分析栈、堆、全局区、常量区、代码区、RAM、ROM

    目录 总体介绍 栈区 xff08 stack xff09 堆区 xff08 heap xff09 全局区 xff08 静态区 xff09 bss段 data段 常量区 代码区 RAM和ROM Flash Memory的物理特性 RAM RO
  • VS2013(Visual Studio 2013)官方中文旗舰版安装激活方法

    dio 2013旗舰版 VS2013 xff08 Visual Studio 2013 xff09 官方中文旗舰版安装激活方法 1 下载后得到的是ISO文件 xff0c 直接解压缩或用虚拟光驱加载运行都可以 2 无所不藏在这里直接解压 xf
  • git服务器(gitea)安装说明

    需要用到的软件 需要用到的软件有 gitea 1 12 3 windows 4 0 amd64 exenssm exeGit 2 28 0 64 bit exe 这些软件的具体功能在后面安装的时候会提及 软件都已经放到了 软件包 文件夹中
  • 实战篇 | 基于freeRTOS的多任务事件传输demo(附代码)

    之前分享了很多关于freeRTOS的知识 xff0c 那么我们怎么在实战中去写代码呢 xff1f 本篇文章重在对基于freeRTOS的架构代码的解析 整个功能如下图 xff1a 为什么要用freeRTOS 在实际项目中 xff0c 如果程序
  • FMCW-距离估计

    距离估计 FMCW雷达工作原理 如上图所示 xff0c 圈1是一个信号产生器 xff0c 用于产生一个线性调频脉冲信号 xff08 频率随时间义线性方式增长的正弦波 xff09 xff0c 经圈2发射天线发送出去 xff0c 并且和圈3接收
  • 卡尔曼滤波器从入门到放弃

    目录 前言 个人总结 总结卡尔曼滤波器使用流程 从一维卡尔曼滤波器 不带过程噪声的一维卡尔曼滤波器 EXAMPLE 5 ESTIMATING THE HEIGHT OF A BUILDING 数值例子 xff1a 一维卡尔曼滤波器的完整模型