AEGLOSLAB 제어공학 종합 핸드북

제0부 오리엔테이션

0.1 제어공학이란 무엇인가

제0부 오리엔테이션 · 입문. 수식은 최소로, 직관으로 제어의 그림을 먼저 그린다. 여기서 등장하는 개념(피드백·블록선도·성능 지표)은 뒷 장에서 수식으로 다시 만난다.

이 장을 읽고 나면 답할 수 있어야 한다: 제어란 무엇이고, 왜 "피드백"이 핵심이며, 왜 그것이 생각보다 어려운가. 그리고 이 책이 그 어려움을 어떤 순서로 풀어 가는지.

0.1.1 제어란 — 원하는 대로 움직이게 만들기

제어(control)는 어떤 시스템의 출력을, 우리가 원하는 값(목표)에 맞도록 입력을 조절하는 일이다. 세 가지만 있으면 제어 문제가 성립한다.

  • 플랜트(plant) — 제어 대상. 모터, 드론, 보일러, 자동차, 로봇 팔.
  • 목표(reference, setpoint) — 원하는 출력. "바퀴 속도 2 m/s", "방 온도 24 ℃", "팔 끝을 (x, y)로".
  • 입력(actuation) — 우리가 조작할 수 있는 변수. 모터 전압, 가열기 전력, 밸브 개도.

제어공학은 "어떤 입력을 줘야 출력이 목표를 따라가는가"에 답하는 학문이다. 핵심 통찰 하나로 요약된다:

출력을 측정해서, 목표와의 차이(오차)를 보고, 그 차이를 줄이는 방향으로 입력을 만든다.

이 "측정 → 오차 → 보정"의 순환이 피드백(feedback)이고, 제어공학의 핵심이다.

0.1.2 피드백의 직관 — 샤워 물 온도 맞추기

수식 없이 피드백의 원리를 살펴보자. 샤워 꼭지를 틀고 물 온도를 맞추는 과정이 정확히 피드백 제어다.

  1. 목표: 적당히 따뜻한 물 (≈ 40 ℃).
  2. 측정: 손등에 닿는 물의 온도를 느낀다 (센서 = 피부).
  3. 오차 판단: "너무 차갑다" / "너무 뜨겁다".
  4. 보정: 차가우면 온수 쪽으로, 뜨거우면 냉수 쪽으로 꼭지를 돌린다 (입력 = 손).
  5. 1~4를 만족할 때까지 반복.

여기서 제어공학의 대표적 문제들이 이미 다 보인다.

  • 지연(delay): 꼭지를 돌려도 배관을 지나 온도가 바뀌기까지 몇 초 걸린다. 성급히 많이 돌리면 지나친다(overshoot) — 데었다가, 놀라서 반대로 급히 돌렸다가, 이번에는 차가워지고… 진동(oscillation).
  • 잡음(noise): 손의 감각은 부정확하다. 실제 온도가 일정해도 "조금 뜨거운 것 같기도" 하다.
  • 외란(disturbance): 옆집이 물을 틀면 수압이 변해 온도가 변동한다 — 제어 입력과 무관하게 출력이 바뀐다.

좋은 제어란 지나치지 않게, 너무 느리지도 않게, 외란이 와도 목표 근처에 머물게 꼭지를 돌리는 규칙을 찾는 것이다. 사람은 경험으로 익히지만, 기계는 그 규칙을 수식·알고리즘으로 줘야 한다. 그 규칙을 만드는 것이 이 책의 주제다.

0.1.3 개루프 vs 폐루프 — 측정하느냐 마느냐

제어 방식은 출력을 되먹임하는가에 따라 크게 둘로 나뉜다. 어느 쪽이 옳다기보다 트레이드오프다.

0.1.3.1 개루프 제어 (open-loop) — 측정 없이 미리 정한 대로

출력을 보지 않고, 미리 계산·설정한 입력을 그대로 내보낸다.

목표 제어기 입력 플랜트 출력

