卡尔曼滤波KF与扩展卡尔曼滤波EKF算法
最近学习了一些预测算法
卡尔曼滤波
具体推导可以查看B站的教程:贝叶斯滤波与卡尔曼滤波第一讲 很有必要的绪论_哔哩哔哩_bilibili
建议从第一讲开始看
看上述教程花不了多少时间,可能看一个电影的时间就可以学会了
本文章不涉及任何推导过程(想看推导的可以退出了)
假设现在有一个信息为X(假设是一维的高斯分布)
Xe : X_evaluate即对X的估计值(卡尔曼滤波的结果)
Xp : X_predict即对X的预测(假设后一个状态至于前一个状态有关,且是线性关系)
Y:Y是对X的观测值(假设X的位置与观测到的Y也是一个线性关系)
预测方程:
设,F是Xp与Xelas的线性关系的系数,Q是这种预测方式的误差
观测方程:
设,H是Y与Xp的线性关系的系数,R是这种观测方式的误差
由于X是正态分布,我们只关心它的均值和方差
由卡尔曼滤波可得:
Xpnow的均值=Xelas的均值*F
Xpnow的方差=Xelas的方差*F*F+Q
设K=H*(Xpnow的方差)/ (H*H*(Xpnow的方差)+ R)
Xenow的均值=Xpnow的均值+K*(观测值Y - Xpnow的均值*H)
Xenow的方差=(1-K*H)*(Xpnow的方差)
若X是n维的向量信息,此时F,H,Q,R都是矩阵
对应的预测方程和观测方程也会改变了
那么就由矩阵形式的卡尔曼滤波:
Xpnow的均值=F*(Xelas的均值)
Xpnow的协方差矩阵=F*(Xelas的协方差矩阵)*(F的转置)+ Q
设K=(Xpnow的协方差矩阵)*(H的转置)/ (H*(Xpnow的协方差矩阵)*(H的转置)+ R)
Xenow的均值=Xpnow的均值+K*(观测值Y - H*(Xpnow的均值))
Xenow的协方差矩阵=(I - K*H)*(Xpnow的协方差矩阵)
如果调用了<Eigen/Dense>库的话,代码是很好写的
关于Eigen库在ubuntu下的安装,就是去官网下载最新版本,然后解压,把里面的Eigen文件夹和unsupported文件夹用sudo cp复制到usr/local/include即可
扩展卡尔曼滤波
还是一样的定义
只不过不是线性关系了,F矩阵和H矩阵变成了f(x)函数和h(x)函数了
但是没关系,我们可以求出雅克布矩阵,用一阶偏导来拟合f(x)和h(x)函数
所以,还是一样的式子,只不过在带入的时候略有区别
设F是f(x)的雅克布矩阵,H是h(x)的雅克布矩阵
Xpnow的均值=f(Xelas的均值)————可以直接带
Xpnow的协方差矩阵=F*(Xelas的协方差矩阵)*(F的转置)+ Q
设K=(Xpnow的协方差矩阵)*(H的转置)/ (H*(Xpnow的协方差矩阵)*(H的转置)+ R)
Xenow的均值=Xpnow的均值+K*(观测值Y - h(Xpnow的均值))
Xenow的协方差矩阵=(I - K*H)*(Xpnow的协方差矩阵)
雅克布矩阵是什么?
一个函数y=f(x),传进去是一个n维向量,传出来是一个m维向量
那么它的雅克布矩阵就是一个m*n的一阶偏导矩阵
(来自百度百科)
怎么用计算机求雅克布矩阵?
调用<ceres/jet.h>库,使用Jet类型进行运算,带入函数y=f(x)即可
关于jet.h的求导方法
其实就是给运算的对象加一个极小值标记 ,可以进行相加运算,两个
乘在一起则等于0
原理类似微积分发展初期的牛顿使用的求导方法,以及忽略二阶无穷小量的策略
关于ceres库在ubuntu下的安装
去官网,一个一个指令复制粘贴即可
代码:
自己写
upd2022.1.18:NX上竟然用不了ceres库,所以能手动求偏导就手动求偏导吧
卡尔曼滤波KF与扩展卡尔曼滤波EKF算法相关推荐
- ## ***电池SOC仿真系列-基于扩展卡尔曼(EKF)算法的SOC估计(内含代码等资料)***
## ***电池SOC仿真系列-基于扩展卡尔曼(EKF)算法的SOC估计(内含代码等资料)*** ## 1 研究背景 电池的荷电状态(SOC)代表的是电池当前的剩余容量,数值定义是电池剩余电量与电池额 ...
- 状态估计3(扩展卡尔曼滤波)
1 简述 卡尔曼滤波适用于线性高斯系统,然而这是一个强假设:对于大部分机器人系统而言,非线性系统才是常态,如此卡尔曼滤波就不太适用了,那么该如何解决这个问题?这引出了扩展卡尔曼滤波. 2 扩展卡尔曼滤 ...
- 始卡尔曼滤波算法(KF)、扩展卡尔曼滤波算法(EKF)以及无迹卡尔曼滤波算法(UKF)三者之间的区别?
原始卡尔曼滤波算法(KF).扩展卡尔曼滤波算法(EKF)以及无迹卡尔曼滤波算法(UKF)三者之间的区别? 原文:https://www.zhihu.com/question/22714163/answ ...
- 卡尔曼滤波(KF)和扩展卡尔曼滤波(EKF)相应推导
从上个世纪卡尔曼滤波理论被提出,卡尔曼滤波在控制论与信息论的连接上做出了卓越的贡献.为了得出准确的下一时刻状态真值,我们常常使用卡尔曼滤波.扩展卡尔曼滤波.无迹卡尔曼滤波.粒子滤波等等方法,这些方法在 ...
- 扩展卡尔曼滤波(EKF)算法详细推导及仿真(Matlab)
前言 扩展卡尔曼滤波算法是解决非线性状态估计问题最为直接的一种处理方法,尽管EKF不是最精确的"最优"滤波器,但在过去的几十年成功地应用到许多非线性系统中.所以在学习非线性滤波问题 ...
- 初学卡尔曼滤波(KF)、扩展卡尔曼滤波(EKF)以及无迹卡尔曼滤波(UKF)
由于研究需要,最近在看卡尔曼滤波,做个小总结. 最佳线性滤波理论起源于40年代美国科学家Wiener和前苏联科学家Kолмогоров等人的研究工作,后人统称为维纳滤波理论.从理论上说,维纳滤波的最大 ...
- 自动驾驶算法-滤波器系列(二)—— 卡尔曼滤波简介及其变种(EKF、UKF、PF)介绍
KF&EKF&UKF&PF 1. 基础知识概要 协方差矩阵 多维高斯分布 状态空间表达式 2. 什么是卡尔曼滤波器 3. 五个重要的公式 公式介绍 公式推导过程 4. 卡尔曼滤 ...
- 扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码)
扩展卡尔曼滤波(EKF)理论讲解与实例(matlab.python和C++代码) 文章目录 扩展卡尔曼滤波(EKF)理论讲解与实例(matlab.python和C++代码) 理论讲解 KF和EKF模型 ...
- 扩展卡尔曼滤波EKF与多传感器融合
Extended Kalman Filter(扩展卡尔曼滤波)是卡尔曼滤波的非线性版本.在状态转移方程确定的情况下,EKF已经成为了非线性系统状态估计的事实标准.本文将简要介绍EKF,并介绍其在无人驾 ...
最新文章
- 千万用户同时在线,优酷智能档在双11“猫晚”直播如何防卡顿?
- webconfig.java_基于JavaConfig配置的Spring MVC的构建
- 在Unity实现游戏命令模式
- Java Websocket实例
- 二十四点游戏python_[求助]关于二十四点游戏python
- 设计模式笔记八:过滤器模式
- springboot上传限制1M的大坑
- Matlab简单教程:矩阵
- 魔兽地图服务器修改,魔兽地图编辑器的问题,怎么修改RPG
- Mac 打开大小写切换很慢
- Oracle多层ifend嵌套,Excel IF函数以及IF多层嵌套如何使用,看完你就知道了
- Flutter状态管理Provider的简单使用
- 华为这个广告,我愿一辈子不买苹果!
- 苹果手机怎么注册新Apple id帐户注册
- 2020年网络工程师发展前景如何
- windows+ffmpeg+qsv实现inter核显加速视频解码编码
- Choco-slover的使用
- 关于印发《留学回国人员申办上海常住户口实施细则》的通知
- Python爬虫实战 | (3) 爬取豆瓣电影Top250
- 代驾APP_第一章_项目环境搭建_第二节