본문 바로가기
유도항법제어/최적제어

[Discrete-Time] LQR과 피드백 제어

by 세인트워터멜론 2020. 10. 31.

다음과 같은 선형 시스템에 대해서

 

\[ \mathbf{x}_{t+1}=F_t \mathbf{x}_t+G_t \mathbf{u}_t \]

 

성능지수가 다음과 같이 2차함수로 주어지는

 

\[ J_t = \frac{1}{2} \mathbf{x}_N^T S_N \mathbf{x}_N + \frac{1}{2} \sum_{t=i}^{N-1} \left( \mathbf{x}_t^T Q_t \mathbf{x}_t + \mathbf{u}_t^T R_t \mathbf{u}_t \right) \]

 

LQR 문제의 해는 다음과 같다 (https://pasus.tistory.com/38).

 

\[ \begin{align} & \mathbf{x}_{t+1}=F_t \mathbf{x}_t+G_t \mathbf{u}_t \tag{1-1} \\ \\ & \mathbf{\lambda}_t = F_t^T \mathbf{\lambda}_{t+1} + Q_t \mathbf{x}_t \tag{1-2} \\ \\ & \mathbf{0} = G_t^T \mathbf{\lambda}_{t=1} + R_t \mathbf{u}_t \tag{1-3} \\ \\ & \mathbf{0} = \left( S_N \mathbf{x}_N - \mathbf{\lambda}_N \right) ^T d \mathbf{x}_N \tag{1-4} \end{align} \]

 

최적제어는 다음 식으로 주어진다.

 

\[ \ \mathbf{u}_t= - R_t^{-1} G_t^T \mathbf{\lambda}_{t+1} \tag{2} \]

 

시스템의 최종 상태변수가 정해지지 않고 계산되어야 한다면, 즉 자유최종상태(free-final-state) 문제라면 \( d \mathbf{x}_N \ne 0 \)이므로 최종 동반 상태변수(costate)는 시스템의 상태변수와 다음 관계식을 만족한다.

 

\[ \ \mathbf{\lambda}_N= S_N \mathbf{x}_N \tag{3} \]

 

이제, LQR 자유최종상태 문제를 풀어보자.

 

 

식 (3)은 시간스텝 \( N \)에서만 적용되지만, 모든 시간스텝 \( i \le t \le N \)에서도 적용된다고 가정한다. 즉,

 

\[ \mathbf{\lambda}_t= S_t \mathbf{x}_t \tag{4} \]

 

만약 식 (4)를 만족하는 \( S_t \)를 구할 수 있다면 이러한 가정은 유효할 것이다. 식 (4)를 식 (3)에 대입하고, 이를 식 (1-1)에 대입하면 다음식을 얻을 수 있다.

 

\[ \mathbf{x}_{t+1} = F_t \mathbf{x}_t - G_t R_t^{-1} G_t^T S_{t+1} \mathbf{x}_{t+1} \tag{5} \]

 

식 (5)를 \( \mathbf{x}_{t+1} \)에 관해서 정리하면 다음과 같다.

 

\[ \mathbf{x}_{t+1}= \left( I+G_t R_t^{-1} G_t^T S_{t+1} \right)^{-1} F_t \mathbf{x}_t \tag{6} \]

 

이번에는 식 (4)를 식 (1-2)에 대입하면 다음식을 얻을 수 있다.

 

\[ S_t \mathbf{x}_t = F_t^T S_{t+1} \mathbf{x}_{t+1}+Q_t \mathbf{x}_t \tag{7} \]

 

식 (6)을 (7)에 대입하고 정리하면 다음과 같이 된다.

 

\[ S_t \mathbf{x}_t = F_t^T S_{t+1} \left( I+G_t R_t^{-1} G_t^T S_{t+1} \right) ^{-1} F_t \mathbf{x}_t + Q_t \mathbf{x}_t \tag{8} \]

 

위 식은 모든 \( \mathbf{x}_t \)에 대해서 성립해야 하므로, 다음식이 얻어진다.

 

\[ S_t = F_t^T S_{t+1} \left( I+G_t R_t^{-1} G_t^T S_{t+1} \right)^{-1} F_t + Q_t \tag{9} \]

 

행렬 역변환 정리(matrix inversion lemma)에 의하면 식 (9)는 다음 식 (10)과 같다.

 

\[ S_t = F_t^T S_{t+1} \left[ I-G_t \left( R_t+G_t^T S_{t+1} G_t \right)^{-1} G_t^T S_{t+1} \right] F_t+Q_t \tag{10} \]

 

식 (10)은 시간적으로 역방향(backward)으로 풀 수 있는 식이다. 식 (10)의 오른쪽 항은 \( S_{t+1} \)를 제외하고는 모두 문제에서 주어진 행렬이므로 \( S_{t+1} \)만 알면 \( S_t \)를 계산할 수 있다. 식 (3)을 통해서 식 (4)를 유추해 냈으므로 시간스텝 \( t=N \)일 때 \( S_t \)의 경계값은 최종 상태변수의 가중치 행렬인 \( S_N \)이 된다. 따라서 식 (10)에 의해서 식 (4)가 타당한 가정임을 알 수 있다.

식 (10)을 리카티 방정식(Riccati equation)이라고 한다. 최종값 \( S_N \)을 이용해서 시간적으로 역순으로 모든 시간스텝에서 \( S_t \)를 계산할 수 있다. 그러면 식 (2)로 다음과 같이 최적제어를 계산할 수 있다.

 

\[ \mathbf{u}_t=-R_t^{-1} G_t^T \mathbf{\lambda}_{t+1 }= -R_t^{-1} G_t^T S_{t+1} \mathbf{x}_{t+1} \tag{11} \]

 

시스템 운동인 식 (1-1)을 식 (11)에 대입하면,

 

\[ \mathbf{u}_t = -R_t^{-1} G_t^T S_{t+1} \left(F_t \mathbf{x}_t+G_t \mathbf{u}_t \right) \]

 

가 되고, 이 식을 정리하면 최종적으로 다음 식을 얻을 수 있다.

 

\[ \mathbf{u}_t= - \left( G_t^T S_{t+1} G_t+R_t \right)^{-1} G_t^T S_{t+1} F_t \mathbf{x}_t \tag{12} \]

 

여기서 LQ 게인 \( K_t \)를 다음과 같이 정의하면,

 

\[ K_t= - \left( G_t^T S_{t+1} G_t+R_t \right)^{-1} G_t^T S_{t+1} F_t \tag{13} \]

 

최적제어는 다음과 같이 상태변수 피드백 제어의 형태가 된다.

 

\[ \mathbf{u}_t = K_t \mathbf{x}_t \tag{14} \]

 

식 (13)에 의하면 LQ 게인은 상태변수의 궤적과 무관하게 계산할 수 있다. 따라서 최적제어인 식 (14)를 시스템에 직접 적용하기 전에 미리 LQ 게인을 계산해서 저장해 놓을 수 있다. 그런 후 순차적으로 LQ 게인을 꺼내서 식 (14)로 최적제어 값을 계산해서 시스템에 인가하면 최적 궤적 시퀀스 \( \{ \mathbf{x}_i^*, \mathbf{x}_{i+1}^*, \cdots , \mathbf{x}_N^* \} \)을 계산해 낼 수 있다.

 

 

요약하면, LQR은 최종 시간에서부터 역방향 시간으로 LQ 게인을 계산하는 역방향 패스(backward pass)와 순방향 시간으로 최적제어를 시스템에 적용하여 궤적을 계산하는 순방향 패스(forward pass)로 구성된다.

 

 

댓글0