(출력을 되돌아보지 않는다 — 한 방향.)

  • 예: 전자레인지 "3분" 버튼(음식이 데워졌는지 안 봄), 신호등 시간표, 단순 토스터 타이머, 스텝모터 위치 명령.
  • 장점: 저비용이고 단순하다(센서 불필요), 안정성 걱정이 적다, 빠르다.
  • 약점: 외란·오차를 제거하지 못한다. 냉동 깊이가 다른 음식은 3분에 덜/더 데워진다. 모델이 틀리거나 환경이 바뀌면 그대로 어긋난다.
  • 언제 맞나: 외란이 작고, 플랜트를 잘 알고, 정밀도 요구가 낮을 때.

0.1.3.2 폐루프 제어 (closed-loop, feedback) — 측정해서 보정

출력을 측정해 목표와 비교하고, 그 오차로 입력을 만든다.

오차 e 입력 u 측정값 y (−) 목표 r Σ 제어기 플랜트 출력 y 센서
  • 예: 에어컨 온도조절기, 자동차 크루즈 컨트롤, 드론 자세 안정, 로봇 관절 위치 제어.
  • 장점: 외란을 억제하고, 모델 오차에 견디고, 정밀하다. 음식이 데워졌는지 "보고" 멈춘다.
  • 대가: 센서가 필요하고(돈·잡음), 설계를 잘못하면 스스로 진동하거나 발산(불안정)할 수 있다. 피드백은 대가가 따른다 — 잘못 감으면 안 하느니만 못하다.

핵심 대비: 개루프는 "계획대로 실행", 폐루프는 "보면서 수정". 이 책의 대부분은 폐루프를 안전하고 정밀하게 만드는 방법이다. 둘을 합친 피드포워드+피드백(미리 아는 것은 개루프로 빠르게, 모르는 것은 피드백으로 보정)도 실무의 대표 사례이며 뒤에서 다룬다.

개루프폐루프
출력 측정안 함함 (센서 필요)
외란 대응못 함잡음
모델 오차취약견딤
불안정 위험거의 없음설계 잘못 시 있음
비용·복잡도낮음높음
적합 상황잘 알고 외란 적은 계정밀·외란 많은 계

0.1.4 폐루프의 구성 요소 — 블록선도 첫 만남

0.1.3.2의 그림에 이름을 붙이자. 이 용어들은 책 전체에서 반복된다(표기 규약은 목차 3).

  • 기준입력 $r$ (reference): 목표값.
  • 오차 e = r − y: 목표와 실제의 차이. 피드백 제어기는 본질적으로 오차를 입력받아 동작한다.
  • 제어기 $C$ (controller): 오차를 보고 입력을 만드는 규칙. 이 책이 설계하려는 대상. PID·상태피드백·LQR·MPC 등이 전부 "C를 어떻게 만드나"의 답이다.
  • 제어입력 $u$ (control input / actuation): 제어기가 플랜트에 주는 명령(전압·토크 등).
  • 플랜트 $G$ (plant): 제어 대상. $u$를 받아 $y$를 낸다.
  • 출력 $y$ (output): 제어하려는 양.
  • 센서: $y$를 측정. 완벽하지 않다 — 지연·잡음·편향이 섞인다.
  • 외란 $d$ (disturbance): 바람·마찰·부하 변화처럼 우리가 안 줬는데 $y$를 교란하는 입력.

용어 정리: 0.1.3.2 그림처럼 측정값을 목표에서 빼서 오차를 줄이는 쪽으로 되먹이면 음(−) 피드백이다 — 이 책 대부분이 이 방식이다. 반대로 측정값을 목표에 더해 오차가 점점 커지는 쪽으로 되먹이면 양(+) 피드백이라 부른다(마이크를 스피커에 대면 나는 하울링이 대표 예). 지금은 이름만 — 수식으로 제대로 다루는 것은 1.2.5.3.

이 블록 하나하나가 책의 부(部)와 대응한다 — 플랜트 G를 수식으로 적는 법(제1부), 오차로부터 제어기 C를 설계하는 법(제2·4·6부), 센서 잡음이 클 때 실제 상태를 추정하는 법(제5부, 칼만필터).

