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

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

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

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

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

目录

💥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代码及讲解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值