모터 1개의 P / PD 제어
Locomotion 제어 stack의 가장 아래에서부터
강의 개요
4족 보행 로봇의 제어 stack을 가장 아래에서부터 쌓아올리는 시리즈의 첫 강의입니다. 복잡한 강화학습 기반 controller(DreamWaQ 등)도 결국 출력단에서는 각 관절 모터의 PD 제어로 떨어지기 때문에, single-joint PD 제어를 직관적으로 이해하는 것이 모든 lecture의 출발점이 됩니다.
이번 강의의 목표는 다음 세 가지입니다.
- 1자유도(1-DoF) 회전 모터의 동역학을 식 한 줄로 이해
- P 제어의 한계(진동, 응답 속도와 감쇠의 trade-off)를 직접 보고 체감
- PD 제어가 왜 자연스럽게 진동을 잡아주는지 직관과 식으로 연결
1. 모터 동역학 모델
회전 관성 J, 점성 마찰 b를 가지는 1자유도 회전 모터에 토크 \tau가 가해지는 경우, 운동방정식은 다음과 같습니다.
J\ddot{\theta} + b\dot{\theta} = \tau
여기서 \theta는 모터 각도, \dot{\theta}는 각속도, \ddot{\theta}는 각가속도, \tau는 입력 토크입니다.
이 식을 한 줄로 읽으면 “입력 토크에서 마찰로 빠져나가는 만큼이 가속도에 기여한다”는 뜻입니다. 회전판을 밀 때 손에 가해지는 힘에서, 공기/베어링이 빨아먹는 마찰을 빼면, 그게 회전판이 “더 빨라지는 양”이 된다는 일상적인 직관과 같습니다.
본 시뮬레이터에서는 J = 0.1 kg·m², b = 0.1 N·m·s/rad, 토크 포화 \tau_\text{max} = 10 N·m을 사용하며, 수치 적분은 200 Hz에서 semi-implicit Euler로 수행됩니다.
2. P 제어 (proportional control)
가장 단순한 위치 제어기는 “오차에 비례한 토크를 가하라”는 규칙입니다.
\tau = K_p \, (\theta_d - \theta) = K_p \, e
물리적으로는 목표 각도에 가상의 스프링이 달린 것과 동일합니다. 스프링 상수가 K_p, 늘어난 길이가 오차 e입니다.
P 제어의 거동은 2차계 분석으로 깔끔하게 나옵니다. 위 운동방정식에 대입하면
J\ddot{\theta} + b\dot{\theta} + K_p\,\theta = K_p\,\theta_d
이는 표준적인 mass-spring-damper 시스템과 같은 꼴이고, 자연 진동수와 감쇠비는 다음과 같습니다.
\omega_n = \sqrt{K_p / J}, \qquad \zeta = \frac{b}{2\sqrt{K_p J}}
여기서 핵심 관찰은 K_p를 키울수록 \zeta는 작아진다는 것입니다. 즉, P 제어만으로는 빠른 응답과 부드러운 정착을 동시에 얻을 수 없습니다. 실제 모터 자체의 마찰 b만으로 진동을 잡으려면 K_p를 충분히 작게 써야 하고, 그러면 응답이 느려집니다.
이게 “P 제어만으로는 부족하다”는 말의 정확한 의미입니다.
3. PD 제어 (proportional-derivative control)
P 제어에 속도에 비례한 감쇠 항을 더한 것이 PD 제어입니다.
\tau = K_p \, (\theta_d - \theta) + K_d \, (\dot{\theta}_d - \dot{\theta})
목표 속도 \dot{\theta}_d = 0을 가정하면
\tau = K_p \, e - K_d \, \dot{\theta}
이 형태로 쓰는 이유는 derivative kick 때문입니다. 오차의 미분 \dot{e}에 직접 K_d를 곱하면 목표가 갑자기 바뀔 때 미분값이 폭발해서 토크가 spike 칩니다. 대신 측정값의 미분 \dot{\theta}만 쓰면, 목표 변화에는 미분 항이 반응하지 않고 오직 실제 모터의 움직임에만 감쇠가 걸립니다.
이걸 운동방정식에 대입하면
J\ddot{\theta} + (b + K_d)\dot{\theta} + K_p\,\theta = K_p\,\theta_d
이제 감쇠비가 다음과 같이 바뀝니다.
\zeta = \frac{b + K_d}{2\sqrt{K_p J}}
K_d가 등장하면서, K_p를 키워 응답을 빠르게 하면서도 K_d로 감쇠를 따로 조절할 수 있게 됩니다. 이게 P 제어 → PD 제어로 넘어오는 가장 큰 이득입니다.
직관적으로 PD 제어는 다음 두 개가 동시에 모터에 붙어있는 것과 같습니다.
- 목표 위치를 향해 당기는 스프링 (K_p)
- 모터의 움직임 자체를 늦추는 댐퍼 (K_d)
자동차 서스펜션, 문 닫힘 방지 장치, 산업용 로봇 관절 — 모두 이 둘의 균형을 맞추는 일입니다.
4. 인터랙티브 시뮬레이터
직접 K_p, K_d, 목표 각도를 조정하면서 응답을 관찰해보세요. P / PD 모드 토글로 같은 K_p에서 미분 항이 있을 때와 없을 때의 차이를 즉시 비교할 수 있습니다.
목표 θ_d
90.0°
현재 θ
0.0°
오차 e
90.0°
제어 입력 τ
0.00 Nm
5. 학습 체크포인트 (실험 가이드)
위 시뮬레이터로 다음 시나리오를 직접 돌려보면 PD 제어의 핵심을 모두 체감할 수 있습니다.
시나리오 1 — P 제어의 한계
P 모드에서 K_p를 1 → 4 → 8로 올려가며 +90° 스텝 응답을 관찰합니다. K_p가 커질수록 응답은 빨라지지만 진동(overshoot, oscillation)이 점점 심해지는 모습을 볼 수 있습니다. 이론적으로 감쇠비 \zeta = b / (2\sqrt{K_p J})가 K_p에 반비례하기 때문입니다.
시나리오 2 — PD 제어로 진동 잡기
PD 모드로 전환하고 K_p = 8을 유지한 채 K_d를 0 → 0.5 → 1.5로 올려봅니다. 같은 K_p에서도 미분 항이 커지면서 진동이 점진적으로 사라지는 것을 확인할 수 있습니다.
시나리오 3 — 임계 감쇠 직관
K_p = 4로 고정. PD 모드에서 K_d를 천천히 올려가며 오버슈트가 거의 사라지는 지점을 찾아봅니다. 이론적 임계 감쇠 조건은 K_d + b \approx 2\sqrt{K_p J}이고, K_p = 4, J = 0.1일 때 K_d \approx 0.7 부근입니다. 실제로 슬라이더로 확인하면 0.6~0.8 사이에서 응답이 가장 깔끔합니다.
시나리오 4 — 과감쇠
K_p = 1, K_d = 2로 설정. 응답이 매우 느리지만 오버슈트가 전혀 없는 모습이 관찰됩니다. 빠른 추적 vs 안정성의 trade-off를 직관적으로 보여주는 케이스입니다.
시나리오 5 — 토크 포화
K_p = 10, 목표를 -90°로 큰 스텝 입력. 초기 토크가 \tau_\text{max} = 10 N·m에서 saturate되며 거의 bang-bang 제어처럼 동작합니다. 선형 PD 제어의 가정이 깨지는 영역으로, 실제 모터 제어에서 항상 고려해야 하는 비선형성입니다.
6. 다음 강의 예고
이번 강의의 모터 모델은 외력이 없는 순수 회전체였습니다. 다음 강의에서 단계적으로 확장합니다.
- #02 — 중력이 있는 진자에서의 PD 제어. 부하가 달린 1-DoF 진자에서 PD만으로는 steady-state 오차가 남는 현상을 확인하고, 적분 항(I)의 필요성을 도입합니다.
- #03 — 다관절(2-DoF) PD 제어. 다리 한쪽(hip + knee)을 모델링해서, joint-space PD 제어가 task-space에서 어떻게 보이는지 살펴봅니다. impedance control로 가는 bridge입니다.
- #04 — RL 정책의 출력단으로서의 PD 제어. DreamWaQ 등 RL-based locomotion controller의 actor 출력이 결국 어떻게 low-level PD controller로 흘러들어가는지 시뮬레이터로 풀어봅니다.
참고
본 시뮬레이터의 물리 모델은 교육용으로 단순화되어 있으며, 실제 모터의 정지 마찰(stiction), backlash, 전류 다이내믹스 등은 포함되어 있지 않습니다.
DreamWaQ 원논문 — Nahrendra et al., “DreamWaQ: Learning Robust Quadrupedal Locomotion With Implicit Terrain Imagination via Deep Reinforcement Learning,” ICRA 2023.