卡尔曼滤波公式推导(总结)

假设 小车在t时刻的初始状态可以用Pt(当前位置),Vt(当前速度),Ut表示加速度:

预测:

利用上一个时刻的旧状态和系统的动量模型(如加速度,速度等)来预测当前时刻的状态

已知上一时刻t-1时的小车状态,那么当前时刻t小车的状态可以如下表示:

很明显上述的输入变量都是线性组合,卡尔曼滤波也被称为线性滤波器,用矩阵来表示上述公式:

其中,

公式(二)即为状态预测方程组中的第一条公式,F为状态转移矩阵,B为控制矩阵,从公式二简化一下,得到t时刻的预测状态:

上式中x顶上的hat表示为估计值(而非真实值)。等式左端部分的右上标“-”表示该状态是根据上一状态推测而来的,稍后我们还将对其进行修正以得到最优估计,彼时才可以将“-”去掉。

考虑噪声的影响,对于一维数据进行估计时,噪声可以用其方差来表示,而多维数据来说,为了综合考虑各个维度偏离其均值的程度,需要用协方差矩阵来表示。

系统中每一个时刻的不确定性都是通过协方差矩阵 Σ 来给出的。而且这种不确定性在每个时刻间还会进行传递。也就是说不仅当前物体的状态(例如位置或者速度)是会(在每个时刻间)进行传递的,而且物体状态的不确定性也是会(在每个时刻间)进行传递的。这种不确定性的传递就可以用状态转移矩阵来表示,即(注意,这里用到了前面给出的关于协方差矩阵的性质)。

