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

kalman的python实现

前面的kalman都是matlab的,这里在理解的基础上,尝试使用python实现,力求理解更多的内涵。

需要的包
import numpy as np
import matplotlib.pyplot as plt

代码

KF algorith demo by Leo

2020.01.06

ZJG CAMPUS,ZJU

import numpy as np
import matplotlib.pyplot as plt

‘’’
生成带噪声的传感器观测值Z
Z中一共包含500个samples,第k个sample代表k时刻传感器的读数
假设只对机器人位置进行传感器观测,并且只用距离表示位置
因此,Z中只有一个观测变量,即机器人的位置,这个位置一维数据表示
‘’’

生成不带噪声的数据

Z_raw = [i for i in range(500)]

创建一个均值为0,方差为1的高斯噪声,共有500个samples,精确到小数点后两位

noise = np.round(np.random.normal(0, 1, 500), 2)

normal函数,后面三个值分别为平均数、标准差、数量,normal(x,n)表示将x四舍五入到小数点后n个数字

将z的观测值和噪声相加

Z = np.mat(Z_raw) + np.mat(noise)

‘’’
定义状态向量X的初始状态
X中包含两个状态变量:p和v,二者都被初始化为0,且二者都用标量表示
‘’’
X = np.mat([[0,], [0,]])

‘’’
定义初始状态协方差矩阵P
‘’’
P = np.mat([[1, 0], [0, 1]])

‘’’
定义状态转移矩阵F,假设每秒钟采一次样,所以delta_t = 1
‘’’
F = np.mat([[1, 1], [0, 1]])

‘’’
定义状态转移协方差矩阵Q
这里我们把协方差设置的很小,因为觉得状态转移矩阵准确度高
‘’’
Q = np.mat([[0.0001, 0], [0, 0.0001]])

‘’’
定义观测矩阵H
‘’’
H = np.mat([1, 0])

‘’’
定义观测噪声协方差R
‘’’
R = np.mat([1])

‘’’
卡尔曼滤波算法的预测和更新过程
‘’’
for i in range(100):
x_predict = F * X#demo中没有引入控制矩阵B
p_predict = F * P * F.T + Q # 这里,F.T就是FT
K = p_predict * H.T / (H * p_predict * H.T + R)
X = x_predict + K *(Z[0, i] - H * x_predict)
P = (np.eye(2) - K * H) * p_predict
print(X)
plt.plot(X[0, 0], X[1, 0], ‘ro’, markersize = 4)

plt.show()

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

相关文章:

  • 查找算法:线性查找,golang实现
  • 【图像识别】十大数据集合集!
  • C++ | Leetcode C++题解之第312题戳气球
  • SSM学习11:springboot基础
  • 【前端 18】安装Node.js
  • C#/Winform入门、进阶、强化、扩展、知识体系完善等知识点学习、性能优化、源码分析专栏分享
  • springboot的表现层/控制层controller开发
  • 前端使用html2canvas在页面截图并导出,以及截图中含有图片时的跨域问题解决
  • 道可云元宇宙每日资讯|第十二届互联网安全大会在北京开幕
  • 前端面试基础题(微信公众号:前端面试成长之路)
  • https执行过程,特点,作用
  • 【优秀python案例】基于Python的豆瓣电影TOP250爬虫与可视化设计与实现
  • 如何设计一个测试用例
  • 黄金和原油市场波动背后的经济信号
  • 【Python数值分析】革命:引领【数学建模】新时代的插值与拟合前沿技术
  • PCL-基于超体聚类的LCCP点云分割
  • git 推送时出现错误 Locking support detected on remote “origin“
  • 劳动仲裁经验篇【赶紧收藏】
  • QT多媒体编程(一)——音频编程知识详解及MP3音频播放器Demo
  • MySQL使用教程 最最最实用的零基础教程 直接从安装开始教!!!!
  • pycharm怎么使用Anaconda和配置
  • android中打包apk体积优化方案
  • Kubernetes常见的3种部署方式
  • 什么情况?我代码没了
  • 关于Unity四种合批技术详解
  • 自定义注解+拦截器+redis限流
  • Springcloud物流配送后台-计算机毕业设计源码69809
  • 【Java面试篇】数据埋点监控页面pv的SDK接口实现
  • vue3直播视频流easy-player
  • Python笔试面试题AI答之面向对象(3)