제4부 현대 제어: 상태공간
4.4 상태 관측기
제4부 현대 제어: 상태공간 · 추정. 상태피드백(4.3)은 전상태 $x$를 요구하는데, 현실은 출력 $y=Cx$ 일부만 측정한다. 관측기(observer)는 입력 $u$와 출력 $y$에서 상태 $\hat{x}$을 추정한다. 쌍대성(4.2.4)으로 극배치와 대칭이고, 분리원리로 제어기와 관측기를 따로 설계한다. 그리고 최적 $L$이 곧 칼만필터(5.2)다.
이 장을 마치면 Luenberger 관측기를 설계하고(쌍대 극배치), 분리원리로 관측기 기반 출력피드백을 구성하며, 관측기 속도의 트레이드오프(수렴 vs 잡음)를 이해해야 한다.
4.4.1 문제 — 상태를 다 못 본다
u=−Kx(4.3)는 모든 상태를 알아야 한다. 그런데 보통 센서는 일부만 잰다 — 로봇 관절의 각도는 엔코더로 재도 각속도는 직접 센서가 없거나, 차량의 위치는 GPS로 봐도 속도·자세는 추정해야 한다.
해법: 측정 $y$와 입력 $u$, 그리고 모델 $(A,B,C)$를 이용해 안 보이는 상태까지 추정한 $\hat{x}$을 만들고, $u=-K\hat{x}$을 쓴다. 그 추정기가 관측기다.
4.4.2 단순 추정기와 그 한계
가장 단순한 발상: 모델을 단순히 나란히 시뮬레이션한다.
$$\dot{\hat{x}} = A\hat{x} + Bu$$ — 개루프 추정기 — 측정 $y$를 안 씀
오차 $e=x-\hat{x}$의 동역학: $\dot{e} = Ax+Bu - (A\hat{x}+Bu) = A(x-\hat{x}) = A\cdot e$.
문제: 오차가 플랜트 자신의 극($A$)으로 줄거나 는다. $A$가 불안정하면 추정 오차도 발산하고, 안정해도 느린 플랜트면 추정도 느리다 — 우리가 못 고친다. 게다가 초기 오차(
x̂(0)≠x(0))나 모델 오차를 교정할 길이 없다. 측정값 $y$를 안 쓰는 것이 결정적 약점이다.
4.4.3 Luenberger 관측기 — 측정으로 보정
측정을 피드백한다. 예측한 출력 $C\hat{x}$과 실제 $y$의 차이(innovation)로 추정을 교정:
$$\dot{\hat{x}} = \underbrace{A\hat{x} + Bu}_{\text{모델 예측}} + \underbrace{L\cdot(y - C\hat{x})}_{\text{측정 보정}}$$
$L$($n\times p$)은 관측기 이득. 오차 동역학:
$$\dot{e} = \dot{x} - \dot{\hat{x}} = (Ax+Bu) - [A\hat{x}+Bu+L(Cx-C\hat{x})] = (A - LC)\cdot e$$
관측기 극 =
(A−LC)의 고유값. *$(A,C)$가 가관측이면(4.2) $L$로 이 극을 원하는 자리 아무 데나 놓아 오차를 원하는 속도로 0에 보낼 수 있다. 개루프 추정기와 달리, 이제 수렴 속도를 우리가 정한다.*
4.4.4 쌍대성으로 L 설계 — 극배치와 대칭
$L$ 설계는 새 기법이 아니다. 4.2.4의 쌍대성 덕에 극배치(4.3)와 똑같다:
$$\operatorname{eig}(A - LC) = \operatorname{eig}((A-LC)^T) = \operatorname{eig}(A^T - C^T L^T)$$
오른쪽은 "플랜트 $A^T$, 입력행렬 $C^T$, 이득 $L^T$"의 상태피드백 폐루프다. 즉 $(A^T,C^T)$에 극배치해서 $L^T$을 얻는다:
Lᵀ = place(Aᵀ, Cᵀ, 원하는_관측기_극) → L = 그 전치
예(이중적분기 $A=[[0,1],[0,0]]$, $C=[1,0]$ 위치만 측정): 관측기 극을 −10,−10(제어기 $-2\pm j2$보다 빠르게)에 놓자.
$$A - LC = \begin{bmatrix} -l_1 & 1 \\ -l_2 & 0 \end{bmatrix}, \quad \det(sI-(A-LC)) = s^2 + l_1 \cdot s + l_2$$
$$(s+10)^2 = s^2+20s+100 \quad \text{정합: } l_1=20,\ l_2=100 \;\to\; L = \begin{bmatrix} 20 \\ 100 \end{bmatrix}$$
위치만 재도 $L$이 속도까지 추정해 낸다(가관측이므로).
4.4.5 관측기 기반 출력피드백 + 분리원리
이제 추정 상태로 피드백한다: $u = -K\cdot\hat{x}$. 제어기(4.3)와 관측기(이 장)를 합친 전체 시스템(차수 $2n$)의 극은?
좌표 [x; e]($e=x-\hat{x}$)로 보면:
$$\dot{x} = (A-BK)x + BK\cdot e$$
$$\dot{e} = (A-LC)e$$
$$\begin{bmatrix} \dot{x} \\ \dot{e} \end{bmatrix} = \begin{bmatrix} A-BK & BK \\ 0 & A-LC \end{bmatrix}\begin{bmatrix} x \\ e \end{bmatrix} \quad (\text{블록 삼각 행렬})$$
블록 삼각이라 고유값 = eig(A−BK) ∪ eig(A−LC).
분리원리(separation principle): 관측기 기반 출력피드백의 폐루프 극은 제어기 극(
A−BK)과 관측기 극(A−LC)의 합집합이다. 둘이 서로 간섭하지 않는다 → $K$와 $L$을 따로 설계해도 된다. 이것이 현대 제어의 강력한 모듈성: 4.3에서 $K$, 여기서 $L$을 독립적으로 설계하고 합치면 끝.
전체 루프를 그리면(플랜트 + 관측기 + 상태피드백):
$K$(4.3, 제어기 극 담당)와 $L$(이 장, 관측기 극 담당)이 이 루프 안에서 서로 다른 역할을 맡되 독립적으로 설계돼 합쳐진 것이 분리원리의 그림이다.
4.4.6 관측기 속도 — 빠르되 과하지 않게
관측기 극을 얼마나 왼쪽에 놓나?
- 제어기보다 빠르게(보통 2~5배 왼쪽): 추정 $\hat{x}$이 실제 $x$에 빨리 수렴해야 제어가 매끄럽다. 추정이 느리면 제어기가 틀린 상태로 동작.
- 너무 빠르면 잡음 증폭: $L$이 커지면 측정 잡음($y$의 잡음)이 추정에 그대로 증폭된다 — 4.3.3·2.5.6.2의 미분처럼. 빠른 수렴 vs 잡음 민감도 트레이드오프.
이 트레이드오프의 최적 균형이 바로 칼만필터(5.2)다: 프로세스 잡음과 측정 잡음의 통계를 알면, 최적의 $L$(칼만 이득)이 수학적으로 정해진다. Luenberger 관측기는 "극을 손으로 놓는" 버전, 칼만은 "잡음을 최소화하게 자동으로 놓는" 버전이다.
4.4.6.1 극을 왼쪽으로 옮길수록 L이 커진다 — 숫자로
"L이 커지면 잡음 증폭"을 감이 아니라 숫자로 보자(4.5.8의 $R$ 스윕과 같은 패턴). 4.4.4의 이중적분기($A=[[0,1],[0,0]]$, $C=[1,0]$)에서 중근 관측기 극을 −5, −10, −20, −50으로 점점 왼쪽으로 옮기며 $L$을 구하면(place(Aᵀ,Cᵀ,·)ᵀ, ✅ control.place로 검증):
| 관측기 극(중근) | $L=[l_1,l_2]$ | ‖L‖ |
|---|---|---|
| −5 | [10, 25] | 26.9 |
| −10 | [20, 100] | 102.0 |
| −20 | [40, 400] | 402.0 |
| −50 | [100, 2500] | 2502.0 |
극을 −5에서 −50으로(10배) 옮기면 $l_1$은 10배(선형), $l_2$는 100배(제곱)로 커진다 — 이중적분기 구조상 $l_1\approx2p, l_2\approx p^2$($p$=극 크기)이기 때문. 측정 잡음 $v$가 있으면 innovation 항 $L(y-C\hat{x})$을 통해 $v$가 그대로 추정 오차에 전달되므로, $l_2$가 100배 커진 관측기는 같은 잡음도 100배 증폭해 추정한다 — "빠르게 수렴 vs 잡음에 둔감"의 정량적 그림이다.
극배치(4.3.2.1)에서 본 "극을 왼쪽으로 옮길수록 $K$가 급격히 커진다"와 정확히 같은 현상이 쌍대(4.2.4)인 $L$에서도 일어난다 — 제어 노력 대신 잡음 증폭이라는 대가로.
4.4.7 축소차 관측기 (간단히)
출력이 일부 상태를 직접 준다면(예: 위치는 정확히 측정), 그 상태는 추정할 필요가 없다. 나머지 안 보이는 상태만 추정하는 것이 축소차(reduced-order) 관측기다. 차수가 낮아 간단하지만, 측정 잡음이 직접 새는 단점이 있어 — 잡음이 크면 전차(full-order) 관측기가 낫다. (실무에서는 칼만이 이 균형을 자연스럽게 다룬다.)
4.4.8 도구로 — 쌍대 극배치
# observer.py — Luenberger 관측기 (쌍대 극배치)
import control as ct, numpy as np
A = np.array([[0,1],[0,0]]); C = np.array([[1,0]])
obs_poles = [-10, -10.0001] # 제어기보다 빠르게(중근 회피로 약간 분리)
L = ct.place(A.T, C.T, obs_poles).T # 쌍대로 L 설계
print("L =", L) # [[20],[100]] 근처
print("관측기 극:", np.linalg.eigvals(A - L @ C)) # obs_poles와 일치해야
# 분리원리: 제어기 K(4.3)와 L을 따로 설계 → 합친 폐루프 극 = 둘의 합집합
# 관측기 극을 점점 왼쪽으로 옮기며 L이 얼마나 커지는지 실험(4.4.6.1, 4.5.8와 같은 패턴)
for p in [-5, -10, -20, -50]:
Lp = ct.place(A.T, C.T, [p, p - 0.0001]).T
print(f"pole~{p}: L={Lp.ravel().round(2)} ||L||={np.linalg.norm(Lp):.1f}")
place가 중근을 허용하지 않으면 극을 미세하게 분리한다. eig(A−LC)가 원하는 관측기 극과 일치하는지 확인하라. (출력은 여러분 환경에서 재현 — ✅ control 0.10.2 검증됨; 재현 권장.)
4.4.9 정직 — 관측기의 대가, 그리고 칼만
- 추정은 대가가 따른다: 관측기는 차수 $n$을 더하고, $L$이 클수록 측정 잡음을 증폭한다(4.4.6). 빠른 관측기가 항상 좋은 것이 아니다.
- 모델 오차에 취약: 관측기는 모델 $(A,B,C)$에 의존해 예측한다. 모델이 틀리면 추정도 틀린다(1.1.11). innovation이 그 오차를 일부 교정하지만 한계가 있다.
- 분리원리의 전제: 분리원리는 LTI·결정론에서 명확하다. 잡음·비선형이 개입하면 합집합 극만으로 성능이 다 설명되지 않는다 → 잡음에는 칼만필터(5.2), 비선형에는 EKF·UKF(5.3).
- LQG: 최적 제어기 LQR(4.5) + 최적 관측기 칼만(5.2)을 분리원리로 합친 것이 LQG다 — 현대 제어의 표준 조합.
4.4.10 정리 — 그리고 다음 장
- 관측기는 측정 $y$·입력 $u$·모델로 안 보이는 상태를 추정한다. 단순 개루프 추정기는 오차를 못 고치고(4.4.2), Luenberger 관측기는 innovation $L(y-C\hat{x})$로 교정해 오차 극
(A−LC)를 원하는 대로 놓는다(가관측이면, 4.4.3). - $L$ 설계 = 쌍대 극배치(4.4.4). 추정 상태로 $u=-K\hat{x}$ → 분리원리로 제어기·관측기 극이 독립이라 따로 설계(4.4.5).
- 관측기는 제어기보다 빠르되 잡음을 감안해 과하지 않게(4.4.6). 그 최적 균형이 칼만필터(5.2), LQR+칼만=LQG(4.4.9).
다음 4.5에서는 극을 손으로 놓는 대신 비용함수를 최소화해 최적 이득을 얻는 LQR을 다룬다 — 4.3.3·4.4.6에서 미뤄 둔 "성능 vs 노력"의 균형을 수학으로 푼다. 제4부를 마무리한다.
4.4.11 연습·생각해 볼 것
- 단순 추정기. 개루프 추정기 $\dot{\hat{x}}=A\hat{x}+Bu$의 오차 동역학이
ė=Ae임을 유도하라. $A$가 불안정하면 추정 오차는? 왜 측정 $y$가 필요한가? (4.4.2) - 관측기 설계.
A=[[0,1],[−2,−3]], $C=[1,0]$에서 관측기 극을−8,−8에 놓는 $L$을 계수정합으로 구하라. (4.4.4) - 쌍대성 확인. 2번을
place(Aᵀ,Cᵀ,·)ᵀ로도 구해 같은 $L$이 나옴을 (절차로) 보여라. 왜 관측기 설계가 극배치와 같은 문제인가? (4.2.4, 4.4.4) - 분리원리. 제어기 극을 $-2\pm j2$, 관측기 극을
−10,−12로 설계했다. 합친 출력피드백 폐루프(차수 4)의 극은 무엇인가? 왜 두 설계가 서로 간섭하지 않나? (4.4.5) - 속도 트레이드오프. 관측기 극을
−10에서−100으로 옮기면 $L$과 잡음 민감도는 어떻게 변하나? 측정 잡음이 큰 환경에서 무엇을 택하겠나? 이 결정을 자동으로 해 주는 것은? (4.4.6·4.4.9) - 모델 오차. 관측기가 쓰는 $A$가 실제와 다르면 추정 $\hat{x}$에 무슨 일이 생기나? innovation이 이를 어느 정도 교정하지만 왜 완전하지 않은가? (4.4.9)
- (손으로)
observer.py로 2번 관측기를 만들고, 제어기 $K$(4.3)와 합쳐 출력피드백 폐루프를 구성하라. 초기 추정 오차를 주고 $\hat{x}$이 $x$로 수렴하는 과정과, 측정에 잡음을 더했을 때 빠른 관측기의 추정이 더 크게 변동하는 것을 관찰하라. (검증 필요)
막히면 "관측기 극=eig(A−LC), 가관측이면 임의 배치, L은 쌍대 극배치, 제어기와 따로(분리원리), 최적 L=칼만"으로 돌아가라.