Un contrôleur PID pour les robots Mindstorms NXT (suite 3)Chapitre 4
Réglage d'un contrôleur PID sans faire usage aux calculs complexes (mais nous devons tout de même faire un peu de mathématiques).
Nous abordons ici un aspect de la question qui nous réserve des surprises. Ou plutôt nous choisirons la méthode expérimentale, qui est celle des chercheurs. C'est par répétition et essais multiples, par approximations successives que nous procéderons aux réglages. Les constantes sont liées à trop de paramètres variables pour être fixées une fois pour toutes.
En clair, il faudra faire des séries d'essais en modifiant les paramètres.
Les personnes averties ont déjà compris comment régler un contrôleur PID.
Pour ma part, n'étant pas aussi doué, j'utiliserai ce qu'ils ont appris. Il s'avère que le relevé d'un couple de paramètres permet de calculer des valeurs pour
Kp,
Ki et
Kd avec une précision suffisante.
Peu importe le système qui contrôle les équations de réglage, elles fonctionnent presque toujours correctement. Il y a plusieurs techniques pour calculer le
Ks, l'une d'entre elles est appelée la "Méthode Ziegler-Nichols"; c'est celle que nous utiliserons. Une recherche sur Google offrira de nombreuses pages Web qui décrivent cette technique. La version utilisée est extraite de la page de 'Wiki page on PID Controllers' (le même traitement est trouvé en beaucoup d'autres endroits). Il y aura juste une petite modification en insérant la boucle temps (dT) dans les calculs figurants dans la table ci-dessous.
Pour régler votre Contrôleur PID, suivez ces étapes:1 - Fixez la valeur zéro aux constantes
Ki et
Kd. Cela force le contrôleur à se conduire comme un simple contrôleur P.
2 - Attribuez au terme
Tp une valeur la plus faible possible. Pour nos moteurs, 25 serait une bonne valeur de début.
3 - Attribuez au terme
Kp une valeur "raisonnable". Qu'est-ce qui est "raisonnable" ?
a ) choisissez la valeur maximale du contrôle de puissance du moteur (100) et divisez la par la valeur d'erreur utilisable maximale. Pour notre robot suiveur de tracé nous avons supposé que l'erreur maximale était de 5, donc notre projection pour
Kp est 100/5=20. Quand l'erreur est égale à + 5 la puissance du moteur sera de 100 unités. Quand l'erreur sera égale à zéro la puissance du moteur sera assise au niveau de
Tp.
b ) Ou alors, fixez la valeur de
Kp à 1 (ou 100) et notez le résultat.
c ) Si vous avez introduit un multiplicateur pour les
K's de 100 fois leur valeur réelle, vous devez en tenir compte ici. 1 sera saisi comme 100, 20 comme 2000, 100 comme 10000.
4 - Lancez le programme et observez le comportement du robot. S'il ne peut pas suivre le tracé et se déplace à l'aveuglette, alors augmentez la valeur de
Kp. S'il oscille d'une manière extravagante alors diminuez la valeur de
Kp. Continuez à modifier la valeur de
Kp jusqu'à ce que vous trouviez celle qui fournit une oscillation sur le tracé acceptable. Nous appellerons ce
Kp "Kc" ("le gain critique" dans la littérature PID).
5 - Utilisez la valeur
Kc comme
Kp, Lancez le programme du robot et essayez de déterminer la vitesse de l'oscillation. Cela peut être délicat, mais heureusement le relevé n'a pas besoin d'une grande précision. La période d'oscillation (
Pc) représente le temps nécessaire au robot pour balayer de part et d'autre du tracé et revenir à son point de départ. Pour des robots Lego
Pc sera probablement dans la plage d'environ 0.5 seconde à une seconde ou deux.
6 - Vous devez aussi connaître à quelle vitesse tournent les cycles du robot au travers de la boucle de contrôle. On a ici donné arbitrairement à la boucle un nombre fixe de tours (comme 10,000) ainsi que le temps nécessaire au robot pour accomplir ce travail (ou demander au robot de chronométrer et afficher le résultat.) le temps par boucle (
dT) est le temps mesuré divisé par le nombre de boucles. Pour un contrôleur
PID complet, programmé en NXT-G, sans aucun bloc de sons, le
dT sera dans la plage de 0.015 à 0.020 secondes par boucle.
7 - Utilisez la table ci-dessous pour calculer une série de valeurs
Kp, Ki et Kc. Si vous voulez juste un contrôleur
P utilisez alors la ligne dans la table marquée
P pour calculer la valeur "correcte"
Kp (
Ki ' et Kd ' ont tous les deux une valeur zéro). Si vous ne voulez qu'un contrôleur
PI utilisez alors la ligne suivante. Le contrôleur
PID complet est le résultat final(la ligne inférieure).
8 - Si vous avez déjà multiplié K par 100 pour tenir compte de l'absence de valeurs décimales, ignorez cette opération pour les calculs. Ce facteur de 100 est déjà pris en compte dans
Kp = Kc valeur que vous avez déterminé.
9 - Lancez le programme et observez le comportement du robot.
10 - Faîtes varier la valeur
Kp, Ki et des valeurs de
Kd pour obtenir la meilleure performance possible. Vous pouvez commencer par une assez grande variation, disons 30 % puis essayez alors une plus petite afin d'obtenir une valeur optimale (ou au moins acceptable) de la performance.
11 - Une fois réunis un bon jeu d'essais de
K's augmenter la valeur de
Tp, qui contrôle la vitesse rectiligne du robot.
12 - Réajustez
K's ou peut-être revenez à l'étape 1 et répéter le processus en entier pour une nouvelle valeur de
Tp.
13 - Répéter a nouveau jusqu'à ce que le comportement du robot vous convienne.
Fig 7

