卡尔曼滤波器笔记——最详细

 笔记来源—

卡尔曼滤波算法原理及代码实现!icon-default.png?t=N7T8https://www.bilibili.com/video/BV1WZ4y1F7VN/?spm_id_from=333.337.search-card.all.click&vd_source=8d55784dc9c7530bc9e3fa220380be56

 简单介绍一下

现在我们就是不知道是距离多少,就需要用到这个卡尔曼滤波器。

这里的预测方程就是我们的状态方程

这里的H一般就是单位矩阵 ,或者是单位矩阵的一部分

这里的n一般就是状态变量的个数,m就是你选择的观测值

H具体是什么形状要根据选择的状态变量X_{k}以及要观测的目标值的Z_{k}的形状

所以上面我们举的小车的例子的观测值就只有一个,那就是他的距离,所以Z_{k}就是1*1的矩阵,m就是1,如果我们还想知道车速,那么m就是2.Z_{k}就是2*1的矩阵

举个例子

状态变量的个数等于状态方程的个数乘以他的阶数,这里他只有一个方程

首先要看他是一个几自由度的模型,这个RLC模型他是一个1自由度的系统,所以他只涉及一个方程,因为他只有一个回路,一个方程就可以把这个系统表示了。本质上他是一个单自由度系统。一个单自由度系统就写一个方程,这个方程他又是一个二阶的方程,所以选两个状态变量。

这里我们的求导是为了些状态方程。

这里的A是系统矩阵,B是控制矩阵

X_{k-1}代表的就是在k-1时候的状态u_{k-1}就是我们的控制量,一般我们在基尔霍夫数据中里面一般是认为没有控制量,所以这一项基本上为0,再加上我们的噪声w_{k-1}就得到了预测方程

问题来了,那么我们的观测方程又是什么?

H到底是什么?

H其实就是一个单位阵,继续用那个例子

我们的X_{k}=\begin{bmatrix} I\\ \frac{1}{C}\int Idt\end{bmatrix}

Z_{k}=HX_{k}+V_{k}是由我们自己决定的,也就是说你做卡尔曼滤波就是你决定的,①比如是电流I的话我们的Z_{k}=I.②比如还想要\frac{1}{C}dt,那么Z_{k}=\begin{bmatrix} I\\ \frac{1}{C}\int Idt\end{bmatrix}

在第一种情况下我们的H=\begin{bmatrix} 1 & 0 \end{bmatrix}

也就是说Z_{k}=HX_{k}+V_{k},我们只要知道Z_{k}X_{k}就可以知道我们的H

如果我们选第二种,那么我们的H=\begin{bmatrix} 1 &0 \\ 0& 1 \end{bmatrix},但是他应该是H=\begin{bmatrix} 1 &0 \\ 0& 0 \end{bmatrix},因为什么呢,因为

\frac{1}{C}\int Idt无法观测到,写了1就说明观测的到,但是我们观测不到所以这里是0.

我们的目标就是找到最优的估计值,先验就是我们要通过我们的预测方程来达到一个预测估计值 

\hat{x}_{k}就是说我们已经测量z_{k}了,也就是说已经拿到预测值\hat{x}_{k}^{-}还有测量值z_{k}了,我们对他进行矫正,矫正得到了一个最优的估计值,然后就会得到我们的先验估计误差和后验估计误差

下面就是我们的预测方程,上面讲过

 然后我们找到了先验估计误差跟后验估计误差,就有了先验估计误差的协方差还有后验估计误差的协方差

优化思路

卡尔曼滤波详细解释

我们对一个硬币进行测量三次,那我们怎么去估计这个值呢,一般我们的第一思路就是求平均值

经过转换我们可以看到这个等式

随着k的增加我们可以知道,这个\frac{1}{k}趋近于0

这个也很好理解,就是说当我们有了大量的数据,我们对估计的结果就很有信心了

数据比较少的时候,作用就大了

让我们换种表达方式

可以 看到我们的新一次的估计值与上一次的估计值有关,上一次的就跟上上一次的有关,这就是卡尔曼滤波的递归思想。

这个时候我们引入估计误差跟测量误差的概念,我们可以知道当估计误差远大于测量误差的时候,我们的卡尔曼增益是趋近于1的,这个时候我们就带入原来的公式,可以看到我们的估计值是等于测量值的,也就是说我们更加相信这个测量值。

