Comment un bras atteint-il une position voulue ?
Un régulateur proportionnel corrige une articulation en proportion de l’erreur mesurée par un capteur. C’est la façon la plus simple de faire atteindre une position voulue à un moteur.
Vous allez simuler cette boucle sur une articulation, voir quand elle dépasse la cible, et trouver le moment où elle se stabilise.
À la fin de cette leçon
Remarque
Je peux simuler un régulateur qui amène une articulation sur sa cible.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Capteur | un appareil qui mesure, comme l’angle d’une articulation | |
| Consigne | la position que l’on veut atteindre | 90 degrés |
| Erreur | l’écart entre la consigne et la position mesurée | |
| Gain | le nombre par lequel on multiplie l’erreur | 0.5 |
| Dépassement | de combien la position passe au-delà de la consigne |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Le régulateur corrige l’erreur pas à pas
Le capteur mesure la position. L’erreur est la consigne moins la position. À chaque pas, on ajoute à la position le gain multiplié par l’erreur.
Loin de la cible, l’erreur est grande et le pas aussi. Près de la cible, l’erreur et le pas diminuent : c’est ce qu’on appelle un régulateur proportionnel.
Exemple travaillé : consigne 10, gain 0,5
| Pas | Position | Erreur | Correction |
|---|---|---|---|
| 0 | 0 | 10 | 5 |
| 1 | 5 | 5 | 2,5 |
| 2 | 7,5 | 2,5 | 1,25 |
| 3 | 8,75 | 1,25 | 0,625 |
| 4 | 9,375 | 0,625 | 0,3125 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Cinq positions avec un gain de 0,5
docker exec jupyter python3 -c "print([10 * (1 - 0.5 ** n) for n in range(5)])"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Un gain trop grand fait dépasser la consigne
Avec un gain supérieur à 1, la correction est plus grande que l’erreur. La position passe donc au-delà de la consigne : c’est le dépassement.
Pour une consigne de 90 et un gain de 1,5, la position va à 135, soit un dépassement de 45. Elle revient ensuite en oscillant.
Cinq positions avec un gain de 1,5
docker exec jupyter python3 -c "print([90 * (1 - (-0.5) ** n) for n in range(5)])"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
La boucle de régulation en Python
cible = 90
gain = 1.5
position = 0
for pas in range(6):
print(pas, round(position, 3))
position = position + gain * (cible - position)
# Passez gain à 0.5 puis relancez.
Un gain trop haut rend la boucle instable
Un gain de 1 atteint la consigne en un pas. Entre 0 et 1, la position approche sans dépasser. Entre 1 et 2, elle dépasse puis se stabilise.
À 2, elle oscille sans fin. Au-delà, l’oscillation grandit : le régulateur est instable.
Exemple travaillé : quatre gains, consigne 10
| Gain | Positions successives | Comportement |
|---|---|---|
| 0,5 | 0 ; 5 ; 7,5 ; 8,75 | Approche sans dépasser |
| 1 | 0 ; 10 ; 10 ; 10 | Arrive en un pas |
| 1,5 | 0 ; 15 ; 7,5 ; 11,25 | Dépasse puis se stabilise |
| 2 | 0 ; 20 ; 0 ; 20 | Oscille sans fin |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une erreur fréquente
Attention
Beaucoup croient qu’un gain plus grand atteint toujours la consigne plus vite. C’est vrai jusqu’à 1. Au-delà, la position dépasse, et à 2 elle ne se stabilise jamais : baissez le gain.