0.1.4.1 가장 단순한 제어기 — 비례 제어 개요

"오차로 입력을 만든다"를 가장 단순하게 구현하면 오차에 비례해 입력을 준다. 이것이 비례 제어(P 제어)다. 수식이라곤 곱셈 하나다: $u = K_p \cdot e$ ($K_p$는 양의 상수, 비례 이득).

방 난방 예로 수치를 확인해 보자. 목표 r = 24 ℃, 비례 이득 Kp = 10 W/℃로 두면:

현재 온도 y오차 e = r − y가열 전력 u = Kp·e
18 ℃6 ℃60 W
21 ℃3 ℃30 W
23 ℃1 ℃10 W
24 ℃0 ℃0 W

별다른 규칙 없이도 멀수록 세게, 가까울수록 약하게 가열하고 목표에서 저절로 멈춘다 — 피드백의 장점이다.

⚠️ 그런데 마지막 줄에 함정이 있다. 24 ℃에서 $u = 0$이면 방은 곧 바깥으로 열을 빼앗겨 다시 식는다. 즉 온도를 유지하려면 약간의 전력이 계속 필요한데, P 제어는 $e = 0$이면 입력을 0으로 만든다. 그래서 실제로는 24 ℃에 약간 못 미친 지점(예: 23.5 ℃)에서 균형을 이뤄 작은 오차가 영원히 남는다. 이 "정상상태 오차"를 없애는 것이 PID의 적분(I) 항이고, 2.5에서 제대로 다룬다.

(위 표는 $u = K_p\cdot e$라는 곱셈의 결과일 뿐, 시간에 따라 온도가 어떻게 변해 가는지는 플랜트의 동특성이 정한다 — 그 모델링이 제1부, 응답의 모양은 1.3이다. 여기서는 "오차 → 입력"의 개념만 파악하면 된다.)

0.1.4.2 제어 루프를 코드로 보면

폐루프는 결국 일정 주기로 실행되는 반복문이다. 언어·플랜트가 무엇이든 디지털 제어기의 뼈대는 똑같다.

# 의사코드 — 모든 디지털 피드백 제어기의 뼈대
r  = 24.0            # 목표(기준입력)
Kp = 10.0            # 제어기 파라미터
dt = 0.01            # 샘플 주기 (10 ms)

while True:
    y = read_sensor()        # ① 측정: 출력 y를 읽는다
    e = r - y                # ② 오차: 목표와의 차이
    u = Kp * e               # ③ 제어기: 오차로 입력 u 계산  ← 이 줄이 책의 대부분
    write_actuator(u)        # ④ 구동: u를 플랜트에 인가
    sleep(dt)                # ⑤ 다음 주기까지 대기

이 다섯 줄이 제어공학 거의 전부의 기본 틀이다.

  • ③ u = controller(e) 한 줄을 어떻게 채우느냐가 PID(2.5)·상태피드백(4.3)·LQR(4.5)·MPC(6.1)의 차이다.
  • ① 측정 $y$에 잡음이 많거나 일부만 보이면, 실제 상태를 추정해서 넣는다 — 칼만필터(제5부).
  • ⑤ 주기 dt를 얼마로 설정하고 연속시간 설계를 어떻게 이산 코드로 옮기는가 — 디지털 제어(제3부).
  • 제7부에서 이 루프는 ROS2 노드의 콜백(타이머·/odom 구독 등)으로 바뀌지만 골격은 그대로다.

개략적으로 말하면 이 책은 "③번 줄을 채우는 방법들의 모음"이다.

0.1.5 우리 주변의 제어 — 알게 모르게

