【EKF】卡尔曼滤波原理

news2024/10/6 10:33:49

前言

本篇是最近在学习云台以及姿态融合时,想学习一下卡尔曼滤波的原理,基于 DR_CAN 老师的卡尔曼滤波的视频做的笔记,基本上是按照 DR_CAN 老师的思路自己推导计算了一遍,推荐还是看一下原视频,讲解得很不错:https://space.bilibili.com/230105574/channel/collectiondetail?sid=6939

由递归算法延伸出卡尔曼滤波的思想

对同一个物体进行测量,每次得到的测量数据不尽相同,单次测量的结果记作 z(k),如果要得到较好的实际值的估计值,一般的做法是取平均:

由上面的变换可以提炼出:

k 时刻的估计值 x_hat(k) = 上时刻的估计值 x_hat(k-1) + 系数 * (k 时刻的测量值 - 上时刻的估计值)

当测量次数 k 足够大时,x_hat(k) = x_hat(k-1) ,也就是说,估计值已经确定而不再变化,将其中的 1/k 提炼出来,记作 K(k),则上式转化为:

当前估计值 = 上次估计值 + 系数 * (当前测量值 - 上次估计值)

此递归的思想就可以延伸到卡尔曼滤波的思想,是相通的,此系数就可以类比卡尔曼增益。

在卡尔曼滤波中,其增益可简化为:

1)当估计误差远大于测量误差时,k>>1,此时 x_hat(k) = x_hat(k-1) + z(k) - x_hat(k-1) = z(k),此时就完全信任测量值

2)当测量误差远大于估计误差时,k>>0,此时 x_hat(k) = x_hat(k-1),就完全信任估计值

求卡尔曼增益

对离散状态空间引入噪声:

其中 w 表示过程噪声,v 表示测量噪声,两者都假定满足正态分布:

w ~ P(0,Q) v~P(0,R)

Q 与 R 矩阵分别时过程噪声 w 与测量噪声 v 的协方差矩阵

协方差矩阵的公式为:

在概率论中由两个基础公式比较重要,在后面的解算中会经常用到:

1)x 的方差 = x^2 的期望 + x 期望的平方

2)x与y的协方差 = x*y 的期望 + x的期望*y的期望

结合上面的两个公式,对 w,v 来说,期望值都为0 ,也就是 E(w) = 0,E(v) = 0,则

w 的方差 Var(w) = E(w^2) ( E(w) = 0 )

v 的方差 Var(v) = E(v^2) ( E(v) = 0 )

协方差矩阵的含义

例如一个二阶系统,过程噪声 w 的协方差矩阵就为:

结合上式,协方差矩阵的含义就可以理解为:

1)既可以使用主对角线的方差元素表示各状态数据的变化剧烈程度

2)又可以使用协方差元素来表示各状态数据之间的变化关系

先验估计与后验估计

对于上述的状态方程,由于过程噪声未知,将其去掉,写成一般形式的状态方程,通过 A 与 B矩阵计算得到的估计值,称作先验估计,在书写时添加负号来区分:

先验估计值也可以称作通过模型计算得到的估计值。

测量结果是可以直接获取的,通过测量结果 z(k) 可以反推测量状态 x_hat_MEA(k)

由于先验估计值与测量值都是不包含实际误差的,因此都是不可靠的。

卡尔曼滤波器的作用就是从不可靠的先验估计值与不可靠的测量值中得到可靠的估计值,最终得到的估计值就称作后验估计值

结合递归算法的思想,卡尔曼滤波的思想就可以表示为:

后验估计值 = 先验估计值 + 系数 * (测量值 - 先验估计值)

此时系数 G∈[0,1] ,在卡尔曼滤波中,通常将 z(k) 前面的系数消掉,因此将增益设置为:

G = K(k) * H

原式就变为:

如果要求解 K(k) 就需要借助误差与协方差矩阵来求解。

估计误差与协方差矩阵

引入估计误差的概念:

其中 e(k) 表示估计误差,x(k) 表示真实值,x_hat(k) 表示后验估计值

估计误差 e 满足正态分布 p(e)~(0,P),期望值为0,估计误差的协方差矩阵为 P = E[e e']

思路:如果能使协方差矩阵 P 中的主对角线元素,即方差元素值最小,则整体的估计误差 e 的变化就小。

将误差公式代入其协方差矩阵 P,得:

在将卡尔曼滤波的核心公式代入,得到估计误差的表达式:

将 x(k) - x_hat-(k) 记作先验误差 e-(k) ,使用先验误差来表示估计误差,得到:

代入求解估计误差的协方差矩阵:

在求解时,会遇到先验误差的协方差矩阵 P-(k),这个矩阵非常重要。

最终求解出的公式:

就是卡尔曼滤波推导的关键公式,在后续两个部分的求解都依赖此公式:

1)卡尔曼增益K(k)的表达式求解

