이번에는 LQR(Linear Quadratic Regulator) 제어기에 대해서 설명하려고 한다.
=> 일반적으로는 "선형시스템"에 대해서 적용가능하지만, "비선형시스템"으로도 확장은(?) 가능하다. (by 선형화 작업)
일단, 기존의 제어기와 비교를 해보자. 기존의
1. Frequency Domain -> PID
2. Time Domain -> State-Feedback
둘 다 => 시스템의 Pole, Zero를 우리가 원하는데에 넣어주는 작업을 한다!
사실, Pole, Zero라는게 Frequency Domain으로 보아햐 하니 이게 안정적인 건지 아닌건지 보기 위해서는 Time Domain => Frequency Domain으로 바꿔주는 귀찮은 작업을 거쳐야 한다.
지금부터는 약간 관점을 다르게 해서, 조금 더 직관적으로
=> (우리가 원하는 값)-(현재 값)=(Error)
를 줄이는 방향으로 Controller를 작성해볼 것이다.
잠시, Least Square Method를 모르는 사람들은 선형대수학에서 Least Squares Method를 보고 오자!!
(선형대수학) 8-1. Least-Squares Method: https://0418cshyun.tistory.com/159
위의 내용을 보면, Least Square Method는 Error(b-Ax)를 최소화(Minimize)하는 최적화문제(Optimization Problem)으로 볼 수 있다. 즉,
그러면, 이러한 개념을 선형시스템에도 끌고 와서 Regulating(x=0으로 만드는 문제!) 문제를 풀어보자!
Q, R은 우리가 직접 지정해주는 Positive Definite Matrix이고, J는 cost function이라고 한다.
즉, 우리가 원하는 것은, 저 Cost Function을 Minimize(->0으로 만들어주는) input을 구하는 것이다!!!
(NOTE) A, B는 상수가 아니다. 즉, LTI 시스템이 아니라 LTV 시스템이다!!
잠시, J에 대해서 살펴보자면...
1. 적분항이 Quadratic Form이라서 => 미분하기 편함!
2. Positive Definite Matrix 적분 => J(Cost) > 0
또한, J를 Minimize한다는 것은..
=> Q,R이 주어져 있는 상황에서
=> 사실, 저 x는 우리가 원하는 값이 x=0이므로, (Error)=x-0=x 와 동일하다!!
=> 즉, "전체 시간"에서 x와 u를 최대한으로 "줄여주는 -> 0으로 만드는" 것과 동일한 효과를 낸다!!
자, 그런데 여기서 보아야 할 것이 있다.
무한대 시간...?
과연, 저 Cost에 있는 무한대가 "실용적"이냐는 것인데, 저 Cost를 곧이곧대로 본다면
=> "무한대"시간 안에, x가 0으로 가기만 하면 된다!
=> 우리가 사용할 "유한 시간"안에는??? -> "대충 가긴 갈건데, 모르겠다!" 가 정답이다!
=> 결국, 우리는 "무한 시간 후"에 0으로 가는 거는 쓰지 못한다!! => 실용적이지도 않고, 성능도 너무 안 좋다...(물론, 상황에 따라 좋은 결과를 낼수도...?)
그러면, 저 Cost를 "유한시간"으로 조금 바꾸자!
즉, T초로 시간을 "Finite"하게 잡자!!!
이 때, x(T)는 "최종 State"로, 0에 가까운 것이 좋을 것이다!!
(이 때, Q_f도 Positive Definite Matrix!)
=> 이 J를 Minimize해보자!!
이 최적화 문제를 풀기 위해서 어떻게 해야 할까???
여러가지 방법이 있는데, 하나씩 살펴보자...
1. Dynamic Programming(DP) 이용
(DP : 동적 계획법이라고 하는데, Divide & Conquer => 부분 문제를 풀어서 => 전체 문제의 답을 낸다!)
=> 시간을 거꾸로 돌린다!!!
=> Cost-to-go라는 DP Variable을 이용해서 푼다!
이를 위해서 다음과 같은 Cost를 또 하나 잡아보자.
잘 보면, 위의 J와 별 반 다를게 없지만, t초에서 계산한 Cost라는 것을 바로 알 수 있을 것이다!! (즉, t가 주어져 있다!!)
혹은, 시간을 거꾸로 돌린다고 생각하면 => (t=0 -> t=T)를 기준으로 계산한 Cost라는 것을 알 수 있다!
(여기서의 u는 "모든 input에 대한 것"으로 생각하면 된다. -> 거기에 따라서 x가 움직인다)
=> 이를 Cost-to-go라고 한다!
=> Cost-to-go에 대해서 조금만 더 살펴보자.
1. t=T인 경우
2. 0<t<T인 경우
t=T에서 "역으로" cost를 구한다고 생각해보자.
애초에, V_t의 미분값를 구할 때, T는 주어져 있고, min u 때문에 u도 주어져 있다고 생각할 수 있다!!
그러므로, 저 u와 T에 관한 항은 상수항처럼 생각해버릴 수 있고, 이는 V_t를 Quadratic Form으로 나타낼 때, 그 속으로 집어넣어줄 수 있다.
그러므로, 어떤 P_t라는 Positive Definite Matrix를 이용해서 저 V_t를 Quadratic Form으로 만들어 줄 수 있다.
이해가 안된다면, 그냥 V_t를 Quadratic Form으로 쓴다고 생각하자!!
정리하자면...
=> 어쩌다보니, V_t를 구하면서 Minimize 문제는 해결해버림!!
=> 저 식을 만족하는 P_t만 구하고, 저기에 t=0을 넣어버리면, Minimize된 Cost J를 구할 수 있다!
일단, P_t를 구하는 건 뒤로 미루고
그러면, 이제 Minimize를 시키는 u를 구해보자!
(여기서 식을 맞추려고, uRu -> 2배를 했는데, 사실 R은 우리가 넣는 임의의 Positive Definite Matrix이므로, R을 그냥 2배 해주었다고 생각해도 된다.)
=> P_t를 구하면, 저 Cost를 Minimize하는 u(Input)을 구할 수 있다!
=> 저 K를 LQR Controller라고 한다!!
또한, 위의 식에서 P_t를 구하는 방법을 알 수 있다.
위에서 u=-Kx를 집어넣어서 생각해보자!
이렇게 나온 식을 Differential Ricatti Equation이라고 한다!
그러면, 이 미분방정식인 Ricatti Equation을 어떻게 푸는지 또 문제가 되는데, 생각해보면, 그냥 Initial Value Problem으로 생각할 수 있다...
그러므로, (물론 Matrix이지만) 1차미분방정식처럼 Initial Value가 존재하므로, 어떻게든 이 해를 수치적으로라도 구할 수 있다!
게다가, 만약에 Steady-State를 원한다면...
=> Cost 또한 Steady-State일 것이다!
즉, 저 미분항 자체를 0으로 만들면 된다!!
이러한 P에 대한 방정식을 Algebraic Ricatti Equation(ARE)라고 하고, 특히 Continuous System에 적용이 되었기 때문에 Continuous Algebraic Ricatti Equation(CARE)이라고 한다.
여기에 대한 Solver는 많이 개발이 되어있어서, Matlab에서 이 Ricatti Equation에 대한 Solver를 제공해주고 있다.
(사실, LQR Controller를 그냥 주기도 한다!)
여기까지 Dynamic Programming으로 접근해본 LQR Controller를 설명했는데,
물론, 여러가지 방법으로 LQR을 설명할 수 있으므로, 다음 챕터들에서 더 알아보자.
'제어이론 > Advanced' 카테고리의 다른 글
(Advanced) 2. 직접 LQR Controller 확인해보자! (1) | 2023.07.01 |
---|---|
(Advanced) 1-2. Continuous LQR Controller (Lagrange Multiplier 방법) (0) | 2023.06.30 |