[算法][三轴、六轴、九轴传感器算法分析] 1、分享一个三轴加速计matlab动态可视化脚本

简介:


 

 

一、有啥用

    这里用的是LIS3DH三轴加速计,输出为X、Y、Z轴的加速度,通过串口连接电脑,电脑里运行matlab脚本通过串口实时获取数据并做可视化显示。

    这里虽然是针对LIS3DH的,其实稍作修改即可适用其他型号的运动传感器,如:MPU6050,甚至是其他格式的串口数据。

 

二、具体分析

    首先通过串口传来的数据格式为:6位X轴加速计整数+空格+6位Y轴+空格+6位Z轴+换行

printf("%6d %6d %6d\r\n", data.AXIS_X/16, data.AXIS_Y/16, data.AXIS_Z/16);

 

    那么matlab如何读取串口并对其数据进行可视化展示的呢?

serial.m

复制代码
 1 %http://blog.csdn.net/qwertyuj/article/details/12108155%
 2 clc;
 3 
 4 global t;
 5 global x;
 6 global ii;%数组下标
 7 
 8 global m_x;%3轴加速度
 9 global m_y;
10 global m_z;
11 
12 global d_a;%差分
13 
14 t = [0];
15 ii = 0;
16 x = -100;
17 
18 m_x = [0];
19 m_y = [0];
20 m_z = [0];
21 d_a = [0];
22 
23 subplot(1,2,1);%将x,y,z轴加速度图像绘制在整个1X2界面中的第1格
24 p = plot(t,m_x,t,m_y,t,m_z,'EraseMode','background','MarkerSize',5);%初始化图像,图像中有3条线(t,m_x),(t,m_y),(t,m_z)
25 axis([x-200 x+200 -1600 1600]);%设置显示窗口,前两个是x轴的最小、最大极限;后两个是y轴最小、最大极限
26 grid on;%绘制网格(如果不加这句就不绘制网格)
27 subplot(1,2,2);
28 q = plot(t,d_a,'EraseMode','background','MarkerSize',5);%同理,这里只有一条线
29 axis([x-200 x+200 -1600 1600]);
30 grid on;
31 
32 %%
33 
34 try
35     s=serial('com5');
36 catch
37     error('cant serial');
38 end
39 set(s,'BaudRate', 38400,'DataBits',8,'StopBits',1,'Parity','none','FlowControl','none');%设置串口属性等
40 s.BytesAvailableFcnMode = 'terminator';
41 s.BytesAvailableFcn = {@callback,p,q};%设置串口回调函数,串口有数据传输过来就会转到回调函数,p、q为参数
42 
43 fopen(s);%打开串口
44 
45 pause;%按任一按键结束
46 fclose(s);
47 delete(s);
48 clear s
49 close all;
50 clear all;
复制代码

  该文件是主文件,首先声明各种全局变量(matlab全局变量其他函数使用时需要用global声明),然后对这些全局变量初始化,接着实例化两个绘图窗口(第一个窗口3条线——分别是x、y、z三轴的加速度随时间变化曲线;第二个窗口一条线——是差分随时间变化曲线)。34行之后为设置串口、打开串口,接下来动态绘图所有操作均在回调函数中进行了。

     来看看回调函数

callback.m 

复制代码
 1 %%  
 2 function callback(s,BytesAvailable,p,q)  
 3       
 4     global t;               %引用全局变量(4-12行)
 5     global x;  
 6     global ii;%数组下标
 7     
 8     global m_x;%3轴加速度
 9     global m_y;
