로봇 제어 기초: 피드백 · PID · 적분 와인드업 · MPC
피드백 원리 · PID 세 항 · 정상 상태 오차 · 적분 와인드업 · MPC를 숫자로 익히는 제어 수업
먼저 알아야 할 것
다루는 내용
열린 고리와 닫힌 고리의 차이, P · I · D 항의 역할을 경사 위 카트 시뮬레이션으로 확인합니다. 디지털 PID 구현 코드와 튜닝 순서, 포화로 생기는 적분 와인드업과 안티 와인드업 효과를 비교합니다. 학습된 정책과 저수준 제어기의 계층 구조, MPC의 후퇴 지평 최적화를 2걸음 예로 계산합니다.
해설
로봇 제어 기초: 피드백 · PID · 적분 와인드업 · MPC
학습된 정책이 "여기로 가라"는 목표를 내면, 실제 모터를 그 목표까지 부드럽게 데려가는 것은 제어기 입니다. 이 수업은 되먹임(피드백) 제어의 원리, P · I · D 세 항이 각각 무엇을 고치는지, 디지털 구현과 튜닝, 모터 한계 때문에 생기는 적분 와인드업, 미래를 예측하며 최적화하는 MPC(모델 예측 제어)까지 작은 숫자로 직접 계산합니다.
| 항목 | 내용 |
|---|---|
| 참고 출처 | Karl J. Åström · Richard M. Murray, 『Feedback Systems: An Introduction for Scientists and Engineers』 10장 PID Control (FBSwiki 장 페이지) · Lynch · Park 『모던 로보틱스』 11장 · Rawlings · Mayne · Diehl 『Model Predictive Control』(2판, Nob Hill) |
| 트랙 · 수준 | 피지컬 AI · 기초 |
| 이 수업이 다루는 범위 | 열린 고리 · 닫힌 고리, P 제어와 정상 상태 오차, I 항, D 항(예측), 이산 구현, 튜닝 순서, 포화와 와인드업 · 안티 와인드업, 계층 제어, MPC의 후퇴 지평 최적화 |
들어가기 전에
- 로봇 기구학 첫 수업 (모던 로보틱스) — 6절의 PD 제어 를 이 수업이 넓혀 갑니다.
- 센서와 상태 추정: 칼만 필터 손계산과 SLAM 개요 — 제어기가 쓰는 "현재 상태"는 센서에서 추정한 값입니다.
한눈에 보기
- 열린 고리 제어가 외란에 왜 약한지, 닫힌 고리(피드백)가 어떻게 고치는지 압니다.
- P 제어만으로는 경사 같은 일정한 외란이 있으면 오차가 남는다는 것을 숫자로 확인하고, I 항이 그것을 없애는 원리를 이해합니다.
- D 항을 "오차가 곧 어떻게 될지 예측해 미리 브레이크를 거는 항"으로 읽습니다.
- 모터 출력 한계(포화)에서 적분이 쌓여 크게 지나치는 와인드업을 시뮬레이션 숫자로 보고, 안티 와인드업의 효과를 비교합니다.
- MPC가 "몇 걸음 앞까지 최적 계획을 세우고 첫 걸음만 실행"하는 방식임을 2걸음 예로 계산합니다.
1. 열린 고리와 닫힌 고리
직관(해설용 비유). 눈을 감고 "다섯 걸음 앞으로" 걸으면(열린 고리) 바닥이 미끄럽거나 경사가 있어도 고칠 방법이 없습니다. 눈을 뜨고 목표 지점을 보며 걸으면(닫힌 고리) 어긋난 만큼 계속 고칠 수 있습니다.
단계.
- 목표값 (reference)과 현재 측정값 의 차이인 오차 를 구합니다.
- 제어기가 오차로 명령 를 계산합니다.
- 명령이 로봇(플랜트)에 들어가 상태가 바뀌고, 센서가 다시 를 잽니다.
- 1로 돌아가 반복합니다.
왜 피드백인가. 로봇은 마찰 · 하중 · 경사 · 배터리 전압처럼 모델에 다 넣기 어려운 요인에 늘 흔들립니다. 피드백은 "원인을 몰라도 결과(오차)를 보고 고친다"는 점에서 강합니다. 대신 센서 잡음과 지연이 그대로 명령에 섞이므로, 이득을 너무 키우면 진동하거나 불안정해질 수 있습니다.
2. PID 제어: 세 항의 역할
Åström · Murray 10장은 기본 PID 제어기를 다음과 같이 씁니다.
| 기호 | 뜻 |
|---|---|
| 제어 신호(모터 명령) | |
| 오차: 목표 − 현재 | |
| 비례 이득 — 지금 오차만큼 민다 | |
| 적분 이득 — 지금까지 쌓인 오차만큼 더 민다 | |
| 미분 이득 — 오차가 줄어드는 속도만큼 미리 늦춘다 |
책의 장 요약이 짚는 요점은 이렇습니다. 적분 항은 정상 상태에서 출력이 목표와 일치하도록 보장하고, 미분 항은 오차 곡선의 접선으로 조금 앞의 오차를 내다보는 예측 처럼 작동합니다.
2-1. P만 쓰면 오차가 남는다
숫자로 해 보기(해설용). 속도 명령으로 움직이는 카트가 경사 때문에 늘 만큼 뒤로 밀린다고 합시다. 한 걸음( s)마다
목표 , P 제어 , 로 돌리면
- : , ,
- : , ,
- : , …
카트는 에서 멈춥니다(파이썬 시뮬레이션 300걸음으로 확인). 멈추려면 여야 하는데, P 제어는 이므로 의 오차가 반드시 남습니다. 이것이 정상 상태 오차(steady-state error)입니다. 를 키우면 오차는 줄지만 0이 되지는 않고, 너무 키우면 잡음 · 지연 때문에 진동합니다.
2-2. I 항이 오차를 지운다
같은 카트에 을 더하면(PI 제어) 남은 오차가 조금씩 적분에 쌓이고, 쌓인 만큼 명령이 커져 결국 를 정확히 상쇄합니다. 시뮬레이션에서 최종 위치는 입니다. 오차가 0인데도 명령이 로 유지되는 것은, 그 몫을 적분 항이 "기억"으로 들고 있기 때문입니다. 모던 로보틱스 수업에서 "중력처럼 늘 작용하는 힘이 있으면 PD만으로는 오차가 남아 PID를 쓴다"고 한 것이 바로 이 현상입니다.
2-3. D 항은 브레이크
D 항은 오차가 빠르게 줄고 있으면(즉 목표로 빠르게 다가가면) 음수가 되어 명령을 줄입니다. 그래서 목표를 지나치는 오버슈트와 진동을 줄입니다. 대신 미분은 측정 잡음을 크게 키우므로, 실제 구현에서는 미분 신호에 저역 통과 필터를 거는 것이 보통입니다(책 10.5절 구현 절이 다루는 변형 중 하나).
3. 디지털로 구현하기
로봇 제어기는 컴퓨터에서 일정 주기 로 돕니다. 적분은 합으로, 미분은 차분으로 바꿉니다.
# 해설용 최소 구현 (파이썬)
class PID:
def __init__(self, kp, ki, kd, dt, umax=None):
self.kp, self.ki, self.kd, self.dt, self.umax = kp, ki, kd, dt, umax
self.I, self.e_prev = 0.0, None
def step(self, r, y):
e = r - y
D = 0.0 if self.e_prev is None else (e - self.e_prev) / self.dt
I_new = self.I + e * self.dt
u = self.kp * e + self.ki * I_new + self.kd * D
if self.umax is not None and abs(u) > self.umax:
u = max(-self.umax, min(self.umax, u)) # 포화
# 안티 와인드업(클램핑): 포화 중에는 적분을 갱신하지 않음
else:
self.I = I_new
self.e_prev = e
return u튜닝 순서(실무 요령, 해설용). ① 에서 를 올려 빠르게 반응하되 심하게 진동하지 않는 지점을 찾습니다. ② 를 조금 더해 오버슈트를 줄입니다. ③ 남은 정상 상태 오차를 로 천천히 없앱니다. 책 10장은 실험으로 공정 특성을 재서 이득을 정하는 고전 규칙인 지글러-니콜스(Ziegler-Nichols) 튜닝도 소개합니다.
4. 포화와 적분 와인드업
직관. 모터에는 최대 출력이 있습니다. 목표가 멀어 명령이 한계에 걸려 있는 동안에도 오차는 계속 적분에 쌓입니다. 마침내 목표에 닿을 즈음엔 적분이 너무 커져서, 오차가 0이 된 뒤에도 한참 동안 세게 밀어 크게 지나칩니다. 책은 이를 "액추에이터가 포화되면 시스템이 사실상 열린 고리로 돌고, 쌓인 적분 오차를 없애려면 지나쳐야 한다"고 설명합니다.
숫자로 해 보기(해설용 시뮬레이션). 2절의 카트에서 목표를 , PI 이득 , , 명령 한계 로 둡니다(경사 이므로 최고 속도는 ).
| 방식 | 최대 위치 | 최종 위치 |
|---|---|---|
| 안티 와인드업 없음 | 약 9.51 (목표의 거의 2배) | 5.0 |
| 클램핑 안티 와인드업 | 약 5.02 | 5.0 |
(600걸음 파이썬 시뮬레이션 값.) 둘 다 결국 목표에 닿지만, 와인드업이 있으면 목표를 4.5 넘게 지나쳤다 돌아옵니다. 로봇 팔이라면 물체나 사람과 부딪힐 수 있는 거리입니다. 책이 소개하는 안티 와인드업은 "명령한 입력과 실제 입력의 차이를 적분기에 되먹이는" 방식이고, 위 코드의 클램핑(포화 중에는 적분 멈춤)은 같은 목적의 더 단순한 방법입니다.
5. 계층 제어: 학습된 정책과 PID의 관계
flowchart LR
O[카메라 · 관절 상태] --> POL[학습된 정책<br/>VLA · 확산 정책 · ACT]
POL -->|목표 관절각 · 손끝 자세| IK[역기구학 · 궤적 보간]
IK -->|관절 목표 r| PID[관절 PID · PD 제어기<br/>빠른 주기]
PID -->|토크 · 전류 u| M[모터]
M --> S[엔코더 · IMU]
S -->|측정 y| PID
S --> O학습된 로봇 정책은 대개 비교적 느린 주기로 "목표 관절 각도"나 "목표 손끝 자세"를 내고, 그 아래에서 모터 드라이버의 PID · PD 제어기가 더 빠른 주기로 목표를 따라갑니다. 정책이 조금 거칠게 목표를 바꿔도 아래층이 부드럽게 다듬어 주고, 반대로 아래층 이득이 잘못 맞춰져 있으면 정책이 아무리 좋아도 떨리거나 늦게 반응합니다. 그래서 같은 정책을 다른 로봇에 옮길 때 제어기 이득과 주기를 함께 확인해야 합니다.
6. MPC: 몇 걸음 앞을 내다보며 최적화
직관(해설용 비유). 체스에서 몇 수 앞을 읽고 가장 좋아 보이는 수순을 찾은 뒤, 첫 수만 두고 상대 수를 보면 다시 읽는 것과 같습니다. 이를 후퇴 지평(receding horizon) 방식이라 합니다.
단계.
- 현재 상태 에서 앞으로 걸음의 명령 을 정합니다.
- 모델로 미래 상태 을 예측하고, 비용을 최소화하는 명령열을 찾습니다(제약 등을 함께).
- 첫 명령 만 실행합니다.
- 다음 주기에 새 측정으로 1부터 다시 풉니다.
| 기호 | 뜻 |
|---|---|
| 내다보는 걸음 수(예측 지평) | |
| 상태가 목표(여기서는 0)에서 벗어난 데 대한 벌점 가중치 | |
| 명령을 크게 쓰는 데 대한 벌점 가중치 | |
| 로봇의 움직임 모델 | |
| 허용되는 명령 범위(모터 한계 등) |
(이 수업의 칼만 필터 기호 · 과 헷갈리지 않도록 아래 첨자를 붙였습니다.)
숫자로 해 보기(해설용). 1차원 , , , 이면 비용은
· 로 편미분해 0으로 두면 , 이고, 풀면 , , 입니다. 실행하는 것은 뿐이고, 다음 걸음()에서 다시 풉니다. 명령 한계 를 넣으면 최적해는 로 바뀝니다(격자 탐색으로 확인). PID는 이런 한계를 사후에 잘라 낼 뿐이지만, MPC는 한계를 알고 계획 한다는 점이 다릅니다.
왜 이렇게 하나 · 대가. MPC는 제약과 여러 목표를 자연스럽게 다루고 미래를 내다보지만, 매 주기 최적화 문제를 풀어야 해 계산이 무겁고, 모델 가 틀리면 계획도 틀립니다. 이 "모델로 앞을 내다보고 계획한다"는 생각은 강화학습의 모델 기반 방법 · 월드 모델(DreamerV3)과도 이어집니다.
연습 문제
- 2-1절 카트에서 로 올리면 정상 상태 오차는?
- 풀이: 입니다. 줄지만 0은 아닙니다.
- 2-1절 카트에 경사가 없다면() P 제어만으로 오차가 남나요?
- 풀이: 남지 않습니다. 멈추는 조건이 , 즉 이기 때문입니다. 정상 상태 오차는 일정한 외란(또는 모델 특성) 때문에 생깁니다.
- 3절 코드에서 , , , , 첫 오차가 이면 첫 명령은?
- 풀이: , 입니다.
- 6절 예에서 (한 걸음만 내다봄)이면 최적 는?
- 풀이: , 미분하면 → 입니다. 지평이 짧으면 덜 과감하게 움직입니다.
스스로 점검
- I 항이 없으면 왜 경사에서 목표 앞에 멈추나요?
- 답: 멈추려면 명령이 외란과 같아야 하는데, P 제어의 명령은 오차에 비례하므로 0이 아닌 오차가 있어야만 그 명령이 나오기 때문입니다.
- 적분 와인드업은 언제 생기고 어떻게 막나요?
- 답: 명령이 모터 한계에 걸려 있는 동안 적분이 계속 쌓일 때 생깁니다. 포화 중에는 적분을 멈추거나(클램핑), 명령과 실제 입력의 차이를 적분기에 되먹여 막습니다.
- MPC가 첫 명령만 실행하고 다시 푸는 이유는?
- 답: 모델 오차와 외란 때문에 실제 상태가 예측과 달라지므로, 매번 새 측정에서 다시 계획해야 피드백 효과를 얻기 때문입니다.
용어 정리
| 용어 | 쉬운 뜻 |
|---|---|
| 열린 고리 · 닫힌 고리 | 결과를 보지 않고 명령 / 결과(오차)를 보며 계속 고치는 제어 |
| 플랜트(plant) | 제어 대상(로봇 · 모터) |
| 오차(error) | 목표값 − 현재값 |
| PID | 비례 · 적분 · 미분 세 항으로 명령을 정하는 제어기 |
| 정상 상태 오차 | 충분히 시간이 지나도 남는 오차 |
| 오버슈트(overshoot) | 목표를 지나쳤다 돌아오는 것 |
| 포화(saturation) | 명령이 모터의 최대 출력에 걸려 잘리는 것 |
| 적분 와인드업 | 포화 중 적분이 쌓여 큰 오버슈트를 만드는 현상 |
| 안티 와인드업 | 와인드업을 막는 방법(클램핑, 역계산 되먹임 등) |
| 지글러-니콜스 튜닝 | 실험으로 잰 공정 특성으로 PID 이득을 정하는 고전 규칙 |
| 계층 제어 | 느린 상위 정책과 빠른 하위 제어기를 층으로 나눈 구조 |
| MPC(모델 예측 제어) | 모델로 몇 걸음 앞을 최적화하고 첫 명령만 실행하길 반복하는 제어 |
| 후퇴 지평 | 계획 구간을 매 주기 한 걸음씩 앞으로 밀며 다시 푸는 방식 |
더 깊이 보려면
- Åström · Murray 『Feedback Systems』 10장 — PID 기본, 지글러-니콜스 튜닝, 적분 와인드업, 구현(미분 필터 · 설정점 가중)
- 『모던 로보틱스』 11장 — 관절 하나의 운동 제어에서 계산 토크 제어 · 힘 제어까지
- Rawlings · Mayne · Diehl 『Model Predictive Control: Theory, Computation, and Design』 2판 — MPC 이론과 계산
- 학습한 모델로 계획하기 (MuZero) — 학습된 모델로 앞을 내다보는 계획의 강화학습판
다음에 볼 것
- Hugging Face LeRobot: 로봇 학습 오픈소스 — 이 제어기 위에서 돌아가는 모방 학습 정책
- 도메인 무작위화: 시뮬레이션에서 실제로 옮기기 — 마찰 · 질량처럼 제어 성능을 바꾸는 물리 값을 시뮬레이션에서 일부러 흔드는 방법
라이선스
본문은 KAITABASE 자체 해설입니다. 참고 교재 『Feedback Systems』(Princeton University Press)의 장 페이지는 저자들의 FBSwiki에 공개되어 있으며, 본문 문장은 옮기지 않고 개념만 참고했습니다. 카트 · 경사 · MPC 숫자와 PID 코드는 이 수업을 위해 만든 해설용 예이며, 시뮬레이션 값은 파이썬으로 계산했습니다.
출처
- Karl J. Åström · Richard M. Murray, Feedback Systems, Chapter 10 PID Control (FBSwiki): cds.caltech.edu/~murray/amwiki/PID_Contro…
- Kevin M. Lynch · Frank C. Park, Modern Robotics (2017), Chapter 11 Robot Control: hades.mech.northwestern.edu/index.php/Mod…
- James B. Rawlings · David Q. Mayne · Moritz M. Diehl, Model Predictive Control: Theory, Computation, and Design, 2nd ed., Nob Hill Publishing
AI 원리부터 이해하기 · 피지컬 AI 모듈
피지컬 AI 모듈 학습
이 글은 피지컬 AI 모듈의 학습 자료입니다. 전체 26개 자료 중 3번째입니다.
출처·원문
원문 보기요약만