预测模型本身也并不绝对准确的,所以我们要引入一个协方差矩阵 Q 来表示预测模型本身的噪声(也即是噪声在传递过程中的不确定性

公式2即是预测状态方程组中的第二条公式,它表示不确定性在各个时刻间的传递关系

测量更新:

  根据当前时刻的测量数据,利用观测矩阵和卡尔曼增益来修正预测状态

由于小车的真实状态不可知,但是我们可以得到当前时刻的观测值来对真实值进行估计。通过道路上预设的装置可以观测到小车每一个时刻的位置,观测到的值记为V(t)。而且从小汽车的真实状态到其观测状态还有一个变换关系,这个变换关系我们记为h(•),而且这个h(•)还是一个线性函数:

其中V(t)表示观测的误差。既然h(•)还是一个线性函数,所以我们同样可以把上式改写成矩阵的形式,则有:

然后,我们就可以利用上一步的预测状态来对估计的真实状态进行修正,可以得到下面公式:

是根据上一状态推测而来的,那么它与“最优”估计值之间的差距现在就是等式右端加号右侧的部分。

表示实际观察值与预估的观测值之间的残差。这个残差再乘以一个系数K就可以用来对估计值进行修正。K称为卡尔曼系数,它也是一个矩阵,它是对残差的加权矩阵

滤波增益阵首先权衡预测状态协方差矩阵Σ 和观测值矩阵R的大小,并以此来觉得我们是更倾向于相信预测模型还是详细观测模型。如果相信预测模型多一点,那么这个残差的权重就会小一点。反之亦然,如果相信观察模型多一点,这个残差的权重就会大一点。不仅如此,滤波增益阵还负责把残差的表现形式从观测域转换到了状态域。例如本题中观测值Z 仅仅是一个一维的向量,状态 x 是一个二维的向量。所以在实际应用中,观测值与状态值所采用的描述特征或者单位都有可能不同,显然直接用观测值的残差去更新状态值是不合理的。而利用卡尔曼系数,我们就可以完成这种转换。例如,在小车运动这个例子中,我们只观察到了汽车的位置,但K里面已经包含了协方差矩阵P的信息(P里面就给出了速度和位置的相关性),所以它利用速度和位置这两个维度的相关性,从位置的残差中推算出了速度的残差。从而让我们可以对状态值 x 的两个维度同时进行修正

最后需要对最优估计值的噪声分布进行更新,如下公式:

总结:

这五个公式分成预测组和更新组。

预测组总是根据前一个状态来估计当前状态;

更新组则根据观测信息来对预测信息进行修正,以期达到最优估计之目的

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

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

相关文章

MySQL(六)

集群 单节点数据库 优点:适合数据量小的网站,如企业网站。 缺点:单个数据库无法满足日益增长的读写请求; 为什么要使用集群 高可用性:站点高可用,冗余站点;服务高可用,冗余服务…

分享一个基于SpringBoot+Vue的房屋在线装修预约系统源码

💕💕作者:计算机源码社 💕💕个人简介:本人七年开发经验,擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等,大家有这一块的问题可以一起交流! 💕&…

C++学习笔记(重载、类)

C 1、函数重载2、类2.1、类的方法和属性2.2、类的方法的定义2.3、构造器和析构器2.4、基类与子类2.5、类的public、protected、private继承2.6、类的方法的重载2.7、子类方法的覆盖2.8、继承中的构造函数和析构函数 1、函数重载 函数重载大概可以理解为,定义两个名…

如何保持 SSH 会话不中断?

哈喽大家好,我是咸鱼 不知道小伙伴们有没有遇到过下面的情况: 使用终端(XShell、secureCRT 或 MobaXterm 等)登录 Linux 服务器之后如果有一段时间没有进行交互,SSH 会话就会断开 如果正在执行一些非后台命令&#…

Navicat连接mysql8.0:提示无法加载身份验证插件“caching_sha2_password”

Navicat连接mysql时,提示:Unable to load authentication plugin ‘caching_sha2_password‘. 原因:mysql 8.0 默认使用 caching_sha2_password 身份验证机制。 D:\MySQL8.0\install\bin>mysql -uroot -p123456789 #登录 mysql: [War…

单元测试界的高富帅,Pytest框架 (三) 用例标记和测试执行篇

pytest用例标记和测试执行篇 上一篇文章入门篇咱们介绍了pytest的前后置方法和fixture机制,这个章节主要给大家介绍pytest中的标记机制和用例执行的方法。pytest可以通过标记将数据传入于测试函数中,也可以通过标记中对执行的用例做筛选,接下…

04深度学习-目标检测-深度学习方法详解-Two-stage的目标检测算法

一、 深度学习目标检测算法介绍 第二篇我们介绍了目标检测中传统的算法和目标检测的方式,第三篇我们对传统的目标检测算法和深度学习目标检测算法简单做了比较,此篇记录了深度学习目标检测算法内容,深入讲述一下深度学习算法在目标检测的原理…

Transformer-2. 注意力分数

上一节记录了注意力机制的基础,这一节主要做几个实现,沐神说qkv在不同任务中的角色不一,所以后续内容才会搞懂qkv是啥玩意。 上节使用了高斯核来对查询和键之间的关系建模。 高斯核指数部分可以视为注意力评分函数(attention sco…

etcd分布式存储

etcd分布式存储 etcd简介etcd下载安装etcd常用命令etcd配置参数etcd集群golang操作etcd

SQL SERVER 如何实现UNDO REDO 和PostgreSQL 有近亲关系吗

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,SQL Server,Redis ,Oracle ,Oceanbase 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请加微信号 l…

企业架构LNMP学习笔记24

学习目标和内容: 1、能够描述高可用HA的作用 2、能够理解VIP的切换:虚拟IP。 3、能够描述keepalived作用:保持活跃。主备的服务器的关系。 4、能够理解主master和备backup服务器关系 5、能够实现主备服务器高可用配置:主服务…

[LeetCode周赛复盘] 第 112场双周赛20230903

[LeetCode周赛复盘] 第 112场双周赛20230903 一、本周周赛总结2839. 判断通过操作能否让字符串相等 I1. 题目描述2. 思路分析3. 代码实现 2840. 判断通过操作能否让字符串相等 II1. 题目描述2. 思路分析3. 代码实现 2841. 几乎唯一子数组的最大和1. 题目描述2. 思路分析3. 代码…