Vous pouvez télécharger ce cours au format pdf :  Télécharger


Chapitre 8

Asservissement

L’essentiel sur le sujet a été largement évoqué à l’occasion d’échanges à travers le forum et d’articles disponibles sur les sites d’équipes participantes.

On se contentera de reprendre certains de nos documents déjà publiés sur le sujet, d’insister sur certains points et de commenter quelques résultats expérimentaux.

Les 2 principes de l’asservissement de position d’un robot

On ne revient pas sur les mérites de l’asservissement polaire, mais il faut tempérer l’idée qui consisterait à croire que ce choix est indispensable pour atteindre un bon niveau de performance.

Un robot utilisant l’asservissement de type1 bien réglé, sera toujours supérieur en performances et fiabilité à un robot en asservissement polaire mal maîtrisé.

Et il faut tenir compte du fait que des composants du genre LM629 permettent de réaliser un asservissement de type 1 clef en main, ce qui soulage le concepteur de cette tache en lui permettant de se consacrer davantage sur le reste.

A l’époque des PMI (Petits Mobiles Intelligents), autorisés par le règlement, nous utilisions cette technique avec succès. Certains anciens au passé glorieux se souviennent de PMI traversant le terrain à 2m/s ! (pas apprécié par tous☺)

De toute façon, que l’asservissement soit intégré dans un composant ou développé par logiciel, il reste un problème commun aux 2 techniques, c’est le choix des paramètres qui conditionnent l’asservissement. A savoir les gains et les seuils d’écrêtage éventuels des correcteurs PID. Il est clair q’un LM629 ne va pas inventer ces réglages et il faudra lui fournir ces valeurs.

Dans la présentation qui suit, les principes évoqués sont généraux et valables dans les 2 techniques mais les exemples sont pris en asservissement polaire.

Asservissement analogique avec correcteur PID

Présentons les 2 structures possibles du correcteur PID en introduisant le vocabulaire

Asservissement échantillonné avec correcteur PID numérique

(présentation avec contrôle dérivé de la sortie)

Principe de l’asservissement polaire

Asservissement en distance

Pour connaître la distance parcourue par le robot, on va sommer la distance effectuée par les deux roues codeuses. De cette façon, on obtient la distance parcourue par le centre de l’essieu.

L’asservissement en distance consiste à envoyer à chaque période d’échantillonnage une commande aux moteurs fonction de l’écart entre la distance réelle et la distance désirée (appelée consigne_distance)

Algorithme de l’asservissement en distance

Sans terme intégral et avec contrôle dérivé de la sortie

distance = (roue_d + roue_g) /2

vitesse= (vitesse_roue_d + vitesse_roue_g)/2

ecart = consigne_distance – distance

commande = ecart * GAIN_PROPORTIONNEL_DISTANCE 

commande_distance = commande – GAIN_DERIVE_DISTANCE*vitesse

commande_roue_D= commande_distance

commande_roue_G= commande_distance

Asservissement en orientation

L’orientation du robot est obtenue par différence de la distance parcourue par les 2 roues codeuses.

A chaque période d’échantillonnage, cette orientation est comparée à la consigne orientation.

A partir de l’écart correspondant, on calcule la commande orientation qui est envoyée aux 2 moteurs (avec changement de signe sur le moteur gauche).

Algorithme de l’asservissement en orientation

orientation = roue_D – roue_G

vitesse_orientation=vitesse_roue_D – vitesse_roue_G

ecart = consigne_orientation – orientation

commande = ecart * GAIN_PROPORTIONNEL_ROTATION

commande_rotation = commande – GAIN_DERIVE_ROTATION*vitesse_orientation

commande_roue_D= commande_rotation

commande_roue_G= – commande_rotation

Algorithme complet en asservissement polaire

distance = (roue_d + roue_g) /2

vitesse= (vitesse_roue_d + vitesse_roue_g)/2

ecart = consigne_distance – distance