当估计误差远小于测量误差的时候,我们的卡尔曼增益系数就接近于0,我们的估计值就相信上一次的估计值

举个例子

我们先引入三个公式,前面两个就是我们上面推出来的公式,第三个是我们的更新估计误差的公式

再引入我们的数据,还是测长度。

我们的实际长度是50mm,估计长度是40mm,估计误差在5mm,我们第一次的测量值为51mm,测量误差是3mm,也就是说我们测量的值在48-54mm之间,使用的是同一个测量工具,所以它第几次的测量误差都是3mm

然后我们就可以进行计算

然后我们继续进行第二次的计算

我们第二次测量的值为48,测量误差还是3mm

我们继续进行计算,可以看到我们的卡尔曼增益根据上一次的估计误差进行了更新

我们的估计值也由于卡尔曼的增益上一次的估计值进行了更新

我们的估计误差根据我们的卡尔曼增益上一次的估计误差进行了更新

然后剩下的我们使用excel进行计算

我们的测量误差就是3,只要保证在50上下范围3左右浮动就可以了

然后先计算我们的K_{k}

再计算我们的估计值\hat{x}_{k}

再计算我们的估计误差

这里可以看到这里的蓝色是我们的测量结果,红色是我们估计的结果,我们的估计值从一开始的40开始上升,慢慢逐渐到我们的49附近,再慢慢靠近我们的实际值,我们知道这个50是我们的实际尺寸

数学基础——数据融合,协方差矩阵,状态空间方程,观测器

方差

这两个是一样的

数据融合——Data Fusion

假设我们现在有两个称,去称一个东西,得到两个结果,而且我们知道这两个称都不准,得到两个结果一个是Z_{1},另一个是Z_{2}

我们可以知道他的正态分布和概率(积分可以算)

机器视觉中应用正态分布

正态分布概率计算

不知道正态分布的的可以看一下上面这两个链接

这时候我们知道了这两个结果,这个时候我们要去估算这两个真实值,是多少呢?

凭感觉来讲,应该是在这两个分布的中间,而且第一个的误差小,因为他的标准差小

所以真实值更靠近第一个称称出来的结果,大概在绿线的位置

如果要从数学上找到一个最优的估计值应该怎么做?

这个时候就要用到我们之前所说的Kalman Gain的思想了

下面我们就是要去求解K了,就是使得我们的估计值的标准差最小,也就是方差最小

为什么?

因为方差越小越接近真实值

对其求导(令他为0),可以得到我们的极值,然后再带入我们的方差值,就可以知道我们的k

有了k以后我们再把k带入上面的式子

可以得到

也就是说,根据这两个称的特性测量出来的结果我们做出了预测,这个预测就是30.4g,并且通过数学证明了他就是最优解

回到我们之前的这一步,我们,这时候我们就可以去更新我们的估计误差

这个时候去计算他的方差

带入到蓝色的地方

就得到了我们估计值跟估计误差(方差)

这就是他的图,这个过程就叫做数据融合

协方差矩阵

举个例子

 这里我们取三个人最基本的数据,身高,体重,年龄。并求平均值,方差,协方差

从这里的协方差可以反应出如果这里两个相乘项都小于平均值,那么两个数相乘都是正的,如果都大于平均值,两个数相乘也是正的。如果一个大一个小,那么两个值相乘就是负的了。

结果:1、如果求出来的协方差两个值都是正的话,那就说明这两个变量方向就是一样的(正相关)

2、如果是负的话,那就说明这两个变量变化方向是相反的

同样我们可以求出来另外两个的协方差

然后我们的协方差矩阵就是这种形式,带入数据,我们就可以分析各个数据之间的关系了

然后我们再可以扩展一下,在扩展之前,我们分析一下

如何通过矩阵的运算来计算协方差

首先我们去求一个过渡矩阵

我们可以知道a矩阵的后面两个矩阵相乘再乘三分之一就是一个求平均值

计算一下,其实就是对应的,通过这样的方法我们就能算出来协方差矩阵了

这里我们给出了15个队员,然后右边的就是他们的协方差矩阵,我们先看对角线的数据

可以看到他们之间的方差变化是蛮大的

