콘텐츠로 바로가기

Control & Stability

센서 퓨전(Kalman)과 피드백 제어(PID)를 통한 로봇 시스템의 상태 추정 및 동적 제어 안정성을 정교하게 다루는 학습 노드입니다.

Article
M

Me

hyunyoun's Blog

computer-architecture-embedded-systemscomputer-architectureembedded-systemsroboticscontrol-systems-mechanicscontrolstabilitylearning8 min read

1. Overview

제어와 안정성 물리학(Control & Stability)은 가만히 놔두면 관성과 외란(바람, 중력) 때문에 제멋대로 요동치고 추락하려는 로봇이나 드론의 목줄을 거머쥐고, 센서로 오차를 훔쳐본 뒤 반대 방향으로 힘을 때려 박아 목표 지점(Setpoint)에 완벽히 꽂아버리는 폐루프(Closed-Loop) 수학 공학입니다.

학습자는 과거의 에러를 더하고(I), 현재의 오차에 비례하게(P), 미래의 속도를 예측해(D) 브레이크를 밟는 산업계 절대 헌법인 PID 제어기의 기하학을 뜯어봅니다. 나아가 극점(Pole)과 영점(Zero)을 그려 시스템이 춤을 출지 가라앉을지 수학적으로 판결하는 루트 로커스(Root Locus) 안정성 증명을 해부하고, 여러 개의 모터가 거미줄처럼 엮인 시스템에서 에너지를 최소화하는 최적의 제어 입력을 행렬로 뽑아내는 상태 공간 제어(LQR / State Feedback) 역학을 통달하여 드론의 호버링(Hovering)을 지배하는 아키텍트 역량을 확보합니다.

2. Scope & Boundaries

In-Scope

  • 피드백 루프 물리 (Feedback Physics): P(비례), I(적분), D(미분) 게인 튜닝, 오버슛(Overshoot), 정착 시간(Settling Time), 정상 상태 오차(Steady-state Error).
  • 고전 주파수 해석 (Classical Frequency Domain): 전달 함수(Transfer Function), 보드 선도(Bode Plot), 위상 여유(Phase Margin), 루트 로커스.
  • 현대 상태 공간 제어 (Modern State-Space Control): 극점 배치(Pole Placement), LQR(Linear Quadratic Regulator) 최적 제어기, 관측기(Observer).
  • 현실 제어기 열화 (Controller Degradation): 적분기 와인드업(Wind-up), 샘플링 타임(Discrete ZZ-domain) 레이턴시 붕괴.

Out-of-Scope

  • 플랜트 모델링 수식 유도: 모터나 질량체의 미분 방정식을 맨땅에서 유도하는 과정 \rightarrow 02-08-01. Actuators & Physical Modeling 영역.
  • 다이나믹스 운동학(Kinematics) 궤적: 로봇 팔을 움직이기 위해 X,YX, Y 좌표를 각도로 변환하는 수학 \rightarrow 02-08-03. Kinematics & Planning 영역.

Boundaries

  • Control vs. AI (12-01): 딥러닝 강화학습(AI)이 "수만 번 추락해 보면서 경험으로 모터 꺾는 법을 깨닫는 감각적 짐승"이라면, 제어 공학(Control)은 "시스템의 수학적 미분 방정식을 찢어발겨 단 한 번의 추락도 없이 100% 안정적으로 정지한다는 것을 수식(Pole)으로 증명해 내는 차가운 심판자"입니다.

3. Counterexample

  • P 제어기의 맹신과 잔류 오차 (P-Control Illusion): "현재 오차(에러)에 비례해서 모터를 돌리면(P 제어) 무조건 목표점에 도달하겠지"라는 초보자의 오만. 드론이 공중에 떠 있을 때(목표 높이 10m), P 제어만 쓰면 고도가 9m쯤 되었을 때 오차(1m)에 비례해 뿜어내는 모터 추력이 마침 중력과 똑같아져(힘의 평형), 영원히 10m에 도달하지 못하고 9m에서 허공을 맴도는 정상 상태 오차(Steady-State Error) 지옥에 빠집니다. 과거의 에러를 계속 누적해서 힘을 밀어 올리는 I(적분) 제어가 없으면 평형점의 저주를 깰 수 없습니다.
  • 무한 적분(Wind-up)의 로봇 폭주 (Integral Windup Crash): 로봇 팔이 목표점에 도달하려고 애를 쓰는데, 누군가 손으로 팔을 강제로 붙잡고(외란) 있으면 오차가 줄어들지 않아 I(적분) 제어기 내부의 에러 누적값이 100만, 1000만으로 폭발(Windup)해 버립니다. 나중에 손을 놔버리면, 이 폭발해 있던 적분 값이 모터를 미친 듯이 풀 파워로 돌려버려 로봇 팔이 목표점을 수천 도 오버슛하며 주변 물건을 다 박살 냅니다. Anti-Windup(누적 상한선 캡) 방어선 없는 PID 제어기는 걸어 다니는 시한폭탄입니다.

