卡尔曼滤波实例分析(一)

news2024/11/26 18:30:53

1 现实问题

假设一个物体位于1000米处以自由落体运动,地面有一台具有特殊功能的雷达,对其进行观察,现需要对其下落的高度进行测量;
(1)建模
速度:V = gt
位置:Y = -V
t + Y0
(2)转化为状态空间方程

2 算法实现

import numpy as np
import matplotlib.pyplot as plt
"""
速度:V = g*t 
位置:Y = -V*t + Y0

"""
y0 = 1000.0
DT = 0.1
g = 9.8
SIM_TIME = 50.0  

GPS_NOISE = np.diag([1, 1]) ** 2
A = np.array([[1.0, 0.0],
             [-DT, 1.0]])

H = np.array([[1.0, 0.0],
              [0.0, 1.0]])

Q = np.diag([1.0, 1.0]) ** 2  
R = np.diag([1.0, 1.0]) ** 2  

def motion_model(x):
    #A = np.array([[1.0, 0.0],
    #              [-DT, 1.0]])
    x = A.dot(x)
    return x
   
def observation_model(x):
     #H = np.array([[1.0, 0.0],
     #             [0.0, 1.0]])
    
     z = H.dot(x)

     return z
    

def observation(xtrue):
    xTrue = motion_model(xtrue)
    z = motion_model(xTrue) + GPS_NOISE @ np.random.randn(2, 1)
    return xTrue,z
    
def kalman_filter(xEst, PEst, z):
    #  Predict 
    xPred =  motion_model(xEst)
    PPred = A @ PEst @ A.T
    #  Update
    zPred = observation_model(xPred)
    y = z - zPred
    S = H @ PPred @ H.T + R
    K = PPred @ H.T @ np.linalg.inv(S)
    xEst = xPred + K @ y
    
    PEst = (np.eye(len(xEst)) - K @ H) @ PPred
    return xEst, PEst
    
    
time=0



x_array = []    
y_array = []
z_array = []
k_array = []

xEst = np.zeros((2, 1))
PEst = np.eye(2)
xTrue = np.array([[g*DT],
              [y0]])
xEst[0]=g*DT 
xEst[1]=y0   
while SIM_TIME >= time:
    
    xTrue, z = observation(xTrue)
    xEst, PEst = kalman_filter(xEst, PEst,z)

    z_array.append(z[1])
    y_array.append(xTrue[1])
    k_array.append(xEst[1])
    x_array.append(time)
    time += DT
     
plt.plot(x_array,y_array,'g')
plt.plot(x_array,z_array,'r')
plt.plot(x_array,k_array,'b')
plt.show() 
 

3 实验结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/722413.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

react笔记_06类组件

目录 复习展开运算符 组件什么叫做组件?分类类组件es6新增构造函数语法类组件渲染类组件的this指向类组件的三大属性state作用语法-初始化数据语法-修改state数据语法-获取state中的数据案例 propspropTypes属性(prop-types库)defaultProps属性 refs[1] 字符串形式的…

基于UFLD-v2的改进:UFLD-v2-plus