10     global m_z;
11     
12     global d_a;%差分
13     
14     out = fscanf(s);%读取串口数据,转换为num数据存储在data中
15     data = str2num(out);
16 
17     t = [t ii];%数组插入最新数据在最后面
18     m_x = [m_x data(1,1)]; 
19     m_y = [m_y data(1,2)]; 
20     m_z = [m_z data(1,3)];
21     
22     d_a = [d_a abs(m_x(1,ii+2)-m_x(1,ii+1))+abs(m_y(1,ii+2)-m_y(1,ii+1))+abs(m_z(1,ii+2)-m_z(1,ii+1))];
23     
24 
25     set(p(1), 'XData',t,'YData',m_x(1,:));%用新数据更新图
26     set(p(2), 'XData',t,'YData',m_y(1,:));
27     set(p(3), 'XData',t,'YData',m_z(1,:));
28    
29     set(q(1), 'XData',t,'YData',d_a(1,:));
30 
31     drawnow %重新绘制图,并移动两个图的窗口,使之呈现运动效果
32     x = x + 1;  
33     subplot(1,2,1)
34     axis([x-200 x+200 -1600 1600]);  
35     subplot(1,2,2)
36     axis([x-200 x+200 -1600 1600]);  
37     ii=ii+1;  
38 end 
复制代码

  每次串口有数据均会触发回调函数。在回调函数中,首选获取串口流,并将串口数据流转换为data数组。接着用读取的新的data数据插入到老的数组(17~22行)。第25~29行则是用新的3+1个曲线的数据更新图。第31行之后的负责移动视窗,使之呈现出数据在滚动的效果。

 

三、最终效果

 

四、楼主讲话

好长时间没写文章了!就拿这个水水的小工具作为开篇~ 



本文转自beautifulzzzz博客园博客,原文链接:http://www.cnblogs.com/zjutlitao/p/5577365.html,如需转载请自行联系原作者

相关文章
|
26天前
|
机器学习/深度学习 人工智能 监控
AI算法分析,智慧城管AI智能识别系统源码
AI视频分析技术应用于智慧城管系统,通过监控摄像头实时识别违法行为,如违规摆摊、垃圾、违章停车等,实现非现场执法和预警。算法平台检测街面秩序(出店、游商、机动车、占道)和市容环境(垃圾、晾晒、垃圾桶、路面不洁、漂浮物、乱堆物料),助力及时处理问题,提升城市管理效率。
AI算法分析,智慧城管AI智能识别系统源码
|
25天前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到"hand.txt"文件。
|
1天前
|
算法 数据可视化 Python
Python中LARS和Lasso回归之最小角算法Lars分析波士顿住房数据实例
Python中LARS和Lasso回归之最小角算法Lars分析波士顿住房数据实例
|
2天前
|
算法 定位技术 Windows
R语言最大流最小割定理和最短路径算法分析交通网络流量拥堵问题
R语言最大流最小割定理和最短路径算法分析交通网络流量拥堵问题
10 4
|
2天前
|
文字识别 算法 计算机视觉
图像倾斜校正算法的MATLAB实现:图像倾斜角检测及校正
图像倾斜校正算法的MATLAB实现:图像倾斜角检测及校正
12 0
|
5天前
|
机器学习/深度学习 算法
【MATLAB】GA_ELM神经网络时序预测算法
【MATLAB】GA_ELM神经网络时序预测算法
278 9
|
22天前
|
存储 算法 搜索推荐
【算法】七大经典排序(插入,选择,冒泡,希尔,堆,快速,归并)(含可视化算法动图,清晰易懂,零基础入门)
【算法】七大经典排序(插入,选择,冒泡,希尔,堆,快速,归并)(含可视化算法动图,清晰易懂,零基础入门)
|
25天前
|
算法
TOP-K问题和向上调整算法和向下调整算法的时间复杂度问题的分析
TOP-K问题和向上调整算法和向下调整算法的时间复杂度问题的分析
17 1
|
25天前
|
算法
m基于log-MPA检测算法的SCMA通信链路matlab误码率仿真
MATLAB 2022a仿真实现了稀疏码多址接入(SCMA)算法,该算法利用码本稀疏性实现多用户高效接入。每个用户从码本中选取码字发送,接收端采用Log-MPA算法进行多用户检测。由于MAP检测计算复杂度高,故采用Log-MPA降低复杂性。仿真展示了不同迭代次数(1, 5, 10, 30)对误码率(BER)的影响,通过比较各次迭代的BER曲线,研究算法性能与迭代次数的关系。
18 0
|
27天前
|
算法 搜索推荐
基于遗传优化的协同过滤推荐算法matlab仿真
该内容是关于推荐系统和算法的描述。使用Matlab2022a执行的算法生成了推荐商品ID列表,显示了协同过滤在个性化推荐中的应用。用户兴趣模型通过获取用户信息并建立数学模型来提高推荐性能。程序片段展示了遗传算法(GA)的迭代过程,确定支持度阈值,并基于关联规则生成推荐商品ID。最终结果是推荐的商品ID列表,显示了算法的收敛和支持值。

热门文章

最新文章