卡尔曼滤波之最优状态估计和最优状态估计算法

news/2024/11/28 9:43:05/

1. 最优状态估计

image

情景1:假设一个一个比赛中,不同队伍的自动驾驶汽车使用 GPS 定位,在 100 种不同的地形上各行驶 1 公里。每次都尽可能停在终点。然后计算每只队伍的平均最终位置。

image

第一组输了:因为虽然方差小,但是偏差大。

第二组输了:因为偏差小,但是方差大

第三组赢了:偏差和方差都小

不能仅仅依靠 GPS 数据,因为它可能有噪声。

目的是:0 偏差 + 最小的方差

可以使用 卡尔曼滤波器。

image

输入是 油门, 输出是 汽车的位置。该系统有多个状态,如下图:

image

我们简化为:

image

汽车的输入为 速度,该系统只有一个状态: 汽车的位置。我们正在测量这个状态,因此矩阵 C = 1。

image

GPS 读数有噪音,用 v 表示测量噪声,这是一个随机变量。用 w 表示 过程噪声,也是随机变量,代表风的影响或者汽车速度的变化。虽然这些随机变量不遵循 模式,但是可以使用概率论描述它们的平均属性。

假设 v 服从 0 均值,协方差 R 的高斯分布。因为是单输出系统,协方差 R 是标量,且等于 测量噪声的方差。

类似的,过程噪声也是随机的,假设 w 服从 0 均值,协方差 Q 的高斯分布。

image

因为,测量是有噪声的,因此,测量的并不能反映汽车的真实位置。如果我们知道汽车模型,我们可以将输入放到模型中来估计位置 x^k\hat{x}_{k}x^k,但是该估计值也不是完美的,因为还有过程噪声也是随机的。卡尔曼滤波结合 测量值 和 模型预测值 来估计汽车的位置。

image

我们使用概率密度函数来直观讨论卡尔曼滤波器的工作原理。在 初始时间 k-1 ,实际汽车位置可能在 模型估计值 x^k−1\hat{x}_{k-1}x^k1 附近的任何位置,这种不确定性由 概率密度函数描述,汽车最可能在该分布的平均值附近。在下一个时间步,估计的不确定性增大(因为:在时间步 k-1 到 k, 汽车可能经过坑洼,可能车轮打滑,因此可能前进了与 模型估计的距离不同的距离。), 用较大的方差表示。

image

除了数学模型的预测,还有另外一个信息来源:GPS 测量值。上图橙色的高斯分布表示测量的分布,方差表示测量噪声的不确定性,同样,真正的位置可能是该分布平均值的任何位置。

现在有了 预测值 和测量值,那么汽车位置的最优估计是什么?

结合这两部分信息,通过将 预测和测量的 两个概率密度函数相乘,结果也是高斯函数。该高斯的方差小于之前数学模型估计的方差,该高斯的平均值给了我们汽车位置的最优估计。

卡尔曼滤波器可以计算最优无偏差的汽车位置,且方差最小。

2. 最优状态估计算法

状态观测器:(deterministic system)

x^k+1=Ax^k+Buk+K(yk−Cx^k)\hat{x}_{k+1}=A \hat{x}_{k}+B u_{k}+K\left(y_{k}-C \hat{x}_{k}\right)x^k+1=Ax^k+Buk+K(ykCx^k)

卡尔曼滤波器:(stochastic system)

x^k=Ax^k−1+Buk+Kk(yk−C(Ax^k−1+Buk))\hat{x}_{k} = A \hat{x}_{k-1}+B u_{k}+K_{k}\left(y_{k}-C\left(A \hat{x}_{k-1}+B u_{k}\right)\right)x^k=Ax^k1+Buk+Kk(ykC(Ax^k1+Buk))

卡尔曼滤波器是一种状态观测器,但是是为 随机系统设计的。

x^k=Ax^k−1+Buk⏟x^k−:APriori Estimate +Kk(yk−C(Ax^k−1+Buk))\hat{x}_{k}=\underbrace{A \hat{x}_{k-1}+B u_{k}}_{\hat{x}_{k}^{-}: A \text { Priori Estimate }}+K_{k}\left(y_{k}-C\left(A \hat{x}_{k-1}+B u_{k}\right)\right)x^k=x^k:A Priori Estimate Ax^k1+Buk+Kk(ykC(Ax^k1+Buk))

第一步:通过建立的数学模型,使用前一个时间步的预测状态和当前的输入, 预测当前的状态。x^k−\hat{x}_{k}^{-}x^k 为先验估计,因为计算它的时候没有使用当前的测量值。简化上面等式:

x^k=x^k−+Kk(yk−Cx^k−)\hat{x}_{k}=\hat{x}_{k}^{-}+K_{k}\left(y_{k}-C \hat{x}_{k}^{-}\right)x^k=x^k+Kk(ykCx^k)

第二步:等式的第二部分使用的是测量值(yky_{k}yk), 代入方程来更新 先验估计, 从而得到后验估计。

x^k⏞APosterioriEstimate=x^k−⏟Predict +Kk(yk−Cx^k−)⏟Update \overset{A Posteriori Estimate}{\overbrace{\hat{x}_{k}}} =\underbrace{\hat{x}_{k}^{-}}_{\text {Predict }}+\underbrace{K_{k}\left(y_{k}-C \hat{x}_{k}^{-}\right)}_{\text {Update }}x^kAPosterioriEstimate=Predict x^k+Update Kk(ykCx^k)

具体原理:

image

