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

news2024/12/25 13:57:26

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 = A x ^ k + B u k + K ( y k − C x ^ 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 = A x ^ k − 1 + B u k + K k ( y k − C ( A x ^ k − 1 + B u k ) ) \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 = A x ^ k − 1 + B u k ⏟ x ^ k − : A  Priori Estimate  + K k ( y k − C ( A x ^ k − 1 + B u k ) ) \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 − + K k ( y k − C x ^ k − ) \hat{x}_{k}=\hat{x}_{k}^{-}+K_{k}\left(y_{k}-C \hat{x}_{k}^{-}\right) x^k=x^k+Kk(ykCx^k)

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

x ^ k ⏞ A P o s t e r i o r i E s t i m a t e = x ^ k − ⏟ Predict  + K k ( y k − C x ^ 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^k APosterioriEstimate=Predict  x^k+Update  Kk(ykCx^k)

具体原理:

image

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

上图中下面的 P k − P_{k}^{-} Pk 计算的是 k 时刻的真实状态 x k x_{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 ⁡ ( A X ) = A Cov ⁡ ( X ) A T \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^k1 P k − 1 P_{k-1} Pk1 来自初始估计值。

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

image

调整卡尔曼增益 K k K_k Kk 使得更新后的状态值误差 P k P_{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.coloradmin.cn/o/61295.html

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

相关文章

基于java+ssm+vue+mysql的社区流浪猫狗救助网站

项目介绍 随着迅速的发展,宠物饲养也较以前发生很大的变化,社区流浪猫狗救助网站系统以其独有的优势脱颖而出。“社区流浪猫狗救助网站”是以JAVA程序设计语言课为基础的设计出适合社区流浪猫狗救助网站,其开发过程主要包括后台数据库的建立…

Vulnhub:Os-Bytesec靶机渗透

目录 前期准备: 渗透过程 测试SMB PATH环境变量介绍 前期准备: 1.在vulnhub官网下载靶机:Os-Bytesec。 2.靶机用virtualbox打开,网络使用仅主机模式,攻击机kali在vmware上使用桥接模式,并桥接到virtru…

性能优化:Netty连接参数优化

参考资料: 《Netty优化》 相关文章: 《Netty:入门(1)》 《Netty:入门(2)》 《Netty:粘包与半包的处理》 《性能优化:TCP连接优化之三次握手》 写在开头…

JavaWeb_第5章_会话技术_Cookie+Session

JavaWeb_第5章_会话技术_CookieSession 文章目录JavaWeb_第5章_会话技术_CookieSession1,会话跟踪技术的概述2,Cookie2.1 Cookie的基本使用2.2 Cookie的原理分析2.3 Cookie的使用细节2.3.1 Cookie的存活时间2.3.2 Cookie存储中文3,Session3.1…

vs2019_qt6.2.4_dcmtk3.6.7_vtk9.2.2_itk5.3_opencv4.6.0编译记录

目录 1 dcmtk3.6.7编译 2 vtk9.2.2编译 3 itk5.3编译 4 opencv4.6.0 5 参考链接 编译顺序,qt6.2.4下载----->dcmtk3.6.7----->vtk9.2.2----->itk5.3----->opencv4.6.0 opencv4.6需要使用到vtk9.2.2,需要在最后编译。 opencv遇到…

[附源码]计算机毕业设计校园代取快递系统Springboot程序

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

Nacos2.1.2源码修改支持高斯,postresql

1、下载代码 git clone https://github.com/alibaba/nacos.git -b 2.1.2 或 git clone https://github.com/alibaba/nacos.git 2、maven命令执行下试试能不能打包 mvn -Prelease-nacos -Dmaven.test.skiptrue -Drat.skiptrue clean install -U 或 mvn -Prelease-nacos ‘-Dmav…

盒子模型详解

菜鸟教程解释:所有HTML元素可以看作盒子 1.普通盒子模型: margin(外边距):清除边框外的区域,外边距是透明的,不包含在background属性中。 border(边框): 围绕…

JUC并发编程与源码分析笔记06-Java内存模型之JMM

计算机硬件存储体系 CPU的运行并不是直接操作内存而是先把内存里边的数据读到缓存,而内存的读和写操作的时候就会造成不一致的问题。 JVM规范中试图定义一种Java内存模型(Java Memory Model,简称JMM)来屏蔽掉各种硬件和操作系统的…

电平触发的触发器

普通的SR锁存器没有任何抗干扰能力 我们要加控制信号,来抵抗干扰 比如说我们不把信号直接加在门上,我们可以再加一级门电路,让这个输出和输入不在同一个门上,我们希望加入一个控制信号,来控制电路工作的时刻 对电路结…

神经网络——反向传播算法

一、多元分类 之前讨论的神经网络都是以二元分类为目的进行介绍的。 当我们有不止两种分类时(也就是y1,2,3….y1,2,3….y1,2,3….),比如以下这种情况,该怎么办?如果我们要训练一个神经网络算法来识别路人、汽车、摩托…

mysql的主从复制与读写分离

目录 一. MySQL 主从复制原理 1.1 MySQL 支持的复制类型 1.2 MySQL主从复制的工作过程 二、主从复制实验部署 2.1、实验环境 2.2、mysql主从服务器时间同步 主服务器(192.168.80.11) 从服务器(192.168.80.12/13) 2.3、主…

[附源码]计算机毕业设计网上鲜花购物系统Springboot程序

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

【机器学习】支持向量回归

有任何的书写错误、排版错误、概念错误等,希望大家包含指正。 在阅读本篇之前建议先学习: 【机器学习】支持向量机【上】硬间隔 【机器学习】支持向量机【下】软间隔与核函数 支持向量回归 支持向量回归(support vector regression&#xf…

[附源码]计算机毕业设计基于SpringBoot的党务管理系统

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

《人类简史》笔记三—— 历史从无正义

目录 一、尽管把人人生而平等喊得震天响,其实还是把人分成了上下等级 二、恶性循环 三、当男人究竟有什么好的? 一、尽管把人人生而平等喊得震天响,其实还是把人分成了上下等级 古时候: 上等人 平民和奴隶 现在:…

网络结构模式,协议,端口,网络模型,arp

网络结构模式(软件结构) C/S结构 服务器 - 客户机,即 Client - Server(C/S)结构 C/S 结构通常采取两层结构: 服务器负责数据的管理客户机负责完成与用户的交互任务 在C/S结构中,应用程序分为两部分: 服务…

koa 和 express 的对比

前言 天冷了,唯有学习来温暖自己。 最近利用业余的时间,跟着 coderwhy 老师学习 node.js,了解以及掌握一些服务端的常见知识: fileSystem:文件读取模块。events:事件流Buffer:node 中处理二进…

高仿英雄联盟游戏网页制作作业 英雄联盟LOL游戏HTML网页设计模板 简单学生网页设计 静态HTML CSS网站制作成品

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

Java—代理

文章目录先举一个例子:开闭原则什么是代理两种调用的方式:代理定义:代理的实现方式静态代理代理的目的:如何让程序知道要增强的功能是谁?静态代理缺点:动态代理什么是动态代理动态代理的实现静态代理和动态…