본문 바로가기

제어이론/선형시스템 -> LTI System

(선형시스템) 8-3. Full-State Feedback Control -> Pole Placement

Frequency Domain에서의 Control은 PID Controller로

Error 자체, 기울기, 적분값에 비례해서 Controller를 만들어 주었다.

 

그러면, 이러한 State Variable System에선 어떤 식으로 Controller를 만들어 줄 수 있을까?

 

-> 8-1에서 본 것 같이, Input에 Feedback을 먹여서 Controller를 만들 수 있다!

u = -Kx

그런데, Frequency Domain에서는 Zero나 Pole의 위치로 이러한 Controller의 안정성이나 성능을 알 수 있었는데, 여기서는 어떻게 할까????

다음을 살펴보자...

즉, 저 특성방정식이 결국 Closed-loop system의 Pole의 위치(Eigenvalue)를 말해주므로, "시스템의 안정성"을 바로 파악할 수 있을 것이다!!

 

->> 결국 K를 조절해서 Pole의 위치를 조절하는 방식으로 Controller를 설계할 수 있다!!

->> Pole-Placement!

 

(NOTE)

결국 Controllability라는 것은 State-Variable을 마음대로 움직일 수 있다는 말이므로, 결국 모든 Closed-System의 Pole의 위치를 내 마음대로 결정할 수 있다는 것과 동일하다!!

 

(NOTE)

이러한 K를 어떻게 잡는가? -> 아래 github에서의 코드를 살펴보자! (Gradient Descent!)


그러면 Regulation 문제를 생각해보자...

Controller를 달면, 우리의 문제는....

y의 경우도 결국 y=Cx+Du에서 x->0으로 가므로, y->0이라고 할 수 있다. (대부분의 경우 D=0)

 

그러면, Tracking 문제를 Controller를 이용해서 해결해보자.

이렇게 찾은 Steady-state Variables와 steady-state Input을 가지고

처럼 Controller를 설계하게 되면 y -> r로 움직일 것이므로, Tracking 문제를 해결할 수 있다.


Example)

(Regulation Problem)

그러면, Pole 3개를 모두 원하는 위치에 놓을 수 있다!

(NOTE)

이 때, K의 변수는 6개이고, Pole은 3개이지만 결국 2개(Conjugation 관계) -> 복소수이므로, Pole을 결정하는 것은 4개...

그러므로 (K의 변수) > (Pole 결정개수) -> K가 유일하지 않다!!

 

이 때의 Response를 살펴보면... (초깃값은 모두 1!)


(Tracking Problem) (수정되었습니다!!!!)

즉, 위의 x_s에 대해서, u_s를 구할 수만 있다면 Regulating Problem에서 평행이동만 한 것이다!

x -> (x-x_s), u -> (u-u_s)로 바꿔버리면 나오는 결과일 뿐이다! (평행이동일 뿐, 시스템의 안정성에 영향을 주지 않는다.)

 

(Example)

위의 Regulating Problem에서 각 Variable이 [-1,0,2] 를 Tracking 하도록 해보자.

식은 3개인데, 변수는 2개이므로, u_s를 결정할 수 없다! => 결국엔 어느정도 "Trade-off"가 필요하다.

 

여기선 가장 심플하게 생각할 수 있는 Pseudo-Inverse를 생각해보자.

("""수정전에는 u_s의 부호가 바뀌어 있었습니다!!!!)

문제는, Pseudo-Inverse에는 오차가 있다!

위의 u_s를 가지고 다시 x_s를 구해보면...

원래 의도한 바는 위와 동일한 K를 가지고 다음과 같이 바꿔버리는 것이었는데,

Psuedo-Inverse의 오차에 의해서 다음과 같이 바뀌어진다.

이러한 시스템의 시뮬레이션 결과를 뽑아보면 의도한 대로 가지 않는 것을 확인할 수 있다!!!

이유를 따져보면, Pseudo-Inverse로 u_s를 구하면, Ax_s+Bu_s=0이 성립하지 않으므로, " (다른 Steady-State x_s') "에 걸린다!!

(수렴성은 변하지 않는다! -> "A-BK의 Pole"이 결정하므로!!!!)

 

근본적인 원인을 따져보면... => 2개의 Input으로 3개의 Output을 결정하려고 하기 때문으로 볼 수 있다!!!

 

그러면, 이를 가장 [-1,0,2]로 잘 끌고 갈 수 있는 방법은 무엇일까...???

 

1. Pseudo-Inverse :

에서 오차가 있다는 말은 "Steady-State 시간"에 오차가 있다는 말로, 애초에 우리가 원하는 것과는 "다른 Steady-State"로 끌고 간다... 그러나, K에 대해선 독립적이므로, 수렴성은 보장해준다.

 

2. 이를 해결하기 위해서 LQR(Advanced 카테고리 참고)을 사용할 수 있다. (물론, 무조건적인 해결책은 아니다.)

LQR은 "시간"에 따라서 오차를 조절해줄 수 있기 때문에, "Steady-State(Infinite Time)"에 대해서 오차를 최대한 줄여주도록 만들수 있다. 그러나 이렇게 수정하면서 K가 바뀌게 되므로, Regulating Problem에서는 잘 수렴하다가 Tracking Problem으로 오면 수렴이 안 되는 경우도 생길 가능성이 있다.

 

 


아래 Github에서 코드를 참고 바란다! (2023-05-23 Updated!!!)

 

https://github.com/cshnforever/tf

 

GitHub - cshnforever/tf: Transfer Function for Linear System

Transfer Function for Linear System. Contribute to cshnforever/tf development by creating an account on GitHub.

github.com