commande= ecart * GAIN_PROPORTIONNEL_DISTANCE 

commande_distance = commande – GAIN_DERIVE_DISTANCE*vitesse

orientation = roue_D – roue_G

vitesse_orientation=vitesse_roue_D – vitesse_roue_G

ecart = consigne_orientation – orientation

commande = ecart * GAIN_PROPORTIONNEL_ROTATION

commande_rotation = commande – GAIN_DERIVE_ROTATION*vitesse_orientation

commande_roue_D= commande_distance + commande_rotation

commande_roue_G= commande_distance – commande_rotation

(Des écrêtages éventuels sont à prévoir)

Changement de système d’unité

Système d’unité SI (Système International)

Distance: d distance parcourue: (m)

Vitesse: vit: distance parcourue par seconde (m/s)

Accélération: acc: variation de vit par seconde (m/s²)

Système d’unité robot

Distance: d_rob: nombre d’impulsions codeur

Vitesse: vit_rob: nombre d’impulsions par période Te

Accélération: acc_rob: variation de vit_rob par période Te

Formules de passage

d_rob = K * d
vit_rob = (K*Te) * vit
acc_rob = (K*Te²) * acc

K=(N*Mult)/(π*D)

N: nb d’impulsion du codeur

Mult: coefficient multiplicateur (1 ou 2 ou 4)

D: Diamètre roue codeuse

Te: période d’échantillonnage

Exemple

N=1000

Mult=4 (utilisation de tous les fronts)

D=6 cm

Te=5 ms

K= 21220

K*Te = 106

K*Te²= 0.53

Reprenons l’exemple précédent

N=1000

Mult=4

D=6 cm

Te=5 ms

K= 21220

K*Te = 106

K*Te²= 0.53

d_rob = 21220*d

vit_rob = 106*vit

acc_rob= 0.53*acc

Si par exemple on veut une vitesse de 1m/s avec une accélération de 0.3g ça donne:

vit_rob = 106 soit une variation de 106 impulsions codeur pendant 5 ms

acc_rob= 0.53*3= 1.6 soit une variation de vit_rob de 1.6 pendant 5 ms

Cet exemple montre qu’il va falloir travailler en variables flottantes ce qui peut poser des problèmes de temps de calcul, à moins d’approximer 1.6 par 1 ou 2 soit une approximation de 25 % sur la valeur de l’accélération.

Une solution pour rester en variables entières est d’introduire dans le logiciel un coefficient multiplicateur sur la constante K par exemple 8. Les formules deviennent:

d_rob = 169760*d

vit_rob = 848*vit

acc_rob = 4.24*acc

Si on reprend notre exemple avec une accélération de 0.3g, ça donne:

acc_rob = 4.24*3 = 12.72 qu’on pourra approximer par 12, sans état d’âme cette fois.

Transposition des fonctions du temps

Il s’agit de transposer les fonctions du temps distance, vitesse, accélération d’un système d’unité à l’autre.

Pour passer du système SI au système robot, il suffit de remplacer par n 

Pour passer du système robot au système SI, il suffit de remplacer par t

(n=t/Te : nombre de périodes d’échantillonnage)

Exemple: Pour les phases accélération et freinage:

Système SI

d = ½. acc.t²

v = acc.t

v2² – v1² = 2. acc.d

Système robot

d_rob = ½ . acc_rob . n²

v_rob = acc_rob . n

v_rob2² – v_rob1² =2. acc_rob . d_rob

Phase à vitesse constante

d = v . t

d_rob = v_rob . n

Quelques résultats expérimentaux

Les tests sont effectués avec le robot dans la version 12.7 kg.

La fonction utilisée pour les tests est la suivante:

tout_droit_avec_freinage(50*COEF_D, 0.8*COEF_V, 4.2*COEF_ACC);

Ce qui impose les consignes cinématiques suivantes:

distance à parcourir: 50 cm

vitesse: 0.8 m/s

accélération: 4.2 m/s²

