卡尔曼(kalman)滤波器原理

article/2025/10/5 22:19:40

引言:卡尔曼滤波器适用于线性高斯系统,若为非线性系统,可以使用扩展卡尔曼滤波器。

一、状态估算器

如下图,如果我们需要知道火箭发射时尾部内部的实际温度T_{in},这个温度与火箭的燃料输入W_{fuel}有关。但是由于里面温度过高,我们无法直接去用温度传感器去测量,那我们可以在外部用一个温度传感器去测量外部温度T_{ext},利用此测量值来得到内部温度T_{in}

同时,我们也可以推导数学方程,利用输入燃料与外部温度的关系的数学表达式得到一个外部温度\widehat{T}_{ext}, 也可以利用此温度得到一个内部温度\widehat{T}_{in}。但是,不论是T_{in}\widehat{T}_{in}都只是一个实际的近似值,这些会受到各种不确定因素的影响。

如果有一个完美的系统,使测量值T_{ext}和估算值\widehat{T}_{ext}能够互相匹配,那么计算的内部温度也会与真实的内部温度吻合,但是,事实上这样是不行的。这时就需要使用状态估算器来估算内部状态。

我们的目标是使估计的外部温度与测量的外部温度温度吻合,如果这两者相等,那么估算的内部温度也能收敛到真实的内部温度,所以我们要做的是尽量减少估算和测量的外部温度之间的差异,如下图

我们需要使误差e变得尽可能小等于0, 使用一个控制器K来对估算数据进行调节(因为测量数据T_{ext}是由温度传感器测出的,不能够改变,能人为改变的只有利用数学模型得到的估算温度\widehat{T}_{ext})。这样,我们可以得到下图,

 里面阴影部分表示状态观测器,通过与控制器K形成闭环,不断调节输出值\widehat{T}_{ext},来消除测量值T_{ext}和估算值\widehat{T}_{ext}之间的误差,这样,估算的温度就能够得到真实值。将上面的例子抽象化,得到下面的图

目标变为\widehat{x}能够逼近x,其中\widehat{x}点与x点是微分求导符号,将对应的方程相减,得到误差方程,如下图

 上图中的e_{obs}点是一个微分方程,求解微分方程得到e_{obs}如下图

 如果A-KC小于0,当t趋向于无穷时,e_{obs}也会降低趋向于0,这时\widehat{x}会收敛到x。通过控制控制器的增益K,我们就可以控制e_{obs}的衰减率,选择增益K的方法,就是卡尔曼滤波器。

二、最优状态估计

再举一个例子,当汽车行驶在公路上那个,我们需要知道汽车的位置,此时我们就可以用卡尔曼滤波器来进行估计。如下图,u_k是输入,汽车油门,那就是速度了,C是观测矩阵,在这里,我们假设简单系统,只有一个位置状态x_k为一个标量,则C等于1. y_k得到的结果为观测结果,可以认为是通过GPS得到的位置信息,他是已知的,但是他们都会存在噪声,他们都是随机的。见下图,系统模型变为

 其中,\omega _kv_k是噪声,他们都服从高斯分布,即

v\sim N(0,R) ,\omega \sim N(0,Q)

 与第一节中类似,我们可以通过一个数学模型来计算汽车的位置,那么我们可以得到下图,

 如图,卡尔曼滤波器就是根据观测值和估计值两个信息来确定汽车的最优位置。再解释一下,汽车从位置x_{k-1}到位置x_k过程中,可以得到两个值,为估计值\widehat{x}_{k}和测量值y_k,但是他们都存在高斯噪声,所以得到的结果会存在误差,这个误差可以用方差来表示,卡尔曼滤波器就是根据这两个值,得到一个方差更小的的汽车位置估计值。可以看下图,图中灰色的方差更小的估计值就是根据

估计值\widehat{x}_{k}和测量值y_k来得到的。

 三、最优状态估计算法和方程

