← --library
이과 · 22이과

로봇공학 및 자동제어

Robotics

단계1단계2단계3단계4단계5

1단계: 자동제어의 세계 — 로봇이 스스로 서는 법

서론: 문제를 먼저 느껴보자

눈을 감고 한쪽 발로 서 있어봐. 아마 금방 비틀거릴 거야. 그런데 눈을 다시 뜨면? 훨씬 오래 서 있을 수 있지. 눈이 하는 일은 단순하다 — '지금 내가 얼마나 기울어져 있지?'를 끊임없이 확인하고, 그 정보를 발과 다리 근육에 보내서 계속 보정하는 거야. 이게 바로 **자동 제어(Automatic Control)**의 핵심이다. 로봇공학에서 배울 첫 번째 질문은 이것이다: "시스템이 원하는 상태에서 벗어났을 때, 어떻게 스스로 돌아오게 만들까?" 이 질문은 1940년대에 수학자이자 공학자인 노버트 위너(Norbert Wiener)가 처음으로 체계화했어. 그는 이 학문을 **사이버네틱스(Cybernetics)**라고 불렀는데, 그리스어로 '조타수(舵手)'를 뜻해 — 배가 파도에 밀려도 조타수가 계속 키를 조정해 목적지로 향하게 하듯, 제어공학은 시스템이 외란을 받아도 목표 상태를 유지하게 만드는 기술이야. 오늘 배울 내용은 이 오래된 질문에 대한 현대 공학의 정교한 답이다.


1부: 이론적 기초 — 세상을 수식으로 보는 법

피드백: 제어의 심장

피드백 없는 제어를 개루프(Open-Loop) 제어라고 해. 밥솥 타이머를 예로 들면, "30분 뒤에 꺼라"라고 설정해 두면 밥이 실제로 다 됐든 안 됐든 그냥 꺼지지 — 현재 밥 상태를 전혀 확인하지 않아. 반면 체온조절기(thermostat)는 실제 온도를 계속 측정해서 설정값보다 낮으면 히터를 켜고 높으면 끄는 식으로 작동해 — 이게 폐루프(Closed-Loop) 제어, 즉 피드백 제어야. 폐루프 제어 시스템은 항상 세 가지 요소로 이루어져: 기준 입력(Reference) r(t) — 원하는 목표값, 오차(Error) e(t) = r(t) − y(t) — 목표와 현재 상태의 차이, 그리고 제어 입력(Control Input) u(t) — 오차를 줄이기 위해 시스템에 가하는 힘이나 전압. 도립진자 로봇(Inverted Pendulum Robot)에서는 r(t) = '기울기 0도', y(t) = IMU 센서가 측정한 현재 기울기, u(t) = 바퀴 모터에 인가하는 전압이 각각 대응해.

[노트 기록] 개루프 vs 폐루프의 핵심 차이: 개루프는 현재 상태를 모른다. 폐루프는 현재 상태를 측정해서 출력을 조정한다.

물리 시스템을 수식으로 포획하기: 미분방정식

피드백의 개념을 잡았다면, 이제 시스템 자체를 수학으로 표현하는 법이 필요해. 고등학교에서 배운 뉴턴의 제2법칙 F = ma를 생각해봐. 질량 m인 물체의 위치를 x(t)라 하면 이걸 좀 더 어른스럽게 쓸 수 있어:

m · ẍ(t) = F(t)

여기서 ẍ(t)는 x(t)를 시간으로 두 번 미분한 것, 즉 가속도야. 이처럼 미지의 함수와 그 도함수들의 관계를 나타내는 방정식을 **미분방정식(Ordinary Differential Equation, ODE)**이라고 해. 로봇의 모든 물리적 거동 — 모터가 돌아가는 것, 팔이 움직이는 것, 진자가 기울어지는 것 — 은 미분방정식으로 표현할 수 있어. 이건 단순히 '유용한 도구'가 아니야. 자연법칙 자체가 미분방정식의 언어로 쓰여 있다는 뜻이야.

그런데 문제가 있어. 미분방정식은 시간 영역(Time Domain)에서의 표현이라 해석하기 까다롭고, 두 시스템을 연결하면 방정식이 복잡하게 얽혀버려. 그래서 수학자 피에르-시몽 라플라스(Pierre-Simon Laplace)가 고안한 변환을 사용해.

[노트 기록] 라플라스 변환의 핵심 아이디어: 시간 영역에서의 미분(d/dt)이 주파수 영역에서 's를 곱하는 것'으로 바뀐다. 즉, 풀기 어려운 미분방정식이 풀기 쉬운 대수방정식으로 변환된다.