2)估计误差协方差矩阵P(k) 的更新计算

卡尔曼增益的求解

求解卡尔曼增益需要引入“迹”的概念,矩阵的迹表示矩阵主对角线上的元素之和,记作 tr(A)。矩阵转置后,矩阵的迹是保持不变的。

我们得到了估计误差的协方差矩阵 P(k) 关于卡尔曼增益 K(k) 的表达式(上个步骤的求解结果),前面已经介绍:

协方差矩阵的主对角线元素就是各元素的方差,其他元素是协方差,而卡尔曼滤波的目标是求得最优的估计值,使得估计值更接近真实值,更接近真实值也就是估计误差的方差最小,如果要让估计误差的方差最小,则只需要协方差矩阵的迹最小即可。

关于迹的求解,有两个重要的结论在求解时会用到,可以简化计算:

将上面 P(k) 的表达式进行两边求迹:

之后令估计误差的协方差矩阵 P(k) 的迹对卡尔曼增益 K(k) 求导,求出其导数为0的点,就是估计误差方差最小的卡尔曼增益:

最终,根据对迹的求导,求极值,就可以得到卡尔曼增益的表达式

求先验误差的协方差矩阵

在上一小节中求解出了卡尔曼增益的表达式,但在表达式中的先验误差的协方差矩阵 P-(k) 的未知的,因此接下来就需要求解先验误差的协方差矩阵 P-(k)。

可以根据其矩阵定义,代入先验估计值的表达式,一直求解就可以得到最终的关系式:

卡尔曼滤波的五大公式

经过上面的计算之后,数据都是已知的了,之后就可以归纳出卡尔曼滤波的五大公式,包含预测与校正两方面:

更新估计误差协方差公式的来历

关于最后一个更新误差协方差的公式,在前面求解卡尔曼增益的原始等式中,包含估计误差协方差与先验误差协方差的关系:

之后利用此等式,求解出了极值时的卡尔曼增益 K(k) 的表达式,之后再将此 K(k) 的表达式回代进去,就可以得到估计误差协方差的式子了:

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

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

相关文章

5款写作神器,帮助你写出5w+爆款文案,好用到哭

我不允许还有文案小白、新手博主不知道这5款写作利器! 每次一写文案就头秃的新媒体工作者,赶紧看过来吧!这5款好用到爆的写作神器,喝一杯咖啡的时间就能完成写作。 我和同事都是用它们,出了很多的爆款,现…

shell脚本--函数

目录 一:shell函数定义 1.函数的含义 2.函数的优点 3.函数的格式 4.函数返回值 (1)return输出 (2)echo输出 二:函数传参 1.情景一 2.情景二 3.情景三 4.情景四 三:递归函数 1.递归函数定义 2.通过…

STM32F103ZET6驱动TOF250激光测距传感器

STM32驱动TOF250激光测距传感器 TOF250介绍I2C通讯协议I2C寄存器地址 TOF250引脚说明和STM32的接线和STM32的接线 程序实验结果总结 TOF250介绍 TOF250是一款基于TOF原理的单点测距雷达,采用940nm红外光源,提供了精确和可重复的远 距离测量用于高速自动对…

OceanBase写入限速源码解读

一、简介 OceanBase中的写入限速机制旨在控制系统中写入操作(一般写入操作包括插入、更新和删除等)的速率,目的是为了提高数据库系统的稳定性。本文主要通过以下2个参数来解释写入限速的实现机制。 **1.**writing_throttling_trigger_perce…

MySQL-----索引特性

文章目录 前言一、没有索引,可能会有什么问题二、认识磁盘MySQL与存储先来研究一下磁盘在看看磁盘中一个盘片扇区结论磁盘随机访问(Random Access)和连续访问(Sequential Access) 三、MySQL与磁盘交互的基本单位四、建立共识五、索引的理解建立测试表插入多条记录查看插入结果中…

程序员最终会被自己开发的轮子所淘汰吗?

螺丝刀和扳手的发明,并没有让工人下岗; 工程机械(挖掘机等)的发明,也不会让建筑工人的需求量减少; 现代医学的各种先进设备,似乎也没有让医生数量大幅减少; …… 所以,关…

【团购-自定义Cell完善 Objective-C语言】

一、我们刚才这么写,有一个问题, 1.CZGoodsCell *cell = [[NSBundle mainBundle] loadNibNamed:@“CZGoodsCell” owner : nil options : nil ] ; 这样是不是没有进行单元格重用啊, 没有重用单元格, 我们说,前面还有一个对单元格进行重用吧, static NSString *ID = @“…

