- MATLAB
- 1. MATLAB 각 Window 사용법
- MATLAB
- 3. 데이터의 3D 출력
- MATLAB
- 4. 조건문 및 반복문의 사용. 에러대비
- MATLAB
- 5. Simulink의 기초
- MATLAB
- 6. Simulink의 기초 2
- MATLAB
- 7. Function 문의 사용
- MATLAB
- 8. 동역학 시뮬레이션하기
- MATLAB
- 9. 애니메이션 구현하기
- MATLAB
- 13. GUI - Slider 사용하기
- MATLAB
- 16. GUI - 종합 예제
그리고 이미 이 연재를 시작하기 전에 에니메인션에 대한 이야기를 했습니다.
[공학기초/MATLAB] - MATLAB에서 간단히 움직이는 그림 구현하기 (애니메이션 구현)
[공학기초/MATLAB] - Simulink에서 간단한 애니메이션 구현하기
위 글이 그 내용들입니다. 그래서 이번글에는 단지 지난번에 했던 카트형진자시스템을 애니메이션으로 구현하는 부분을 해볼려고 합니다. 이전에 이야기했던 애니메이션 방법은 구현이 상당히 편한 fill 명령과 set 명령을 이용한 속성바꾸기였는데요. 이 방법으로 구현할려면 첫 그림을 그려줘야합니다.
위의 그림은 진자만 그린겁니다만, 일단 카트와 카트가 다니는 길, 그리고 진자의 첫그림이 필요하죠
이렇게 만들어 줍니다. 이제, set명령을 이용해서 그림을 변경해줘야할 텐데요. 그전에 이전에 했던 시뮬레이션을 생각해보죠. 그 때, 분명 scope로 카트의 위치(x)와 진자의 각도(theta)를 받았습니다. 그럼 에니메이션을 구현할때도 그 두 성분을 가지고 그려야한다는 것인데요. 카트의 위치변경이야 직선운동이니 별 문제 없어 보이지만, 진자의 경우는 회전운동이라서 고등학교때 배운 삼각함수를 잠시 동원해야겠네요.
진자의 회전에 따른 각 좌표의 변화를 설명한 그림입니다. 이 좌표설정이 올바르게 작동하는 것인지 확인하기 위해 m-file 상에서 임의로 움직여 봐야겠네요.
l = 5; r = 0.1; x_plane = [-10 -10 10 10]; y_plane = [-0.6 -0.5 -0.5 -0.6]; x_cart = [-1 -1 1 1]; y_cart = [-0.5 0.5 0.5 -0.5]; x_pole = [-r -r r r]; y_pole = [-l 0 0 -l]; plane = fill(x_plane, y_plane, 'k'); grid on hold on cart = fill(x_cart, y_cart, 'g','EraseMode','normal'); pole = fill(x_pole, y_pole, 'b','EraseMode','normal'); hold off axis([-10 10 -8 4]); t = 0:0.01:20*pi/180; for t = 0:0.01:20*pi/180 updatedX_cart = x_cart + t; temp_x = [l*cos(3/2*pi+t-atan(r/l)) r*cos(pi+t) r*cos(t) l*cos(3/2*pi+t+atan(r/l))]; temp_y = [l*sin(3/2*pi+t-atan(r/l)) r*sin(pi+t) r*sin(t) l*sin(3/2*pi+t+atan(r/l))]; updatedX_pole = t + temp_x; updatedY_pole = temp_y; set(cart, 'Xdata', updatedX_cart); set(pole, 'Xdata', updatedX_pole,'Ydata', updatedY_pole); drawnow; for i=1:5000000 temp = i; end end
코드는 위와 같습니다. 단지 그냥 테스트용으로 동역학과는 별 상관없습니다. 위 코드를 실행하면
이렇게 실행됩니다.
'Software > MATLAB' 카테고리의 다른 글
MATLAB figure 창의 변화하는 그래프를 동영상(avi)으로 녹화/저장하기 (36) | 2010.04.08 |
---|---|
[MATLAB 연재] 11. LQR 툴박스를 사용하여 제어기 구현하기 (10) | 2010.04.07 |
[MATLAB 연재] 10. 애니메이션을 이용한 동역학 시뮬레이션하기 (26) | 2010.04.07 |
[MATLAB 연재] 8. 동역학 시뮬레이션 하기 (36) | 2010.04.07 |
[MATLAB 연재] 7. Function 문의 사용 (34) | 2010.03.31 |
RAND 함수를 이용하여 오차 생성하기 (24) | 2010.03.19 |
[MATLAB 연재] 6. Simulink의 기초 2 (64) | 2010.03.17 |