Contents — find the section you need

PID(비례-적분-미분) 제어는 기준값과 측정값을 비교하여 입력값을 변경합니다. 히터, 드라이브, 유체 흐름 제어 시스템, 로봇 관절, 항공기 등 다양한 분야에서 사용되는데, 이는 완벽한 시스템 모델 없이도 효과적으로 작동할 수 있기 때문입니다. 하지만 겉보기에는 단순해 보이는 PID 제어 방식은 함정이 있습니다. 단위, 출력 제한, 타이밍 정책, 센서 검증, 안전 정지 경로 등이 명시되지 않은 제어기는 실제 시스템에 적용하기 어렵습니다. 이는 언제든 실패할 수 있는 방정식과 같습니다.

이 글에서는 실용적인 결론을 제시한 후, 직관적인 이해, 신호 흐름 및 방정식, 지글러-니콜스 튜닝, 제약 조건 및 안전성, 그리고 최신 소프트웨어 예제를 살펴봅니다. 로봇 제어기의 노드, 타이밍, 하드웨어 제약 조건에 대해서는 ROS 2 입문을, 위치 지연 및 점프 현상이 제어 문제로 작용하는 이유에 대해서는 Visual SLAM 입문을 참조하십시오.

PID 입력은 오차 e=r-y이고 출력은 명령 u입니다. P는 현재 오차에 반응하고, I는 지속적인 오프셋을 제거하며, D는 변화율에 따른 감쇠를 제공합니다.

간략한 결론

  • P는 현재 오차에 반응하고, I는 지속적인 오차를 제거하며, D는 변화율에 따른 감쇠를 제공합니다. P부터 시작하여 한계를 설정하고, 안정적인 오프셋이 남아 있을 때만 I를 추가하고, 명확한 목적이 있을 때만 필터링된 D를 추가합니다.

  • 구현 시 명령과 명령 변화율 모두에 제한을 두어야 합니다. 안티와인드업이 없는 포화 현상은 적분기가 액추에이터가 처리할 수 없는 요구량을 저장하게 만듭니다.

  • 대부분의 물리 시스템에서는 계단형 기준 오차를 미분하는 대신 필터링된 측정값을 미분하는 것이 좋습니다. 이렇게 하면 미분으로 인한 급격한 변화를 방지하고 기준 오차 변화에 대한 민감도를 줄일 수 있습니다.

  • PID는 지연 시간이 적은 단일 고속 루프에 가장 적합한 솔루션인 경우가 많습니다. 고급 최적화 기법을 사용하더라도 빠르고 관측 가능하며 안전한 내부 루프의 필요성은 사라지지 않습니다.

직관적 이해: 세 명의 제어자가 하나의 오류를 감시하는 상황

실내 온도가 기준 온도보다 낮다고 가정해 봅시다. P 제어자는 "현재 온도가 5도 낮으니 지금 열을 가해야 한다"고 판단합니다. I 제어자는 "온도가 오랫동안 낮은 상태를 유지하고 있으므로 기준 열량이 부족하다"고 판단합니다. D 제어자는 "온도가 이미 급격히 상승하고 있으니 오버슈트되기 전에 열을 줄여야 한다"고 판단합니다. 이 세 제어자의 판단을 합치면 빠른 응답, 지속적인 열 손실 방지, 그리고 오버슈트 감소를 얻을 수 있습니다.

하지만 이 비유는 제어 루프의 안전성을 결정하는 중요한 요소들을 간과하고 있습니다. 히터의 출력은 유한하고, 온도계는 노이즈가 있으며, 열이 전달되는 데는 시간이 걸립니다. 미분항은 노이즈를 움직임으로 오인할 수 있고, 적분항은 히터가 이미 포화 상태임에도 불구하고 계속해서 열을 누적할 수 있습니다. 따라서 PID 제어 설계는 게인 값이 아니라 측정된 값과 안전하게 제어할 수 있는 값을 기반으로 시작해야 합니다.

신호 흐름: 컨트롤러는 하나의 블록으로 구성됩니다

