当前位置: 首页 > 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()

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Elasticsearch模糊查询之Wildcard
  • Unity横板动作游戏 - 素材导入和整理
  • 月薪竟然高达60k,AI大模型凭什么?
  • 手摸手教你前端和后端是如何实现导出 Excel 的?
  • Python 爬虫项目实战(一):破解网易云 VIP 免费下载付费歌曲
  • uniapp h5支付(支付宝和微信支付)
  • [ Socket学习 ] 第一章:网络基础知识
  • 常用排序算法的实现与介绍
  • Pyinstaller打包OSError: could not get source code【终极解决】
  • [Meachines] [Easy] Admirer Adminer远程Mysql反向+Python三方库函数劫持权限提升
  • C++面试---小米
  • 食源送系统项目的测试
  • 服务重启脚本
  • 从实现第一个ArkTs应用开始入门
  • C#中ToString()在windows和linux的差异
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • es6--symbol
  • ES6--对象的扩展
  • Hibernate【inverse和cascade属性】知识要点
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JavaScript设计模式与开发实践系列之策略模式
  • js写一个简单的选项卡
  • js中forEach回调同异步问题
  • MaxCompute访问TableStore(OTS) 数据
  • mongodb--安装和初步使用教程
  • MySQL的数据类型
  • PHP 7 修改了什么呢 -- 2
  • Xmanager 远程桌面 CentOS 7
  • 从0实现一个tiny react(三)生命周期
  • 构建二叉树进行数值数组的去重及优化
  • 技术发展面试
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 聊聊flink的TableFactory
  • 面试总结JavaScript篇
  • 前端存储 - localStorage
  • 区块链共识机制优缺点对比都是什么
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 一起参Ember.js讨论、问答社区。
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​人工智能书单(数学基础篇)
  • #1015 : KMP算法
  • #define、const、typedef的差别
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (1)无线电失控保护(二)
  • (20)docke容器
  • (3)选择元素——(17)练习(Exercises)
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)