라플라스 변환을 지금 완전히 이해하지 않아도 돼. 단 이것만 기억해: 라플라스 변환을 하면 미분 연산 d/dt가 's를 곱하는' 대수 연산으로 바뀐다. 그래서 mẍ = F를 라플라스 변환하면 ms²·X(s) = F(s)가 되고, 정리하면 다음과 같아:

G(s) = X(s)/F(s) = 1/(ms²)

이 비율 — 출력을 입력으로 나눈 것 — 을 **전달함수(Transfer Function) G(s)**라고 불러. 이 하나의 식이 해당 시스템의 '성격'을 완벽하게 요약해. 두 시스템을 직렬로 연결하면 전달함수를 그냥 곱하면 되고 — 마치 레고 블록처럼 조립할 수 있게 되는 거야. 이게 고전 제어이론의 핵심 도구야.


2부: 본 내용 — PID부터 하드웨어까지

PID 제어: 공학의 스위스 아미 나이프

앞에서 피드백이 '오차를 측정해서 보정한다'는 개념이라고 했지. 그럼 오차를 구체적으로 어떻게 처리해야 할까? 가장 직관적인 방법은 "오차가 클수록 더 세게 보정한다" — 이게 **비례 제어(Proportional, P)**야. 수식으로는 u(t) = Kp·e(t). 여기서 Kp는 비례 이득(Proportional Gain)이야.

그런데 순수한 P 제어만 쓰면 문제가 생겨. 로봇이 목표 각도에 거의 다가가면 e(t)가 작아지고, 제어력 u(t)도 약해져. 시스템에 마찰력이나 중력 같은 상수 외란이 있으면 결국 오차가 완전히 0이 되기 전에 제어력과 외란이 평형을 이뤄 **정상상태 오차(Steady-State Error)**가 남게 돼. 이걸 해결하는 게 **적분 제어(Integral, I)**야. 오차를 시간에 대해 적분하면 작은 오차가 오래 지속될수록 값이 커지거든 — u(t) += Ki·∫e(τ)dτ. 이렇게 하면 작은 오차라도 누적되어 결국 완전히 제거돼.

마지막으로 **미분 제어(Derivative, D)**는 오차의 변화율 de(t)/dt를 이용해. 오차가 빠르게 줄어들고 있다면 "어, 곧 목표에 도달하겠구나" — 미리 브레이크를 거는 거야. u(t) += Kd·de(t)/dt. 이 세 가지를 합친 것이 PID 제어기야:

u(t) = Kp·e(t)  +  Ki·∫₀ᵗ e(τ)dτ  +  Kd·de(t)/dt
        ↑ P항          ↑ I항                ↑ D항

[노트 기록] PID 각 항의 역할을 직관적으로 외워라:

  • P항: 현재 오차에 반응한다 (지금 얼마나 잘못됐나?)
  • I항: 과거 오차의 누적에 반응한다 (얼마나 오래 잘못됐나?)
  • D항: 오차의 변화 추세에 반응한다 (얼마나 빠르게 변하고 있나?)

라플라스 영역에서 PID 제어기의 전달함수는 C(s) = Kp + Ki/s + Kd·s가 되고, 폐루프 시스템의 전달함수는 **T(s) = G(s)·C(s) / (1 + G(s)·C(s))**야. 분모 1 + G(s)·C(s) = 0이 되는 s 값들, 즉 **극점(Poles)**의 위치가 시스템의 안정성과 응답 속도를 결정해. 극점이 복소평면의 왼쪽 절반(Re(s) < 0)에 있으면 시스템은 안정해 — 이게 라우스-허위츠(Routh-Hurwitz) 안정성 판별법의 핵심이야. 극점이 오른쪽 절반에 하나라도 있으면? 도립진자가 무조건 쓰러져.

그럼 실제로 Kp, Ki, Kd를 어떻게 정하냐고? 이론적인 방법으로는 지글러-니콜스(Ziegler-Nichols) 튜닝법이 있어 — Ki = Kd = 0으로 놓고 Kp를 서서히 올려서 시스템이 진동하기 직전의 임계 이득 Ku와 진동 주기 Tu를 구한 뒤 표에서 이득값을 계산하는 거야. 하지만 현실에서는 대부분 시뮬레이션 + 반복적 조정(Iterative Tuning)으로 정해.

주파수 응답 분석: 시스템을 흔들어 본다