也就是说如果想成为射手的话,并不局限于身高和体重,年龄的跨度也是比较大的,19.4的方差相当于有四岁多的标准差,±4岁也就是8岁,跨度也是不少的,所以说一个射手的年龄关系不是特别大。

首先我们看体重跟身高,首先就是29.75,说明体重跟身高是非常正相关的,随着身高增加体重也增加,然后我们看年龄跟体重,年龄跟身高,他们之间的相关性非常小。说明对于这些运动员来说

 他们的身高体重年龄就没有太多的关系。

状态空间表达

现代控制理论就是以状态空间为基础的,有兴趣可以看这个up主的视频

【Advanced控制理论】1_介绍_哔哩哔哩_bilibili

这里我们给出最基础的概念

例子

一个弹簧阻尼系统,质量为m,向右施加的力为F,向右的方向是x,弹簧的胡克系数是k,B是他的阻尼系数。他的动态方程如下图所示

然后我们可以把F定义为u,也就是系统的输入。

首先我们把他化成状态空间的表达式就是首先要确定两个状态变量

然后做一个等量代换,就用两个一阶微分方程把这个形式表达出来了。

如果我们这里还有测量量,我们可以把它定义为Z1,测的是他的位置,Z2测的就是它的速度

然后我们把上面的4个式子用矩阵的方式紧凑的表达出来

我们就去填一个数

根据上面的式子可以得到

而测量的方程就可以这样表达

完整的表达

这就是状态空间的表达形式

我们可以归纳一下(蓝字)

这就是一种连续的表达形式

我们可以看到状态变量的方程哪里有对Xt的导数,体现了随时间的变化

如果我们将其写成离散的形式,每相隔一个时刻来看一下这个变化的话,就可以写成这样的形式

这里的下标k,k-1,k+1每一个单位1都代表了一个时间单位,叫做sample time(采样时间)也代表了一种变化趋势

从离散型到连续型并不是照抄上面的矩阵结果,需要根据采样时间来进行计算(不是这次重点讨论的结果,只需要记得基本的概念),体现的是一种变化,从上一步到这一步的变化。

然后我们回到之前的讲过的

数据融合的例子

我们知道世界中,充满了不确定性,比如我们的模型不准确,这时候我们就可以加一点不确定性,加一个w_{k-1},在测量当中我们也可以加上v_{k},这是在测量当中产生的不确定性。现在我们就是有了两个不确定性,也就是说模型也不准确,测出来的值也不准确。

在这两个都不准确的情况下,如何去测量一个精确的\hat{x}_{k}呢?

这就是我们卡尔曼滤波器去解决的问题

我们现在遇到的情况跟之前的也是差不多的,只不过我们现在是一个不太准的计算结果和一个不太准的测量结果,我们要根据这两个结果来估计出来一个相对准确的值。来找到一个比他们两个误差都要小的结果,这也就是我们后面要重点分析的。

卡尔曼滤波详细数学推导

引入概念

期望是什么?

在统计学和概率论中,"期望"是一个随机变量的平均值,表示该随机变量的平均预期结果。在离散随机变量的情况下,期望可以通过对所有可能取值的概率加权平均得到。在连续随机变量的情况下,期望则是对变量的值乘以其概率密度函数(PDF)进行积分得到。

设随机变量为X,它的取值为{x1, x2, ..., xn},对应的概率为{p1, p2, ..., pn},则X的期望E(X)可以表示为:

E(X) = x1p1 + x2p2 + ... + xn*pn

换句话说,期望就是所有可能取值的加权平均值。

例如,假设有一个掷骰子的游戏,骰子的点数为1到6,每个点数出现的概率都是1/6。那么掷骰子的期望就是:

E(X) = (11/6) + (21/6) + (31/6) + (41/6) + (51/6) + (61/6) = 3.5

这表示掷骰子的平均预期点数为3.5。

方差是什么?

方差是衡量随机变量离散程度的一个统计量,它表示随机变量与其期望值之间的偏离程度。如果一组数据的方差较大,则说明数据的离散程度较高;反之,方差较小则说明数据较为集中。

可以跟着一起拿纸算一下,在之前我们了解了状态空间方程的表达形式,借此来描述一个系统的动态响应

