AEGLOSLAB 제어공학 종합 핸드북

제6부 심화 주제

6.2 비선형 제어

제6부 심화 주제 · 비선형. 선형화(1.1.9)는 동작점 근처에서만 맞는다. 큰 기동·강한 비선형(고기동 비행, 대각도 진자)은 비선형을 직접 다뤄야 한다. 비선형 안정성의 기반 리아푸노프(Lyapunov) 방법, 비선형을 상쇄하는 피드백 선형화, 외란에 강인한 슬라이딩 모드를 개념 위주로 본다. (BK-03대로 진입점 위주 — 비선형 제어는 그 자체로 큰 분야다.)

이 장을 마치면 리아푸노프 직접법으로 비선형 안정성을 ODE를 풀지 않고 판정하는 아이디어를 이해하고, 피드백 선형화·슬라이딩 모드의 발상과 한계를 설명할 수 있어야 한다.

6.2.1 왜 비선형 — 선형화로 안 될 때

지금까지 선형 도구(극·고유값·전달함수)는 전부 선형화 모델에 기반했다. 그런데 선형화는 동작점 근처 국소 근사라(1.1.9.3):

  • 큰 기동: 드론 공중회전, 진자 대각도 스윙처럼 동작점을 크게 벗어나면 선형 모델이 어긋난다.
  • 강한 비선형: 마찰·포화·기하 비선형이 본질적이면 선형화가 무의미.
  • 비선형 고유 현상: 여러 평형점, 극한주기(limit cycle, 스스로 진동), 유한 시간 발산, 초기조건 의존 — 선형계에는 없는 일들. 중첩(superposition)도 안 되니 극·고유값 개념 자체가 전역적으로는 무의미.

그래서 "극을 좌반평면에" 같은 언어가 안 통하는 곳에서, 안정성을 다른 방식으로 증명·설계해야 한다.

6.2.2 리아푸노프 안정성 — 비선형 해석의 기반

6.2.2.1 안정성 개념

평형점(f(x*)=0, 원점으로 옮겨 둠) 근처에서:

  • (리아푸노프) 안정: 가까이서 출발하면 계속 가까이 머문다.
  • 점근 안정: 안정 + 평형으로 수렴.
  • 전역 점근 안정(GAS): 어디서 출발하든 수렴.

6.2.2.2 직접법 — 에너지로 증명

리아푸노프 방법의 핵심 발상: ODE를 풀지 않고, "에너지 같은 함수"가 줄어드는 것만 보여 안정성을 증명한다.

리아푸노프 직접법: 양의 정부호 함수 $V(x)$(에너지처럼 $V(0)=0$, 그 외 $V>0$)를 찾아, 궤적을 따라 $\dot{V}(x) = \nabla V\cdot f(x)$가

  • $\dot{V} \le0$(준음정) → 안정,
  • $\dot{V} < 0$(음정) → 점근 안정,
  • + $\Vert x\Vert\to\infty$일 때 $V\to\infty$(방사 무계) → 전역 점근 안정.

직관: $V$가 시스템의 에너지고 그것이 계속 줄면, 시스템은 결국 에너지 최소점(평형)으로 간다 — 마찰 있는 진자가 결국 멈추듯.

예(감쇠 진자, 1.1.8): 에너지 V = ½Jθ̇² + mgl(1−cosθ)(운동+위치). 마찰 $b$가 있으면 $\dot{V} = -b\cdot\dot{\theta}^2 \le0$. 준음정이라 라살(LaSalle) 불변원리를 쓰면 $\dot{V}=0$(즉 $\dot{\theta}=0$)인 최대 불변집합으로 수렴 → 진자가 아래 평형에서 멈춤을 ODE 안 풀고 증명. 극·고유값 없이도 안정성을 얻는다.

6.2.2.3 선형의 경우 = 리아푸노프 방정식

리아푸노프는 선형도 포함한다. $V=x^TPx$($P>0$)로 두면 ẋ=Ax에서 $\dot{V}=x^T(A^TP+PA)x$. $A^TP+PA = -Q$($Q>0$)이면 $\dot{V}=-x^TQx<0$ → 점근 안정. 이 리아푸노프 방정식은:

$$A^T P + P A = -Q$$

$A$가 안정(Hurwitz) $\iff$ 임의 $Q>0$에 대해 $P>0$ 해가 존재

2.1의 "좌반평면=안정"이 리아푸노프로 재증명되고, 이 $P$가 LQR 리카티(4.5)·MPC 안정성(6.1.7)·칼만과 한 뿌리임이 보인다.

6.2.3 제어 리아푸노프 함수 (CLF)

리아푸노프는 해석만이 아니라 설계 도구다. 제어 리아푸노프 함수(CLF): $V$를 정해 두고, $\dot{V} < 0$이 되도록 입력 $u$를 설계한다. 그러면 폐루프가 점근 안정.

이 발상에서 백스테핑(backstepping)(상태를 단계적으로 안정화하며 $V$를 쌓아 올림) 같은 체계적 설계법이 나온다. 핵심: "안정성을 증명할 $V$를 먼저 정하고, 그것을 만족시키게 제어를 설계한다."

6.2.4 피드백 선형화 — 비선형을 상쇄한다

발상: *비선형을 피드백으로 상쇄해 시스템을 선형으로 만든 뒤, 익힌 선형 설계(극배치·LQR)를 쓰자.*

예: $\ddot{x} = f(x) + g(x)\cdot u$. 입력을 이렇게 고르면(g≠0):

$$u = (1/g(x))\cdot(-f(x) + v) \quad\to\quad \ddot{x} = v$$ — 선형!

비선형 $f, g$가 정확히 약분되어 ẍ=v라는 간결한 적분기 사슬이 된다. 이제 $v$를 극배치로 설계. 로보틱스의 계산 토크 제어(computed torque)가 이것 — 로봇 동역학 $M(q)\ddot{q}+C+G=\tau$를 $\tau=M(q)v+C+G$로 상쇄해 $\ddot{q}=v$로 만든다.

⚠️ 함정: ① 정확한 모델이 있어야 약분이 성립(모델 오차면 잔여 비선형 남음, 1.1.11). ② 입출력 선형화 시 안 보이는 내부동역학(zero dynamics)이 안정해야 한다(비최소위상 비선형판). ③ 상쇄가 큰 입력을 요구할 수 있다(포화). 간결하지만 모델 의존이 크다.

6.2.4.1 수치 예 — 진자형 시스템의 피드백 선형화

구체적으로: ẍ = −sin(x) + u(진자형 비선형)를 선형화하려면

$$u = \sin(x) + v \quad\to\quad \ddot{x} = -\sin(x) + \sin(x) + v = v$$ — 정확히 상쇄

이제 $v$를 극배치로 설계한다. 예를 들어 $v = -K_p\cdot x - K_d\cdot\dot{x}$로 두면 폐루프는 $\ddot{x} + K_d\cdot\dot{x} + K_p\cdot x = 0$ — 선형 2차계다. $K_p=4, K_d=4$(특성방정식 $s^2+4s+4=(s+2)^2$, 임계감쇠·$\omega_n=2$)로 초기조건 x(0)=1.0 rad, ẋ(0)=0에서 시뮬레이션(오일러, dt=0.001):

   t        x       ẋ        u        v
0.00  1.00000  0.00000  −3.15853  −4.00000
0.50  0.73515 −0.73600   0.67413   0.00344
1.00  0.40555 −0.54098   0.93623   0.54170
1.50  0.19900 −0.29842   0.59539   0.39770
2.00  0.09160 −0.14643   0.31077   0.21930
3.00  0.01743 −0.02980   0.06694   0.04952
4.00  0.00305 −0.00541   0.01247   0.00942

