卡尔曼滤波的理解

news2024/11/26 13:51:50

看了B站up主DR_CAN讲的卡尔曼滤波(链接)。up讲的非常好,强烈推荐,看完终于明白了卡尔曼滤波的奥秘。下面是我对其中内容的注解,或者说自己的理解。大部分推导省略了,但保留了算法的思想脉络。

引入

首先看算法是干什么的。

我们假设一种场景,雷达跟踪飞机的运动。我们在各个离散的时间点测量飞机的位置。我们假设知道了飞机在k-1时刻的位置x_{k-1},要预测它在k时刻的位置x_k。为什么要预测呢,因为方便我们对它进行跟踪。我们有两种办法得到位置x_k

  • 我们通过某种经验假设认为飞机符合某种运动规律,比如匀加速运动,也就是说,我们可以建立某种运动模型。这样,假设模型是完美的,那么根据x_{k-1},我们就可以算出k时刻的位置x_k。然而,模型里面存在一定的不确定性,里面存在随机的因素,这样,我们就不能准确得到位置x_k,而是得到一个位置的估计\hat{x}_k^-
  • 我们可以直接测量k时刻的位置,记为\hat{x}_{kmea}。然而,测量也存在随机的因素,不能准确测量,因此,\hat{x}_{kmea}也是真实位置的一个估计。

可以看到,我们可以得到真实位置的两个估计,一个是通过运动模型计算出来,一个是测量出来的。而二者都不等于真实位置,而是存在一定的误差。我们接下来的任务是,根据这两个估计来进行某种运算,得到一个最终的、更准确的估计值

一个最直接的思路是对二者取平均。但是,假设我们知道,我们测量的准确度高于模型的准确度,那么,我们更应该相信测量的值,反之同理。也就是说,我们需要一个加权平均,如下:

\hat{x}_k = (1-G)\hat{x}_k^-+G\hat{x}_{kmea}

转换一下得到:

\hat{x}_k = \hat{x}_k^-+G(\hat{x}_{kmea}-\hat{x}_k^-)                                                      (1)

那么问题就成了如何选择G,使得我们的估计效果最好,或者说在某种意义下最优。这正是卡尔曼滤波所要完成的任务。

状态空间方程

(一)假设k时刻的状态x_k与k-1时刻的状态x_{k-1}、k-1时刻的控制量u_{k-1}存在如下关系:

x_k=Ax_{k-1}+Bu_{k-1}+w_{k-1}                                                (2)

其中,状态就是我们关注的变量,如上面的飞机位置。由于存在多个状态变量,因此它一般是一个向量。控制量则是外界施加的某种作用量,是一个确定的量。A和B都是矩阵。而w_{k-1}过程噪声,用于刻画模型的不确定性。它是一个随机过程,或者说对某个确定的k,它是一个随机变量。

(二)假设k时刻的测量值与k时刻的状态的关系如下:

z_k=Hx_k+v_k                                                                         (3)

其中,v_k测量噪声,用于刻画测量的不确定性。

估计过程

(一)我们先根据式(2)求出x_k的一个估计:

\hat{x}_k^-=A\hat{x}_{k-1}+Bu_{k-1}

我们省去了过程噪声w_{k-1},因为它是个随机变量,我们没办法知道它的准确值,所以不考虑它。\hat{x}_k^-称为先验估计,可以理解为一种初步的估计。需要注意的是,\hat{x}_{k-1}上面也有一个尖尖,它也是一个估计值,因为真实值是永远不知道的。

(二)根据式(3)求出x_k的另一个估计:

\hat{x}_{kmea}=H^{-1}z_k

这里也省去了测量噪声v_k

(三)接下来根据式(1),做加权平均:

\hat{x}_k = \hat{x}_k^-+G(\hat{x}_{kmea}-\hat{x}_k^-)=\hat{x}_k^-+G(H^{-1}z_k-\hat{x}_k^-)

通常,我们会做个变量代换,令G=K_kH,得到:

\hat{x}_k =\hat{x}_k^-+K_k(z_k-H\hat{x}_k^-)

其中,K_k称为卡尔曼增益,其实它就是一个权重,用于控制我们对于模型估计量和测量估计量之间的倾向程度。\hat{x}_k称为后验估计,也就是我们依据测量值做的进一步估计,是最终的估计值。

卡尔曼增益

接下来,就是要找到一个合适的K_k。我们自然希望K_k使得估计误差最小,即\hat{x}_k最接近于x_k估计误差为:

e_k=x_k-\hat{x}_k

注意,e_k是一个零均值的随机变量,它的方差越小,它就越接近0,\hat{x}_k就越接近于x_k。由于e_k实际上是一个向量,所以我们的目标就是使得e_k协方差矩阵的迹最小,也就是各个方差之和最小。

接下来,先求出e_k的协方差矩阵P_k,这个过程就不写了,DR_CAN的视频里给出了详细的推导。P_k的公式看着很复杂,其实涉及到的无非是线性代数和概率论的一些基本知识。P_k如下:

P_k=P_k^--K_kHP_k^--P_k^-H^TK_k^T+K_kHP_k^-H^TK_k^T+K_kRK_k^T     (4)

其中,P_k^-先验估计误差e_k^-=x_k-\hat{x}_k^-的协方差矩阵,后面会推导;R是测量噪声v_k的协方差矩阵,是已知的。

接下来求P_k的迹,并对K_k求导,令导数=0,就得到最优的K_k

K_k=P_k^-H^T(HP_k^-H^T+R)^{-1}                                       (5)

误差的协方差矩阵

式(5)中,P_k^-目前还不知道。可以求出,

P_k^-=AP_{k-1}A^T+Q

其中,Q是过程噪声w_{k-1}的协方差矩阵,也是已知的。

可见,我们还需要求出P_k,用于下一次计算P_{k+1}^-。我们把式(5)带入到式(4)中,就可以求出:

P_k=(I-K_kH)P_k^-

总体算法流程

于是,我们得到了总的算法流程。

(1)计算先验估计

\hat{x}_k^-=A\hat{x}_{k-1}+Bu_{k-1}

(2)计算先验误差的协方差矩阵

P_k^-=AP_{k-1}A^T+Q

(3)计算卡尔曼增益

K_k=P_k^-H^T(HP_k^-H^T+R)^{-1}

(4)计算后验估计

\hat{x}_k =\hat{x}_k^-+K_k(z_k-H\hat{x}_k^-)

(5)更新误差协方差矩阵

P_k=(I-K_kH)P_k^-

以上5步不断进行迭代,就是我们根据先验估计和测量值计算后验估计值,来逼近真实值的过程。

在迭代刚开始,需要初始的状态\hat{x}_0和误差协方差矩阵P_0。可以以0时刻的测量值作为初始状态。

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

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

相关文章

Verilog基础之十七、锁相环PLL

目录 一、前言 1.1 背景 1.2 PLL结构 二、工程设计 2.1 PLL IP核配置 2.2 设计代码 2.3 测试代码 2.4 仿真结果 2.5 常见问题 一、前言 1.1 背景 若将一个FPGA工程看做一个人体,时钟的重要性丝毫不亚于心脏对于人体的重要性,时钟的每一个周期对…

支付、购物车、搜索、文件上传、登录、还款、订单测试怎么做?

支付功能怎么测试:1、从功能方面考虑: 1)、正常完成支付的流程; 2)、支付中断后继续支付的流程; 3)、支付中断后结束支付的流程; 4)、单订单支付的流程; 5&am…

【无标题】(前沿)

Java编程语言 目前为止最流行的 是Java编程语言 但是编程与语言有很多中php。phyone。 c c. c# java html. css javascript vue() 说到计算机有很多同学会说,就有很多人会说35的节点,我问一下同学们现在哪一个行业,是没有35岁的节点&#x…

7.5 SpringBoot 拦截器Interceptor实战 统一角色权限校验

文章目录 前言一、定义注解annotation二、拦截角色注解1. 在拦截器哪里拦截?2. 如何拦截角色注解?3. 角色如何读取?4. 最后做角色校验 三、应用:给管理员操作接口加注解四、PostMan测试最后 前言 在【7.1】管理员图书录入和修改API&#xf…

c语言指针进阶(二)

目录 引言 函数指针数组 指向函数指针数组的指针 回调函数 引言 大家好,我是c语言boom成家宝,今天博主带来的依然是指针的进阶讲解。上一篇博客博主有介绍指针,数组指针,指针数组,以及函数指针的概念以及应用&…

【Azure】Azure成本管理:规划、监控、计算和优化成本 [文末送书]

开篇先来一个不是总结的总结:平衡成本与性能始终是一个重大挑战。(此处省略各种场景的解释) 文章目录 前言一、Azure 成本管理工具1.1 什么是成本管理1.2 成本管理的主要功能 二、Azure 中可能影响成本的因素2.1 影响成本的因素2.1.1 资源类型…