在这里,直接引入卡尔曼滤波器方程

 可以看到他与第一节中的状态观测器方程一样,实际上,卡尔曼滤波器就是一种状态观测器。其中大括号括起来的部分是预估值,即根据前面的值估计得到现在的估计值,重写如下

 这就是卡尔曼滤波器的核心方程了。下面给出整个卡尔曼滤波器的方程组

 在这里看以看出,卡尔曼滤波器分为两步,预测和更新。

预测部分包括状态预估值和误差协方差P,状态预估值根据k-1的最优状态和当前输入u组成,A是状态转移矩阵,B是输入的一个系数,P是状态预估值的方差,用来反映预估值的不确定性,这种不确定性来自过程噪声和k-1状态的不确定性。

更新部分使用预测部分得到的值,其中K为卡尔曼增益,调整卡尔曼增益,可以使更新后的状态值误差协方差最小。\widehat{x}_{k}为更新后的状态值,P_k为更新后的状态值误差协方差。

循环上面的预测和更新部分,就是完整卡尔曼滤波器了。

注:本文参考b站MATLAB中国,链接http://【【官方中字】什么是卡尔曼滤波器 (Kalman Filters) ?(全7P) MATLAB&Simulink】https://www.bilibili.com/video/BV1V5411V72J?p=6&vd_source=a887b568bfe8c73e3ba0fa465faf2b6e

如有错误,欢迎批评指正!


http://chatgpt.dhexx.cn/article/e020tdpC.shtml

相关文章

Kalman详尽原理介绍合集

目录 前言 1.线性kalman(LKF) 1.1LKF原理简介 1.2 适用场合 2.扩展kalman(EKF) 2.1EKF原理简介 2.2 适用场合 2.3 使用注意事项 3.无迹kalman(UKF) 3.1UKF原理简介 3.2 UT变换 3.3 适用场合 4.粒子滤波PF 4.1 PF原理简介 4.2 适用场合 前…

对Kalman(卡尔曼)滤波器的理解

分类: 计算机视觉 转载过来的,觉得不错,原文 http://blog.csdn.net/lanbing510/article/details/8828109 1.简介(Brief Introduction) 在学习卡尔曼滤波器之前,首先看看为什么叫“卡尔曼”。跟其他著名的理论(例如傅…

Kalman滤波通俗理解+实际应用

一、Kalman用于解决什么的问题? 卡尔曼滤波是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波过程。 人话&#xff1…

IDEA开发及运行第一个Android项目

IDEA自动下载SDK、Gradle,保证能访问网络。 原来eclipse能使用的sdk,配到idea报错,就换成自动下载最新的了。 之前没成功可能是我防火墙禁用了上网。 新建项目 提示安装SDK 等待下载完成 继续建项目 选择手机或平板及目标设备API版本 选择…

怎么导入别人的android项目

到期末了好多同学都问我怎么把别人的安卓项目导进自己电脑里面,今天我来统一解答一下,希望有所帮助。 1.删除项目中原有的自动构建的文件 去到要导入项目的目录下把 .idea .gradle与build 三个文件夹,*.iml,local.properties删除…

android 开源项目:

android 开源项目: https://github.com/white-cat/ThinkAndroid 转自:http://glblong.blog.51cto.com/3058613/1354953 Android开源:数据库ORM框架GreenDao学习心得及使用总结 2014-01-26 23:40:01 标签: sqllite Android 开源…

Android项目工程结构介绍

Android项目工程结构介绍 (1)gradle和.idea Android Studio自动生成的文件,打包的时候一般会删掉再进行打包 (2)app 项目的代码资源都在其中,也是我们工作的核心目录 build :编译生成文件。生…

Android项目如何真机运行?

很多初学者在刚开始写Android项目的时候,会使用Android Studio自带的模拟器去运行项目,但是自带模拟器一般占内存大(占2G都算少的);运行慢(运行一个项目要启动半天);卡顿等等&#x…