第一步:数学模型预测部分。因为系统状态可能是多个,比如位移、速度等,因为一个系统中大多数的状态信息是相互关联的。对于卡尔曼滤波器这些不同状态的关联性用协方差矩阵(covariance matrix) P 表示。

上图中下面的 Pk−P_{k}^{-}Pk 计算的是 k 时刻的真实状态 xkx_{k}xk 和 k-1 时刻数学模型预测的 k 时刻的状态 x^k−\hat{x}_{k}^{-}x^k 之差 的协方差矩阵

Pk−=cov⁡{xk−x^k−}=cov⁡{Axk−1+Buk+wk−Ax^k−1−−Buk}=cov⁡{A(xk−1−x^k−1−)+wk}=Acov⁡{xk−1−x^k−1−}AT+cov⁡{wk}=APk−1AT+Q

这里会用到:

Cov⁡(AX)=ACov⁡(X)AT\operatorname{Cov}(A X)=A \operatorname{Cov}(X) A^{T}Cov(AX)=ACov(X)AT

推导参考:

  1. https://www.zhihu.com/question/51082135/answer/150631891
  2. https://zhuanlan.zhihu.com/p/341440139

image

对于单状态系统,P 是状态预测值的方差。可以把它当作预测状态中的不确定性的度量,不确定性来自过程误差和预测值 x^k−1\hat{x}_{k-1}x^k1 的不确定性的影响。

image

算法的最开始,预测值 x^k−1\hat{x}_{k-1}x^k1Pk−1P_{k-1}Pk1 来自初始估计值。

第二步,得到 更新后的状态值 x^k\hat{x}_{k}x^k 和 其 误差协方差 PkP_{k}Pk。推导见上面公式2。

image

调整卡尔曼增益 KkK_kKk 使得更新后的状态值误差 PkP_{k}Pk 最小。

image

假设上面条表示估算值 x^k\hat{x}_{k}x^k 的计算,通过调整 卡尔曼增益 确定测量值和模型预测值对计算 x^k\hat{x}_{k}x^k 的影响。

image

如果测量误差很小,那么测量值更可靠,则应对 x^k\hat{x}_{k}x^k 的计算共享更大。

image

相反,如果模型预测值的误差很小,则模型预测值更可靠,则 x^k\hat{x}_{k}x^k 的计算更多的取决于 模型预测值。

以两种极端情况为例:

image

image

情况1: 假设 测量误差的协方差 R 趋近于 0。我们的上面描述的系统中 C=1。因此,计算结果只取决于 测量值。

image

image

情况2: 如果预测误差协方差趋近于 0。则卡尔曼增益为 0。因此,计算结果只取决于 模型预测值。

image

卡尔曼滤波器只需要知道 模型预测状态值 和 前一个时间步以及当前测量误差协方差矩阵。因此 卡尔曼滤波器是递归的。

image

卡尔曼滤波器 也被称为传感器融合算法。因此可以增加另外一个数据源,比如 IMU。如果有两个测量值 y。K 和 C 的矩阵维度将如上图变化。

image

将三个概率密度函数相乘来找到汽车位置的最优估计值。

以上讨论都是针对线性系统而言。下面将讨论非线性系统如何使用 卡尔曼滤波器。

参考:

如何通俗并尽可能详细地解释卡尔曼滤波?


http://www.ppmy.cn/news/1688.html

相关文章

Json简介与基本使用

前言 本文为Json简介与基本使用相关知识,下边具体将对什么是JSON,XML与JSON的区别,JSON的语法格式,JSON数据的转换(包括:Java对象转换为JSON格式、JSON格式转换为Java对象)等进行详尽介绍~ &am…

最新出炉的阿里巴巴面试题及答案汇总(513页)

前言 秋招已经结束了,不知道各位有没有拿到自己心仪的offer?最近有不少粉丝去阿里巴巴面试了,回来之后我整理成了一份手册java面试时常用到的面试题(附答案)那么今天分享给大家,祝愿大家都能找到满意的工作…

C语言第十七课:初阶指针

目录 前言: 一、指针是什么: 1.那么指针到底是什么呢? 2.内存中的数据存储原理: 3.数据存储与指针使用实例: 4.存储编址原理: 二、指针和指针类型: 1.决定了指针的步长: 2.决定了…

C语言实现学生管理系统(顺序表版)

前言 涉及知识 使用语言:C语言 数据结构类型:顺序表 内容导图 效果展示 内容目录前言涉及知识内容导图效果展示静态管理系统菜单的实现选择功能实现静态开辟空间实现增删功能增加功能实现删除功能实现实现查找功能实现修改功能实现排序功能动态管理系…

dirty make clean

仅仅是清除之前编译的可执行文件及配置文件 make clean清除所有生成的文件 make dist-clean编译 make clean all

安装mongodb6

一、安装mongodb6.0.2 1.官网下载社区版 https://www.mongodb.com/ 2.双击下载的文件,按步骤安装 选择custom 自定义安装 改一下安装地址,路径最好不要带空格 Install MongoD as a Service 作为服务方式安装 Run the service as Network Service…

[附源码]计算机毕业设计人体健康管理appSpringboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

毕业设计 大数据电商用户行为分析 -python 大数据

文章目录0 前言一.背景描述二.项目背景三.数据来源四.提出问题五.理解数据六.数据清洗6.1缺失值处理6.2查看数据6.3一致化处理6.4查看data_user数据集数据类型:6.5数据类型转换6.6异常值处理七.用户行为分析7.1日访问量分析7.2小时访问量分析7.3不同行为类型用户PV分…