leetcode|math|9.172.69.50.

9. Palindrome Number to_string 就行 172. Factorial Trailing Zeroes 不能直接乘起来,会overflow!! 166! 就是要找166乘到1一共有几个5。5,10,15,25...都算。166/5就是算一共有几个5。但是25其实贡献了…

【周末闲谈】感受AI时代魅力,创意无界限

i 个人主页:【😊个人主页】 系列专栏:【❤️周末闲谈】 文章目录 前言人工智能的应用领域问题求解逻辑推理与定理证明自然语言处理智能信息检索技术专家系统 人工智能的三大短板展望未来从专用智能向通用智能发展从人工智能向人机混合智能发展…

Jdk 版本升级

Jdk 版本升级(多版本配置) 一、配置多版本 首先如果系统第一次安装JDK 1.登录oracle官网Java Downloads | Oracle下载,此教程以Jdk1.8为例,一键下一步即可安装成功。 2.配置环境变量 然后在系统path路径中添加: %JAVA_HOME%…

单片机第一季:零基础10——串口通信和RS485

目录 1,串口通讯基础 1.1,同步和异步 1.2,并行和串行 1.3,单工、半双工与全双工通信 1.4,通信速率 2,单片机串口通讯 2.1,接口标准 2.2,通讯协议 2.3,串口…

834. 树中距离之和

给定一个无向、连通的树。树中有 n 个标记为 0…n-1 的节点以及 n-1 条边 。 给定整数 n 和数组 edges , edges[i] [ai, bi]表示树中的节点 ai 和 bi 之间有一条边。 返回长度为 n 的数组 answer ,其中 answer[i] 是树中第 i 个节点与所有其他节点之间…

opencv环境搭建

1. 上网(你懂的,没有网装不了) 2. 参考视频:https://www.bilibili.com/video/BV1R44y157hW/?spm_id_from333.880.my_history.page.click&vd_source377867a48dd3d812b9d6521c8fc76de2 3. 这里我选择的是4.8的版本。 4. cmak…

charles中下载web证书

1.点击help,选中ssl Proxying ,点击Install Charles Root Certificate 2:点击”安装证书”按钮 3:点击”下一步”按钮 4:选中”将所有的证书都放入下列存储”,点击”游览”按钮 5:选中”受新任的根证书颁发机构”&…

day37-框架

0目录 框架 1.框架介绍 2. SSM三大框架简介 3.Mybatis 4.拓展 1.框架介绍 1.1 为什么使用框架? (1)框架效率高,成本低 (2)框架是别人写好的构建,我们只需学会如何使用它(可维护性…

C++(12):动态内存

除了自动和static对象外,C还支持动态分配对象。动态分配的对象的生存期与它们在哪里创建是无关的,只有当显式地被释放时,这些对象才会销毁。 静态内存 用来保存局部static对象、类static数据成员以及定义在任何函数之外的变量。 栈内存 用来…

mysql_to_clickhouse同步方案调研

调研时间:2021年08月,之后是否出现优化方案未知 方式1:网上开源python脚本-----mysql-clickhouse-replication 安装参考:https://www.cnblogs.com/gomysql/p/11199856.html 软件路径:https://github.com/yymysql/my…

【C++STL】模拟实现vector容器

文章目录 前言一、vector的成员函数二、增删查改工作说明size()和capapcity()2.1reserve()2.2 resize()2.3 insert()2.4 erase()2.5 push_back()和pop_back() 三、[]重载和迭代器3.1…

ahut 周赛3

A.gzm判试卷 AhutOj 线段树(注意,一定要开到4*N,不然会RE) 单点更新(求区间最值) 单点更新不需要懒标记,区间修改是大量的点,需要懒标记 AC代码: #include<iostream> #include<algorithm> #include<cstring> #include<cmath> using namespace st…

Jmeter接口测试从0到1打通,从安装到接口测试实例(超细整理)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、Jmeter简介 J…

安装adobe系列产品,提示错误代码81解决办法

安装adobe系列软件&#xff0c;如Photoshop、Premiere Pro、Illustrator等时&#xff0c;出现如下图提示错误代码81&#xff0c;如何解决呢&#xff1f;一起来看看。 解决方法一 (重启电脑等待5分钟再安装&#xff01;) 解决方法二 应用程序中打开Adobe Creative Cloud 点击…