【状态估计】基于无味卡尔曼滤波模拟倾斜传感器研究(Matlab代码实现)

news2024/12/29 8:59:29

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码及讲解


💥1 概述

本文包括两部分中的第一部分:第一部分设计与仿真;第2部分实际系统实现。它旨在演示如何使用Matlab/Simulink与Rapid STM32块集和ARM Cortex-M3处理器(STM32)一起开发数字信号处理系统;使用倾斜传感器作为案例研究。它涵盖了从设计、仿真、硬件在环测试到创建独立嵌入式系统的开发过程。内容应该尽可能的简单。

在第一部分中,解释了使用Simulink进行嵌入式系统开发的动机。然后,建立了倾斜传感器系统的简化模型。

总结了卡尔曼滤波和Unscented卡尔曼滤波(UKF)理论。然后提供图形说明,以指导您完成实现Simulink模型的整个过程,以设计,模拟和评估UKF用于倾斜传感器系统的性能。

在第二部分中,提供图形说明,以指导您完成将您的设计从Simulink模型转移到基于Rapid STM32 - R1邮票板的现实世界独立倾斜传感器系统的过程。

目录:

从概念上讲,微控制器(uC)就像我们大多数人每天使用的个人电脑(PC)。uC与PC的不同之处在于,所有东西都是由一个小手指大小的集成电路(硅芯片)构建的,而PC可能由主板和几个附加卡组成。PC可能有大量的外设选择,如COM端口,USB, Wifi,键盘,鼠标,显示器等。uC的外设更有限,通常包括定时器,SPI, USART, i2c, ADC等。一台PC可能使用64位架构,运行在千兆赫兹的速度与数百千兆字节的硬盘和RAM。uC是8位、16位或32位,运行频率不超过几百MHz,内存只有几十或几百KB。

uC通常用于自动控制独立系统,如洗衣机、带LCD显示屏的冰箱或mp3播放器。在一辆更现代的汽车里,可能会有数百个uC;一个用于监测和控制自动燃油喷射,一个用于监测ABS,一个用于监测和控制机舱温度,等等。像个人电脑一样,要使用uC,我们需要开发程序来告诉它做什么、什么时候做以及如何做。uC编程已经从像汇编这样的低级语言发展到像c这样更流行的高级编程语言。然而,在程序正常运行之前,可能需要手工编写和调试数百或数千行代码,更不用说低级编程和设备驱动程序的调试了。

在第一部分中:

1. 解释了使用 Simulink 进行嵌入式系统开发的动机。
2. 开发了一种简化的倾斜传感器系统模型。
3. 总结了卡尔曼滤波和无迹卡尔曼滤波(UKF)理论。
4. 然后提供图形说明,指导您完成实施 Simulink 模型的整个过程,以设计、仿真和评估倾斜传感器系统 UKF 的性能。

注意:还提供了源代码,用于执行基于 Simulink 模型的蒙特卡罗模拟,以使用协方差分析评估 UKF 性能。

在第二部分中,将提供图形说明,指导您将设计从 Simulink 模型转移到基于 Rapid STM32 - R1 印章板的实际独立倾斜传感器系统的过程。

📚2 运行结果

 部分代码:

% Generate random seeds to drive the Band-Limited White Noise Block in
% the Accelerometer Sensor Subsystem
% the seed is picked from a uniform random variable between begin_bound and
% end_bound
RandStream.setDefaultStream(RandStream('mt19937ar','seed',sum(100*clock))); % set random seed based on clock
begin_bound = 0;
end_bound = 10000;
seed_vec = floor(begin_bound + (end_bound - begin_bound).*rand(2,final_run));

for k = 1:final_run
    seed1 = seed_vec(1,k);
    seed2 = seed_vec(2,k);
    
    disp(['Run' num2str(k)])
    sim('tilt_system',[start stop]); % This line of code starts and stops Simulink simulation automatically.
    
    if (k == 1)
        % First run
        % initialise record buffer
        true_roll_error_deg_rec = repmat(error_variance.signals(1).values(:,1),1,final_run);
        theoretical_roll_error_deg_rec = repmat(error_variance.signals(1).values(:,2),1,final_run);
        true_pitch_error_deg_rec = repmat(error_variance.signals(2).values(:,1),1,final_run);
        theoretical_pitch_error_deg_rec = repmat(error_variance.signals(2).values(:,2),1,final_run);
    else
        % Other runs
        % Import data from saved work space data
        true_roll_error_deg_rec(:,k) = error_variance.signals(1).values(:,1);
        theoretical_roll_error_deg_rec(:,k) = error_variance.signals(1).values(:,2);
        true_pitch_error_deg_rec(:,k) = error_variance.signals(2).values(:,1);
        theoretical_pitch_error_deg_rec(:,k) = error_variance.signals(2).values(:,2);
    end