这里面我们x_{k}是他的状态变量,A是他的状态矩阵,B是控制矩阵,u_{k-1}是控制,w_{k-1}是过程噪声,然后过程噪声是我们不可测的,也是我们没有办法掌握的一个内容,因为他是一个不确定性的表现,在自然界我们一般将其假设为符合正态分布,也就是他的概率分布。

他的概率分布就是也就是概率分布p(w),0代表了它的期望,Q代表了他的协方差矩阵

然后Q又等于w乘w的转置

这个公式是怎么来的呢? 我们用简单的例子说明一下

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

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

相关文章

如何将应用一键部署至多个环境?丨Walrus教程

在 Walrus 平台上,运维团队在资源定义(Resource Definition)中声明提供的资源类型,通过设置匹配规则,将不同的资源部署模板应用到不同类型的环境、项目等。与此同时,研发人员无需关注底层具体实现方式&…

CSS元素显示模式

CSS元素显示模式 定义&#xff1a;元素显示模式是指元素&#xff08;即标签&#xff09;以什么方式进行显示。 HTML元素分为块元素和行内元素 块元素 常见块元素 &#xff08;下列仅举出部分&#xff09; <h1>~<h6>、<p>、<div>、<ul>、<…

【数据分享】2008-2022年全国范围逐月NO2栅格数据(免费获取)

空气质量数据是在我们日常研究中经常使用的数据&#xff01;之前我们给大家分享了2000-2022年全国范围逐月的PM2.5栅格数据、2013-2022年全国范围逐月SO2栅格数据、2013-2022年全国范围逐月CO栅格数据和2000-2022年全国范围逐月PM10栅格数据&#xff08;可查看之前的文章获悉详…

properties文件和yml文件的区别以及文件优先级

properties文件和yml文件的区别 yml是按照缩进关系&#xff0c;而properties用"."来表示关系springboot默认生成的是properties文件当properties文件和yml文件都存在时&#xff0c;properties文件的优先级更高。 properties文件的样式 yml文件的样式 文件优先级 r…

Shell常用脚本:hadoop集群启动、停止、重启脚本

脚本内容以我搭建的hadoop集群为例&#xff0c;你们自用的时候自行根据你们的情况进行修改即可 hadoop-cluster-manager.sh #!/bin/bash # 1. 调用此脚本前&#xff0c;请使用ssh-keygen -t rsa、ssh-copy-id -f 目标机器这两个命令使得目标机器是免密登录的 # 2. ssh远程执行…

第五篇【传奇开心果系列】Python的自动化办公库技术点案例示例:深度解读Pandas在教育数据和研究数据处理领域的应用

传奇开心果博文系列 系列博文目录Python的自动化办公库技术点案例示例系列 博文目录前言一、Pandas 在教育和学术研究中的常见应用介绍二、数据清洗和预处理示例代码三、数据分析和统计示例代码四、数据可视化示例代码五、时间序列分析示例代码六、数据导入和导出示例代码七、数…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的障碍物检测系统(深度学习代码+UI界面+训练数据集)

摘要&#xff1a;开发障碍物检测系统对于道路安全性具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个障碍物检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5&#xff0c;展示了不同模型间的性能…

JavaParser的快速介绍

开发的工作主要是写代码&#xff0c; 有考虑过使用代码写代码&#xff0c; 使用代码分析和改进代码吗&#xff1f; JavaParser 就可以帮你用来处理Java 代码的这些功能。 Java Parser 的介绍 Java Parser是一个用于解析和分析Java源代码的开源工具。它提供了一个API接口&…

Tomcat Nginx的动静分离

1.单机反向代理&#xff1a; 实验&#xff1a;7-3 做客户机&#xff0c;7-2做代理服务器&#xff0c;7-1 tomcat 服务器 数据传输从7-3到7-2到7-1 配置&#xff1a; 7-1为之前的虚拟机配置 7-2做代理服务器配置&#xff1a; 7-3客户机配置&#xff1a; 测试&#xff1a; 2…

3.自定义工程目录配置CMakeLists

问题背景 熟悉stm32keil开发的都知道&#xff0c;我们在编写不同的外设时&#xff0c;通常都会单独编写一个app文件夹或者是user文件夹之类的来存放不同外设功能的源文件和头文件。 在前面一节2.构建第一个工程并烧录到ESP32开发板-CSDN博客中&#xff0c;我们是使用了一个乐鑫…