x, ẋ가 부드럽게(오버슈트 없이, 임계감쇠답게) 0으로 수렴한다 — ẍ=v인 순수 선형계처럼 행동한다는 뜻. 상쇄가 정확히 되는지도 직접 확인했다: 임의의 $x$에서 u=sin(x)+v를 넣으면 실제 가속도 ẍ=−sin(x)+u가 항상 $v$와 정확히 같다(예: $x=0.3, 1.0, 2.0$ 모두 ẍ==v 일치, 부동소수점 오차 내). 모델이 정확할 때만 이 상쇄가 성립한다는 6.2.4의 함정 ①을 역으로 보여준다 — 만약 모델의 sin(x)가 실제와 어긋나면(예: 실제는 $1.1\cdot\sin(x)$), 위 $u$는 $0.1\cdot\sin(x)$만큼의 잔여 비선형을 남긴다.

(✅ numpy 2.2.6, ce-verify 도커에서 오일러 적분으로 직접 실행한 실측값.)

6.2.5 슬라이딩 모드 제어 (SMC) — 외란에 강인하게

발상: 상태공간에 슬라이딩 면(sliding surface) $s(x)=0$을 그어 원하는 거동을 정의하고, 상태를 그 면으로 유도해 붙어 미끄러지게 한다.

−2 −1 0 1 2 −2 −1 0 1 2 x ẋ 평형(원점) 도달(reaching) 면으로 수렴 슬라이딩(sliding) 면 위를 미끄러져 원점으로 슬라이딩 면 s = ẋ + λx = 0
슬라이딩 모드 위상평면: 궤적이 슬라이딩 면으로 끌려간 뒤(도달) 면 위를 미끄러져 원점으로 수렴한다

두 초기상태(A: x=1.8,ẋ=1.2, B: x=−1.5,ẋ=1.6)에서 ẍ=−sin(x)+u, $s=\dot{x}+\lambda x$($\lambda=2$), $u=\sin(x)-\lambda\dot{x}-K\cdot\operatorname{sign}(s)$($K=1$)로 시뮬레이션한 실제 궤적이다 — 어디서 출발하든 먼저 점선(슬라이딩 면)으로 수렴한 뒤(도달), 그 위를 타고 원점까지 미끄러진다(슬라이딩). 극·고유값으로 그리던 s-평면 그림과 달리, 이것은 상태공간의 궤적이라는 점에 유의.

  • 예: $s = \dot{e} + \lambda\cdot e = 0$ → 면 위에서는 $\dot{e} = -\lambda e$ (오차가 지수 감쇠)

$$\text{제어:} \quad u = \underbrace{u_{eq}}_{\text{등가제어}} - \underbrace{K\cdot\operatorname{sign}(s)}_{\text{s>0이면 음, s<0이면 양 (면으로 밀기)}}$$

  • 도달(reaching) + 미끄러짐(sliding): 어디서 출발하든 면으로 수렴해(도달), 면에 닿으면 그 위를 미끄러지며(sliding) 원하는 거동.
  • 강인성: 면에 붙어 있는 한 매칭된(matched) 불확실성·외란을 자동으로 무시한다 — 모터·전력전자에서 선호되는 강한 강인성.
  • ⚠️ 채터링(chattering): sign(s)이 불연속이라 면 근처에서 고주파로 진동한다(액추에이터 마모·잡음). 완화: sign을 경계층(boundary layer) $\operatorname{sat}(s/\varphi)$로 부드럽게 — 강인성과 매끄러움의 트레이드오프.

6.2.5.1 경계층 폭 φ의 트레이드오프 (실측)

같은 ẍ=−sin(x)+u에 매칭된 상수 외란 $d=0.3$(제어기가 모르는 값, |d|<K=1이라 도달조건은 만족)을 더해, sign(s)를 그대로 쓸 때와 $\operatorname{sat}(s/\varphi)$로 바꿀 때를 비교한다(x(0)=1, ẋ(0)=0, $\lambda=2, K=1$, dt=0.001, 6000스텝):

t=6s 위치 x스위칭 횟수(부호 반전)
sign(s) (이상적)0.000502201
sat(s/φ), φ=0.020.003320
sat(s/φ), φ=0.30.045350

