卡尔曼滤波公式通俗理解

2024-09-01 18:08

本文主要是介绍卡尔曼滤波公式通俗理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文需要配合博客卡尔曼滤波详解进行理解

1.简单介绍

参考卡尔曼滤波详解
简单介绍
上面可简化理解为
简化理解

2.主要过程

主要过程还是参考卡尔曼滤波详解
图1
图2
图3

3.实例

这里以线性运动为例

3.1 前期定义状态和变量
3.1.1分析运动情况

已知线性运动上一状态和当前状态的关系,假设没有噪声干扰,为
{ x ′ = x + v x Δ t y ′ = y + v y Δ t \begin{cases} x'=x+v_x \Delta t \\ y'=y+v_y \Delta t \\ \end{cases} {x=x+vxΔty=y+vyΔt

3.1.2 定义跟踪状态和状态转移矩阵

[ x y v x v y ] \left[ \begin{matrix} x \\ y \\ v_x \\ v_y \\ \end{matrix} \right] xyvxvy
则根据3.1.1可以得到状态转移关系
[ x ′ y ′ v x ′ v y ′ ] = [ 1 0 Δ t 0 0 1 0 Δ t 0 0 1 0 0 0 0 1 ] [ x y v x v y ] \left[ \begin{matrix} x' \\ y' \\ v_x' \\ v_y' \\ \end{matrix} \right]= \left[ \begin{matrix} 1 & 0 & \Delta t & 0\\ 0 & 1 & 0 & \Delta t \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{matrix} \right] \left[ \begin{matrix} x \\ y \\ v_x \\ v_y \\ \end{matrix} \right] xyvxvy=10000100Δt0100Δt01xyvxvy

A = [ 1 0 Δ t 0 0 1 0 Δ t 0 0 1 0 0 0 0 1 ] A=\left[ \begin{matrix} 1 & 0 & \Delta t & 0\\ 0 & 1 & 0 & \Delta t \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{matrix} \right] A=10000100Δt0100Δt01
加上状态转移噪声
x k = A x k − 1 + w x_k=Ax_{k-1}+w xk=Axk1+w

3.1.3 定义状态到观测转移矩阵

由于在实际过程中,我们只观测到位置 [ z x z y ] \left[ \begin{matrix} z_x \\ z_y \\ \end{matrix} \right] [zxzy]所以我们要得到从跟踪状态 [ x y v x v y ] \left[ \begin{matrix} x \\ y \\ v_x \\ v_y \\ \end{matrix} \right] xyvxvy [ z x z y ] \left[ \begin{matrix} z_x \\ z_y \\ \end{matrix} \right] [zxzy]的转换矩阵,假设我们观察的位置没有噪声干扰则:
[ z x z y ] = [ 1 0 0 0 0 1 0 0 ] [ x y v x v y ] \left[ \begin{matrix} z_x \\ z_y \\ \end{matrix} \right]= \left[ \begin{matrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ \end{matrix} \right] \left[ \begin{matrix} x \\ y \\ v_x \\ v_y \\ \end{matrix} \right] [zxzy]=[10010000]xyvxvy

H = [ 1 0 0 0 0 1 0 0 ] H=\left[ \begin{matrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ \end{matrix} \right] H=[10010000]
加上测量噪声可得到
z k = H x k + v z_k=Hx_k+v zk=Hxk+v
由上面三部我们就基本把所需要的变量定义完了,下面就需要进行预测和矫正了

3.4 卡尔曼滤波过程

假设我们来了一帧数据
[ z x z y t ] \left[ \begin{matrix} z_x \\ z_y \\ t \\ \end{matrix} \right] zxzyt
其中 [ z x z y ] \left[ \begin{matrix} z_x \\ z_y \\ \end{matrix} \right] [zxzy]为观测数据, t t t为当前时间,则进行下面步骤:

  • (预测)根据 t t t和上一帧位置,预测当前帧位置,同时计算预测误差 P k ‾ \overline{P_k} Pk
  • (矫正)求出卡尔曼增益,计算最优位置估计,计算当前估计误差 P k P_k Pk
3.2.1 预测

求出 Δ t = t − t p r e \Delta t=t-t_{pre} Δt=ttpre,根据3.1.1估算当前位置
[ x ′ y ′ v x ′ v y ′ ] = [ 1 0 Δ t 0 0 1 0 Δ t 0 0 1 0 0 0 0 1 ] [ x y v x v y ] \left[ \begin{matrix} x' \\ y' \\ v_x' \\ v_y' \\ \end{matrix} \right]= \left[ \begin{matrix} 1 & 0 & \Delta t & 0\\ 0 & 1 & 0 & \Delta t \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{matrix} \right] \left[ \begin{matrix} x \\ y \\ v_x \\ v_y \\ \end{matrix} \right] xyvxvy=10000100Δt0100Δt01xyvxvy
x k ^ ‾ = A x k − 1 ^ \overline{\hat{x_k}}=A\hat{x_{k-1}} xk^=Axk1^
计算当前估计误差,结合基本公式(过程噪声 Q Q Q)
P k ‾ = A P k − 1 A T + Q \overline{P_k}=AP_{k-1}A^T+Q Pk=APk1AT+Q

3.2.2 矫正

结合基本公式
计算卡尔曼增益(测量噪声 R R R)
K k = P k ‾ H T ( H P k ‾ H T + R ) − 1 K_k=\overline{P_k}H^T(H\overline{P_k}H^T+R)^{-1} Kk=PkHT(HPkHT+R)1
计算最优位置估计
x k ^ = x k ^ ‾ + K k ( z k − H x k ^ ‾ ) \hat{x_k}=\overline{\hat{x_k}}+K_k(z_k-H\overline{\hat{x_k}}) xk^=xk^+Kk(zkHxk^)
计算估计误差
P k = ( I − K k H ) P k ‾ P_k=(I-K_kH)\overline{P_k} Pk=(IKkH)Pk

3.2.3 实际过程

综上,我们在实际过程中,只要设置好

  • 跟踪变量 x x x
  • 状态转移矩阵 A A A
  • 状态到观测矩阵 H H H
  • 状态转移噪声 Q Q Q
  • 测量噪声 R R R
  • 初始估计误差 P k P_k Pk(设置不能太小)
  • 第一次需要设置 x k ^ \hat{x_k} xk^的值
    就可以了

这篇关于卡尔曼滤波公式通俗理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1127673

相关文章

深入理解go中interface机制

《深入理解go中interface机制》本文主要介绍了深入理解go中interface机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前言interface使用类型判断总结前言go的interface是一组method的集合,不

Java Spring的依赖注入理解及@Autowired用法示例详解

《JavaSpring的依赖注入理解及@Autowired用法示例详解》文章介绍了Spring依赖注入(DI)的概念、三种实现方式(构造器、Setter、字段注入),区分了@Autowired(注入... 目录一、什么是依赖注入(DI)?1. 定义2. 举个例子二、依赖注入的几种方式1. 构造器注入(Con

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

spring IOC的理解之原理和实现过程

《springIOC的理解之原理和实现过程》:本文主要介绍springIOC的理解之原理和实现过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、IoC 核心概念二、核心原理1. 容器架构2. 核心组件3. 工作流程三、关键实现机制1. Bean生命周期2.

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

利用Python实现添加或读取Excel公式

《利用Python实现添加或读取Excel公式》Excel公式是数据处理的核心工具,从简单的加减运算到复杂的逻辑判断,掌握基础语法是高效工作的起点,下面我们就来看看如何使用Python进行Excel公... 目录python Excel 库安装Python 在 Excel 中添加公式/函数Python 读取

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.