AEGLOSLAB 제어공학 종합 핸드북

제4부 현대 제어: 상태공간

4.5 최적 제어 LQR

제4부 현대 제어: 상태공간 · 마무리. 극을 손으로 고르는 대신(4.3), 비용함수를 최소화해 최적 이득을 얻는다. 상태 오차와 제어 노력을 절충하는 $Q\cdot R$을 정하면, Riccati 방정식이 최적 $K$를 준다. 4.3.3·4.4.6에서 미뤄 둔 "성능 vs 노력"의 균형을 수학으로 푼다.

이 장을 마치면 LQR 비용함수의 $Q\cdot R$을 설계 조정 변수로 다루고, Riccati 해로 최적 $K$를 얻으며, LQR의 보장된 강인성과 LQG에서 그것이 사라지는 함정을 이해해야 한다.

4.5.1 동기 — 극을 고르지 말고 "원하는 것"을 고르라

극배치(4.3)는 강력하지만 두 약점이 있었다: ① 극을 어디 놓을지가 임의적(특히 MIMO는 비유일), ② 제어 노력·강인성을 직접 못 본다(4.3.3). 사람이 $n$개 극의 좋은 위치를 손으로 찾는 것은 고차에서 비현실적이다.

LQR의 발상 전환: *극을 고르지 말고, 무엇을 중요하게 여기는지를 고르라. "상태를 목표에 빨리 붙이고 싶다 vs 제어입력을 줄이고 싶다"를 비용으로 적으면, 최적의 $K$(따라서 최적의 극)가 저절로 나온다.*

4.5.2 LQR 문제 — 비용함수 J

선형계 ẋ=Ax+Bu에 대해, 다음 2차 비용함수를 최소화하는 $u(t)$를 찾는다:

$$J = \int_0^{\infty} \left( \underbrace{x^{T} Q x}_{\text{상태 벌점}} + \underbrace{u^{T} R u}_{\text{노력 벌점}} \right) dt$$

  • $Q$ ($n\times n$, 준양정·$\ge0$): 상태 이탈에 대한 벌점. 크게 설정하면 상태를 목표에 밀착시킨다(빠르고 공격적).
  • $R$ ($m\times m$, 양정·>0): 제어 노력에 대한 벌점. 크게 설정하면 입력을 억제한다(부드럽고 느슨, 포화 방지).
  • $Q$와 $R$의 비(ratio)가 설계 조정 변수다 — 4.3.3이 못 가졌던 "성능 vs 노력"의 정량적 다이얼. Q↑(또는 R↓)= 공격적, R↑(또는 Q↓)= 점잖음.

4.5.3 해 — 대수 Riccati 방정식

놀랍게도 최적해는 상태피드백 u=−Kx이고(즉 LQR도 결국 극배치다, 최적으로 고른), 이득은:

$$K = R^{-1} B^T P$$

여기서 $P$($n\times n$ 대칭·$\ge0$)는 대수 리카티 방정식(ARE)의 해:

$$A^T P + P A - P B R^{-1} B^T P + Q = 0$$

보장: $(A,B)$가 안정화가능하고 $(A,\sqrt Q)$가 검출가능하면(4.2.8), ARE의 양정해 $P$가 유일하게 존재하고 폐루프 (A−BK)는 항상 안정하다. 즉 유효한 $Q,R$을 넣으면 불안정이 안 나온다 — 극배치처럼 실수로 불안정하게 놓을 일이 없다.

결국 LQR도 구조는 4.3의 상태피드백 루프와 같다 — 다만 $K$가 손으로 고른 극이 아니라 $Q,R$·리카티에서 최적으로 나온다:

u = −Kx xᵀQx (상태 벌점) uᵀRu (노력 벌점) x K = R⁻¹BᵀP 플랜트: ẋ=Ax+Bu J = ∫(xᵀQx+uᵀRu)dt

$Q$는 상태가 벗어날 때, $R$은 입력을 쓸 때 각각 $J$에 벌점을 쌓는다 — 이 둘의 절충이 리카티를 거쳐 위 루프의 $K$로 응축된다.