4. Prerequisites

  • 가상 플랜트 미분 방정식 (Basic): 튜닝해야 할 상대인 기계(쇳덩이)의 관성과 마찰이 어떻게 수식으로 돌아가는지 구조를 알아야 역으로 브레이크를 걸 수 있습니다. (02-08-01 Physical Modeling)
  • 제어 루프용 RTOS 통제망 (Recommended): 0.001초 간격으로 정확하게 센서를 읽고 모터를 치는(Tick) 실시간 커널의 결정성 뼈대가 필요합니다. (02-06-01 RTOS Kernel)

5. Learning Map

Sequence Core Cluster Objective & Description Evidence (BoK)
1 PID Controller Physics 에러를 더하고(I), 비례하고(P), 깎아내며(D) 현실 세계의 기계들을 부드럽게 멈춰 세우는 산업계의 마스터키를 쥡니다. P1
2 Wind-up & Discretization 적분기가 무한대로 터지는 폭발을 막고, 수학 기호(SS)를 C 코딩용 루프(ZZ)로 썰어내는 이산화(Discretization)를 해부합니다. P5
3 Stability & Root Locus 그래프에 X(Pole) 표시를 그려, 이 로봇 팔이 안정적으로 멈출지 무한 진동하며 부서질지 수학적으로 판사 봉을 두드립니다. Industry
4 Modern Control (LQR) PID처럼 변수 하나씩 튜닝하는 뻘짓을 멈추고, 행렬 덩어리에 전력(Cost) 제한을 걸어 컴퓨터가 최적 제어를 뽑아내는 극강을 장악합니다. Industry

6. Learning Topics

Basic

Core Topic 01: 폐루프의 삼위일체, PID 제어기 역학 (PID Physics)

  • Why to Learn: 자동차 크루즈 컨트롤부터 로봇 관절까지 전 세계 제어 시스템의 90% 이상을 굴리고 있는, 오차 기반 피드백 피그말리온(Proportional, Integral, Derivative)의 삼각 밸런스를 장악하기 위함입니다.
  • What to Learn:
    • Concepts: 폐루프(Closed-loop) 시스템, 오차(Error = Setpoint - Process Variable).
    • Skills: P(스프링/텐션), I(중력/정상상태 타파), D(댐퍼/브레이크) 게인(Gain) 직관 튜닝.
    • Tools: 스텝 응답(Step Response) 그래프 분석.
    • Trade-offs: P 게인을 냅다 올리면 로봇이 목표점으로 미친 듯이 빨리 달려가지만 멈추지 못하고 목표점을 지나쳐서 출렁(Overshoot)거리고, D(미분) 게인을 올려 브레이크를 밟으면 출렁임은 사라지지만 센서 노이즈까지 같이 미분(증폭)되어 모터가 덜덜 떠는 잔혹한 트레이드오프.
  • How to Learn:
    • 1단계: Proportional (P): 목표 각도가 100도고 현재가 0도면 오차(100)에 비례해서 모터를 100파워로 때리고, 각도가 99도가 되면 오차(1)파워로 줄어들어 부드러워지는 '고무줄 장력'의 역학을 해부합니다.
    • 2단계: Derivative (D): P만 쓰면 관성 때문에 100도를 뚫고 지나가버리므로, 오차가 줄어드는 '속도(미분)'를 계산해 너무 빨리 목표에 다가가고 있으면 역방향 모터 파워(브레이크)를 쏴서 부드럽게 정착(Settling)시키는 미래 예측 물리를 뜯어봅니다.
  • Implement: 현재 TempTarget(100)으로 맞추는 파이썬 텍스트 루프 시뮬레이터. 매 틱마다 Error = Target - Temp, Integral += Error, Derivative = Error - Prev_Error를 계산하고 Output=(Kp×E)+(Ki×I)+(Kd×D)Output = (K_p \times E) + (K_i \times I) + (K_d \times D) 수식으로 온도 값을 조작하여, Kp,Ki,KdK_p, K_i, K_d 값에 따라 결과가 발산하거나 부드럽게 안착하는 오버슛 커브 프린트.