Le correcteur d’asservissement est de type proportionnel et dérivé. (Pas de terme intégral).

L’intérêt du terme dérivé

On représente ici, l’évolution de la vitesse que l’on compare à sa consigne trapézoïdale.

L’ intérêt du terme dérivé apparaît de façon spectaculaire.

Noter le facteur 5 sur la valeur du gain proportionnel lorsqu’on ajoute le terme dérivé.

Il faut signaler que l’échelle des temps est la même dans les 2 cas.

(La distance de déplacement a due être rallongée avec le correcteur proportionnel du fait de son temps de montée, ce qui explique qu’on ne voit pas le freinage )

Comparaison entre correcteur avec contrôle dérivé de la sortie 

et correcteur proportionnel-dérivé classique.

On essaie les 2 correcteurs dans les mêmes conditions, chacun des 2 correcteurs ayant été optimisé en termes de gains proportionnel et dérivé.

Courbes de vitesse comparatives

Ces courbes sont représentatives des tensions appliquées aux induits des moteurs

On retrouve le caractère plus bruité du correcteur classique. En fin de freinage ça chahute pas mal.

Le niveau de commande maximum est légèrement supérieur avec le correcteur classique.

Ce qui paraît logique car l’asservissement, plus nerveux demande plus de tension.

Courbes de distance comparatives

On retrouve des phases accélération et freinage un peu plus rapides avec le correcteur classique. Et pourtant la consigne accélération est la même (4.2 m/s²).

Le léger chahut en fin de freinage pour le correcteur classique n’est pas visible à cette échelle. Ca joue sur quelques mm et effectivement on perçoit un léger frémissement par observation directe du robot.

ecart= consigne_distance – distance

A propos du terme intégral

Tout a été dit sur le forum à ce sujet et liberté est laissée à chacun de faire son choix.

Ce qu’il faut retenir d’un point de vue théorique:

Les vertus du terme intégral:

-> améliore la précision en régime établi

-> réagit efficacement aux perturbations

A mettre au passif:

-> tendance à déstabiliser la boucle

-> introduit le phénomène de windup (largement évoqué sur le forum)

Il se trouve qu’il est très prisé par les industriels dont les processus fonctionnent plus souvent en régulateur qu’en suiveur et ses vertus face aux perturbations sont précieuses dans ces conditions.

Dans un robot EUROBOT, son emploi est plus discutable.

Vous connaissez notre point de vue sur le sujet:

à Le windup a tendance à créer des réactions brutales et incontrôlées quand cesse la perturbation. C’est vrai qu’il existe des systèmes antiwindup.

à Quand on parle de perturbations à l’Eurobot, il s’agit de blocage (adversaire ou obstacle). Et si le moto réducteur est bien choisi (voir le chapitre qui évoque le problème), le terme intégral n’apporte rien de plus.

à Quand à l’effet déstabilisant, il semble inéluctable, et un raisonnement très simple peut le démontrer:

On suppose un profil trapézoïdal pour la distance afin de simplifier la figure

e= consigne – sortie (e: écart de boucle)

h= ki.∫ e.dt (h: terme intégral)

Supposons que l’écart s’annule en régime établi, robot à l’arrêt. (Ce qui est le cas dans un robot Eurobot.)

Si pour t>t2, l’écart de boucle est nul, le terme intégral h est nécessairement nul, sinon une tension est appliquée aux moteurs et le robot n’est pas à l’arrêt.

La valeur de h à l’instant t2 est donc nulle. Ce qui suppose que les 2 aires représentées par les signes + et – sur la figure s’annulent.

Comme de 0 à t1 la sortie est inférieure à la consigne, à partir de t1, la sortie devient supérieure à la consigne, d’où un dépassement inéluctable.

Dans beaucoup de processus industriels les dépassements ne sont pas forcément gênants, (voir recherchés). Mais dans un robot Eurobot, un dépassement en fin de freinage, signifie

que le robot va reculer.