PID 이득을 구했다고 끝이 아니야. 제어 시스템이 실제로 얼마나 '여유 있게' 안정한지 알아야 해. 이를 위한 도구가 **주파수 응답 분석(Frequency Response Analysis)**이야. 아이디어는 간단해: 시스템에 여러 주파수의 사인파를 입력으로 주고, 출력이 어떻게 바뀌는지 관찰해. 각 주파수 ω에서 출력/입력의 진폭 비를 이득(Gain), 위상 차이를 **위상(Phase)**이라 하고, 이걸 주파수에 대해 그린 그림이 **보드 선도(Bode Plot)**야. 앞에서 배운 전달함수 G(s)에 s = jω(j는 허수 단위, ω는 각주파수)를 대입하면 G(jω)가 되는데, |G(jω)|가 이득이고 ∠G(jω)가 위상이야.

보드 선도에서 두 가지 중요한 값을 읽을 수 있어. 이득 여유(Gain Margin, GM): 위상이 −180°가 될 때 이득이 얼마나 더 커져야 시스템이 불안정해지는가? 위상 여유(Phase Margin, PM): 이득이 1(0 dB)이 될 때 위상이 −180°까지 얼마나 남아 있는가? 일반적으로 PM ≥ 45°를 목표로 해. 이 두 값이 클수록 시스템이 파라미터 변화나 외란에 강해 — 이를 **강인성(Robustness)**이라고 불러. Karl Åström과 Richard Murray의 교재 Feedback Systems(2020, Princeton University Press)는 "위상 여유는 시스템이 불안정해지기 전에 허용되는 최대 시간 지연으로도 해석할 수 있다"고 설명해 — 실제로 마이크로컨트롤러의 연산 지연이 바로 이 '시간 지연'이야.

상태 공간 표현: 시스템의 내부를 들여다보기

PID와 보드 선도는 강력하지만 약점이 있어. 이 접근법은 단입력-단출력(SISO, Single-Input Single-Output) 시스템에 편리하게 설계됐어. 6축 로봇 팔처럼 입력과 출력이 여러 개인 MIMO(Multi-Input Multi-Output) 시스템에서는 어떻게 할까? 이때 등장하는 게 **상태 공간 표현(State-Space Representation)**이야.

핵심 아이디어: 시스템의 현재 상태를 완전히 기술하는 최소한의 변수들, 즉 **상태 변수(State Variables)**의 집합을 **상태 벡터 x(t)**로 정의하는 거야. 도립진자에서는 x = [θ, θ̇, p, ṗ]ᵀ — 각도, 각속도, 위치, 속도 — 이 네 가지만 알면 미래 거동을 완전히 예측할 수 있어. 그러면 시스템의 역학이 두 개의 행렬 방정식으로 압축돼:

ẋ(t) = A·x(t) + B·u(t)   ← 상태 방정식
y(t) = C·x(t) + D·u(t)   ← 출력 방정식

A시스템 행렬(System Matrix), B입력 행렬(Input Matrix), C출력 행렬(Output Matrix), D는 **직달 행렬(Feedthrough Matrix)**야. 이 네 행렬이 시스템 전체를 요약해. 라플라스 변환하면 G(s) = C·(sI − A)⁻¹·B + D — 상태 공간 표현이 전달함수보다 더 일반적인 framework이라는 게 보이지?

[노트 기록] 상태 공간의 두 방정식을 외워라:

  • 상태 방정식 ẋ = Ax + Bu: 시스템이 어떻게 진화하는가 (역학, Physics)
  • 출력 방정식 y = Cx + Du: 우리가 무엇을 측정할 수 있는가 (센서, Sensing)

가제어성과 가관측성: 할 수 있는가, 볼 수 있는가

상태 공간 표현을 이해했다면 두 가지 근본적인 질문이 따라와. 첫째, 원하는 상태에 도달시킬 수 있는가? — 이게 **가제어성(Controllability)**이야. 둘째, 출력 측정만으로 상태를 알아낼 수 있는가? — 이게 **가관측성(Observability)**이야.

