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

Un petit modèle exécutable facilite l'analyse des variations de gain PID et de la saturation de l'actionneur. Ces résultats ont été calculés le 7 septembre 2026 avec Python 3.12.3. Il s'agit de simulations numériques, et non de mesures ou d'un modèle de moteur identifié.

Modèle et conditions

Le système est \ddot y+2\dot y+y=u. La sortie y et la commande u sont normalisées ; le temps est exprimé en secondes. La sortie initiale, la vitesse et l'intégrale sont nulles. La valeur cible est de 1 à partir de l'instant zéro, puis de 0,4 à partir de 6 secondes. Le pas est de 0,005 seconde sur l'intervalle de 0 à 12 secondes, ce qui donne 2 401 échantillons par cas.

Le contrôleur est u=K_pe+K_iI-K_d\dot y_m, avec e=r-y_m. Ici, y_m est la sortie mesurée. La dérivée agit sur cette dernière plutôt que sur la cible. Les gains de référence sont K_p=3, K_i=2 et K_d=1. L'intégration et la différentiation utilisent explicitement le pas de temps ; le système utilise une intégration d'Euler semi-implicite. Consultez Principes fondamentaux du PID pour en connaître les principes.

Exécuter le code

Enregistrez pid_lab.py dans un répertoire de travail vide et exécutez le script suivant. Il ne nécessite que la bibliothèque standard Python et écrase les fichiers de résultats portant le même nom.

python3 --version
python3 pid_lab.py

Il génère le fichier CSV et le fichier JSON récapitulatif. Pour régénérer la figure, enregistrez et exécutez plot_pid.py dans le même répertoire. Le tracé a été vérifié avec matplotlib 3.6.3. Les colonnes du fichier CSV correspondent au scénario, au temps, à la cible, à la sortie, à la commande et à l'intégrale.

Comparaison du délai et de la saturation

Diagram 1 · Use the button to switch views
Sortie et commande PID simulées avec un délai de mesure de 0,4 seconde, une limite de commande de 0,8 et une intégration conditionnelle

Le graphique supérieur représente la sortie ; le graphique inférieur représente la commande. La ligne noire représente la cible. Les étiquettes des scénarios correspondent à celles du fichier CSV, et aw signifie « anti-emballement ».

Scénario Variation Sortie à 12 s Erreur absolue intégrée
nominale Sans délai, commande limitée à ±3 0,4008 1,7913
délai_0,4s Mesure retardée de 0,4 s 0,3883 1,8860
limit_0.8_aw Contrôle ±0,8, intégration conditionnelle 0,4003 3,3424
limit_0.8_no_aw Contrôle ±0,8, intégration non restreinte 0,6602 5,0996

L'erreur absolue intégrée utilise une intégration rectangulaire gauche sur 0 à 12 secondes. Ses unités sont la sortie normalisée multipliée par les secondes, et non l'erreur de position physique en mètres. Examinez l'oscillation et l'effort de contrôle, ainsi que l'échantillon final.

L'anti-emballement n'augmente pas la capacité de l'actionneur

À l'équilibre, cette installation a y=u, donc une limite de contrôle de 0,8 ne peut pas atteindre une cible de 1. Si l'erreur continue de s'accumuler, l'intégrale peut exiger une entrée excessive même après que la cible soit tombée à 0,4. Le code rejette l'intégration qui entraînerait une saturation plus importante, tout en autorisant l'intégration qui contribue à en sortir.

Ceci modifie l'état interne du contrôleur, et non la capacité du moteur ou de l'alimentation. Rendre l'objectif atteignable est une décision distincte.

Modifier un gain à la fois

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))

Comparer le pic pendant l'intervalle cible initial. Faire varier ensuite uniquement ki, puis uniquement kd, en enregistrant également l'effort de contrôle maximal. Des gains plus élevés ne sont pas systématiquement meilleurs ; répéter les comparaisons avec un délai et une saturation.

Limites et vérifications suivantes

Le modèle exclut le bruit de mesure, les frottements, la quantification, la gigue de communication et le filtrage de la dérivée. Diviser le pas de temps par deux : si la réponse change sensiblement, étudier d'abord l'approximation numérique. Ne pas copier ces gains dans le matériel sans identifier le système et sans faire correspondre les unités et les échelles de temps. Poursuivre avec MPC pour étudier les contraintes du problème de contrôle.

Exécuter le même calcul localement

Extrayez le fichier ZIP source exécutable complet, ou enregistrez le point d'entrée de l'expérience, les noyaux générés et le code source PID original dans un seul dossier. PID utilise la bibliothèque standard Python ; Kalman et ICP nécessitent NumPy. Les commandes originales de génération de figures restent disponibles.

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

Réglez le délai à 0,4 ou la limite à 0,8 et comparez l'IAE et le résultat final avec et sans anti-saturation.

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 constraintsIntroduction à l'ingénierie du contrôle : Commande prédictive par modèle — Agir dans le respect des contraintesExplore another aspect of this fieldLaboratoire MPC — résoudre à nouveau une séquence de courbure dans l'horizon et les limites de directionExplore another aspect of this fieldLaboratoire de comparaison du suivi de trajectoire : exécuter PP, APP, RPP, Stanley et MPC dans les mêmes conditions