Diagram 1 · Use the button to switch views
PID closed-loop signal flowReference, summing junction, PID, saturation, plant, sensor feedback and disturbance are connected in a closed loop.reference rΣPIDP + I + Dlimitssaturationplant Gmotor / thermal / robotsensor H, sampling, delay and noise are part of feedbackdisturbance d

다이어그램: Duskcoil, 측정된 배선도가 아닌 개념도입니다. 교정, 전송 지연, 통신 및 액추에이터 내부 루프는 실제 신호 경로에 속합니다.

플랜트가 G이고 센서 또는 추정기가 H인 경우, 컨트롤러 C의 기능만 향상시킨다고 해서 지연, 포화 또는 오류가 제거되는 것은 아닙니다. 예를 들어, 이동 로봇이 SLAM 위치추적을 사용하여 추적할 때, 추정값의 급격한 변화와 지연은 PID 제어기에 측정 잡음 및 외란으로 인식됩니다. Visual SLAM Primer에서 논의된 좌표계, 시간 동기화 및 재위치추적은 제어기 주변의 제어 문제에 포함됩니다.

기본 방정식 및 단위

기준값을 r, 측정값을 y, 피드포워드 명령을 e=r-y 및 u_{ff}이라고 할 때, 병렬 연속 PID 제어기는 다음과 같습니다.

u(t)=u_{ff}(t)+K_Pe(t)+K_I\int_0^t e(\tau)d\tau+K_D\frac{d e(t)}{dt}

K_P의 단위는 u/e이고, K_I의 단위는 u/(e\cdot s)입니다. 그리고 K_D은 u\cdot s/e의 단위를 갖습니다. 이들은 본질적으로 무차원이 아닙니다. 도를 라디안으로 변환하거나, 엔코더를 반전시키거나, 밀리초 타임스탬프와 초 기반 게인을 혼합하면 루프가 변경됩니다. 튜닝하기 전에 단위, 부호, 프레임 및 참조 업데이트 정책을 기록하십시오.

샘플 주기 T_s를 사용하면 기본적인 이산 구현은 적분 상태 I_k과 차분 미분 D_k을 유지합니다.

I_k=I_{k-1}+T_s e_k,\qquad D_k=\frac{e_k-e_{k-1}}{T_s}

그런 다음 컨트롤러는 u_k=K_Pe_k+K_II_k+K_DD_k을 계산합니다. 이 형식은 이미 다음과 같은 중요한 엔지니어링 질문을 드러냅니다. T_s은 측정되는 값입니까, 아니면 가정되는 값입니까? 메시지가 지연되면 어떻게 됩니까? 오래된 샘플은 어떻게 처리됩니까? 그리고 컨트롤러는 결정론적 속도로 작동합니까? 측정에 대한 일반적인 필터링된 미분은 다음을 사용합니다.

계수 \alpha=\tau_f/(\tau_f+T_s) 및

D_k=\alpha D_{k-1}+(1-\alpha)\frac{y_{k-1}-y_k}{T_s}

기준 스텝으로 인한 미분 킥을 방지합니다. 또한 필터에 위상 지연이 추가되므로 필터링으로는 샘플링 불량이나 기계적 결함이 있는 시스템을 보상할 수 없습니다.

P, I, D를 하나씩 이해하기

P를 증가시키면 일반적으로 즉각적인 응답과 외란 제거 성능이 향상되지만, 지연 및 플랜트 동역학으로 인해 오버슈트 또는 진동이 발생할 수 있습니다. I는 중력, 마찰 또는 열 손실과 같은 상수 오프셋을 제거하지만, I가 너무 크면 플랜트가 응답하기 전에 수요가 적분됩니다. D는 감쇠를 제공할 수 있지만 엔코더 양자화, 진동 및 추정기 지터를 증폭시킵니다. 위치-속도 캐스케이드에서는 빠르고 안정적인 속도 루프를 먼저 조정한 다음 위치 루프를 조정합니다. 모든 오류를 하나의 느린 PID에 집중시키지 마십시오.