가제어성은 **가제어성 행렬 C = [B, AB, A²B, ..., Aⁿ⁻¹B]**의 rank가 n(상태 변수의 수)과 같은지로 판단해. 가관측성은 **가관측성 행렬 O = [C; CA; CA²; ...; CAⁿ⁻¹]**의 rank가 n인지로 판단해. Rudolf Kalman이 1960년대에 증명한 이 조건들은 제어이론의 핵심 기둥이야 — 시스템이 가제어하지 않으면 아무리 좋은 제어기를 설계해도 특정 상태에 도달할 수 없고, 가관측하지 않으면 아무리 좋은 센서를 달아도 특정 상태를 추정할 수가 없어. 도립진자에서 각도와 각속도만 측정할 수 있다면, 시스템이 가관측이라면 이 측정값만으로 수레의 위치와 속도를 수학적으로 추론해낼 수 있다는 거야 — 2단계에서 배울 칼만 필터가 바로 이 일을 해.

센서 인터페이스: 세계를 숫자로 읽기

이론을 실제 하드웨어에 연결하려면 센서로 시스템 상태를 측정해야 해. 도립진자에서 가장 중요한 센서는 **IMU(Inertial Measurement Unit, 관성 측정 장치)**야. 대표 부품 MPU-6050은 3축 가속도계(Accelerometer)와 3축 자이로스코프(Gyroscope)를 하나의 칩에 담고 있어. 가속도계는 중력 벡터 방향을 측정해 정적인 기울기 각도를 줄 수 있지만 진동에 민감해서 노이즈가 많아. 자이로스코프는 각속도 ω를 직접 측정하는데, 적분해서 각도를 얻을 수 있지만 작은 오차가 누적되는 드리프트(Drift) 문제가 있어. 그래서 실제로는 **상보 필터(Complementary Filter)**로 두 센서를 융합해:

angle = α·(angle + gyroRate·dt) + (1−α)·accelAngle

여기서 α ≈ 0.98은 고주파(자이로)를 더 신뢰하고 저주파(가속도계)를 보정에 쓰는 가중치야. MPU-6050은 마이크로컨트롤러와 I2C(Inter-Integrated Circuit) 프로토콜로 통신해 — SDA(데이터)와 SCL(클럭), 단 두 개의 선만으로 여러 디바이스를 연결할 수 있는 직렬 통신 프로토콜이야. 각 디바이스는 고유한 7비트 주소를 가지고, 마스터(마이크로컨트롤러)가 클럭을 생성해서 통신을 주도해.

액추에이터 구동: 숫자를 움직임으로

센서가 세계를 읽는다면, **액추에이터(Actuator)**는 세계에 작용해. 도립진자에서는 DC 모터가 액추에이터야. 마이크로컨트롤러는 모터를 직접 구동할 만큼 전류를 공급할 수 없어 — 그래서 모터 드라이버(Motor Driver), 대표적으로 L298N H-브리지 드라이버가 필요해. H-브리지는 내부의 4개 스위치 조합으로 모터 전류 방향을 바꿀 수 있어 — 앞뒤 회전이 모두 가능해지지. 모터 속도는 **PWM(Pulse Width Modulation, 펄스 폭 변조)**으로 제어해. PWM은 디지털 신호를 빠르게 켰다 껐다 반복해 평균 전압을 조절하는 방식이야. **듀티 사이클(Duty Cycle)**이 50%면 최대 전압의 50%, 100%면 최대 전압이 모터에 걸려. Arduino의 analogWrite(pin, 0~255) 함수가 이 PWM 신호를 생성해.

[노트 기록] 전체 제어 루프 흐름 (이걸 외워라, 모든 로봇 제어의 골격이야):

  1. IMU → I2C → MCU: 각속도·가속도 데이터 수신
  2. MCU: 상보 필터로 각도 θ 추정
  3. PID 제어기: 오차 e = setpoint − θ → 제어 신호 u 계산
  4. u → PWM → L298N → DC 모터: 바퀴 구동
  5. (루프 반복: 110 ms 주기, 1001000 Hz)

루프 주기가 너무 길면 시스템이 불안정해져 — 앞에서 배운 위상 여유가 줄어들기 때문이야. 마이크로컨트롤러의 연산 지연 자체가 피드백 루프에 위상 지연을 추가해.


3부: 프로젝트 — 직접 풀어보자

아래 세 개의 문제를 독립적으로 풀어봐. 정답은 없어. 스스로 수식을 유도하고, 논리를 전개하고, 코드를 설계해. 이론 설명에서 배운 개념과 연결 지어 생각하는 게 핵심이야. 전체 약 40분을 목표로 해.


[프로젝트 1] 스프링-질량-댐퍼 시스템의 전달함수 유도 및 PID 설계 (약 15분)

배경: 가장 단순한 2차 역학 시스템인 **스프링-질량-댐퍼(Spring-Mass-Damper)**를 분석하고 PID 제어기를 설계해보자. 이 시스템은 도립진자를 포함한 수많은 물리 시스템의 근사 모델이야.