26、Android创建项目

利用 Android Studio,您可以轻松地为各种类型的设备(例如手机、平板电脑、电视和可穿戴设备)创建 Android 应用。本页介绍了如何启动新的 Android 应用项目或导入现有项目。 如果您未打开项目,Android Studio 会显示欢迎屏幕&…

创建的第一个Android项目

Package name:项目的包名,一定要具有唯一性! 静待。。。 创建模拟器 版本问题找不到具体信息,就选择这一个把。相似度比较高。紧跟着后边我也配置了安卓10(Q) 提示你的反病毒程序可能会影响你的构建性能。…

Android开源项目

阿里巴巴 项目名称功能描述freelineFreeline 是 Android 平台上的秒级编译方案,Instant Run 的替代品,也可以从 Freeline 官方主页来获取更多的信息。Freeline 由蚂蚁聚宝 Android 团队开发,它可以充分利用缓存文件,在几秒钟内迅…

Android项目框架搭建(一)

本篇先记录下当前项目中涉及的主要技术要点。也算是对所作项目的一次总结。如果这个过程能对你有些许的帮助,那可能就显得有意义点了。 一个完整的Android项目会涉及后台和前端。我们只关注于前端,也就是我们的app本身。 下面列出项目架构需要具备的技…

创建安卓项目工程

安卓项目工程 前言一创建工程的步骤newproject找到empty配置相关信息创建成功 二、项目相关的文件1.llayoyt文件这个文件位于app\src\res\layout它运行的结果是,这个APP如果在手机上运行的话,会是什么样的界面 前言 说清楚这么创建一个安卓工程 并且运行…

2.Android Studio创建安卓项目及项目结构

-----------android培训、java培训、java学习型技术博客、期待与您交流!------------ 上一篇Android Studio搭建完成了,接下来我们就用Android Studio创建我们的安卓项目吧! 目录: 一、使用Android Studio 图形用户界面创建安卓工…

Android项目结构

Android项目结构 新建个空的安卓项目,打开,切换到project模式: 一、工程结构 1/ .gradle和.idea 这两个目录下都是AS自动生成的,无须关心,也不要手动编辑。 2/ app 项目中的代码、资源等几乎都在这里,…

Android项目工程目录简介

主工程目录: 一、.gradle 此文件夹是构建工具 Gradle 的配置文件夹,也会存储一些项目的构建缓存信息,在首次build项目时,会根据配置文件去下载这些文件,此文件夹是自动生成的文件夹,我们无需关心里面的内容…

Android创建项目

目录 创建Android项目 配置项目结构 创建安卓模拟器 模拟器运行 HelloWorld 应用 真机运行 HelloWorld 应用 创建Android项目 打开 Android studio 工具,选择Project,选择 New Project 由于现在是教程博客,所以我们随便选择 一个 空 Ac…

Android Studio创建安卓项目工程

Android Studio创建安卓项目工程 前言 因为想抽出时间复习考研因此提前接触安卓的一些开发,在实训的时候就可以不用再听讲学习,节省时间 随着前端混合开发和小程序技术的兴起,安卓开发的需求在日益减少。更多的学习是出于兴趣的缘故吧。 创…

八个Android项目源码

Android项目源码分享 给大家分享几个Android开发项目源码,大部分功能相信可以在实战项目中直接使用,供大家下载学习,大部分项目是基于 Android Studio开发,IDE为Eclipse的童鞋可通过网上教程自行转换,这里就不多说了。…

Android开发-创建安卓工程项目+安卓程序的运行

文章目录 前言一、为什么学习Android1.1、什么是Android1.2、Android的特点1.3、Android开发的前景 二、Android studio三、创建安卓工程项目四、第一个安卓程序的运行总结 前言 Android是基于linux平台的开源手机操作系统,该平台由操作系统,中间件&…