4.shell函数

文章目录 shell函数shell函数的作用函数返回值函数传参函数变量作用范围递归阶乘使用函数递归目录/var/log,如果是文件直接输出文件名,如果是目录则输出目录名且输出此目录下的所有目录和文件名通过脚本输出环境变量PATH所包含的所有目录以及其中的子目录…

python的小技巧

python的小方法 (1)利用dir()这个函数方法,知道库里面的方法有些什么。(2) 利用type()这个函数方法,知道是什么类型的数据(3)从序列元素中获取元素[1]单个星号还可以在列表/元组/字典…

纯干货!蓝牙耳机哪个牌子好?性价比高蓝牙耳机推荐

蓝牙耳机是我们使用最多的数码产品之一,不论是通勤、运动、上课都少不了它。身为数码测评专员,我每天都会进行测评,对各类数码产品也有深入研究,近期很多网友咨询蓝牙耳机哪个牌子好,于是我进行深入测评后整理了这份性…

【刷题】141. 环形链表

141. 环形链表 一、题目描述二、示例三、实现思考总结 141. 环形链表 一、题目描述 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环…

基于jdk11从源码角度剖析AQS 抽象同步其的核心原理

在高并发的情况下,使用基于CAS自旋实现的轻量级锁存在恶性空自旋浪费CPU 资源和导致“总线风暴”两大问题, 解决CAS恶性空自旋的有效方法是空间换时间,常见解决方法有分散操作热点和使用队列削峰。JUC并发包使用的是队列削峰的方案解决CAS的性…

YOLOv7升级换代:EfficientNet骨干网络助力更精准目标检测

目录 一、EfficientNet骨干网络1、EfficientNet架构2、EfficientNet在目标检测中的应用3、EfficientNet分辨率的缩放4、EfficientNet深度与宽度的缩放 二、YOLOv7结构1、YOLOv7网络架构2、YOLOv7骨干网络3、YOLOv7使用了EfficientNet作为骨干网络,具有以下几个优点&…

如何基于异步消息队列进行深度学习模型推理预测?distributed inference with pytorch celery huey sqlite

文章目录 celery 简介celery in pytorchwindows 平台下使用celery 的一些问题参考文献与学习路径一些类似消息队列多进行推理预测的实现参考celery and sqlitecelery vs hueycelery 简介 先说一下celery 不支持windows 【或者说支持的不好】 pypi https://pypi.org/project/…

docker-安装prometheus

概述 什么是Prometheus 如果对Prometheus不熟悉的, 可以先了解一下Prometheus的官网或者文档; Prometheus是一个开源的系统监控和报警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF托管的项目,在kubernetes容器管理系统中&…

基于java和go-cqhttp实现QQ机器人

目录 yh-qqrobot机器人简介go-cqhttp搭建1.下载应用2.生成bat文件3. 初始化项目4. 配置5. 运行项目 yh-qqrobot搭建搭建后端1. 导入sql文件2. 配置文件3. 导入到idea 搭建前端 yh-qqrobot机器人简介 yh-qqrobot是一个基于若依框和go-cqhttp集成的系统,一开始我只是揣…

ACM 1010 | 利润计算

文章目录 0x00 前言 0x01 题目描述 0x02 问题分析 0x03 代码设计 0x04 完整代码 0x05 运行效果 0x06 总结 0x00 前言 C 语言网不仅提供 C 语言,还包括 C 、 java 、算法与数据结构等课程在内的各种入门教程、视频录像、编程经验、编译器教程及软件下载、题解博…

day2_内存区域2垃圾回收算法

文章目录 方法区1.StringTable2.StringTable的位置3.StringTable的调优 垃圾回收1. 判断垃圾2. 5种引用3. 垃圾回收算法 方法区 前面提到了方法区中的组成,它的组成主要是: class(例如它的属性,方法等)常量池(StringTable等)类加载器 在jdk 1.8中&…

【python学习】基础篇-文件与系统-文件信息获取与目录操作

python内置文件高级操作函数 删除文件 Python 没有内置删除文件的函数,但是在内置的 os 模块中提供了删除文件的 remove()函数,语法格式如下: os.remove(path) 其中,path 为要删除的文件路径,可以使用相对路径,也可以…

P1058 [NOIP2008 普及组] 立体图

题目描述 小渊是个聪明的孩子,他经常会给周围的小朋友们讲些自己认为有趣的内容。最近,他准备给小朋友们讲解立体图,请你帮他画出立体图。 小渊有一块面积为 ��mn 的矩形区域,上面有 �&#x…