当前位置: 首页 > news >正文

扩展卡尔曼滤波器代码

文章目录

  • 前言
  • 问题
  • 状态向量和观测向量
  • 加性噪声的形式
  • 状态方程及求导
  • 观测方程及求导
  • 状态初始化
  • 过程噪声和观测噪声
  • 卡尔曼滤波过程
  • code

前言

卡尔曼滤波器在1960年被卡尔曼发明之后,被广泛应用在动态系统预测。在自动驾驶、机器人、AR领域等应用广泛。卡尔曼滤波器使用类似马尔可夫链的性质,假设系统状态只与上一时刻的系统状态有关。基础的卡尔曼滤波器使用线型方程对系统状态进行建模。为了能够应用到非线性系统,扩展卡尔曼滤波器利用泰勒展开,并只保留一次项,抛弃高次项,将非线性关系近似为线性关系。

问题

假设有一个小车从原点出发,每个时间间隔ΔT,车上的传感器可以输出车此时的速度ωt 和角速度ωt。同时,在原点处有一个探测器,同样可以每个ΔT的时间间隔,探测出车辆距离原点的距离dt。 我们希望能够求出小车每一时刻对应的x轴和y轴坐标at , bt

在这里插入图片描述

状态向量和观测向量

我们另小车每一时刻的x,y坐标、此时小车的车身角度,速度和角速度这5个状态当作状态向量,于是

在这里插入图片描述

同时,另观测向量为距离原点距离的平方、速度、角速度,于是
在这里插入图片描述

加性噪声的形式

为了简化计算过程,我们这里将噪声项提到非线性方程外面,变成加性噪声的形式。

在这里插入图片描述

状态方程及求导

小车的x坐标等于上一时刻的x坐标以及这个时间段小车行使过的距离在x轴的投影。小车在每个时间段形式的距离为
v*ΔT;距离在x轴的投影相当于乘上cos(θ)。y坐标同理。角度则是每一时刻的角速度积分。于是,我们可以写出状态方程:在这里插入图片描述
将函数f相对于状态向量xt求偏导数,可以得到
在这里插入图片描述

观测方程及求导

我们将小车与原点距离的平方、速度、角速度作为观测向量,即

在这里插入图片描述

将上述方程对状态方程求偏导数可以得到
在这里插入图片描述

状态初始化

系统状态我们可以简单以全0向量作为初始值,即
在这里插入图片描述

另一个需要初始化的值是状态向量协方差矩阵P0。经过实验发现在滤波过程对P0的值似乎有点敏感,主要是不能只有对角线有值。实际上,如果在实际应用中,可以先采集一段数据计算出各个变量的初始值。这里将P0设为如下值

在这里插入图片描述

过程噪声和观测噪声

过程噪声的协方差和观测噪声的协方差矩阵我们设置为一个较小的值即可。只不过这里的Q矩阵似乎比较敏感。而且由于我们用了速度和角速度做积分,而另外一个观测量距离并不能为角度提供更多的信息。因此,对于角度,这里并不能得到比简单的积分好很多的结果。

# 过程噪声的协方差,需要调整的参数
Q = np.array([[0.01, 0, 0, 0, 0],[0, 0.01, 0, 0, 0],[0, 0, 0.0001, 0, 0],[0, 0, 0, 0.01, 0],[0, 0, 0, 0, 0.01]
])# 观测噪声协方差矩阵
R = np.array([[0.0001, 0, 0],[0., 0.0001, 0],[0, 0, 0.0001]
]) # 观测噪声的协方差,需要调整的参数

卡尔曼滤波过程

有了上面的雅各比矩阵推导,就可以利用公式(13-17)进行滤波过程。过程只用了到一些矩阵乘法,十分简单。具体可以看代码。
在这里插入图片描述
在这里插入图片描述

code

https://github.com/zeal-up/KalmanFilterTutorial

http://www.lryc.cn/news/114734.html

相关文章:

  • 9:00开始面试,9:08就出来了,这问题问的实在是····
  • 揭秘:5个美国程序员与日本程序员的差异
  • Springboot实现简单JWT登录鉴权
  • C++设计模式创建型之工厂模式整理
  • 前端安全XSS和CSRF讲解
  • 本地化部署自建类ChatGPT服务远程访问
  • 一、Webpack相关(包括webpack-dev-server用以热更新和html-webpack-plugin)
  • 安全防御(3)
  • AR远程专家指导在汽车改装上的应用有哪些?
  • css-3:什么是响应式设计?响应式的原理是什么?如何做?
  • Armstrong数,n位数等于其各位数的n次方之和。
  • blender的下载安装和配置中文环境
  • MyCat配置rule.xml、server.xml讲解
  • Linux项目部署
  • 案例:Docker 镜像的创建及使用(commit与dockerfile方式)
  • QGIS二次开发三:显示Shapefile
  • FFmpeg中相关结构体介绍
  • Llama 2 云端部署与API调用【AWS SageMaker】
  • 根文件系统制作
  • Linux ARM64架构 动态替换 altinstructions
  • Mac显示隐藏文件夹
  • 使用 Habana Gaudi2 加速视觉语言模型 BridgeTower
  • mysql查询语句之实践篇
  • Linux 和 MacOS 中的 profile 文件详解(二)
  • Python之多重继承
  • 前端CSS文字阴影text-shadow记录
  • maven 删除下载失败的包
  • 《吐血整理》高级系列教程-吃透Fiddler抓包教程(37)-掌握Fiddler中Fiddler Script用法你有多牛逼-下
  • 网络安全进阶学习第十二课——SQL手工注入3(Access数据库)
  • Zookeeper集群+Kafka集群