피드백은 공학을 넘어 도처에 있다.

  • 자동차 크루즈 컨트롤: 목표 속도 vs 실제 속도(오차) → 스로틀 조절. 오르막(외란)에서도 속도 유지.
  • 드론: 6축 IMU로 자세를 측정 → 네 모터 추력 배분 → 수평 유지. 초당 수백~수천 번 실행되는 폐루프. (자세 추정은 5.4 센서 융합과 직결)
  • 체온·혈당: 생체도 음성 피드백으로 항상성을 유지한다.
  • 경제: 중앙은행이 물가(출력)를 보고 금리(입력)를 조절 — 지연·외란·불확실성이 큰 "어려운 플랜트".
  • 로봇 관절: 목표 각도 vs 엔코더 측정 → 모터 토크. 이 책의 ROS2 실습(제7부)이 다루는 전형.

공통 구조는 늘 같다: 측정 → 오차 → 보정 → 반복. 제어공학은 이 순환을 정량적으로, 안전하게, 최적으로 만드는 도구 모음이다.

0.1.5.1 잠깐 — 제어공학은 어디서 왔나 (약사)

피드백 제어는 갑자기 생긴 학문이 아니라 산업·전쟁·우주의 필요가 견인한 200여 년의 누적이다. 큰 이정표만:

  • 1788 — Watt 원심 조속기(governor): 증기기관 속도를 자동 조절. 피드백의 산업적 출발점 — 메커니즘이 먼저고 이론은 훨씬 뒤에 나왔다.
  • *1868 — Maxwell, On Governors**: 조속기가 왜 가끔 진동하는지*를 미분방정식으로 분석. 안정성 이론의 출발점.
  • 1930~40년대 — Bell 연구소(Nyquist·Bode·Black): 장거리 전화 증폭기를 위한 음성 피드백과 주파수영역 해석(Nyquist 선도·Bode 선도). 제2부의 도구 상당수가 여기서 나왔다.
  • 1940년대 — 2차대전 사격통제·서보기구: 제어를 독립된 공학 분과로 굳힘.
  • 1960 — Kalman, 상태공간·칼만필터: 시간영역·행렬 기반의 현대 제어와 최적 추정(제4·5부).
  • 이후 — 디지털·로보틱스·MPC·학습 제어: 마이크로프로세서로 디지털 제어가 보편화되고(제3부), 오늘날 로봇·드론·자율주행으로 이어진다(제7부).

요점: 고전(주파수영역) → 현대(상태공간) → 디지털·최적이라는 이 책의 순서는, 대체로 역사가 실제로 흘러온 순서이기도 하다.

0.1.6 왜 어려운가 — 제어를 까다롭게 만드는 네 가지

"오차를 줄이면 된다"가 왜 한 학문이 될 만큼 어려운가. 네 가지 근본 난제 때문이다. 이 책의 거의 모든 기법은 이 넷 중 하나 이상에 대한 답이다.

  1. 동특성·지연(dynamics & delay) — 입력을 줘도 출력이 즉시 안 바뀐다. 질량은 가속에 시간이 걸리고, 열은 천천히 퍼진다. 이 "시간 지연" 때문에 성급한 보정은 오버슈트·진동을 부른다. → 제1부에서 동특성을 수식(미분방정식·전달함수)으로 적는다.
  2. 불안정(instability) — 피드백을 잘못 걸면 오차가 줄기는커녕 스스로 커진다(마이크-스피커 하울링처럼). 폐루프의 가장 위험한 실패 모드. → 제2부(안정성·여유)·제4부에서 "발산하지 않게" 설계하는 법을 배운다.
  3. 잡음·불확실성(noise & uncertainty) — 센서는 부정확하고, 플랜트 모델은 근사일 뿐이다. 잡음을 그대로 증폭하면 액추에이터가 진동하고, 모델을 과신하면 실물에서 어긋난다. → 제5부(칼만필터, 잡음 속 추정)·제6부(강인 제어, 불확실성 견딤).
  4. 제약·결합(constraints & coupling) — 모터 토크에는 한계가 있고(포화), 변수들이 서로 얽혀 있다(드론의 롤이 위치에 영향). → 제4부(다변수 상태공간)·제6부(MPC, 제약 최적화).