읽기: sign(s)는 정확도는 가장 좋지만($x$가 0에 가장 가까움) 이산 시간 구현에서 스위칭이 6000스텝 중 2201번 — 초당 수백 회 부호가 반전된다(이것이 채터링의 원인이다. 연속시간 이론에서는 무한히 빠른 스위칭을 가정하지만, 실제 디지털 제어기는 유한한 dt로 근사하므로 면 근처에서 지그재그가 생긴다). 경계층을 넣으면($\varphi>0$) 스위칭이 완전히 사라지지만(부호가 반전되지 않음 — sat가 연속함수라서), 대가로 정상상태 오차가 남는다 — $\varphi$가 클수록(0.02→0.3) 오차도 커진다($x$ 0.0033→0.045). 이는 경계층 안에서 $\dot{s} \approx-K(s/\varphi)+d$가 되어 $s$가 정확히 0이 아니라 s*≈dφ/K로 수렴하기 때문 — 매칭 외란 $d$가 남긴 흔적이다.

요약: $\varphi$를 줄이면 이상적 슬라이딩에 가까워져 정확도↑, 그러나 채터링↑(스위칭 빈번). $\varphi$를 키우면 매끄러워(채터링↓), 그러나 정상상태 오차↑. 실무에서는 액추에이터가 감당할 수 있는 최소 $\varphi$를 찾는다.

(✅ numpy 2.2.6, ce-verify 도커에서 오일러 적분(dt=0.001)으로 직접 실행한 실측값. 스위칭 횟수는 $\operatorname{sat}(s/\varphi)$의 부호가 이전 스텝과 달라진 횟수로 셈.)

6.2.6 그 밖에 — 백스테핑·수동성·게인 스케줄링

  • 백스테핑: CLF를 단계적으로 쌓는 재귀 설계(6.2.3).
  • 수동성 기반(passivity-based): 에너지 흐름을 다뤄 안정화(로봇·전기계에 자연스러움).
  • 게인 스케줄링(gain scheduling) — 가장 실용적: 여러 동작점에서 각각 선형 설계(4.3·4.5)하고, 운전 중 동작점에 따라 제어기를 보간·전환한다. 비행기·엔진의 대표 사례. 엄밀 보장은 약하나(전환 시 안정성 주의) 현장에서 폭넓게 쓰인다.

6.2.7 도구로 — 리아푸노프 점검 (개념 코드)

# lyapunov.py — 선형계의 리아푸노프 방정식 풀이로 안정성 확인
import numpy as np
from scipy.linalg import solve_lyapunov
A = np.array([[0, 1],[-2, -3]])          # 안정?
Q = np.eye(2)                            # Q>0 임의 선택
P = solve_lyapunov(A.T, -Q)              # AᵀP + PA = −Q
w = np.linalg.eigvalsh(P)
print("P 고유값:", w, "→ 모두 양수면 P>0 → A 안정")
# 비선형은 V(x), V̇=∇V·f(x)를 손/기호(sympy)로 음정 여부 점검

실측 확인 (ce-verify 도커, scipy.linalg.solve_lyapunov — 이 스크립트는 control 패키지를 쓰지 않는다):

P =
 [[1.25 0.25]
  [0.25 0.25]]
P 고유값: [0.19098301 1.30901699]  → 모두 양수 → P>0 → A 안정
(직접 비교) A의 고유값: [-1. -2.]  → 둘 다 음수(좌반평면) → 리아푸노프 판정과 일치

선형은 자동(리아푸노프 방정식), 비선형은 $V$를 찾아야 한다(아래 정직).

(✅ scipy 1.15.3 · numpy 2.2.6 검증됨 — ce-verify 도커에서 위 코드를 직접 실행한 실측값이다.)

6.2.8 정직 — 모든 경우에 맞는 기법은 없다

  • 보편 방법이 없다: 선형에는 극배치·LQR이라는 체계적 길이 있었지만, 비선형은 시스템마다 맞는 기법을 골라야 한다. 한 번에 해결하는 범용 절차가 없다.
  • $V$ 찾기는 기술이자 예술: 리아푸노프 함수를 찾는 일반 절차는 없다(물리 에너지가 좋은 출발점). 못 찾는다고 불안정인 것도 아니다(충분조건).
  • 강한 가정들: 피드백 선형화는 정확한 모델·내부동역학 안정을 요구하고, SMC는 채터링을 감수해야 하며, 게인 스케줄링은 전환 안정성을 보장 못 한다.
  • 이 장은 진입점: 각 기법은 책 한 권 분량이다. 깊은 설계·증명은 전문 문헌으로. 실무에서는 가능하면 선형 영역에 머물게 설계하고, 꼭 필요할 때 비선형 기법을 조심히 쓴다.