Core Topic 02: 현실의 벽돌과 적분 폭발 방어, 이산화와 안티와인드업 (Windup & Discrete Z-transform)

  • Why to Learn: 교과서의 완벽한 연속(Continuous, ss도메인) 적분기 수학을, 10밀리초(0.01s)마다 뚝뚝 끊기며 돌아가는 마이크로컨트롤러의 C 언어 루프(zz도메인) 코드로 찢어 발겨 현실 세계에 주입하기 위해서입니다.
  • What to Learn:
    • Concepts: 이산화(Discretization), 오일러 적분(Euler Forward/Backward), 샘플링 레이트(Sampling Rate).
    • Skills: 안티와인드업(Anti-Windup) 로직 세팅, 노이즈 필터(Low-pass filter on D-term).
    • Tools: PID C-Code 구현체 패턴.
    • Trade-offs: 샘플링 루프를 1ms로 극도로 잘게 썰면(빠른 이산화) 수학 모델과 완벽히 일치하여 정밀해지지만 CPU가 다른 계산을 할 틈 없이 피가 마르는 반면, 100ms 듬성듬성 샘플링하면 찰나의 센서 피드백을 놓쳐 드론이 한순간 공중 제비를 도는 알리아싱(Aliasing) 지옥.
  • How to Learn:
    • 1단계: 대학교 수학 책에 있는 e(t)dt\int e(t)dt 적분 기호를 코딩으로 치기 위해, 매 루프(dt=0.01)마다 사각형의 면적(error * 0.01)을 누적하여 덧셈 배열(sum_error)로 만들어버리는 직사각형(오일러) 이산화 물리를 해부합니다.
    • 2단계: 로봇 바퀴가 돌부리에 걸려 목표 속도에 도달하지 못할 때, 적분항(I)이 바보처럼 에러를 무한정 쌓아서 나중에 돌부리가 빠지면 로봇이 풀 악셀로 날아가 버리는(Windup) 재앙을 막기 위해, if (sum_error > 100) sum_error = 100; 캡(Cap)을 강제로 씌우는 생존 코딩(Anti-windup)을 뜯어봅니다.
  • Implement: Error가 계속 10으로 유지되는 상황 모사. 단순 I += Error 로직은 100회 루프 후 출력이 1000이 되어 모터 최대 출력(255)을 아득히 뚫고 붕괴하지만, Anti-Windup이 켜지면 I 누적이 상한선에서 정지하고, 돌부리(Error)가 사라진 순간 즉각 출력을 줄이며 제어력을 되찾는 방어망 덤프.

Practical

Core Topic 03: 진동과 붕괴의 판사봉, 루트 로커스와 안정성 (Stability & Root Locus)

  • Why to Learn: 튜닝 게인(P,I,D)을 주먹구구로 때려 넣다가 1억 원짜리 로봇이 미친 듯이 덜덜 떨며 자폭하는 것을 막기 위해, 수학적으로 "이 시스템은 절대로 발산(추락)하지 않는다"라는 정역학적 판결문을 그려내기 위함입니다.
  • What to Learn:
    • Concepts: 극점(Pole), 영점(Zero), 좌반평면(Left-Half Plane), 루트 로커스(Root Locus), 보드 선도(Bode Plot).
    • Skills: 전달 함수(Transfer Function) 분모의 근 찾기, 위상 여유(Phase Margin) 분석.
    • Tools: MATLAB rlocus(), bode().
    • Trade-offs: 제어 루프를 팽팽하게(게인을 높게) 조이면 로봇이 0.1초 만에 반응하는 극강의 성능을 보이지만, 루트 로커스 그래프 상에서 극점(Pole)이 우반평면(Right-Half Plane)의 발산 영역으로 살짝만 넘어가는 순간 시스템 전체가 지수 함수적으로 폭주해 버리는 치명적 줄타기.
  • How to Learn:
    • 1단계: 로봇의 전달 함수 방정식(분모 수식)이 0이 되는 해(근, Pole)를 복소수 ss 평면에 점으로 찍었을 때, 모든 점이 yy축의 왼쪽(좌반면)에 있으면 마찰력이 에너지를 까먹어 무조건 안정을 되찾지만, 단 하나의 점이라도 오른쪽으로 넘어가면 진동이 증폭되어 기계가 부서지는 물리학의 선고를 해부합니다.
    • 2단계: P 게인 값(KK)을 0에서 무한대로 서서히 올릴 때, 이 점(Pole)들이 평면 위에서 궤적(Locus)을 그리며 움직이다가 어느 순간 오른쪽 죽음의 땅으로 넘어가는 선을 그어버리고, "아, KK가 50을 넘으면 이 기계는 무조건 폭파된다"라고 예언하는 기하학을 뜯어봅니다.
  • Implement: 파이썬 control 라이브러리 기반 2차 미분방정식 객체 모사. KK 게인 값을 10부터 100까지 올리면서 전달 함수의 고유 극점(Pole) 실수부(Real)가 음수(-)에서 양수(+)로 뒤집히는 임계점(K=75K=75)을 터미널 텍스트로 탐색하여, 시스템이 안정(Stable)에서 진동 발산(Unstable)으로 전이되는 수학적 한계를 증명.