정직한 요약: 제어기에는 비법이 없다. 센서가 못 보는 것은 검출하지 못하고(가관측성, 4.2), 액추에이터가 못 내는 힘은 못 만들며(포화), 너무 빠른 외란은 못 따라간다(대역폭, 2.3). 제어공학의 절반은 "무엇이 가능한가"의 한계를 아는 일이다.

0.1.7 좋은 제어란 — 성능 지표 미리보기

"오차를 줄인다"는 모호하다. 제어를 정량적으로 평가하는 기준을 미리 이름만 익혀 두자(수식·측정은 1.3에서).

  • 안정성(stability) — 발산하지 않는가. 전제 조건. 불안정하면 나머지는 무의미하다.
  • 정확도(steady-state accuracy) — 충분히 시간이 지나면 목표에 얼마나 가까운가. 남는 오차(정상상태 오차)가 0인가.
  • 응답 속도(speed) — 목표에 얼마나 빨리 도달하나(상승시간·정착시간).
  • 오버슈트(overshoot) — 목표를 얼마나 지나치나. 엘리베이터가 목표 층을 1 m 지나치면 곤란하다.
  • 견고성(robustness) — 모델이 조금 틀리거나 외란이 와도 위 성질이 유지되나.

이들은 서로 충돌한다. 빠르게 하려고 입력을 크게 하면 오버슈트가 커지고, 안정 여유는 줄며, 잡음에 민감해진다. 제어 설계는 이 트레이드오프를 의식적으로 고르는 일이지, 한 지표만 극대화하는 일이 아니다. (이 충돌을 한 비용함수로 묶어 "최적"을 푸는 것이 4.5 LQR이다.)

0.1.8 이 책의 지도 — 왜 이 순서인가

전체 흐름(상세 목차·의존도는 목차):

제0부 · 직관·수학·환경 (준비운동) 제1부 · 모델링 — 플랜트 G를 수식으로 제2부 · 고전 제어 — 입출력으로 C 설계 (PID·주파수) 제3부 · 디지털 제어 — 샘플링·이산화 제4부 · 상태공간 — 다변수·고성능 (극배치·LQR) 제5부 · 칼만필터 — 잡음 속 상태 추정 제6부 · 심화 — MPC·비선형·강인·적응 제7부 · 실전 ROS2 — 로봇에 탑재해 반복 구현·비교

핵심 논리: 먼저 대상을 수식으로 적을 줄 알아야(모델링) 제어기를 설계할 수 있고, 고전(입출력) 관점으로 직관을 쌓은 뒤 현대(상태공간)로 다변수·최적 문제를 다루며, 현실의 잡음을 칼만필터로 다루고, 마지막에 로봇(ROS2)에서 손으로 확인한다. 같은 플랜트(이동로봇·도립진자)를 여러 부에서 다시 만나 여러 기법으로 반복 구현·비교하는 것이 이 책의 축이다.

0.1.9 이 책 사용법

  • 실습 우선: 모든 핵심 장에는 직접 실행해 볼 코드가 따라온다. Python(python-control·NumPy·SciPy·Matplotlib)으로 이론을 확인하고, 제7부에서 ROS2 Humble로 로봇에 탑재한다. 환경 구축은 0.3에서 한 번에 정리한다.
  • 수학은 필요한 만큼: 라플라스·z 변환, 선형대수, 확률은 본문 흐름에서 필요할 때 0.2와 부록(A.1~A.2)으로 제공한다. 막히면 그때 펼쳐 보면 된다 — 처음부터 다 외울 필요 없다.
  • 읽는 경로: 순서대로가 기본. 급한 실무자는 0.1 → 1.1~1.3 → 2.5(PID) → 제7부로 바로 넘어가고, 막히는 이론만 다시 확인해도 된다(경로 안내는 목차 2).
  • 표기: 신호·블록 기호는 전권 공통(목차 3). 처음 보는 기호는 부록 A.5 용어집.
  • ⚠️ 검증 약속: 이 책의 코드·수치 중 실제 구동으로 확인하기 전인 것은 본문에서 "검증 필요"로 표기한다. 특히 ROS2·하드웨어 결과는 환경(버전·드라이버)에 민감하므로, 책의 출력값을 맹신하지 말고 여러분의 환경에서 재현하며 읽기를 권한다.