4.5.4 Q, R 고르기

$Q,R$을 정하는 것이 LQR 설계의 전부이자 기술이다.

  • 대각으로 시작: $Q=\operatorname{diag}(q_1,\ldots,q_n)$, $R=\operatorname{diag}(r_1,\ldots)$. 각 상태·입력을 독립적으로 가중한다.
  • 브라이슨 법칙(Bryson's rule): 정규화 출발점. qᵢ = 1/(허용 가능한 xᵢ 최대)², rⱼ = 1/(허용 가능한 uⱼ 최대)². 단위가 다른 상태·입력을 비슷한 스케일로.
  • 반복: 비를 조정→시뮬레이션→오버슈트·노력·포화 확인→재조정.

예(이중적분기 $A=[[0,1],[0,0]]$, B=[0;1], $Q=I$, $R=1$): $P$가 대칭이라 미지수는 $P=[[p_{11},p_{12}],[p_{12},p_{22}]]$ 셋뿐이다. AᵀP+PA=[[0,p₁₁],[p₁₁,2p₁₂]], $PBR^{-1}B^TP=PB\cdot B^TP=[[p_{12}^2,p_{12}p_{22}],[p_{12}p_{22},p_{22}^2]]$(B=[0;1]이라 $B^TP=[p_{12},p_{22}]$)이므로, ARE $A^TP+PA-PBR^{-1}B^TP+Q=0$의 세 성분식은:

  • (1,1): $0 - p_{12}^2 + 1 = 0$ → $p_{12}^2 = 1$ → $p_{12} = 1$ (양정해 선택)
  • (1,2): $p_{11} - p_{12}p_{22} + 0 = 0$ → $p_{11} = p_{12}p_{22} = p_{22}$
  • (2,2): $2p_{12} - p_{22}^2 + 1 = 0$ → $p_{22}^2 = 2(1)+1 = 3$ → $p_{22} = \sqrt{3}$

$p_{12}=1$을 (1,2)에 대입하면 $p_{11}=p_{22}=\sqrt3$ — 그래서 P=[[√3,1],[1,√3]](✅ 대입해 ARE를 만족함을 docker로 확인). K=R⁻¹BᵀP=[p₁₂,p₂₂]=[1, √3]. 폐루프 A−BK=[[0,1],[−1,−√3]], 특성방정식 $s^2+\sqrt3 s+1=0$ → 극 $-0.866\pm j0.5$($\omega_n=1, \zeta\approx0.87$). $R$을 키우면(노력 절감) 극이 원점 쪽으로 와 느려지고, $Q$를 키우면 왼쪽으로 가 빨라진다 — 직접 실행해 보라(4.5.8).

4.5.5 LQR이 널리 쓰이는 이유 — 보장된 안정성·강인성

LQR이 현대 제어의 중심인 것은 단지 최적이라서가 아니라 대가 없이 따라오는 강인성 때문이다(전상태 피드백 기준):

  • 보장된 안정성: 유효한 $Q,R$이면 폐루프가 항상 안정(4.5.3).
  • 무한 이득여유·60° 위상여유: 전상태 LQR은 이득여유 $(1/2, \infty)$(이득을 무한히 키워도, 절반까지 줄여도 안정)와 위상여유 $\ge60^\circ$를 보장한다. 2.4에서 직접 확보하던 여유가 추가 비용 없이 생긴다 — LQR의 유명한 결과.
  • MIMO 체계적: 극을 안 고르므로 다입력에서도 비유일성 문제가 없다.

단, 이 강인성은 전상태 피드백 가정이다. 관측기를 추가하면(다음, LQG) 사라질 수 있다(4.5.7). 정직하게 기억할 것.

4.5.12 MIMO 특유 이슈 — 루프를 따로 둘까, 한꺼번에 다룰까

지금까지는 대개 단일입력·단일출력(SISO)을 예로 들었지만, 실무 플랜트는 종종 여러 입력이 여러 출력에 동시에 영향을 준다(예: 2입력 2출력 — 밸브 두 개가 탱크 두 개의 액위에 둘 다 영향). 이때 흔히 두 갈래 선택지가 있다:

  • 분산(decentralized) 제어: 출력 하나에 입력 하나를 짝지어(pairing), 각 짝을 독립적인 SISO PID로 다룬다(2.5 그대로 반복). 구현이 쉽고 익숙하다.
  • 전면적 MIMO 설계: LQR(4.5.2~4.5.4)처럼 $K$ 행렬 하나로 모든 입출력을 한 번에 다룬다. 짝짓기 문제가 전혀 없다(4.5.5의 "MIMO 체계적"이 이 뜻이다).

분산 제어를 쓰려면 어느 출력에 어느 입력을 짝지을지부터 정해야 한다 — 잘못 짝지으면 두 SISO 루프가 서로 간섭한다(한 루프가 움직이면 다른 루프의 유효 이득이 바뀜). 이 판단을 돕는 고전적 도구가 RGA(Relative Gain Array, 상대이득배열)다.

4.5.12.1 RGA — 어느 입출력을 짝지을지

정상상태 이득행렬 $G(0)$($n\times n$, 정사각·가역이라 가정)에 대해:

$$\Lambda = G(0) \odot (G(0)^{-1})^T$$ — $\odot$ = 원소별 곱, Hadamard product

성질: $\Lambda$의 모든 행·열의 합은 항상 1이다(정의에서 유도되는 대수적 사실 — 계산 검산에 쓸 수 있다).

해석: 원소 $\lambda_{ij}$는 "다른 모든 루프가 열려 있을 때 대비, 닫혀 있을 때 입력 $j$→출력 $i$의 유효 이득이 얼마나 바뀌는가"를 나타낸다.

  • $\lambda_{ij} \approx1$: 다른 루프의 영향을 거의 안 받음 — 이 짝짓기($i$↔$j$)가 좋은 후보.
  • $\lambda_{ij}$가 0이나 1에서 멀면(특히 음수면): 다른 루프를 닫는 순간 이 짝의 유효 이득 부호까지 바뀔 수 있다는 뜻 — 분산 SISO로 이 짝을 쓰면 한쪽 루프의 게인 조정이 다른 루프를 불안정화시킬 위험이 크다. 짝짓기 자체를 재고하거나, 분산을 포기하고 전면적 MIMO 설계로 가야 한다.

숫자 예: $G(0) = [[2, 1], [1, 3]]$(입력1이 출력1·2에, 입력2가 출력1·2에 모두 영향). $\det(G)=2\cdot3-1\cdot1=5$이므로 G⁻¹ = (1/5)[[3,−1],[−1,2]] = [[0.6,−0.2],[−0.2,0.4]](대칭이라 전치해도 같음). 원소별 곱:

  • $\Lambda = [[2\cdot 0.6, 1\cdot(-0.2)], [1\cdot(-0.2), 3\cdot 0.4]] = [[1.2, -0.2], [-0.2, 1.2]]$

검산: 각 행·열 합 1.2+(−0.2)=1.0 ✓(위 성질과 일치, numpy로 재확인 — ✅ 검증됨). 대각 짝짓기(출력1↔입력1, 출력2↔입력2)는 $\lambda=1.2$로 1에 가까워 쓸 만한 짝이지만, 반대 짝짓기(출력1↔입력2 등)는 $\lambda=-0.2$로 음수 — 이 조합으로 분산 SISO를 시도하면 위험하다는 뜻이다. $\lambda=1.2$도 정확히 1은 아니라 약간의 상호간섭이 있음을 인정해야 한다(완전 독립은 아니다).

4.5.12.2 그래서 언제 무엇을

  • $\lambda_{ii}$(대각)가 전부 1에 가까움: 상호간섭이 약함 — 분산 SISO(익숙한 PID 여러 개)로 충분할 때가 많다.
  • $\lambda$가 1에서 멀거나 음수가 섞임: 루프 간 간섭이 강함 — 분산 SISO는 서로 간섭하기 쉽다. 이때는 ① 디커플링 보상기(원하는 대각 응답이 나오도록 $D(s)\approx G(s)^{-1}\cdot G_{\mathrm{desired}}(s)$를 앞단에 두어 루프를 인위적으로 분리) 또는 ② 전면적 MIMO 설계(LQR·LQG처럼 $K$ 행렬로 한 번에)로 간다.
  • 정직: RGA는 정상상태(또는 한 주파수)의 스냅샷일 뿐이다 — 동특성(위상·시간지연)까지 반영한 전체 상호작용은 주파수별 RGA($\Lambda(j\omega)$)나 시뮬레이션으로 따로 확인해야 한다. 짝짓기의 출발점이지 최종 판정이 아니다.

4.5.6 이산·유한구간 (간단히)

  • 이산 LQR: 이산계 $x[k+1]=\Phi x+\Gamma u$에 대해 비용 $\Sigma(x^TQx+u^TRu)$를 최소화 → 이산 대수 리카티(DARE), 일정 이득 $K$. 디지털 구현(제3부)에 직접 쓴다.
  • 유한구간: 비용을 $[0,T]$로 제한하면 리카티가 미분방정식이 되어 시변 이득 $K(t)$가 나온다(끝에서 거꾸로 적분). 이 유한구간·제약 버전이 MPC(6.1)의 뿌리다.

4.5.7 LQG — LQR + 칼만, 그리고 함정

전상태를 못 보면(4.4), 최적 추정기 칼만필터(5.2)로 $\hat{x}$을 얻어 $u=-K\hat{x}$을 쓴다. 분리원리(4.4.5)로 최적 $K$(LQR)와 최적 $L$(칼만)을 따로 설계해 합친 것이 LQG(Linear-Quadratic-Gaussian) — 가우시안 잡음 하의 최적 출력피드백이다.

⚠️ Doyle의 경고(1978): 논문 〈Guaranteed Margins for LQG Regulators〉의 그 유명한 초록 — "There are none."(보장된 여유는 없다). LQR의 우수한 강인성(4.5.5)은 관측기를 추가하는 순간 사라질 수 있다. 최적 추정 + 최적 제어를 합쳤는데 강인성은 보장 안 되는 것. 대책으로 LTR(Loop Transfer Recovery)로 강인성을 일부 되찾거나, 애초에 강인성을 목표로 설계(H∞, 6.3)한다. — 최적성과 강인성은 다른 것임을 보여 주는 현대 제어의 중요한 교훈.

4.5.8 도구로 — lqr

# lqr_demo.py — LQR 설계
import control as ct, numpy as np
A = np.array([[0,1],[0,0]]); B = np.array([[0],[1]])
Q = np.eye(2); R = np.array([[1.0]])
K, P, E = ct.lqr(A, B, Q, R)      # K=최적이득, P=리카티해, E=폐루프 극
print("K =", K)                   # [[1, 1.732]] 기대
print("폐루프 극:", E)            # −0.866±j0.5 기대

# R을 키우며(노력 절감) 극이 원점으로 느려지는지, Q를 키우며 빨라지는지 실험
for r in [0.1, 1, 10, 100]:
    Kr, _, Er = ct.lqr(A, B, Q, np.array([[r]]))
    print(f"R={r}: K={Kr.round(2)}  poles={np.round(Er,2)}")

$Q/R$ 비를 바꿔 가며 성능과 노력이 어떻게 맞바뀌는지 눈으로 익혀라. (출력은 여러분 환경에서 재현 — ✅ control 0.10.2 검증됨; 재현 권장.)

4.5.9 정직 — 최적은 "J에 대해서만"

  • $Q,R$이 부적절하면 결과도 부적절하다: LQR은 설계자가 정한 비용함수에 대해서만 최적이다. $Q,R$이 실제 목표를 반영 못 하면 "최적"이 무의미하다 — $Q,R$ 고르기가 곧 설계의 핵심이며, 정답은 반복·시뮬레이션으로 찾는다.
  • 전상태 가정: 4.5.5의 강인성은 전상태 피드백 한정. 실무는 관측기가 필요하고 → LQG에서 강인성 보장이 사라진다(4.5.7).
  • 모델 의존: ARE는 $(A,B)$ 모델을 전제한다. 모델 오차에는 강인 제어(6.3)가 따로 필요.
  • 제약 미반영: 표준 LQR은 입력·상태 제약(포화 한계 등)을 명시적으로 다루지 못한다. 제약을 직접 넣으려면 MPC(6.1).

4.5.10 정리 — 제4부 마무리

  • LQR은 극을 고르는 대신 비용 $J=\int(x^TQx+u^TRu)$를 최소화한다. $Q/R$이 "성능 vs 노력" 조정 변수(4.5.2).
  • 최적해는 u=−Kx, $K=R^{-1}B^TP$, $P$는 리카티 방정식의 양정해. 유효 $Q,R$이면 폐루프가 항상 안정(4.5.3).
  • 전상태 LQR은 이득여유 $(1/2,\infty)$·위상여유 $\ge60^\circ$를 보장(4.5.5) — 단 관측기를 추가한 LQG에서는 이 보장이 사라진다(Doyle, 4.5.7).
  • $Q,R$이 곧 설계, 모델·제약은 별도 과제(4.5.9).

이로써 제4부(현대 제어: 상태공간)를 마친다. 상태공간 표현(4.1)·가제어가관측(4.2)·극배치(4.3)·관측기(4.4)·LQR(4.5)로 내부 상태 기반 설계를 완성했다. 4.4·4.5에서 거듭 예고한 최적 추정기(칼만)가 다음 제5부(5.1~)의 주제다 — 잡음 속에서 상태를 추정하는 법, 그리고 IMU+GPS 센서 융합.

4.5.11 연습·생각해 볼 것

  1. Q/R 직관. LQR에서 ⓐ $R$을 10배 키우면, ⓑ $Q$를 10배 키우면 폐루프 극과 제어입력 크기는 각각 어떻게 변하나? 왜인가? (4.5.2·4.5.4)
  2. ARE 손풀이. 이중적분기에 Q=diag(1,0), $R=1$로 ARE를 풀어 $K$를 구하라(본문 $Q=I$ 풀이를 참고). $Q=I$일 때(K=[1,√3])와 극이 어떻게 다른가?
  3. 브라이슨. 상태 $x_1$(위치, 허용 0.1 m)·$x_2$(속도, 허용 1 m/s), 입력 $u$(허용 10 N)일 때 브라이슨 법칙으로 $Q,R$의 대각 원소를 정하라. (4.5.4)
  4. 강인성. 전상태 LQR의 위상여유 보장값은? 이 강인성이 관측기를 추가한 LQG에서도 유지되나? 그렇지 않다면 무엇으로 대응하나? (4.5.5·4.5.7)
  5. 극배치 vs LQR. 같은 시스템을 극배치(4.3)와 LQR로 설계했다. 두 방법의 장단을 "극 선택·노력·강인성·MIMO" 관점에서 비교하라. (4.5.1·4.5.5)
  6. 제약. 액추에이터가 ±5 N로 포화되는데 LQR이 자꾸 10 N를 요구한다. 표준 LQR로 이 제약을 명시적으로 다룰 수 있나? 무엇이 필요한가? (4.5.9)
  7. (손으로) lqr_demo.py로 R∈{0.1,1,10,100}에 대해 극과 계단응답을 비교해, "노력을 줄일수록 느려진다"를 확인하라. $Q,R$을 조정해 "오버슈트 ≤5%, 정착 ≤2s"를 맞춰 보라(극배치보다 쉬운가?). (검증 필요)

막히면 "극을 고르지 말고 Q·R로 무엇이 중요한지 고르라, 최적 K는 리카티가 준다, 전상태면 강인하나 LQG는 아니다"로 돌아가라.