[알고리즘] [3 축, 6 축, 9 축 센서 알고리즘 분석] 1. 3 축 가속 계 matlab 동적 시각 화 스 크 립 트 공유

8301 단어

 
뭐 공부 해요?
    여 기 는 LIS3DH 3 축 가속 계 를 사용 하여 X, Y, Z 축의 가속도 로 출력 하고 직렬 로 컴퓨터 를 연결 하 며 컴퓨터 에서 matlab 스 크 립 트 를 실행 하여 직렬 로 실시 간 으로 데 이 터 를 가 져 와 시각 적 으로 표시 합 니 다.
    여 기 는 LIS3DH 를 대상 으로 하지만 조금 만 수정 하면 다른 모델 의 운동 센서, 예 를 들 어 MPU 6050, 심지어 다른 형식의 직렬 데 이 터 를 적용 할 수 있 습 니 다.
 
구체 적 분석
    먼저 직렬 포트 를 통 해 전 달 된 데이터 형식 은 6 비트 X 축 가속기 정수 + 스페이스 바 + 6 비트 Y 축 + 스페이스 바 + 6 비트 Z 축 + 줄 바 꾸 기 입 니 다.
printf("%6d %6d %6d\r
", 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 세 축의 가속도 가 시간 에 따라 곡선 을 바 꾸 고, 두 번 째 창 1 개의 선 은 시간 에 따라 곡선 을 바 꾸 는 것 입 니 다). 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 줄 이후 에는 창 을 이동 시 켜 데이터 가 굴 러 가 는 효 과 를 보 여 줍 니 다.
 
최종 효과
 
넷 째, 건물 주 연설
오 랜 만 에 글 쓰기! 이 물 도 구 를 시작 으로 ~ 
 
 

좋은 웹페이지 즐겨찾기