elementui el-table表格自动循环滚动【超详细图解】

效果如图 1. 当表格内容超出时&#xff0c;自动滚动&#xff0c;滚动到最后一条之后在从头滚动。 2. 鼠标移入表格中&#xff0c;停止滚动&#xff1b;移出后&#xff0c;继续滚动。 直接贴代码 <template><div><div class"app-container"><e…

AI智能分析网关V4将HTTP消息推送至安防监控视频汇聚EasyCVR平台的操作步骤

TSINGSEE青犀视频智能分析网关V4内置了近40种AI算法模型&#xff0c;支持对接入的视频图像进行人、车、物、行为等实时检测分析&#xff0c;上报识别结果&#xff0c;并能进行语音告警播放。硬件管理平台支持RTSP、GB28181协议、以及厂家私有协议接入&#xff0c;可兼容市面上常…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的输电线路设备检测系统(深度学习+UI界面+Python代码+训练数据集)

摘要&#xff1a;本篇博客详细介绍了如何运用深度学习构建一个先进的输电线路设备检测系统&#xff0c;并附上了完整的实现代码。该系统利用了最新的YOLOv8算法作为其核心&#xff0c;同时也对之前版本的YOLOv7、YOLOv6、YOLOv5进行了性能比较&#xff0c;包括但不限于mAP&…

Pytorch搭建AlexNet 预测实现

1.导包 import torch import matplotlib.pyplot as plt import json from model import AlexNet from PIL import Image from torchvision import transforms 2.数据预处理 data_transform transforms.Compose([transforms.Resize((224, 224)), # 将图片重新裁剪transform…

<线性回归算法(Linear regression)>——《机器学习算法初识》

目录 一、线性回归简介 1 线性回归应用场景 2 什么是线性回归 2.1 定义与公式 2.2 线性回归的特征与目标的关系分析 3 小结 二、线性回归的损失和优化 1 损失函数 2 优化算法 2.1 正规方程 2.1.1 什么是正规方程 2.1.2 正规方程求解举例 2.1.3 正规方程的推导 2.…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的田间杂草检测系统(深度学习模型+UI界面+Python代码+训练数据集)

摘要&#xff1a;开发用于田间杂草识别的系统对提高农业运营效率和提升作物产出至关重要。本篇文章详尽阐述了如何应用深度学习技术开发一个用于田间杂草识别的系统&#xff0c;并附上了完备的代码实现。该系统基于先进的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5…

AXI CANFD MicroBlaze 测试笔记

文章目录 前言测试用的硬件连接Vivado 配置Vitis MicroBlaze CANFD 代码测试代码测试截图Github Link 前言 官网: CAN with Flexible Data Rate (CAN FD) (xilinx.com) 特征: 支持8Mb/s的CANFD多达 3 个数据位发送器延迟补偿(TDC, transmitter delay compensation)32-deep T…

在Linux/Ubuntu/Debian中设置字体

下载字体。 下载你喜欢的字体&#xff0c;双击并安装。 之后更新字体缓存&#xff1a; fc-cache -f -v安装 GNOME 调整。 GNOME Tweaks 是一个工具&#xff0c;允许你自定义 GNOME 桌面环境的各个方面&#xff0c;包括字体。 如果你还没有安装 GNOME Tweaks&#xff1a; …

PLC实验—西门子S7 1200读取旋转编码器数据并计算电机转速

PLC实验—西门子S7 1200读取旋转编码器数据并计算电机转速 注意PTO控制步进电机实验博途软件需要V14版本&#xff0c;不然没有PTO功能块 软件的下载请点击下方百度网盘的链接 链接&#xff1a;https://pan.baidu.com/s/11mQFVnaQxrUy4W9nGIk8Jw 提取码&#xff1a;6lva 详细的…

ubuntu20.04上获取Livox Avia雷达点云数据

若拿到手的Livox Avia激光雷达不知道它的ip信息&#xff0c;可以在官网上LiDAR Sensors - Livox下载上位机软件Livox Viewer&#xff0c;查看IP&#xff0c;下载window版本就可以。雷达通过网线连上电脑后&#xff0c;该软件就可以自动识别出来。按照下图步骤&#xff0c;就可以…