포화 및 안티와인드업

물리적 명령은 u_{min}\leq u\leq u_{max}을 따릅니다. u^*을 계산된 포화되지 않은 명령이라고 하고 u=\operatorname{sat}(u^*)는 전송된 명령입니다. 액추에이터가 한계값에 고정된 상태에서 계속 누적되면 오류가 반전된 후에도 루프가 고정된 상태로 유지될 수 있습니다. 이것이 적분기 와인드업 현상입니다. 적분기는 u이 이를 따라가지 못하더라도 e을 계속 누적하고, 이후의 적분 상태 I_k로 인해 복구가 지연됩니다.

조건부 적분은 출력이 포화되어 적분이 포화 상태로 더 진행될 경우 적분기를 정지시킵니다. 역계산은 더 부드러운 대안입니다.

I_k=I_{k-1}+T_se_k+K_{aw}(u_k-u_k^*)

여기서 I_k는 적분된 오류 상태이므로 K_{aw}는 명령당 오류 단위를 가집니다. 일부 구현에서는 K_I I_k을 적분 출력으로 저장하고 1/T_t(추적 시간의 역수)을 대신 사용합니다. 선택한 단위와 방정식을 문서화해야 합니다. 포화 불일치는 적분기로 피드백됩니다. K_{aw}은 해당 보정 속도를 설정합니다. 적분기 클램프, 기준 램프 및 범프리스 수동/자동 전환은 보완적인 조치입니다. 안티와인드업은 성능 향상을 위한 것이 아니라, 불가피한 한계 이후의 복구를 예측 가능하게 해줍니다.

증상 예상 원인 먼저 점검 일반적인 응답
느린 응답 또는 오프셋 P가 너무 낮음, 지속적인 외란 부호, 단위, 출력 한계 P를 점진적으로 높이고 필요한 경우 약간의 I를 추가
진동 또는 오버슈트 P/I가 너무 높음, 지연 루프 주기, 지연, 센서 트레이스 P/I를 낮추고 기준 램프 사용
한계에서 복구되지 않음 적분기 와인드업 명령 및 적분 로그 조건부 I, 클램프, 역산
설정값 단계에서의 킥 오차의 미분 D 입력 경로 측정값의 미분
저속에서의 채터링 마찰 양자화, 백래시 엔코더 및 메커니즘 내부 속도 루프, 보상, 필터

튜닝(지글러-니콜스 포함)

폐루프 지글러-니콜스 절차는 I와 D를 0으로 설정하고, P를 지속 진동 이득 K_u까지 올린 다음, 주기 T_u를 측정하고, 고전적인 PID 시작점을 사용합니다.

K_P=0.6K_u,\quad T_i=0.5T_u,\quad T_d=0.125T_u,

여기서 K_I=K_P/T_i 및 K_D=K_PT_d입니다. 열처리 공정, 차량, 압력 시스템 또는 사람 근처의 로봇과 같은 환경에서는 의도적으로 지속 진동에 근접하는 것은 허용되지 않을 수 있습니다. 이는 안정성 경계에서 테스트할 수 있는 권한이 아니라 과거의 경험적 방법일 뿐입니다.

더 안전한 워크플로는 시뮬레이션 또는 저진폭 스텝 테스트를 사용하여 정적 이득, 지연 및 시정수를 추정하고, 먼저 제한 및 정지 로직을 활성화하고, P를 튜닝하고, 관찰된 오프셋을 해결하기 위해 I만 추가하고, 마지막으로 필터링된 값을 추가합니다. D는 측정된 감쇠 요구 사항을 해결하기 위한 용도로만 사용하십시오. 기준값 추적 및 외란 제거는 별도로 테스트하십시오. 모든 변화에 대해 피크 전류, 온도, 속도, 정지 거리, 포화 시간 및 적분 상태를 기록하십시오.

제약 조건 및 안전은 PID 방정식 외부에 존재해야 합니다.