6.2.9 정리 — 그리고 다음 장

  • 비선형은 국소 선형화로 안 되는 큰 기동·강한 비선형에서 필요. 극·고유값이 전역적으로는 무의미(6.2.1).
  • 리아푸노프 직접법: 에너지형 $V>0$, $\dot{V}<0$이면 ODE 안 풀고 (점근)안정 — 비선형 안정성의 기반이자 선형 리아푸노프 방정식·LQR·MPC의 한 뿌리(6.2.2). $\dot{V}<0$이 되게 $u$를 구성하면 설계(CLF, 6.2.3).
  • 피드백 선형화(비선형 상쇄 후 선형 설계, 정확 모델·내부동역학 주의)·슬라이딩 모드(슬라이딩 면, 강인하나 채터링)가 대표 기법(6.2.4·6.2.5). 게인 스케줄링이 실용적 대표 기법(6.2.6).
  • 범용 기법은 없고 가정이 강하다 — 진입점일 뿐(6.2.8).

다음 6.3에서는 모델 불확실성을 정면으로 다루는 강인 제어(불확실성 모델·민감도·H∞ 개념)를 진입점 위주로 본다.

6.2.10 연습·생각해 볼 것

  1. 리아푸노프 직관. 감쇠 진자(6.2.2.2)에서 에너지 $V$가 왜 좋은 리아푸노프 함수인지, $\dot{V}=-b\dot{\theta}^2$이 무엇을 말하는지 설명하라. 마찰이 0이면($b=0$) $\dot{V}$는? 그때 안정성은? (6.2.2)
  2. 선형 리아푸노프. A=[[0,1],[−2,−3]]에 대해 $Q=I$로 리아푸노프 방정식 $A^TP+PA=-Q$를 풀어 $P>0$인지 확인하라(손 또는 도구). 이것이 2.1의 안정 판정과 어떻게 일치하나? (6.2.2.3)
  3. 피드백 선형화. ẍ = −sin(x) + u를 $u$로 선형화해 ẍ=v로 만드는 입력을 적어라. 이 상쇄가 성립하려면 무엇이 정확해야 하나? 모델의 sin이 사실 $1.1\cdot\sin$이면? (6.2.4)
  4. 슬라이딩 면. $s=\dot{e}+\lambda e=0$에서 $\lambda$를 키우면 면 위 오차 수렴이 어떻게 변하나? sign(s) 대신 경계층 $\operatorname{sat}(s/\varphi)$를 쓰는 이유와 그 대가는? (6.2.5)
  5. 강인성 vs 채터링. SMC가 외란에 강인한 이유와 채터링의 원인을 한 문장씩 설명하라. 채터링이 액추에이터에 왜 해로운가? (6.2.5)
  6. 방법 고르기. 다음에 어떤 비선형 기법이 어울릴지: ⓐ 정확한 동역학 모델이 있는 로봇팔, ⓑ 외란·불확실성이 큰 모터 구동, ⓒ 여러 비행 조건을 오가는 항공기. (6.2.4·6.2.5·6.2.6)
  7. (손으로) lyapunov.py로 2번을 확인하고, 비선형 예($\dot{x}=-x^3$)에 $V=x^2$를 시도해 $\dot{V}=2x\dot{x}=-2x^4\le0$임을 손으로 보여 점근 안정을 논하라. (검증 필요)

막히면 "리아푸노프=에너지가 줄면 안정(ODE 안 품), 피드백 선형화=비선형 상쇄(모델 정확해야), 슬라이딩=면으로 유도(강인하나 채터링), 만병통치는 없다"로 돌아가라.