Advanced

Core Topic 04: 행렬의 절대 군주, 상태 공간 제어와 LQR (State-Space & LQR)

  • Why to Learn: 역진자(막대기 세우기) 로봇처럼 내가 조작할 모터는 1개인데 통제해야 할 변수가 각도, 속도, 위치 등 4개나 되는 극악의 시스템에서, PID처럼 변수 1개만 보는 구멍가게 튜닝을 던져버리고 모든 변수를 행렬로 싸잡아 최적의 전압 한 방을 꽂아버리는 다변수 제어 제국을 세우기 위해서입니다.
  • What to Learn:
    • Concepts: 상태 공간 피드백(State Feedback Control), 극점 배치(Pole Placement), LQR(Linear Quadratic Regulator), 관측기(Observer / Kalman Filter 기초).
    • Skills: 상태 벡터(State Vector) 행렬 튜닝, 가중치 행렬(Q,RQ, R) 밸런싱.
    • Tools: 제어기 설계 리카티(Riccati) 방정식 솔버.
    • Trade-offs: 상태 피드백을 쓰면 4개의 변수가 다 얽혀있는 미친 시스템도 행렬 곱셈 한 방(u=Kxu = -Kx)으로 완벽히 통제할 수 있지만, 4개의 변수(각도, 속도 등)를 전부 비싼 센서로 읽어내지 않으면 수식이 작동하지 않는 상태 관측 비용. 이를 위해 가짜 변수를 추정해 내는 옵저버(Observer) 알고리즘이 또 필요해지는 연산 복잡도 지불.
  • How to Learn:
    • 1단계: "전기세(RR)를 아낄래? 아니면 로봇이 좀 흔들리더라도 빡빡하게 위치 오차(QQ)를 없앨래?"라는 철학적 질문을 행렬식 파라미터로 세팅하면, 컴퓨터(리카티 미분 방정식)가 수학적으로 '가장 완벽한 최적의 제어 게인(KK)'을 알아서 뱉어내는 LQR 흑마법을 해부합니다.
    • 2단계: 로봇의 속도를 재는 센서가 고장 났을 때, 내가 쏜 모터 전압(입력)과 현재 각도(출력)만 가지고 가상의 뇌피셜(수학 모델)을 돌려 "음, 지금 로봇 속도는 5m/s겠군" 하고 숨겨진 상태(State)를 귀신같이 뽑아내 제어기에 던져주는 상태 관측기(Observer)의 궤적을 뜯어봅니다.
  • Implement: 상태가 2개(위치, 속도)인 행렬 벡터 XX에 대해, U=K×XU = -K \times X (피드백 제어) 수식을 연산하는 파이썬 데모. LQR 설계 함수(가상)가 계산한 KK 행렬 [10, 2]를 곱해 입력 전압 UU를 실시간 도출하고, 외부 노이즈에 맞아 위치와 속도가 동시에 틀어졌을 때 두 변수를 동시에 0으로 기가 막히게 끌고 내려오는(Convergence) 벡터 행렬의 수렴 덤프.

Robotics & Control Systems Mechanics

2 / 5