본문 바로가기

Software/MATLAB

[MATLAB 연재] 10. 애니메이션을 이용한 동역학 시뮬레이션하기

본 강좌에 사용되는 MATLAB은 버젼 7.9.0 (R2009b)을 대상으로 합니다.

바로 직전 강좌에서 이야기한 에니메인션을 시뮬링크에서 구현해보겠습니다. 사실 그리 깔끔한 방법은 아닙니다만,.ㅜ.ㅜ.... 뭐 간단해서요^^ 일단 카트형진자 시스템을 시뮬링크로 구현한 블럭(참조)에서 

위 그림처럼 구현될 것인데요.

먼저 위에 표시된 부분은 Annotation으로 역시 한 번 이야기했었습니다.(참고글). 지금은

표시된 부분에 첫그림이 위치하도록 되어 있는데요

위의 코드가 삽입되어있습니다.

다음, 저 부분은 cart와 pole이라는 이름을 가진 fill로 채워진 box속성을 넣어줍니다. 이유는 function문은 외부변수를 참조할 수 없기 때문입니다. 그리고

위의 function에는

test1이라고 이름을 붙인 에니메이션을 실제로 구현하는 코드가 들어갑니다. 코드 내용은

function y = test1(pos_cart, theta, cart, pole)
 
l = 5;
r = 0.1;
x_cart = [-1 -1 1 1];
 
updatedX_cart = x_cart + pos_cart;
temp_x = [l*cos(3/2*pi+theta-atan(r/l)) r*cos(pi+theta) r*cos(theta) l*cos(3/2*pi+theta+atan(r/l))];
temp_y = [l*sin(3/2*pi+theta-atan(r/l)) r*sin(pi+theta) r*sin(theta) l*sin(3/2*pi+theta+atan(r/l))];
updatedX_pole = pos_cart + temp_x;
updatedY_pole = temp_y;
set(cart, 'Xdata', updatedX_cart);
set(pole, 'Xdata', updatedX_pole,'Ydata', updatedY_pole);
drawnow;
 
y = 1;

입니다.

그리고, 시뮬레이션을 실행하면, 또 step size 어쩌는 워닝이 뜨는데요. 시뮬레이션 속도도 좀 조절할겸해서 파라미터를 약간 만져주죠. 위 그림에서 simulation메뉴의 Confi~~~어쩌는 곳에 가서

저 부분을

Fixed-step으로 간격은 0.01로 잡아줍니다. 그리고 시뮬레이션을 하면 --- 아... 아까 처음에 만든 annotation을 먼저 클릭하고, 다음 실행해야합니다. 그러면, 상황에 맞는 에니메이션을 보실 수 있습니다. 문제는 좀 느리다는 것인데요. 순전히 PC속도에 따라갑니다. 라고 말씀드리고 싶지만(ㅜ.ㅜ) 사실 에니메이션을 구현하도록 제가 소개한 방법이 시뮬링크에서 구현하기엔 너무 느리기 때문입니다...ㅜ.ㅜ 뭐 그래도 보시기에 지장은 없습니다....

반응형