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

동역학 방정식 !

이떤 사물(혹은 시스템)을 역학적으로 해석해서 미분방정식의 형태로 표현한 것을 동역학 방정식이라고 합니다. 실제로는 참 복잡한 형태를 가지게 되지만, 우리는 그저 간단히 어떻게 동역학을 유도하는지는 생략하교(^^) 어떻게 MATLAB에서 시뮬레이션할 것인지를 이야기해보겠습니다. 이미 이전에 카트형 진자시스템에 대한 이야기를 했었는데요.

이때 사용한 동역학방정식

을 이용하겠습니다. 일단 위 식을 그대로 simulink로 꾸미면, algebraric loop가 있다는 warnning을 보게 됩니다. 왜냐면, 자기자신을 참조(ddot_x, ddot_theta)하기 때문이지요. 그래서 최고차 미분항으로 정리할 필요가 있습니다.

간단히 행렬로 표현하고, 역행렬을 이용해서 위와 같이 정리할 수 있습니다.

그리고, 역행렬을 구해버리면

끝나는 거지요. 여기서 몇몇 파라미터는 예전에 제가 사용한 것으로 고정하고

위 식에서

를 대입하여 정리하면

를 얻을 수 있습니다. 여기서 실제로는 저렇게 수치화시키지 않습니다. MATLAB/Simulink에서 변수로 사용할 수 있도록 하는데요. 우리는 그저 연습이니, 빨리(^^) 구현할 수 있도록 그냥 숫자로 모두 표현해버린 것입니다.

Simulink로 동역학 표현 !

사람들 마다 사용하는 목적이 다르겠지만, simulink는 이런 경우 미분방정식을 풀기 위해서 사용한다고 말할 수 있습니다. 그만큼 미분방정식의 형태로 표현되는 동역학 방정식의 구현에 큰 장점을 보이는데요.

이전의 시뮬링크기초에 관한 글(참조1, 참조2)을 참조하셔서 위의 형태로 꾸며주면 됩니다. 위에 표시된 부분은 제어입력 F인데, 지금은 제어입력을 구현하지 않으므로 '0'을 인가하면 됩니다.

위에 표시된 부분은 ddot_x인데요. 동역학과 잘 비교하시면 됩니다.

그래서 위와 같이 넣어주시고요.

위에 표시된 부분은 ddot_theta로서

로 구현하시면 됩니다.

저부분은 theta의 초기치를 넣는 부분입니다. 초기치를 주지 않으면, 시뮬레이션 하면 가만히 '0'의 상태에 머물러 있는것을 볼 수 있거든요. 그래서 좀 움직이라고, 초기치를 줘야죠.

simulink내부는 라디안단위이기 때문에 10도의 초기치를 위와같이 표현해서 넣어둡니다.

그리고, 위 gain은 라디안으로 각도를 관찰해야해서 좀 불편하니까 Scope에서는 도의 단위로 확인할 수 있도록 변환하는 것입니다.

그리고, 시뮬레이션을 시작해서 결과를 확인하면

이렇네요. 그냥 진자를 어떤 각도에 두고 자유운동을 시켜본겁니다.^^

신고