end

time = error_variance.time;
mean_true_roll_error_deg = mean(true_roll_error_deg_rec,2);
mean_theoretical_roll_error_deg = mean(theoretical_roll_error_deg_rec,2);
mean_true_pitch_error_deg = mean(true_pitch_error_deg_rec,2);
mean_theoretical_pitch_error_deg = mean(theoretical_pitch_error_deg_rec,2);

std_true_roll_error_deg = std(true_roll_error_deg_rec,0,2);
std_true_pitch_error_deg = std(true_pitch_error_deg_rec,0,2);

% Plot results
subplot(2,1,1)
plot(time,mean_true_roll_error_deg,'r-',time,mean_theoretical_roll_error_deg,'b-',time,...
    std_true_roll_error_deg,'g-')
ylabel('Roll Errors (deg)'), xlabel('time (sec)')
legend('Mean errors','\surd(P_{11})','Error std')

subplot(2,1,2)
plot(time,mean_true_pitch_error_deg,'r-',time,mean_theoretical_pitch_error_deg,'b-',time,...
    std_true_pitch_error_deg,'g-')
ylabel('Pitch Errors (deg)'), xlabel('time (sec)')
legend('Mean errors','\surd(P_{22})','Error std')

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]李开龙,胡柏青,高敬东,方轩.鲁棒四元数无味卡尔曼滤波算法在组合导航姿态估计中的应用[J].海军工程大学学报,2015,27(01):6-10.

[2]Krisada Sangpetchsong (2023). Introduction to Unscented Kalman Filtering

🌈4 Matlab代码及讲解

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

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

相关文章

通过Redisson的管道批量操作来提高Redis Io效率

一、背景 当在对redis进行刷数操作时,大部分的redis框架对于单次执行的效率差不多,但我们有时需要一次性写入大量的redis key时,一次一次的操作速度就很慢。尤其是处于跨region的环境,一次的redis io就高达数十毫秒&#xff0…

Android aar包的生成与使用

前言 最近用Android Studio开发Android时,会经常接触到aar包(Java Archive),aar包含所有资源,class以及res资源文件全部包含。 优势 Android通过aar方式把代码和资源打成一个包,提供给第三方使用或者是开…

什么是AOP?

目录 一、AOP简介 1、AOP简介和作用 2、AOP的概念 二、AOP的基本实现 三、AOP工作流程 1 、AOP工作流程 2、AOP核心概念 四、AOP切入点表达式 1、语法格式 2、通配符 五、AOP通知类型 1、AOP通知分类 2、AOP通知详解 (1)前置通知 &#xf…

Java Web JDBC(1)23.6.25

JDBC 1,JDBC概述 在开发中我们使用的是java语言,那么势必要通过java语言操作数据库中的数据。这就是接下来要学习的JDBC。 1.1 JDBC概念 JDBC 就是使用Java语言操作关系型数据库的一套API 全称:( Java DataBase Connectivity ) Java 数据库…

vue3-实战-13-管理后台-数据大屏解决方案-顶部组件搭建-实时游客统计

目录 1-数据大屏解决方案vw和vh 2-数据大屏解决方案scale 3-数据大屏原型需求图 4-数据大屏顶部搭建 4.1-顶部原型需求 4.2-顶部模块父组件的结构和逻辑 4.3-顶部模块子组件结构和逻辑 5-数据大屏游客统计 5.1-原型需求图分析 5.2-结构样式逻辑开发 1-数据大屏解决方…

视觉与多模态大模型前沿进展 | 2023智源大会精彩回顾

导读 6 月 9 日下午,智源大会「视觉与多模态大模型」专题论坛如期举行。随着 stable diffusion、midjourney、SAM 等爆火应用相继问世,AIGC 和计算机视觉与大模型的结合成为了新的「风口」。本次研讨会由智源研究院访问首席科学家颜水成和马尔奖获得者曹…

在UE5编辑器环境中使用Python

UE有很多Python方案,本文所讲述的Python为UE5官方内嵌版本方案,并且只能在编辑器环境下使用,使用该功能可以编写编辑器下的辅助工具,提升开发效率。 1.调用Python的几种方式 讲一讲UE5中调用Python的几种方式,首先是…

rust abc(5): 常量

文章目录 1. 目的2. 基本用法2.1 说明2.2 运行结果 3. 不推荐或不正确用法3.1 不推荐用小写字母作为常量名字3.2 常量名称中含有小写字母就会报warning3.3 定义常量时,不指定数据类型会编译报错 4. const 和 immutable 的区别4.1 const 可以在函数外声明&#xff0c…

