눈으로 본 PID 제어

유진·2026년 6월 6일

Robotics

목록 보기
9/11
post-thumbnail

얼마 전 동료가 로봇 모션을 개발하던 중, 게인을 튜닝하는 걸 옆에서 봤다.

실시간으로 모션을 보정하는 작업이라,
값 하나 바꿀 때마다 동작이 어떻게 달라지는지가 눈에 잘 들어왔다.

P를 올리니 로봇이 빨라졌다.
대신 목표를 넘어갔다 돌아오는 오버슛이 생겼다.
D를 올리니 이번엔 비틀대는 듯 떨렸다.

D는 흔들림을 잡아주는 항인 줄 알았는데, 오히려 떨리니까 좀 의아했다.

최근 학부 때 배웠던 PID 게인에 대해 순간 명확한 답변을 못했던..
그런 아주 슬프고, 아프고, 안타깝고, 아쉽고, 통탄할 일이 있었던 만큼,
이번에 PID 세 항이 각각 뭘 하는지 다시 정리해봤다.

PID가 하는 일

PID 출력은 이렇게 생겼다.

u(t)=Kpe(t)+Ki0te(τ)dτ+Kdde(t)dtu(t) = K_p\, e(t) + K_i \int_0^t e(\tau)\,d\tau + K_d \frac{de(t)}{dt}

세 항은 이름 그대로 오차를 서로 다르게 본다.

P(비례)는 지금의 오차,
I(적분)는 쌓인 오차,
D(미분)는 오차가 변하는 속도에 반응한다고 보면 된다.

P: 키울수록 빨라진다

P는 목표에서 멀수록 세게 민다.

게인을 키우면 응답이 빨라진다.
대신 세게 미는 만큼 관성으로 목표를 지나쳐, 오버슛이 생긴다.

그런데 P만으로는 목표에 딱 멈추지 못하기도 한다.

중력이나 마찰 같은 부하가 있으면,
오차가 줄면서 미는 힘도 같이 줄어 살짝 못 미친 채로 멈춘다.

이때 남는 오차를 정상상태 오차라고 한다.

I: 남은 오차를 메운다

I는 그 정상상태 오차를 해결하는 항이다.

오차를 계속 누적해서,
조금이라도 남아 있으면 출력을 점점 키워 결국 목표에 도달시킨다.

I는 오차를 없애주는 만능 항처럼 느껴지지만, 과하게 주면 얘기가 달라진다.

누적된 출력이 목표를 지나치게 밀어붙여,
오히려 오버슛과 진동을 키운다.

D: 그래서 왜 떨렸나

D는 오차가 변하는 속도에 반응한다.

빠르게 돌진하면 미리 브레이크를 걸어 오버슛을 줄인다.
일종의 댐핑이라고 보면 된다.

서론의 떨림이 여기서 풀린다.
D는 적당히 올리면 떨림을 잡는다.

그런데 과하게 올리면 오히려 떨린다.
D 자체가 떨림을 만든다기보단, 미분이라 센서에 섞인 작은 노이즈까지 같이 증폭하기 때문이다.

그래서 실무에선 D를 무작정 키우지 않거나 필터를 함께 쓴다.

그날 본 떨림도 D가 원래 떨린다기보다
노이즈가 많은 환경에서 D를 그만큼 올려서 생긴 것에 가깝다.

실제 환경이 어땠는진 정확히 모르지만,
센서 노이즈나 제어 주기 탓에 D가 예민하게 반응했던 것 같다.

제어 주기에 따라 명령이 띄엄띄엄 갱신되게 되는데 그때 미분이 더 촘촘하게 돌면,
그 갱신 순간의 점프를 D가 크게 잡아채 주기적으로 튀기 쉽다고 한다.

마무리

  • P: 빠르게 만들지만 과하면 오버슛.
  • I: 남은 오차를 메우지만 과하면 오히려 오버슛과 진동.
  • D: 떨림을 잡지만 과하면 노이즈를 키워 오히려 떨린다.

게인 튜닝이 감으로만 하는 일 같아도 각 항의 성격을 알면 어디를 만져야 할지가 보인다.

물론 알고 있던 내용인데, 순간 대답을 못했던 경험이 있어서 마침 눈으로 확인한 김에 PID가 뭔지 환기시키게 됐다.

아무튼 요즘 정신이 없어서 소홀했는데 이것저것 기본기를 정리해봐야겠다.

0개의 댓글