시스템: 질량 m = 1 kg인 블록이 스프링(k = 4 N/m)과 댐퍼(b = 2 N·s/m)에 연결되어 있다. 외부 힘 F(t)가 입력, 블록 위치 x(t)가 출력이다. 운동방정식은 mẍ + bẋ + kx = F이다.

문제 1-A: 위 미분방정식을 라플라스 변환해서 전달함수 G(s) = X(s)/F(s)를 구하여라. 분모 다항식의 근(극점)의 위치를 복소평면에서 계산하고, 시스템의 안정성을 판별하여라. 극점이 왼쪽 절반에 있다면 시스템은 어떤 응답(진동하며 수렴? 단조 수렴?)을 보일지 물리적으로도 설명해봐.

문제 1-B: 이 시스템에 비례 제어기 C(s) = Kp만 붙였을 때(I, D 제외), 폐루프 전달함수 T(s)를 구하여라. Kp = 10으로 설정했을 때 단위 계단 입력에 대한 **정상상태 오차(Final Value Theorem: lim_{s→0} s·T(s)·(1/s)를 계산)**가 0이 되는가, 아닌가? 수식으로 증명하여라. 만약 0이 아니라면, 이를 제거하려면 PID 중 어떤 항을 추가해야 하며, 그 이유를 I항의 라플라스 표현(1/s)과 연결지어 설명하여라.

문제 1-C: 보드 선도 분석 준비. 문제 1-A에서 구한 G(s)에 s = jω를 대입하여 G(jω)를 구하고, (a) ω → 0일 때 이득 |G(jω)|의 극한값, (b) ω → ∞일 때 |G(jω)|의 극한값을 각각 계산하여라. 저주파에서 이득이 크다는 것이 시스템이 느린 입력을 잘 추종한다는 것을 의미하는데, 이걸 스프링-질량-댐퍼 시스템의 물리적 관점에서 직관적으로 설명해봐.


[프로젝트 2] 도립진자의 상태 공간 표현 (약 15분)

배경: 이번 단계 최종 목표인 도립진자 밸런싱 로봇의 핵심 수학 모델을 만들어볼 거야. θ = 0 근방에서 선형화된 상태 공간 방정식이 아래처럼 주어졌어. 상태 벡터는 x = [p, ṗ, θ, θ̇]ᵀ (수레 위치, 수레 속도, 진자 각도, 진자 각속도)이고 입력은 수레에 가하는 힘 F야.

    ⎡ 0      1     0         0    ⎤         ⎡   0   ⎤
    ⎢ 0      0   -mg/M       0    ⎥         ⎢  1/M  ⎥
A = ⎢ 0      0     0         1    ⎥,   B =  ⎢   0   ⎥
    ⎣ 0      0  (M+m)g/(Ml)  0   ⎦         ⎣-1/(Ml)⎦

파라미터: M = 1.0 kg (수레 질량), m = 0.1 kg (진자 질량), l = 0.5 m (진자 길이), g = 9.81 m/s².

문제 2-A: 파라미터를 대입해 구체적인 A, B 행렬의 수치를 계산하여라. 그리고 출력 행렬 C = [1, 0, 0, 0; 0, 0, 1, 0] (수레 위치 p와 진자 각도 θ만 측정 가능)으로 두었을 때, 이 시스템이 **가제어(Controllable)**한지를 가제어성 행렬의 rank를 계산해서 판별하여라. (힌트: 4×4 가제어성 행렬을 전부 계산하기 어려우면, [B, AB] 2열만 먼저 구해 rank ≥ 2인지 확인하는 것부터 시작해봐.)

문제 2-B: 행렬 A의 **고유값(Eigenvalue)**을 구하여라. det(A − λI) = 0을 전개해. A가 희소(Sparse)행렬이라 항이 많이 사라져서 생각보다 단순해질 거야. 구한 고유값 중 **양의 실수부(Re(λ) > 0)**를 갖는 것이 있다면 그게 무엇을 의미하는지 설명하고, 제어기 없이 도립진자가 자연적으로 안정될 수 있는지 없는지를 고유값 분석과 앞에서 배운 폐루프 극점 개념을 연결해서 결론 내려봐.

