Contents — find the section you need

Change parameters and verify

Open the panel, then press Run to load Python. You can stop execution and reset parameters. Results are computed on this device. No Python installation is required.

Local execution steps below are optional for reproducing the source results; they are not required for the browser experiment.

The experiment controls are in English.

Open experiment panel in a new tab

Download reproduction source

작고 실행 가능한 모델을 사용하면 PID 게인 변화와 액추에이터 포화 현상을 더 쉽게 검사할 수 있습니다. 이 결과는 2026년 9월 7일에 Python 3.12.3을 사용하여 계산되었습니다. 이는 수치 시뮬레이션 결과이며, 측정값이나 식별된 모터 모델이 아닙니다.

모델 및 조건

플랜트는 \ddot y+2\dot y+y=u입니다. 출력 y과 제어 u는 정규화되었으며, 시간은 초 단위입니다. 초기 출력, 속도 및 적분값은 0입니다. 목표값은 0초부터 1이고, 6초부터는 0.4입니다. 0~12초 구간에서 스텝은 0.005초이며, 각 경우당 2,401개의 샘플을 얻습니다.

컨트롤러는 u=K_pe+K_iI-K_d\dot y_m이며, e=r-y_m를 사용합니다. 여기서 y_m는 측정된 출력입니다. 미분값은 목표값이 아닌 측정된 출력에 작용합니다. 기준 이득은 K_p=3, K_i=2, K_d=1입니다. 적분과 미분은 시간 단계를 명시적으로 사용하며, 시스템은 반암시적 오일러 적분을 사용합니다. 원리에 대해서는 PID 기본 사항을 참조하십시오.

코드 실행

pid_lab.py 파일을 빈 작업 디렉토리에 저장하고 다음 코드를 실행하십시오. 이 코드는 Python 표준 라이브러리만 필요하며, 동일한 이름의 결과 파일을 덮어씁니다.

python3 --version
python3 pid_lab.py

실행 결과는 CSV 파일과 요약 JSON 파일입니다. 그림을 다시 생성하려면 같은 디렉토리에 plot_pid.py 파일을 저장하고 실행하십시오. 그래프는 matplotlib 3.6.3을 사용하여 확인했습니다. CSV 파일의 열은 시나리오, 시간, 목표값, 출력, 제어값, 적분값입니다.

지연 및 포화 비교

Diagram 1 · Use the button to switch views
0.4초 측정 지연, 0.8 제어 한계, 조건부 적분을 적용한 시뮬레이션 PID 출력 및 제어

위쪽 그래프는 출력값을, 아래쪽 그래프는 제어값을 나타냅니다. 검은색 선은 목표값을 나타냅니다. 시나리오 레이블은 CSV 파일과 일치하며, aw는 안티와인드업을 의미합니다.

시나리오 변화량 12초 후 출력값 적분 절대 오차
공칭값 지연 없음, 제어 한계 ±3 0.4008 1.7913
delay_0.4s 0.4초 측정 지연 0.3883 1.8860
limit_0.8_aw 제어 ±0.8, 조건부 적분 0.4003 3.3424
limit_0.8_no_aw 제어 ±0.8, 무제한 적분 0.6602 5.0996

적분 절대 오차는 0~12초 동안 좌측 사각형 적분을 사용합니다. 단위는 물리적 위치 오차(미터)가 아닌 정규화된 출력 곱하기 초입니다. 진동 및 제어 노력뿐만 아니라 최종 샘플도 검사하십시오.

안티와인드업은 액추에이터 성능을 향상시키지 않습니다

평형 상태에서 이 플랜트는 y=u이므로 0.8의 제어 한계로는 목표값 1에 도달할 수 없습니다. 오차가 계속 누적되면 목표값이 0.4로 떨어진 후에도 적분에 과도한 입력이 요구될 수 있습니다. 코드는 포화 상태를 더욱 악화시키는 적분은 거부하고, 포화 상태에서 벗어나는 데 도움이 되는 적분은 허용합니다.

이는 모터나 전원 공급 용량이 아닌 컨트롤러의 내부 상태를 변경합니다. 목표 달성 가능성 여부는 별개의 문제입니다.

한 번에 하나의 게인만 변경

from pid_lab import simulate
for kp in (1., 3., 6.):
    rows = simulate("gain", kp=kp)
    print(kp, max(row[3] for row in rows if row[1] < 6))

초기 목표 구간 동안의 피크 값을 비교합니다. 그런 다음 ki만 변경하고, 마지막으로 kd만 변경하면서 최대 제어 노력을 기록합니다. 게인이 크다고 항상 더 좋은 것은 아닙니다. 지연 및 포화를 적용하여 비교를 반복합니다.

제한 사항 및 다음 단계 검토

이 모델은 측정 잡음, 마찰, 양자화, 통신 지터 및 미분 필터링을 배제합니다. 시간 단계를 절반으로 줄입니다. 응답이 크게 변하는 경우, 먼저 수치 근사법을 검토합니다. 플랜트를 식별하고 단위 및 시간 척도를 일치시키지 않고는 이러한 게인을 하드웨어에 적용하지 마십시오. 제어 문제 내의 제약 조건을 학습하려면 MPC를 참조하십시오.

동일한 계산을 로컬에서 실행하기

실행 가능한 전체 소스 ZIP 파일을 압축 해제하거나, 실험 진입점, 생성된 커널, 원본 PID 소스을 하나의 폴더에 저장하세요. PID는 Python 표준 라이브러리를 사용하고, Kalman과 ICP는 NumPy를 필요로 합니다. 원래 그림 생성 명령은 그대로 사용할 수 있습니다.

python3 experiment.py pid --parameters '{"kp":3,"ki":2,"kd":1,"delay":0,"limit":3,"antiwindup":true}' > result.json

지연 시간을 0.4로 설정하거나 제한 시간을 0.8로 설정하고, 안티와인드업 적용 여부에 따른 IAE와 최종 출력을 비교하세요.

Code, data and reproduction

The ZIP contains the same computation code as the browser, synthetic data and comparison cases. These are not physical measurements.

Download reproduction package · Instructions (EN/JA) · Files and experiment conditions (JSON)

Extract the ZIP into a new directory, then run:

python3 reproduce.py --experiment pid

This Lab compares 4 cases. PID uses Python’s standard library; Kalman/ICP require NumPy. See the instructions for dependencies and tested versions.

Related reading

Study control with constraints제어공학 입문: 모델 예측 제어 — 제약 조건 내에서 작동하기Explore another aspect of this fieldMPC 연구실 — 예측 범위와 조향 한계 내에서 곡률 수열을 다시 풀다Explore another aspect of this field경로 추종 비교 연구실 — 동일한 조건에서 PP, APP, RPP, Stanley, MPC 실행하기