1 待解决问题 UFLD-v2是一个非常优秀的车道线检测模型。也有一些问题。 1 参数量太大,一个模型600M。 2 不能区分车道线。 2 工作内容 改进方法如下 2.1 降低参数量 对模型网络逐层参数量,可以发现,86%(很久之前分析的&…

基于STM32+华为云IOT设计的智能浇花系统

一、前言 随着社会的不断发展和人们生活水平的逐渐提高,人们逐渐追求高质量的生活,很多人都会选择在家里或办公室种植一些花卉以净化家庭空气,陶冶情操,但是很多人忙于工作、学习、出差、旅游或者一些其他的原因,不能及时地对花卉进行照料,短时间内导致很多花卉因缺水分…

100天精通Golang(基础入门篇)——第13天:深入解析Go语言中的字符串(string)及常用函数应用

🌷 博主 libin9iOak带您 Go to Golang Language.✨ 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《I…

怎么用爱问转换工具在线拆分PDF文件

我们平时在工作中会用到很多PDF文件,有的PDF文件内容很多,里面也有许多分类类别,其实对于这种内容多的PDF文件,可以使用拆分的方式,来获取自己需要的材料,那么,如何快速拆分PDF文件呢&#xff1…

VSCode离线安装Remote-SSH插件

最近想要在VSCode上安装Remote-SSH插件,以便可以远程登录云服务器进行开发或者文件编辑、文件传输等功能;但是VSCode中在线安装一直失败,所以记录一下离线安装的方法; 文章目录 一、下载VSCode Remote-SSH的离线插件,即…

python: PyCharm 2023.1打包项目成执行程序

IDE 最底部: pyinstaller -i heart.ico -D main.py 生成成功

Jenkins基础介绍以及docker安装Jenkins

Jenkins基础介绍以及docker安装Jenkins 什么是Jenkins? Jenkins是一个可扩展的持续集成引擎 持续集成就是通常说的CI(Continues Integration) 每次集成都通过自动化的构建(包括编译,发布,自动化测试&am…

同一局域网内IP 192.168.1.10 和 IP 10.10.10.8 可以互相访问吗?

同一局域网内IP 192.168.1.10 和 IP 10.10.10.8 可以互相访问吗? 1、网上邻居的方式: 鼠标点击 我的电脑 属性 计算机名,查看一下 计算机名(这个可以点击更改,自己设定和更改) 查看一下工作组,一…

基于node.js中的serialport模块实现无线传感网上位机功能

半个月前的无线传感网课设上位机的实现遇到了很多困难,特写此文章给有需要的朋友一些帮助,欢迎私信探讨 文章目录 前言一、node.js中的serialport模块二、express框架三、echarts实现拓扑图四、实现下行数据五、成果展示总结 前言 本文所要实现的功能以…

【React】next+antd报错:Module not found: Can‘t resolve ‘antd/es/content‘

Antd Next手册:https://ant.design/docs/react/use-with-next-cn 报错场景 根据官方手册进行项目创建 yarn create next-app antd-demoyarn add antd 得到以下环境: EnvironmentInfoantd5.6.4next13.4.8react18.2.0 安装完依赖后,运行y…

java方法详解

1. 方法概述 1.1 什么是方法 方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集 注意: 方法必须先创建才可以使用,该过程称为方法定义方法创建后并不是直接运行的,需要手动…

日本 NFT 项目概览与特点总结

日本的 NFT 市场 日本的 NFT 市场起源于与国内动漫和娱乐偶像的合作,重点关注本土文化,文化成为日本 NFT 项目的重要基石。 关键要点: 日本的 NFT 产业具有三个特点:广泛的知识产权(IP)、低 FUD 水平以及…

Ka/Ks介绍和分析

什么是Ka/Ks? 在遗传学中,Ka/Ks表示的是两个蛋白编码基因的非同义替换率(Ka)和同义替换率(Ks)之间的比例。这个比例可以判断是否有选择压力作用于这个蛋白质编码基因。 如果你手头有两个不同物种的同一个基因的序列…

JavaWeb项目-超市订单管理系统【Day02】

密码修改 1、编写接口方法和mybatis的SQL映射文件 Mybatis配置多参数SQL语句 当我们的SQL语句中有多个参数的时候,需要设置每个参数名对应的接口参数,不然会报错: Parameter ‘id’ not found. Available parameters are [argl, argg, par…

【设计模式】第十二章:观察者模式详解及应用案例

系列文章 【设计模式】七大设计原则 【设计模式】第一章:单例模式 【设计模式】第二章:工厂模式 【设计模式】第三章:建造者模式 【设计模式】第四章:原型模式 【设计模式】第五章:适配器模式 【设计模式】第六章&…

chatGPT如何开启 Browsing 功能,实现即时联网查询?

Openai 为每一个 chatGPT Plus 用户都开放了 Browsing 和 plugins 功能。 前者可以在 ChatGPT 觉得有必要的时候(比如你问它今天的新闻),自动联网查询,后者是第三方开发者开发的插件,数量繁多,可以解决各种…

Git 常用操作总结

版本控制系统(VCS)是管理文件和目录所做的更改的工具,每一次提交便记录下目录及其文件的内容,以及较上一版本的更改。通过这样去跟踪项目的更改过程,方便与他人进行协作,或者撤销不想要的更改以回退到此前的…

DR模式部署LVS负载均衡集群

目录 一、配置负载调度器 1.配置虚拟 IP 地址(VIP:192.168.146.180) 2.调整 proc 响应参数 3. 配置负载分配策略 ​编辑二、部署共享存储(NFS服务器:192.168.146.20) 三、配置节点服务器 1.配置虚拟…

解决vue中mapbox地图显示一半的问题

解决vue中mapbox地图显示一半的问题 问题描述: 在vue中创建mapbox地图,地图只显示一般,查看浏览器开发者工具。发现将canvas.mapboxgl-canvas 的position:absolute去掉就解决了 。 代码修改:获取到canvas.mapboxgl-canvas,并修改…