mct01.png


반갑습니다. 교주 LGS입니다. ^^

이쯤에서 동기부여 동영상 하나 더 보고 가겠습니다.

Double Inverted Pendulum 입니다. (조인트에 아무것도 안달려있어요 ^^) 학습의 의욕이 좀 생기시나요? ㅋ




지지난 시간에 말씀 드렸듯이 MATLAB Control System Toolbox에서는 크게 4가지의 종류의 모델을 제공하고 있습니다.

지금까지 TF(Transfer function)을 가지고 놀았구요~ TF는 잠시 떠나보내고 (TF 바이바이~ ㅜㅜ 걱정마 조금있다 다시 만날꺼야 ㅜㅜ)

이번 시간부터는 SS(State Space)라는 녀석과 친해져봅시다. (나치의 SS 친위대가 아니구요 ^^;)

그럼 SS 고고씽~


finallyMATLAB0101.png


SS, TF, ZPK, FDR 모두 표현하는 수식의 형태가 다른 것이지 결국 다 같은 한놈을 표현하고 있다고 했죠?~ ^^

State-space Model의 경우 time domain에서 노는 녀석이구요 Transfer Function 같은 경우 Frequency domain에서 노는 녀석입니다.

MATLAB 내에서는 위의 4가지 형태의 모델을 다른 형태의 모델로 쉽게 변환할 수 있습니다.


SS0101.png


강의 진행을 위해 지난 시간에 세웠던 DC Motor의 미분 방정식을 다시 가지고 오겠습니다.

(지난 강의 07. Modern Control Theory with MATLAB - Mathematical Modeling 6부)


dcmotor0104.png 

(이미지 출처: MATLAB Help Browser)



다 기억나시죠? ^^

State-space Model은 미분방정식(ODE)을 time domain에서 직접 풀어나가는 녀석입니다.

ODE(Ordinary Differential Equation)는 아래 두강좌를 참조하시면 무슨 말인지 대충 감이 잡히실 거예요

MATLAB에서 ode45함수를 사용하셔서 상미분방정식을 푸실때에는 푸시고자 하시는 미분방정식이 굳이 Linear일 필요가 없습니다.

(Linear에 관한 간략한 설명)

ode45 함수의 경우 Nonlinear 식도 그냥 보이는데로 쭉 써주시면되구요.

만약 System을 표현하는 식이 Linear라면 matrix 형태인 State-space 형태로 나타낼 수 있습니다.


State Space Model은 MIMO(Multiple Input Multiple Output)를 다룰 때 진가가 발휘 됩니다.

Transfer function의 경우 Output의 개수만큼 Transfer Function을 구해줘야합니다.

State Space는 여러개의 TF를 matrix 형태로 가지고있는 녀석이라고 보시면 정확해요~

자~ 그러면 TF 때와 마찬가지로 System을 표현하는 미분방정식으로부터 SS를 만들어 봅시다요~ ^^


SS0102.png

Mathematical Modeling part에서 유도한 DC 모터를 나타내는 미분방정식이 위와 같았습니다.

State Space Model에서는 State variable(상태변수)만 잘 잡아주시면 땡입니다요~ o(^o^)o

State-space의 일반적인 형태은 아래와 같이 생겼습니다.


finallyMATLAB0102.png


위의 식에서 x는 상태변수(state variable), y는 출력, u는 입력(input)입니다.

state는 그 시스템의 상태(위치가 어디다, 속도가 얼마다 등등)를 나타냅니다. state variable은 system을 표현하는 변수(위치,속도)이구요

Deterministic System(Stochastic (확률적)이 아닌 정확한, 확정되어 있는 시스템)의 경우 현재의 stable variable의 값만 정확히 알면

앞으로 일어날 모든 일을 0.00001mm의 오차도 없이 정확히 예측할 수 있습니다.


ABCD matrix에 각각 이름이 있습니다. 중요한 것은 아니니까 그냥 눈으로 한번 익혀두세요 ^^

finallyMATLAB0104.png 


아 물론 ABCD도 시간에 대한 함수일 수도 있지만(A(t),B(t),C(t),D(t)) 통상의 경우 A,B,C,D matrix가 시간의 함수가 아니라 

그냥 상수이고 A, B, C, D matrix가 모두 숫자로만 이루어진 경우 System을 Time-invariant(시불변) System이라고 부릅니다.

다시 정리하면 System을 표현하는 미분방정식이 선형이고(Linear) 시불변이면(Time Invariant) 즉 System이 LTI(Linear Time Invariant) 이면

State Space Model로 System을 표현할 수 있습니다.


State Space의 핵심은 Order Reduction(차원축소?)입니다. n차의 미분방정식을 n개의 1차 미분방정식으로 만드는 거죠

DC 모터의 State variable을 아래와 같이 잡겠습니다.


SS0103.png


보통 가장 높은 미분차수보다 한 차수 낮은 녀석부터 미분하지 않은 녀석까지 차례대로 State variable을 잡으시면 됩니다.

DC 모터의 경우 i에 관해서는 1차 미분인 di/dt가 가장 높은 미분 차수이므로 i(t)로 잡고