문제 2-C: C = [1, 0, 0, 0] (수레 위치 p만 측정 가능한 경우)로 바꾸었을 때 이 시스템이 **가관측(Observable)**한지를 판별하여라. 수학적 판별 결과(가관측성 행렬의 rank)와 물리적 직관 — '수레 위치만 알아도 진자 각도를 추론해낼 수 있는가' — 을 같이 서술하여라. 만약 가관측이라면, 그 직관적 이유가 무엇인지 시스템의 역학(A 행렬 구조)과 연결해서 설명해봐.


[프로젝트 3] 센서-액추에이터 인터페이스 설계 (약 10분)

배경: 이론을 실제 Arduino 코드로 연결해. MPU-6050과 L298N을 사용하는 도립진자 PID 제어 루프를 설계해보자.

문제 3-A: 아래 상보 필터 코드의 빈칸을 채워 완성하여라. 각 빈칸에 들어갈 내용의 수학적 근거를 주석으로 달아봐 (앞에서 배운 상보 필터 공식, 자이로 드리프트 개념과 연결).

const float ALPHA = 0.98;
const float dt = 0.01; // 10ms 루프 주기 (초)
float angle = 0.0;

void updateAngle(float gyroRate, float accelAngle) {
    // [빈칸 1]: 자이로스코프로부터 이번 dt 동안 변화한 각도를 반영
    float gyroAngle = _________;

    // [빈칸 2]: 상보 필터 — 고주파는 자이로, 저주파는 가속도계로 보정
    angle = _________;
}

문제 3-B: PID 제어 루프 전체를 아래 스켈레톤에 구현하여라. Kp, Ki, Kd 초기 추정값도 직접 제안해보고 (지글러-니콜스 방법 또는 직관적 추정), 각 단계마다 앞에서 배운 이론 개념을 주석으로 연결하여라.

float Kp = ???, Ki = ???, Kd = ???;
float setpoint = 0.0;
float integral = 0.0;
float prevError = 0.0;

void loop() {
    // [단계 1]: 센서 읽기 및 상보 필터로 각도 추정

    // [단계 2]: 오차 계산 (e = setpoint - angle)

    // [단계 3]: PID 제어 신호 계산 (P항 + I항 + D항)

    // [단계 4]: 제어 신호 → PWM → L298N으로 모터 출력

    // [단계 5]: 이전 오차 업데이트 + delay(10)
}

문제 3-C (심화): 실제 구현에서 발생하는 두 가지 현실적 문제를 분석해봐. 첫째, Ki 항이 누적되어 매우 커지는 **적분 와인드업(Integral Windup)**은 왜 발생하고(물리적 원인), 코드 레벨에서 어떻게 막을 수 있을까? 둘째, D항 계산 시 센서 노이즈가 증폭되는 문제를 1차 저역통과 필터(Low-Pass Filter: D_filtered = α·D_prev + (1−α)·D_new)를 D항에 적용해서 어떻게 완화할 수 있을까? 두 문제 모두 PID 이론 — 특히 I항의 누적 성질, D항의 고주파 증폭 성질 — 과 명확히 연결 지어 서술하여라.


마치며: 이 단계의 거대한 흐름

오늘 다룬 내용의 흐름을 다시 한번 따라가 보자. 우리는 '왜 피드백이 필요한가'라는 직관에서 출발해서, 미분방정식과 라플라스 변환으로 물리 시스템을 전달함수로 표현하는 법을 배웠어. 그 위에 PID 제어기를 올려서 오차를 자동 교정하는 법을 이해했고, 보드 선도로 안정성 여유를 정량화했어. 상태 공간 표현으로는 시스템 내부를 기술하는 더 강력한 프레임워크를 익혔고, 가제어성/가관측성이라는 근본적 질문을 배웠지. 마지막으로 이 모든 이론을 IMU · PWM · 모터 드라이버라는 실제 하드웨어와 연결하는 방법을 이해했어. 2단계에서 배울 칼만 필터는 가관측성의 자연스러운 확장이고, 역기구학은 비선형 상태 공간 문제가 되며, 궤적 계획은 가제어성이 보장된 시스템에서 최적 입력을 찾는 문제가 돼 — 모든 것은 연결되어 있어.

추천 참고 문헌: Gene Franklin, J. David Powell, Abbas Emami-Naeini — Feedback Control of Dynamic Systems (8판, Pearson, 2019): 전달함수/상태공간/PID 설계를 체계적으로 다루는 제어공학 바이블. Karl Åström & Richard Murray — Feedback Systems: An Introduction for Scientists and Engineers (Princeton University Press, 2020): 온라인 무료 제공, 현대적이고 직관적인 서술이 장점.

단계 2