La virgule (en exposant) sur les
Ki's et Kd's sont là juste pour rappeler qu'ils sont calculés en supposant
dT constant et compris dans les valeurs de
K.
James Sluka, auteur de cet article, a testé pour son robot certaines valeurs avec les commentaires suivants:
Pour
Kc = 200 et quand
Kp = Kc, la fréquence des oscillations du robot était de 0,8 seconde. Donc
Pc = 0,8.
Il a mesuré
Pc en comptant à haute voix chaque fois que le robot oscillait totalement dans une direction particulière. Il a alors comparé sa perception du comptage à " 1 potato, 2 potato, 3 potato…". Ce n'est peut-être pas de la mécanique de précision, mais cela fonctionne assez bien dans ce que nous appellerons "l'ingénierie pratique". La boucle de temps
dT, est de 0.014 secondes par cycle déterminée en exécutant simplement le programme 10,000 fois et en affichant sur l'écran du NXT le temps écoulé. En utilisant la table ci-dessus pour un contrôleur
PID on arrive au résultat suivant:
Kp = (0.60)(Kc) = (0.60)(200) = 120
Ki = 2(Kp)(dT) / (Pc) = 2(120)(0,014) / (0,8) = 4,2 (arrondi à 4)
Kd = (Kp)(Pc) / ((8)(dT)) = (120)(0,8) / ((8)(0,014)) = 857
Après plusieurs essais et réglages, les valeurs suivantes ont été retenues: 220, 7, et 500 pour respectivement Kp, Ki, et Kd. Sans oublier que tous les K's étaient affectés du facteur 100, ce qui signifie que les valeurs réelles sont respectivement 2,2 - 0,07 - et 5.
Comment les variations des Kp, Ki, et Kd modifient les performances des robots.
Le tableau et la méthode décrits ci-dessus constituent un bon point de départ pour optimiser votre
PID. C'est aussi une aide pour une meilleure compréhension du résultat selon l'augmentation ou la diminution de l'un des trois
Ks. La table ci-dessous est disponible sur beaucoup de sites Web. La version particulière ci-après est celle du Wiki sur des contrôleurs
PID.
Fig. 8

Le
"temps de réactivité" correspond au temps de rectification de l'erreur par le robot.
Dans notre cas type il correspond au temps mis par le robot dans sa tentative de revenir au bord du tracé après s'en être éloigné. Le temps de réactivité est surtout contrôlé par
Kp. Plus
Kp est grand, et plus le robot accélère ce retour en diminuant le temps de réactivité. Si
Kp est trop grand le robot perd le contrôle..
"
Le Dépassement" est à la distance d'écartement (par rapport au bord du tracé) que le robot a tendance à prendre alors qu'il réagit à une erreur. Par exemple, si le dépassant est petit, le robot ne vire pas à droite du tracé, il essaye alors de rectifier en virant à gauche du tracé. Si le dépassement est grand, alors le robot oscille devant le bord du tracé et essaye de corriger l'erreur. Le dépassement est en grande partie contrôlé par le terme
Kd, mais est fortement affecté par les termes
Kp et Ki. D'habitude pour corriger fortement le dépassement vous serez tenté d'augmenter
Kd.
Rappelez-vous notre premier suivi de tracé le plus simple, celui qui ne fait rien d'autre que virer à droite ou gauche ! Ce dispositif a un très mauvais dépassement.
"
Variation du temps" est le temps pris par le robot pour prendre en compte un grand changement. Dans notre cas, un grand changement survient quand le robot procède à un virage. Alors que le robot répond à la courbe, il corrigera l'erreur puis le dépassement par une certaine valeur. Il doit alors corriger ce dépassement et revenir dans l'autre sens.
Il doit alors corriger ce dépassement… bien, vous avez l'idée. Pour réagir à une erreur le robot aura tendance à osciller autour de la position souhaitée. "Variation du temps" est le temps pris par cette oscillation pour revenir à zéro. "Variation du temps" répond fortement tant au terme de
Kd qu'à celui de
Ki. Plus
Ki est grand et plus "Variation du temps" est long. Plus
Kd est grand et plus "Variation du temps" est court.
"L'Erreur à l'Équilibre" est l'erreur restante alors que le dispositif fonctionne sans être "dérangé". Pour notre suivi de tracé, ce serait comme suivre une trajectoire rectiligne. Les contrôleurs
P et
PD résolvent souvent cette sorte d'erreur. Elle peut être réduite en augmentant
Kp mais cela peut déclencher une oscillation du robot. Incluant un terme
I et en augmentant
Ki on corrigera souvent un contrôleur
P ou
PD qui conserve une erreur constante à l'équilibre. (Cela suppose que vous vous souciez même d'une petite erreur restante alors que le robot suit le tracé. Cela se traduit par une petite correction d'un côté ou d'un autre par une petite valeur).
A suivre…
.gif)
EDIT: correction apportée dans le calcul de Kc (200 au lieu de 300).