Simulateur de contrôleur PID pour la robotique
Réglez les gains proportionnel, intégral et dérivé en visualisant la réponse, l'erreur, la saturation et les perturbations dans un simulateur de contrôleur PID.
- Catégorie
- Systèmes de commande
- Durée
- 60–120 min
- Plateforme
- Navigateur · Arduino
01 / Commencez ici
Introduction
La commande PID est omniprésente en robotique : vitesse des roues, cap, position des articulations, température et systèmes d'équilibrage reposent tous sur la rétroaction. Ce projet transforme le contrôleur en expérience visible. Modifiez un gain, perturbez le système et reliez la courbe obtenue au code qui pourrait s'exécuter sur un Arduino ou un contrôleur embarqué.
Live lab / Deterministic sampled control loop
PID controller simulator
Drive a second-order plant toward a setpoint. Tune each gain, inject a load, and watch response, error, and control effort in real time.
Three stacked plots share a scrolling time axis: measured output against the setpoint line, tracking error around zero, and control effort inside the shaded actuator-limit band.
- Setpoint
- 1.00
- Measured
- 0.000
- Error
- 1.000
- Control
- 0.000
- Overshoot
- 0%
- Steady-state error
- 1.000
Keyboard: focus the plots, then use Space to run/pause, N to step, R to reset, G to toggle the load, and F for full screen.
Commandes
Le simulateur expose la consigne, les gains proportionnel, intégral et dérivé, l’intervalle d’échantillonnage, la limite de l’actionneur et l’amplitude des perturbations. Des tracés alignés montrent la consigne, la sortie mesurée, l’erreur et l’effort de commande. La réinitialisation efface la mémoire du contrôleur pour que les expériences restent comparables.
Théorie
Un contrôleur par rétroaction calcule l’erreur comme la consigne moins la mesure. L’action proportionnelle réagit immédiatement, l’action intégrale accumule l’erreur persistante et l’action dérivée répond à la vitesse de variation. Leur somme devient la commande de l’actionneur.
Les performances du contrôleur sont contraintes par le système. Échantillonner trop lentement masque le mouvement ; dépasser la limite de l’actionneur provoque une saturation ; des mesures bruitées rendent un terme dérivé non filtré instable. Le réglage est donc une expérience portant à la fois sur le contrôleur et sur le système.
Algorithme
- Lisez la mesure à intervalle fixe et calculez l’erreur.
- Accumulez une intégrale bornée en utilisant le pas de temps réel.
- Estimez la dérivée à partir de la mesure ou de l’erreur et appliquez le filtrage approprié.
- Sommez les trois termes pondérés et saturez dans la plage de l’actionneur.
- Appliquez la commande, mémorisez l’échantillon précédent et enregistrez les métriques.
- Réinitialisez l’intégrale et l’historique lorsque le mode de commande ou le système change sensiblement.
Code source
Cette implémentation comprend une condition simple anti-emballement :
float updatePid(float setpoint, float measured, float dt) {
const float error = setpoint - measured;
const float derivative = (error - previousError) / dt;
const float candidateIntegral = integral + error * dt;
const float raw = kp * error + ki * candidateIntegral + kd * derivative;
const float output = constrain(raw, outputMin, outputMax);
if (raw == output) integral = candidateIntegral;
previousError = error;
return output;
}
Les contrôleurs de production définissent aussi le comportement en cas de mesures invalides, de dépassements d’horloge, de transitions de mode et de défauts d’actionneur.
Hypothèses et différences avec le matériel
Le système est ici un modèle propre du second ordre avec masse, amortissement et retard connus que vous réglez avec les curseurs — pas un vrai moteur avec frottements, zone morte, couple qui s’affaiblit avec la vitesse et pont de puissance qui chauffe. L’échantillonnage est fixe par construction, si bien que le terme dérivé reste bien sage ; sur un Arduino, delay() ou d’autres tâches bloquantes font fluctuer l’intervalle et le terme D se comporte mal même lorsque les gains sont inchangés. La saturation de l’actionneur est modélisée comme une saturation dure avec anti-emballement fourni, mais un système physique présente aussi des limites de courant, des chutes d’alimentation et de la chaleur qui modifient la limite en cours de fonctionnement. Réglez l’allure ici, puis vérifiez sur le matériel où le système n’est connu qu’approximativement.
Schéma de câblage
Le capteur de rétroaction rend compte de la sortie réelle ; il ne remplace ni une limitation de courant ni un arrêt de sécurité matériel. Le contrôleur compare la consigne à la mesure conditionnée du capteur, puis pilote l’actionneur via un étage PWM calibré pour la charge.
Expériences guidées
Lire sur le dépassement n’est pas la même chose que le produire délibérément. Chaque expérience ci-dessous prend quelques minutes et isole exactement un effet.
1. Trouvez le gain ultime
Mettez Ki et Kd à zéro. Augmentez Kp jusqu’à ce que la sortie oscille à amplitude constante — ni croissante ni décroissante. Notez ce gain (Ku) et la période d’oscillation (Tu).
Ces deux nombres suffisent pour un premier réglage :
| Contrôleur | Kp |
Ki |
Kd |
|---|---|---|---|
| PID (classique) | 0,6 Ku |
1,2 Ku / Tu |
0,075 Ku Tu |
| PID (sans dépassement) | 0,2 Ku |
0,4 Ku / Tu |
0,066 Ku Tu |
Saisissez-les et comparez. La ligne classique est agressive et dépasse de 20–40 % ; la seconde se pose sans dépassement et prend plus de temps. Aucune n’est « correcte » — ce sont des réponses différentes à des exigences différentes, et c’est bien le propos.
2. Observez l’emballement de l’intégrale
Réglez la limite de l’actionneur à un niveau bas — environ 20 % de sa plage — puis commandez un grand échelon de consigne. Observez le tracé d’effort de commande : il sature immédiatement et y reste, tandis que l’intégrale continue d’accumuler une erreur sur laquelle elle ne peut pas agir. Lorsque la sortie atteint enfin la consigne, toute cette action stockée se libère et le système dépasse largement.
Augmentez ensuite la limite de l’actionneur et répétez avec les mêmes gains. Le dépassement disparaît en grande partie. Rien n’a changé dans le contrôleur — c’est la leçon. L’emballement est une propriété de l’interaction entre le contrôleur et un actionneur saturé, pas des gains.
3. Prouvez que c’est le retard, pas le bruit, qui tue une boucle
Augmentez l’intervalle d’échantillonnage depuis sa valeur la plus basse par paliers, en gardant les gains fixes. La réponse se dégrade bien avant que le tracé ne paraisse bruité : le dépassement augmente, puis une oscillation apparaît, puis le système devient instable.
| Intervalle d’échantillonnage | Ce que vous observez avec un réglage par ailleurs correct |
|---|---|
| 5 ms | Propre, comme réglé |
| 20 ms | Légèrement plus de dépassement |
| 50 ms | Oscillations visibles |
| 100 ms | Oscillation entretenue |
| 200 ms | Instable |
C’est pourquoi supprimer un delay() de la boucle d’un robot améliore souvent le suivi plus que n’importe quel réglage. Une information périmée ne se récupère par aucun gain.
4. Donnez du bruit à la dérivée
Augmentez l’amplitude des perturbations avec Kd à zéro, puis augmentez Kd. La trace d’effort de commande devient saccadée bien avant la sortie — vous observez la différentiation amplifier le contenu haute fréquence, exactement comme elle le doit.
C’est ce comportement qui fait conclure que D est inutile et le mettre à zéro. La vraie correction est en amont : filtrez la mesure, ou filtrez le terme dérivé lui-même.
Ce que vous devriez observer
| Réglage | Allure attendue | Si vous observez autre chose |
|---|---|---|
Kp seul, faible |
Monte lentement, se stabilise sous la consigne | — |
Kp seul, élevé |
Dépasse, oscille, s’amortit | Une oscillation croissante signifie que vous avez dépassé Ku |
Kp + Kd |
Montée rapide, peu de dépassement, petit écart résiduel | Un effort saccadé signifie que D amplifie le bruit |
Kp + Ki |
Atteint exactement la consigne, plus lentement | Un grand dépassement signifie emballement ou trop de Ki |
| PID complet | Rapide, dépassement minimal, aucun écart | — |
L’écart résiduel avec P et D mais sans I mérite d’être produit délibérément une fois. C’est la démonstration la plus claire du rôle réel du terme intégral : l’action proportionnelle a besoin d’une erreur non nulle pour produire une sortie, donc elle se stabilise nécessairement un peu en deçà.
Transposition au matériel
Les gains trouvés ici sont un point de départ, pas un transfert. Ce qui se transfère parfaitement, c’est la procédure ; ce qui ne se transfère pas, ce sont les nombres, car ils décrivent ce système.
| Ce labo | Un robot réel |
|---|---|
| L’intervalle d’échantillonnage est exact | Fluctue sauf si vous mesurez dt et le transmettez |
| Le système est un modèle propre du second ordre | Frottements, zone morte, couple qui s’affaiblit avec la vitesse |
| La limite de l’actionneur est une saturation dure | Aussi limites de courant, chutes d’alimentation et chaleur |
| Pas de bruit de capteur sauf si vous en ajoutez | Toujours du bruit, et rarement gaussien |
| Le système ne change jamais | Tension de batterie, charge et température le modifient |
La dernière ligne cause le plus de confusion en pratique. Un réglage parfait avec des piles neuves sera lent avec des piles faibles, car la même commande produit alors moins de couple. Ce n’est pas un échec de la méthode — les gains sont des propriétés du système, et le système a changé. Les réponses professionnelles sont une boucle de vitesse sous-jacente, ou une adaptation des gains. Suivez comment régler un contrôleur PID pour la procédure complète, puis apportez-la au labo suiveur de ligne où le système se défend.
Liste de vérification du matériel
Composants
- Microcontrôleur avec une horloge stable
- Système mesuré tel qu'un moteur à courant continu ou un servomoteur
- Codeur, potentiomètre ou autre capteur de rétroaction
- Étage de sortie calibré pour l'actionneur
- Alimentation régulée et arrêt d'urgence
Explorer le graphe
Où ce simulateur est utilisé
Les projets, parcours d'apprentissage et tutoriels qui s'appuient sur ce labo.
Continuer la construction
Ressources à télécharger
Utilisez ces références sur la page pendant que vous avancez dans le projet. Les archives de projet téléchargeables ne seront ajoutées qu'une fois leur source et leur version publiées.
Questions courantes
Questions fréquentes
Par quoi dois-je commencer le réglage ?
Commencez avec les gains intégral et dérivé à zéro. Augmentez le gain proportionnel jusqu'à obtenir une réponse utile mais oscillante, puis ajoutez de l'amortissement dérivé. Ajoutez le gain intégral en dernier et uniquement s'il subsiste une erreur statique répétitive. Une règle empirique courante : P donne la rapidité, D réduit le dépassement et I supprime l'écart résiduel — ajoutez-les dans cet ordre, un par un.
Comment empêcher un contrôleur PID de dépasser la consigne ?
Le dépassement provient généralement d'une action proportionnelle ou intégrale excessive. Réduisez d'abord le gain proportionnel, puis augmentez le gain dérivé pour amortir l'approche. Si le dépassement n'apparaît qu'après que l'actionneur a atteint sa limite, la cause est l'emballement de l'intégrale plutôt que le gain, et vous devez saturer le terme intégral.
Pourquoi mon contrôleur PID oscille-t-il ?
Une oscillation entretenue signifie presque toujours que le gain proportionnel est trop élevé pour la boucle, ou que le terme dérivé est trop faible pour l'amortir. Réduisez le gain proportionnel de moitié environ, puis ajoutez du gain dérivé. L'oscillation peut aussi provenir d'une boucle de commande trop lente ou à intervalle irrégulier, ce qui rend le terme dérivé peu fiable.
Qu'est-ce que l'emballement de l'intégrale et comment l'éviter ?
L'emballement se produit lorsque l'actionneur sature — un moteur à pleine vitesse, une vanne grande ouverte — mais que l'erreur intégrale accumulée continue de croître, si bien que le contrôleur dépasse largement lorsque l'erreur finit par s'inverser. Prévenez-le par saturation (cesse d'alimenter l'intégrale pendant que la sortie est saturée) ou par recalcul (réduisez l'intégrale en utilisant l'écart entre la sortie demandée et la sortie fournie).
À quelle vitesse une boucle PID doit-elle fonctionner ?
La boucle doit échantillonner plusieurs fois plus vite que le système qu'elle commande, à intervalle régulier. Sur un microcontrôleur, évitez les longs délais bloquants : une boucle variable ou lente modifie les termes intégral et dérivé effectifs même lorsque les gains sont inchangés, ce qui est une cause cachée fréquente d'un mauvais réglage.
Puis-je utiliser un PID avec seulement les termes P et D ?
Oui. La commande PD (sans intégrale) est courante lorsqu'une petite erreur statique est acceptable et que vous voulez éviter l'emballement, et la commande PI (sans dérivée) convient aux signaux bruités où un terme dérivé amplifierait le bruit. N'utilisez que les termes dont le problème a besoin plutôt que de toujours utiliser le PID complet.
Quelle est la différence entre le réglage manuel et Ziegler–Nichols ?
Le réglage manuel ajuste un gain à la fois en observant la réponse, ce qui est intuitif et sûr pour apprendre. Ziegler–Nichols est une méthode par formules qui déduit les gains du point d'oscillation entretenue ; elle est plus rapide mais souvent agressive, donc son résultat est généralement un point de départ à affiner à la main.
Pour aller plus loin
Références
Des sources faisant autorité pour aller plus loin que le modèle pédagogique, borné, de ce simulateur.