三、决策树 四、随机森林

三、决策树1.决策树模型的原理1)什么是决策树2)决策树模型原理3.构建决策树的目的4)决策树的优缺点 2.决策树的典型生成算法1)常用的特征选择有信息增益、信息增益率、基尼系数2)基于信息增益的ID3算法3)基…

JAVAWEB 30-

JAVAWEB 30- 快速入门DriverManagerConnectionresultsetPreparedStatement增删改查查询所有添加 修改 MAVEN坐标MyBatis代理开发mybatis查询条件查询添加删除参数传递 快速入门 public static void main(String[] args) throws Exception { /1.注册驱动 Class.forName("co…

【TA100】Bloom算法

一、什么是Bloom算法 1、首先看一下Bloom效果长什么样 2、什么是Bloom ● Bloom,也称辉光,是一种常见的屏幕效果 ● 模拟摄像机的一种图像效果,让画面中较亮的区域“扩散”到周围的区域中,造成一种朦胧的效果 ● 可以让物体具有…

[JVM]再聊 CMS 收集器

题目之所以是再聊,是因为以前聊过: [JVM]聊聊 CMS 收集器 最近又看了下这块的知识,打算把 CMS/标记-清除/GC Roots/引用 这些知识串起来 我依旧可能写的不是很好,降低下期待 GC 算法 CMS 是基于 标记-清除 算法来做的,那我们就先从 GC 算法开始聊 GC 算法有: 标记-清除 标…

一篇博客教会你使用Docker部署Redis哨兵

文章目录 主数据库配置文件启动实例容器虚拟IP 从数据库配置文件启动实例 主从数据库查看主数据库查看从数据库 哨兵配置文件启动哨兵查看哨兵 哨兵机制哨兵选举选举日志重启主数据库 今天我们学习使用 Docker 部署 Redis 的主从复制,并部署 Redis 哨兵,…

Linux学习之grub配置文件介绍

grub配置文件 /etc/default/grub这个文件里边有一些简单的grub配置。 可以看到/etc/default/grub文件里有GRUB_CMDLINE_LINUX"crashkernelauto rhgb quiet idlehalt biosdevname0 net.ifnames0 consoletty0 consolettyS0,115200n8 noibrs nvme_core.io_timeout429496729…

全网独家--【图像色彩增强】方法梳理和问题分析

文章目录 图像增强图像色彩增强问题可视化比较 难点色彩空间大,难以准确表征?不同场景差异大,难以自适应?计算量大,但应用场景往往实时性要求高? 方法传统方法深度学习逐像素预测3D LUT模仿ISP 个人思考批判…

2.数据的类型、数据的输入输出

2.数据的类型、数据的输入输出 2.1 数据类型-常量-变量(整型-浮点-字符)2.1.1 数据类型2.1.2 常量2.1.3 变量2.1.4 整型类型2.1.5 浮点型数据2.1.6 字符型数据字符型常量字符型变量 2.1.7 字符串型常量 2.2 混合运算-printf讲解 2.1 数据类型-常量-变量(整型-浮点-字符) 2.1.1…

shell脚本怎么获取当前脚本名称(获取脚本文件名)$(basename “$0“)(basename命令:去除字符串路径部分、去除后缀)

文章目录 shell脚本如何获取当前执行脚本名称解释:$(basename "$0")$0(当前脚本的名称,带脚本与工作目录之间的相对路径)basename(去除字符串路径部分)示例 拓展:basename命令的完整用…

项目引入多个连接池,导致使用其他连接池,maven分析学习

第一步在命令行中执行 mvn dependency:tree > excludeParentstart.log如果你的settings文件不是项目使用的setting配置,那么就使用下面的命令 mvn -gs 你的路径/apache-maven-3.8.2/conf/settings-person.xml dependency:tree > excludeParentstart.log然后…

Spring学习---上篇

文章目录 1、Spring1.1、简介1.2、优点1.3、Spring的组成1.4、拓展 2、IOC理论推导3、IOC的本质3.1、IOC概念3.2、IoC是Spring框架的核心内容 3、HelloSpring3.1、实现3.2、思考 4、IOC创建对象的方式5、Spring配置5.1、别名(alias)5.2、Bean的配置5.3、…

Multi-class classification without multi-class labels (ICLR 2019)

Multi-class classification without multi-class labels (ICLR 2019) 摘要 这项工作提出了针对多分类的新策略,不需要具体的类别标签,取而代之是利用样本之间的两两相似度,这是一种弱化的标注方式。所提方法称作元分类学习,为两…