본문 바로가기
전공 관련 (Major)/제어 (Control)

제어공학 - 상태 공간 (State-space)

by Jayce_choi 2022. 8. 16.
반응형

1. 상태 공간 (State-space)

상태 공간은 말 그대로 시스템의 상태를 표현하는 집합을 의미합니다. 고차의 미분방정식을 여러 개의 미분방정식으로 표현한 것이기에 일반적인 SISO (single-input single-output) 시스템에서 더 확장되어서 MIMO (Multi-input multi-output)의 시스템을 제어하고 표현하기 위해 사용되는 분석법이자 개념입니다.

기본적으로 상태 공간을 표현하기 위해서 들어가는 방정식의 차수는 1차입니다. 더 높은 차수의 방정식이 들어갈 때는 1차원으로 구성된 상미분 방정식이 coupling 되어 상태 공간에 들어가 시스템을 표현하게 됩니다. 

상태 공간을 이용한 해석은 주파수 영역 해석과는 다르게 MIMO 시스템의 시스템 해석 및 설계가 용이합니다. 현대의 시스템들은 더욱더 복잡해지고 있으며 요구하는 사항이 많아지기 때문에 기존에 존재하던 주파수 영역 분석의 방법의 한계인 MIMO 시스템을 다룰 수가 있기 때문에 시스템이 복잡해진 현재의 시스템을 다루기 위한 현대 제어 (modern control) 기법의 근간이 되는 개념이기도 합니다. 다만 주파수 영역 해석보다는 비교적 간단한 반면 시스템의 모델을 적절하게 알아야 한다는 단점이 필요합니다. 

 

2. 상태 공간 방정식 특징 

1) 상태변수 (state-variable)는 상태를 정의하기 위한 최소 변수를 의미합니다. 상태 변수로 선정되기 위해서는 시스템 내부에 독립된 에너지 저장 요소, 위치 에너지 또는 운동에너지 등의 흐름 변수가 될 수도 있으며, 변위, 속도 등 시스템 상태와 관계가 아주 높은 변수로 지정됩니다. 

개수를 결정 짓는 요소는 시스템을 결정짓는 가장 높은 order입니다. 또한 상태 변수는 unique 하지 않을 수도 있으며 측정되거나 직접적으로 측정되지 않은 요소들에 의해서 정의되기도 합니다. 

2) 상태 공간의 장점 
- 컴퓨터가 비교적 연산하기 편함
- 상태에 대한 정의가 명확함
- 초기 조건이 존재하는 경우도 적용 가능 (전달 함수는 항상 초기 조건 0으로 가정하고 식을 변환함)
- 다변수 입력, 다변수 출력이 가능한 MIMO 시스템에 적용 가능
- 시변, 비선형 모델링 가능함
- S-domain으로 안 가도 해석이 가능함. 

3) 상태공간을 구성하는 2가지 요소 
- 상태 방정식 (state equations)
- 출력 방정식 (output equations)

먼저 첫번째 구성요소인 상태 방정식의 일반적인 형태는 아래와 같습니다. 

상태 방정식은 상태 변수의 시간에 대한 변화율 xdot이 상태 변수 x(상태천이행렬 A)와 입력 u(입력 행렬 B)와 어떠한 관계를 갖는지 설명하는 방정식으로서 일차 선형 미분방정식으로 표현됩니다.

*A 행렬은 system matrix라고 불리며 현재의 상태가 상태 변화율과의 관계를 보여주는 행렬입니다. 때문에 만약 상태 변화가 현재 상태와 의존적이지 않다면 A 행렬은 0 행렬이 됩니다. 

*B 행렬은 control matrix라고도 불리며 input에 대해 영향을 주는 행렬입니다. 때문에 시스템이 변하는데 input에 의존적이지 않다면 B 행렬은 0 행렬이게 됩니다. 

 

두 번째 구성요소인 출력 방정식의 일반적인 형태는 아래와 같습니다. 

출력 방정식은 상태 변수 x (출력 행렬 C)와 입력 u (직접 전달 행렬) 사이에 어떠한 관계를 갖는지 설명하는 방정식으로서 일차 선형 미분방정식으로 표현됩니다.

*C 행렬은 출력 행렬로서 시스템의 상태와 출력 간의 관계를 결정짓습니다.

*D 행렬은 direct transmission 또는 feed-forward 행렬이라고도 불리며 출력 방정식에 존재하는 입력에 대해 직접적으로 영향을 미칠 수 있는 행렬입니다. 보통의 시스템 제어 블록선도에서는 feed-forward 블록이 없으나 아래 그림과 같이 feedback을 받지 않고 forward로 control 인풋을 주는 feed-forward 루프에서는 D 행렬의 값이 존재하여 입력 u에 영향을 미칠 수가 있습니다.

 

최종적으로 상태 공간은 아래와 같이 상태 방정식과 출력 방정식에 의해 표현이 되며 