PID 출력을 안전 기능으로 사용하지 마십시오. 독립적인 비상 정지, 과전류/과열/과압 보호, 이동 제한, 워치독, 그리고 데이터 또는 통신이 끊어졌을 때 정의된 안전 명령을 사용하십시오. 컨트롤러는 기준값에 도달하려고 시도하는 반면, 안전 기능은 컨트롤러 고장을 포함한 오류 상황에서 안전하지 않은 상태로 진입하는 것을 방지합니다.

최소한 샘플 범위, 타임스탬프 및 데이터의 최신성을 검증하고, 기준값, 가속도, 출력 및 출력 슬루를 제한하고, 적분기의 리셋/홀드 동작을 명시하고, 범프 없이 수동 인계 테스트를 수행하고, 센서 손실, 지연된 샘플, 프로세서 재시작 및 부하 변화를 주입하십시오. ROS 2가 작동 중이라는 사실만으로는 결정론적 타이밍이나 기능 안전성을 보장할 수 없습니다.

현재 구현 및 연구 사례

ros2_control 이 프레임워크는 하드웨어 인터페이스, 컨트롤러 관리 및 컨트롤러를 분리하고 컨트롤러 체이닝과 PID 컨트롤러를 문서화합니다. 공식 문서(https://control.ros.org/master/doc/ros2_control/doc/index.html)와 PID 컨트롤러 페이지(https://control.ros.org/jazzy/doc/ros2_controllers/pid_controller/doc/userdoc.html)에서는 게인, 클램프, 안티와인드업 옵션, 기준값, 측정 상태 및 공개된 컨트롤러 상태를 제공합니다. 이를 통해 인터페이스와 상태를 관찰할 수 있지만, 물리적 로봇을 자동으로 튜닝하지는 않습니다.

산업용 컨트롤러도 동일한 문제를 안고 있습니다. Siemens는 SIMATIC S7-1200/S7-1500 PLC용 PID 기능을 S7-1200 시스템 매뉴얼(https://cache.industry.siemens.com/dl/files/829/109814829/att_1120874/v1/s71200_system_manual_en-US_en-US.pdf)에 문서화했습니다. 연구를 통해 마찰 및 지연 적응, 데이터 기반 튜닝, 학습된 고수준 기준값 생성 등을 통해 PID를 확장하는 동시에, 더 안전한 아키텍처를 위해 검사 가능한 작은 저수준 루프를 유지하고 있습니다.

구현 체크리스트

  1. 제어 변수, 명령, 단위, 양의 방향, 유효 범위 등을 정의합니다. 루프 속도.

  2. 제어 계산 전에 교정, 타임스탬프, 데이터의 최신성 및 이상치를 검증합니다.

  3. u 및 해당 슬루율을 제한하고, 독립적인 비상 정지, 워치독 및 통신 손실 동작을 테스트합니다.

  4. P-only, PI, PID 제어를 튜닝하고 로깅하며, 명령과 외란을 별도로 테스트합니다.

  5. 기준값, 측정값, 실제 명령값, 포화 명령값, 적분 상태 및 오류 플래그를 하나의 클록에 로깅합니다.

  6. 지터, 부하 변화, 재시작, 센서 손실 및 액추에이터 포화를 의도적으로 테스트합니다.

  7. ROS 2 입문서를 통해 ROS 2 토폴로지를, Visual SLAM 입문서를 통해 추정기 타이밍을 교차 검증합니다.

이해도 확인

<세부 정보>

출력이 포화된 상태에서 적분이 계속되면 어떻게 될까요?

저장된 적분 동작으로 인해 나중에 오버슈트가 발생할 수 있습니다. 적분 게인만 조정하는 대신 안티와인드업 동작을 확인하십시오.

참고 자료

Related reading

Explore another aspect of this fieldMPC 연구실 — 예측 범위와 조향 한계 내에서 곡률 수열을 다시 풀다Explore another aspect of this field경로 추종 비교 연구실 — 동일한 조건에서 PP, APP, RPP, Stanley, MPC 실행하기Explore another aspect of this fieldPure Pursuit 연구실 — 고정 선행거리 경로 추종 비교