제4부 현대 제어: 상태공간
4.3 극배치와 상태피드백
제4부 현대 제어: 상태공간 · 설계 첫걸음. 상태를 직접 되먹이는 상태피드백
u=−Kx로 폐루프 극을 원하는 자리 아무 데나 놓는다(가제어이면, 4.2). 그리고 적분기 증강으로 정상상태 오차를 강인하게 0으로 — 1.3.6·2.5의 적분 작용을 상태공간 방식으로.
이 장을 마치면 극배치로 $K$를 구하고, 원하는 극을 사양(1.3)에서 고르며, 단순 레귤레이터를 기준 추종 제어기로 바꾸는 두 방법(피드포워드·적분 증강)을 구분해야 한다.
4.3.1 상태피드백 u = −Kx
전달함수 시대에는 출력 $y$ 하나를 되먹였다. 상태공간에서는 상태 전체 $x$를 되먹인다:
$$u = -K\cdot x$$ — $K$: $1\times n$ 이득 행렬, SISO 기준
폐루프 동역학:
$$\dot{x} = Ax + Bu = Ax - BKx = (A - BK)\cdot x$$
폐루프 극 =
(A−BK)의 고유값. 그리고 *$(A,B)$가 가제어이면(4.2), $K$를 골라 이 고유값을 원하는 자리 아무 데나 놓을 수 있다(켤레 대칭 조건 하에). 이것이 상태피드백의 강점 — 전달함수 시대에는 근궤적 위에서만 극을 골랐지만(2.2), 이제 임의 배치*가 가능하다.
4.3.2 극배치 — K를 푸는 법
원하는 폐루프 극 $\{p_1,\ldots,p_n\}$ → 그것을 근으로 하는 특성다항식 $\alpha c(s)=(s-p_1)\ldots(s-p_n)$ → $\det(sI-(A-BK))=\alpha c(s)$가 되도록 $K$를 푼다.
- 계수 정합(가제어 표준형): 4.1.5의 가제어 표준형에서는 $A$의 마지막 행이 분모 계수라, $K$가 그 계수를 직접 바꾼다 — 손으로 가장 쉽다.
- 애커만 공식(Ackermann, SISO): $K = [0 \ldots0 1]\cdot\mathcal{C}^{-1}\cdot\alpha c(A)$ (
𝒞=가제어성 행렬, $\alpha c(A)$=행렬 다항식). 가제어(𝒞가역)가 전제임이 식에서 드러난다. - MIMO: $K$의 자유도가 남아 비유일 —
place()가 수치적으로 푼다.
정직: 애커만 공식은 $\alpha c(A)$를 계산하며 사실상 $A, A^2, \ldots, A^{n-1}$을 거듭제곱한다 — $n$이 커지면 이 거듭제곱과
𝒞⁻¹의 반올림 오차가 누적되고, 고유값이 서로 밀집해 있으면(clustered)𝒞가 거의 특이해져 극도로 병약(ill-conditioned)해진다. 그래서 손풀이·교육용 저차 예제를 넘어서면 애커만을 직접 안 쓴다 —scipy.signal.place_poles나python-control의place()는 Kautsky-Nichols류의 더 안정적인 수치 알고리즘으로 $K$를 구한다(고유값 민감도를 직접 관리). 실무는 항상 이쪽이다.
예(이중적분기 $A=[[0,1],[0,0]]$, B=[0;1]): 극을 $-2\pm j2$($\zeta=0.707, \omega_n=2\sqrt2$)에 놓자. 원하는 특성다항식 $s^2+4s+8$.
$$A - BK = \begin{bmatrix} 0 & 1 \\ -k_1 & -k_2 \end{bmatrix}, \quad \det(sI-(A-BK)) = s^2 + k_2 \cdot s + k_1$$
$$\text{정합: } k_1 = 8, \ k_2 = 4 \;\to\; K = \begin{bmatrix} 8 & 4 \end{bmatrix}$$
4.3.2.1 이득이 요구하는 제어 노력 가늠 — u ≈ K·x_max
극을 고르면 $K$가 정해지고, $K$가 크면 u=−Kx가 요구하는 힘도 커진다. 상태의 예상 최대 편차 x_max를 가정하면 필요한 최대 입력을 대략 가늠할 수 있다:
$$|u|_{\max} \approx \sum_i |K_i|\cdot|x_{i,\max}|$$ — 각 성분이 최악으로 같은 부호로 겹칠 때의 상한
위 예제($K=[8, 4]$, 극 $-2\pm j2$)에서 초기 편차를 "위치 오차 1 m, 속도 오차 2 m/s"(x_max=[1, 2], 예시값)로 설정하면:
- $u_{\max} \approx |8|\cdot 1 + |4|\cdot 2 = 16$ (단위는 예시 — 모터 토크·힘 등)
이제 극을 5배 더 왼쪽($-10\pm j10$, 같은 $\zeta=0.707$이지만 $\omega_n$이 5배)으로 더 공격적으로 설정해 보면, 정합으로 $k_1=200, k_2=20$($K=[200, 20]$)이 나온다(✅ control.place로 재현 확인). 같은 x_max에서:
- $u_{\max} \approx |200|\cdot 1 + |20|\cdot 2 = 240$ (원래의 15배)
액추에이터가 예컨대 ±20(예시 한계)까지만 낼 수 있다면, $-2\pm j2$ 설계(16)는 한계에 근접해 들어오지만 $-10\pm j10$ 설계(240)는 12배나 초과 — 실물에서 곧바로 포화된다. 극을 왼쪽으로 옮길수록 $K$가 (대략 $\omega_n^2$·$\zeta\omega_n$ 꼴로) 급격히 커지고, 요구 노력도 그만큼 커진다는 것을 숫자로 보여 준다 — 4.3.3의 "너무 왼쪽 = 위험"이 감이 아니라 계산이 되는 지점이다. (K값은 place()로 검증됨; x_max·액추에이터 한계는 예시 수치 — 실제 설계는 실물 사양으로 대체.)
4.3.3 원하는 극 고르기 — 과도하게 빠른 극을 피하라
극을 아무 데나 놓을 수 있다고 아무렇게나 놓으면 안 된다.
- 사양에서: 1.3.4대로 지배극쌍을 $\zeta,\omega_n$(오버슈트·정착)으로 정하고, 나머지 극은 그보다 충분히(예: 5배) 왼쪽에 둬 지배극 근사가 성립하게.
- 너무 왼쪽 = 위험: 극을 멀리 왼쪽에 놓을수록 $K$가 커진다 → 제어입력 폭증(포화)·잡음 증폭·모델 무효 대역까지 요구. 빠른 응답의 대가는 큰 노력과 취약성이다.
트레이드오프: 극배치는 "원하는 극"만 보장하고 *제어 노력은 알려 주지 않는다. 그래서 검토 없이 공격적으로 배치하면 실물에서 액추에이터가 포화되고 잡음에 민감해진다. 이 "성능 vs 노력"을 비용함수로 최적화*하는 것이 다음다음 장 LQR(4.5)이다.
4.3.4 기준 추종 — 레귤레이터에서 추종으로
u=−Kx는 레귤레이터다 — 상태를 0으로 수렴시킨다(외란 억제·안정화). 하지만 "출력을 목표 $r$로 추종"하려면 기준입력을 넣어야 한다. 두 길.
4.3.4.1 피드포워드 이득 Nr (간단하지만 모델 민감)
$u = -Kx + N_r\cdot r$에서, 정상상태에 $y=r$이 되도록 스칼라 $N_r$을 맞춘다:
$$N_r = -1 / [\, C\cdot(A-BK)^{-1}\cdot B \,]$$ — 폐루프 DC 이득의 역수
- 장점: 적분기가 없어 응답이 빠르고 간단.
- 단점: 모델에 의존한다. 모델 오차·상수 외란이 있으면 $N_r$이 어긋나 정상상태 오차가 남는다(형 0의 한계, 1.3.6).
4.3.4.2 적분기 증강 (강인, 오차 0)
PID의 I항처럼(2.5.2.2), 적분 상태 $xi=\int(r-y)$를 추가해 시스템을 확장한다:
$$\dot{x}_i = r - y = r - Cx$$
$$\text{증강계:} \quad \begin{bmatrix} \dot{x} \\ \dot{x}_i \end{bmatrix} = \begin{bmatrix} A & 0 \\ -C & 0 \end{bmatrix}\begin{bmatrix} x \\ x_i \end{bmatrix} + \begin{bmatrix} B \\ 0 \end{bmatrix}u + \begin{bmatrix} 0 \\ 1 \end{bmatrix}r$$
$$\text{제어:} \quad u = -Kx - K_i \cdot x_i = -\begin{bmatrix} K & K_i \end{bmatrix} \cdot \begin{bmatrix} x \\ x_i \end{bmatrix}$$
증강계 $(n+1)$개의 극을 극배치로 놓는다. 적분기가 들어가 모델 오차·상수 외란이 있어도 정상상태 오차가 0으로 강인하게 간다 — 1.3.6의 "적분기가 형을 높여 오차를 제거한다" 그대로.
⚠️ 주의 — 이 배치가 항상 되는 것은 아니다: 증강계 $(Aa,Ba)$도 극배치가 되려면 그 자체가 가제어(4.2)여야 한다. 원 플랜트가 $s=0$(원점)에 영점을 가지면 새로 넣은 적분 상태와 정확히 상쇄돼 증강계가 불가제어가 된다 — 4.2.6의 극·영점 상쇄와 같은 메커니즘이 적분기 증강 자체를 무력화하는 경계 조건이다. 이런 플랜트에는 적분 증강 대신 피드포워드(4.3.4.1)나 다른 보정을 검토해야 한다.
권장(견해): 정상상태 정확도가 중요하면 적분 증강이 표준 해법(강인). 빠른 응답이 최우선이고 모델이 정확하면 피드포워드. 둘을 합치기도 한다(피드포워드 + 적분).
4.3.5 전(全)상태가 필요하다 → 관측기 예고
u=−Kx는 모든 상태 $x$를 알아야 한다. 그런데 현실에서는 일부만 측정한다(예: 위치만, 속도는 센서 없음). 측정 안 되는 상태는 어떻게 하나?
→ 관측기(observer)로 출력에서 상태를 추정한 $\hat{x}$을 대신 쓴다(4.4). 가관측(4.2)이 그 조건이다. 그리고 놀랍게도 상태피드백과 관측기를 따로 설계해도 된다(분리원리, 4.4). 그 전에, 이 장은 "상태를 다 안다고 가정"하고 $K$만 설계한다.
4.3.6 도구로 — place·acker
# placement.py — 극배치
import control as ct, numpy as np
A = np.array([[0,1],[0,0]]); B = np.array([[0],[1]]) # 이중적분기
des = [-2+2j, -2-2j] # 원하는 극
K = ct.place(A, B, des)
print("K =", K) # [[8, 4]] 기대
print("폐루프 극:", np.linalg.eigvals(A - B @ K)) # des와 일치해야
# 적분 증강 (오차 0 추종)
C = np.array([[1,0]])
Aa = np.block([[A, np.zeros((2,1))], [-C, np.zeros((1,1))]])
Ba = np.vstack([B, np.zeros((1,1))])
Ka = ct.place(Aa, Ba, [-2+2j,-2-2j,-6]) # n+1개 극
place가 $K$를 주고, eig(A−BK)가 원하는 극과 일치하는지 확인하라. (출력은 여러분 환경에서 재현 — ✅ control 0.10.2 검증됨; 재현 권장.)
4.3.7 정직 — 극배치의 빛과 그림자
- 극은 정확히, 그러나 그뿐: 극배치는 원하는 극을 정확히 준다. 하지만 제어 노력·강인성·잡음 민감도는 보장하지 않는다. 공격적으로 놓으면 $K$가 커져 포화·잡음·취약(4.3.3). LQR(4.5)은 이를 비용함수로 균형을 맞춘다.
- 영점은 안 움직인다: 상태피드백은 극만 옮긴다. 원래 플랜트(입력→출력)의 영점은 그대로라 응답 모양(오버슈트·역응답)에 남는다 — 극만으로 응답이 다 정해지지는 않는다(1.2.2.3).
- 전상태 가정: 실제로는 관측기가 필요하고(4.4), 관측기 오차·잡음이 더해진다.
- MIMO 비유일: 입력이 여럿이면 같은 극을 주는 $K$가 무한 — 추가 기준(노력 최소 등)이 필요(→LQR).
4.3.8 정리 — 그리고 다음 장
- 상태피드백
u=−Kx→ 폐루프(A−BK). 가제어이면 극을 임의 배치(4.3.1). $K$는 애커만·계수정합·place로 푼다(4.3.2). - 원하는 극은 사양($\zeta,\omega_n$)에서 고르되 과도하게 빠른 극을 피하라 — 너무 왼쪽이면 큰 이득·포화·잡음(4.3.3).
- 추종은 피드포워드 $N_r$(간단·모델 민감) 또는 적분기 증강(강인·오차 0, PID의 I와 같은 정신)으로(4.3.4).
- 상태피드백은 전상태를 요구 → 관측기로(4.4). 극배치는 극만 정확히 줄 뿐 노력·강인성은 별도 — LQR로(4.5).
다음 4.4에서는 측정 안 되는 상태를 출력에서 추정하는 상태 관측기를 다룬다. 가관측성이 조건이고, 쌍대성(4.2.4) 덕에 극배치와 대칭 구조다 — 그리고 분리원리로 둘을 따로 설계한다.
4.3.9 연습·생각해 볼 것
- 극배치 손풀이.
A=[[0,1],[−2,−3]],B=[0;1]에서 폐루프 극을−5,−6에 놓는 $K$를 계수정합으로 구하라. (4.3.2) - 사양→극. "오버슈트 ≤ 5%, 정착(2%) ≤ 1초"를 만족하는 지배극쌍을 정하고(1.3.3.3), 셋째 극은 어디에 둘지 정하라. 왜 거기에? (4.3.3)
- 과도한 극 배치의 대가. 1번에서 극을
−50,−60으로 훨씬 왼쪽에 놓으면 $K$는 어떻게 변하나(대략)? 실물에서 어떤 문제가 예상되나? (4.3.3·4.3.7) - 피드포워드 이득. 1번 설계($K$)에 대해 $C=[1,0]$일 때 추종용 $N_r$을 구하라($-1/[C(A-BK)^{-1}B]$). 모델의 $A$가 실제와 5% 다르면 정상상태에 무슨 일이? (4.3.4.1)
- 적분 증강. 1번 시스템을 적분 증강해 증강계 $(Aa,Ba)$를 적고, 극을
−5,−6,−8에 놓는 $[K K_i]$를place로 구하는 절차를 기술하라. 왜 이것이 4번보다 외란에 강한가? (4.3.4.2) - 영점 주의. 상태피드백으로 극을 다 왼쪽에 놓았는데도 응답에 역응답(undershoot)이 남았다. 무엇 때문인가? (4.3.7, 1.2.2.3)
- (손으로)
placement.py로 2번에서 정한 극을 배치하고 계단응답을 그려 사양을 만족하는지 확인하라. 적분 증강 버전과 피드포워드 버전을 비교해, 상수 외란을 더했을 때 정상상태 오차 차이를 관찰하라. (검증 필요)
막히면 "극 = eig(A−BK), 가제어면 임의 배치, 추종은 적분 증강으로 강인하게, 노력은 LQR이 담당한다"로 돌아가라.