0.1.10 정리 — 그리고 다음 장

  • 제어 = 측정 → 오차 → 보정 → 반복(피드백). 출력을 되먹이느냐로 개루프·폐루프가 갈리고, 둘은 트레이드오프다(0.1.3).
  • 폐루프 블록선도의 구성요소($r\cdot e\cdot C\cdot u\cdot G\cdot y$·센서·$d$)는 책 전체의 공통 표기다(0.1.4).
  • 제어가 어려운 것은 지연·불안정·잡음·제약 때문이며(0.1.6), "좋은 제어"는 안정·정확·속도·오버슈트·견고성의 충돌하는 지표를 의식적으로 절충한 결과다(0.1.7).

다음 0.2에서는 이 직관을 수식으로 옮기기 위한 수학 준비운동(복소수·라플라스 변환·선형대수)을 필요한 만큼 한다. 수학에 이미 익숙하다면 0.2를 훑고 0.3(개발 환경)으로 가도 된다. 그 전에, 아래 문제로 직관을 점검해 보자.

0.1.11 연습·생각해 볼 것

수식보다 직관을 점검하는 문제들이다. 정답이 하나가 아닌 것도 있다 — 이유를 말로 설명할 수 있으면 충분하다. (이 책은 모든 장 끝에 이런 연습·생각거리를 둔다.)

  1. 개루프·폐루프 분류. 다음을 개루프/폐루프로 나누고 근거를 제시하라: ⓐ 타이머로 실행되는 잔디 스프링클러, ⓑ 정수기의 정온수(설정 온도 유지) 기능, ⓒ 사람이 자전거로 직진하기, ⓓ 정해진 시간만큼만 도는 세탁기 탈수. (힌트: "출력을 측정해 되먹이는가?" — 0.1.3)
  2. 지연과 진동. 샤워 예시(0.1.2)에서 배관 지연이 0에 가까웠다면 온도 맞추기가 더 쉬워질까 어려워질까? 왜? (힌트: 지연이 오버슈트·진동의 주원인 중 하나였다.)
  3. 비례 이득 키우기. 0.1.4.1의 난방에서 $K_p$를 10 → 20 W/℃로 키우면 초기(18 ℃)의 가열 전력은 얼마인가? 이렇게 더 큰 입력을 가하는 것의 장점 하나와 위험 하나를 각각 말하라. (힌트: 빠르지만 지나칠 수 있다 — 0.1.7의 트레이드오프.)
  4. 음성 vs 양성 피드백. 마이크를 스피커에 가까이 댈 때 생기는 하울링은 음성 피드백인가 양성 피드백인가? 제어에서 보통 음성 피드백(오차를 줄이는 방향)을 쓰는 이유는? (힌트: 양(+)/음(−) 피드백의 이름은 0.1.4에서 다루었다 — 오차가 커지는 쪽인지 줄어드는 쪽인지로 구분.)
  5. 자신의 분야에서. 잘 아는 시스템(요리·운전·운동·서버 부하 등) 하나에서 피드백 루프를 찾아 $r$(목표)·$y$(출력)·센서·$C$(보정 규칙)·$u$(입력)·$d$(외란)로 분해해 적어 보라(0.1.4). 책을 읽는 내내 이 예시를 갱신해 가면 좋다.
  6. (손으로 — 0.3 이후) 개발 환경을 갖춘 뒤 0.1.4.2의 의사코드를 떠올리며 "측정·오차·구동"이 각각 어디에 해당할지 turtlesim 같은 간단한 예에서 확인해 보라. 실제 구현은 제7부(7.2)에서 한다.

풀이 자체보다 "왜 그런가"를 말로 설명하는 연습이 핵심이다. 막히면 괄호 안 교차참조가 가리키는 절로 돌아가 근거를 찾아라.