이때 우리는 좀 더 simple한 형태로 표현하기 위해서 행렬의 size를 제거시키고 아래와 같이 보통 표현합니다. 

 

 

3. 상태 공간 예제 

질량, 댐퍼, 스프링을 가진 병진 운동을 하는 시스템의 상태 공간 정의하기 (입력은 외력)  

m [kg] mass - 질량 k [N/m] spring constant (stiffness) - 스프링 상수
c [Ns/m] damping coefficient - 댐핑 상수 F [N] external force acting on the body - 외력 
x [m] displacement of the body - 변위    

1) 먼저 시스템을 설명할 수 있는 상미분 방정식을 파악합니다. 

2) 다음은 방정식을 재배열을 하되 아래의 방정식과 form이 동일하게 되도록 상태 변수 간의 관계를 파악하여 현재 상미분 방정식의 최고 차수인 2차에서 1차로 표현할 수 있도록 합니다. 

먼저 식을 다음과 같이 다시 적습니다. 

이때 현재 미분 방정식이 2차이므로 우리는 2개의 상태 변수가 필요합니다. 2개의 상태 변수를 x1, x2라고 할 때 우리는 임의로 아래와 같이 정의를 합니다. 

다음으로 각각에 미분을 취해주고 

미분을 통해 얻어진 결과와 원래 정의한 관계를 통해서 우리는 x1 dot이 x2이며 x2의 dot은 x ddot임을 파악하였습니다.

결과를 미분 방정식의 x자리에 적용시키면 아래와 같은 결과를 얻게 됩니다. 

최종적으로 좌측에는 미분항을, 우측에는 일차식으로 구성하여서 상태 공간 일반 방정식과 동일한 form으로 재배열합니다.

이제 쉽게 A 행렬과 입력 행렬 B를 묶어서 파악할 수가 있습니다. 

 

이제 출력 방정식을 파악해 봅시다. 파악을 위해서 먼저 측정 가능한 출력이 필요하며 현재 시스템에서는 변위가 최종 출력이기 때문에 x1과 x 2중에 미분이 아닌 x1이 output이 됩니다. 

이때 피드 포워드 요소도 없기 때문에 D 행렬은 0이 되며 C 행렬은 [1 0]이 됩니다. 

 

3) MATLAB을 통해서 결과를 살펴봅시다. 

입력은 step 입력이며 1N의 외력이 작용하도록 하였습니다. 

m = 2; % mass = 2 (kg)
c = 1; % damping coefficient = 1 (Ns/m) 
k = 2; % spring constant (stiffness) = 2 (N/m)
t = 0:0.01:25; % time (s) = 0 ~ 25s

A = [0 1; -k/m, -c/m];
B = [0; 1/m];
C = [1 0];
D = 0;

sys = ss(A,B,C,D);

opt = stepDataOptions('stepAmplitude',1);
result = step(sys,t,opt);

figure()
plot(t,result)

xlabel('time (s)')
ylabel('displacement (m)')
grid on;

 

간단한 저항, 인덕터가 존재하는 RL 회로의 상태 공간 모델 정의하기 

E [V] continuous voltage source - 전원 S switch - 스위치 
R [ohm] resistance - 저항 L [H] inductance - 인덕턴스
u [V] voltage drop across the circuit - 전압 강하 u_R [V] voltage drop across the resistor - 저항에서의 전압 강하
u_L [V] voltage drop across the inductor - 인덕터에서의 전압 강하 i [A] electrical current through the circuit - 회로의 전류 

 

1) 위 예제와 동일하게 먼저 상미분 방정식을 정의합니다. 

식은 차수가 1인 미분 방정식이기 때문에 1개의 상태 변수만 필요로 합니다. 

2) x1을 이용하여 식을 다시 바꿔줍니다. 

그리고 상태 방정식 형태로 바꿔주기 위해서 x_dot만 좌항에 남길 수 있도록 정리하여 줍니다. 

정리가 되면 우리는 상태 행렬 A와 입력 행렬 B를 다음과 같이 파악 가능해집니다. 

이제 출력 방정식을 정의해야 합니다. 출력은 회로에서 전류를 의미하므로 간단하게 아래와 같이 표현 가능합니다.

그리고 출력 방정식에서 각 항의 계수를 통해서 출력 행렬 C와 피드 포워드 행렬 D를 파악할 수가 있습니다. 

3) 이제 MATLAB을 이용하여 결과를 관찰해봅시다. 

E = 12; % voltage [V] 
R = 0.3; % Resistance [Ohm]
L = 0.08; % Inductor [H]

t = 0:0.01:2; 

A = [-R/L];
B = [1/L];
C = [1];
D = [0];

sys = ss(A,B,C,D);

opt = stepDataOptions('stepAmplitude',E);
result = step(sys,t,opt); 

figure()
plot(t, result)
xlabel('time [s]')
ylabel('current [A]')
grid on;

 

반응형

댓글