θ에 관해서는 이차미분인 θ''이 가장 높은 차수이므로 1차미분인 θ'와 θ를 state variable로 잡으시면 되겠네요 ^^

그리고 A를 구하기 위해서 System의 미분 방정식을 [State variable을 시간에 대해 한번 미분한 녀석]으로 정리해주세요


SS0105.png

정리해주시면 위의 식처럼 되구요 위의 식을 matrix 형태로 나타내면...


SS0106.png


(어라 state variable을 i,θ, θ'으로 잡았더니 A matrix의 Rank가 2네요 -_-;; 2번째 Column에 [0;0;0]이 딱 보입니다요~ ;; 

θ는 굳이 꼭 필요한게 아니군요 냠 ;;;)

Output의 경우 여러분들이 보시고자하는 state variable을 돌려주시면 되요

예를 들어 '나는 DC 모터의 회전각 θ와 회전각속도 θ'을 보고싶다'  라고 하시면 C matrix를  아래와 같이 잡으면 되겠죵? 


SS0104.png

D는 Output에 직접 영향을 미치는 Input이구요 통상 0 matrix 입니다.

자~ 다시 정리해보면 A, B, C, D는 모두 matrix이구요~ x와 y,u는 vector이고 시간 t에 관한 함수입니다.

ABCD matrix를 잘 보시면 각 matrix의 크기가 정해져 있어요~


finallyMATLAB0106.png

n은 State variable의 숫자이구요 r과 m은 각각 Input의 수와 output의 수르 나타 납니다.

그럼 r과 m이 모두 1이면? 넵 입력도 하나이구요(Single Input), 출럭도 하나죠(Single Output)? 

r=m=1이면 SISO네요 ^^


위의 Motor system의 경우 "나는 각도는 상관없다!! 오로지 각속도에만 관심이있다 !!"

그러시면 θ(t)'(=dθ(t)/dt)를  ω로 두시고 State-space Model을 만드셔도 됩니다. ^^


MATLAB에서 State-Space Model을 만드는 명령어는 ss입니다.

사용방법은 ss(A,B,C,D)로 입력변수로 ABCD matrix를 각각 넣어주시면 되구요~ 

(MATLAB Help Browser의 내용을 참조했습니다.)

SS0107.png 


workspace에  sys_dc <1x1 ss> State-space 변수가 생성된 것을 확인할 수 있습니다.

workspace의 sys_dc 변수의 아이콘 모양을 보면 sys_dc가 class라는 것을 알 수 있어요.

말씀 드렸듯이 class는 다른 것이 아니고 변수와 함수를 함께 가지고 있는 녀석입니다.


command window에서 >>sys_ss 라고치시고 점을 찍으신 다음 Tab 키를 눌러 보시면 참조가능한 함수(method)와 값(property) 목록이 뜹니다.

가독성을 높이기 위해 StateName에 이름을 붙여볼까요? ^^

SS0109.png

SS Object의 Property는 Struct형 변수처럼 사용하시면 됩니다~ 

State variable의 이름을 내타내는 StateName property의 경우 각각의 state variable 이름을 cell type으로 넣어주시면 되구요~

(Struct type과 Cell type에 대한 'MATLAB 때려잡기' Data Type 강좌)

StateName 이외에도 여러가지 property를 여러분들이 원하는대로 설정하실 수 있으니까 상황에 맞게 잘 설정해주세용

 


자~ step response(건전지를 모터에 갑자기 연결하는 상황)를 보시려면 TF 때와 마찬가지로 step 함수를 사용하시면 됩니다. 

Command window에서 >>step(sys_ss) 라고 입력하시면..


SS0108.png


Output 2개가 한꺼번에 나오네요~ MIMO 올레~

위의 2개의 그래프 중 위쪽 직선으로 쭉~ 증가하는 그래프는 DC 모터의 회전각도일꺼구요 ( 모터가 계속 돌아가니까~)

밑의 그래프는 모터의 각속도가 되겠습니다.(TF 때 보셨던 것 처럼 일정한 각속도로 수렴하네요 ^^)

B와 C를 B = [-1.5/L; 0; 0], C=[0 0 1]로 수정하셔서 TF Model Step input response와 비교해보세요~

같은 그래프를 보실 수 있을 겁니다.


아! 그리고 같은 System이라고 하더라도 표현되는 State space model은 한가지가 아니예요~

하나의 System이 가질 수 있는 State space의 개수는 무한개입니다. 똑같은 시스템을 A, B, C, D를 다르게 해서 표현할 수 있다는 말씀!!

그러니까 책에 나온 SS랑 내가 세운 SS가 다르다고 해서 틀렸다고 실망 할 필요 없어요 ^^ 



자~ 이번 강좌는 여기까지 입니다.

다음 강좌에서 State Space Model을 좀더 심도 깊게 다뤄보겠습니다.

그리고 TF와 SS를 왔다 갔다 해보죠~ =(=^ㅅ^=)=

수고하셨습니다. 다음 강좌에서 뵙겠습니다. 


profile