Asservissement-Positionnement
Détermination
des constantes
Calibrage de différentes constantes du système.
Doc : pos96rep.pdf (non dipso - à uploader - 13 Mo)
1 - La définition de la position du robot
sur le terrain
Lorsque l'on parle de "position
du robot", on peut distinguer 3 positions qu'il ne
faut surtout pas confondre. Les dénominations sont purement
propriétaires et essaient de refléter au mieux ce qu'elles
représentent :
-
Position désirée : C'est
la position où le robot souhaiterait être.
Cette position varie au cours du temps. Cette position
est celle qui est donnée dans un ordre GOTO_XY
par exemple.
-
Position pensée ou 'captée'
: C'est la position où le robot pense être. C'est
la position obtenue par odométrie. Le robot ne connait en
interne que cette position.
-
Position réelle : C'est la position
où se trouve physiquement le robot.
2 - Les 2 objectifs à atteindre
Le but final est d'avoir les 3 points et trajectoires
du schéma précédent confondues entre elles.
C'est à dire :
-
Que la position captée (obenue
par odométrie) soit la plus identique à la
position réelle. En d'autres termes que le
robot puisse savoir où il est. Ce sont les roues
codeuses et toute la chaine de traitement qui influent sur
ce point. Ce point est d'ailleurs le plus crucial. Il est
impossible de rattrapper cette erreur sans un moyen externe
(recalage sur les bords, sur les lignes, balises, recoupement
avec une centrale inertielle, etc,etc). Dans le schéma
précédent, on cherche à rendre la position
captée la plus identique possible à la position
réelle (rapprocher la courbe et le point orange du
point vert).
-
Que la position captée soit
égale (ou très proche) de la position
désirée. C'est le filtre PID, ou l'asservissement
de manière générale, qui permet de minimiser cette erreur.
Dans le schéma précédent, on cherche
à rendre la position désirée la plus
identique possible à la position captée (rapprocher
la courbe et le point noir du point vert).
3 - Les paramètres impactant la position
captée
Les paramètres présentés ici
sont ceux qui impactent directement la position captée.
Ils sont dépendants de la méthode de conversion des
informations données par les roues codeuses en informations
de position (cf doc positionnement).
-
COUNT_PER_METER (ou COUNT_PER_MM) : C'est
la moyenne des nombres d'impulsions comptées pour chaque
roue codeuse quand le robot se déplace de 1 m (ou 1 mm)
Pour ajuster cette constante, le plus simple est de demander au
robot de faire 2m50 sur le terrain et d'ajuster la constante COUNT_PER_METER
en fonction de la distance qu'il a réellement parcouru. Répeter
l'opération jusqu'à ce que la pratique colle avec la théorie c'est
à dire lorsque sur plusieurs essais succesifs, l'erreur
est en moyenne nulle.
En première approximation, on mesure le diamètre D de la roue
codeuse, on en déduit sa circonférence C=PI*D, on sait que le
décodeur comptera N implusions sur un tour (4 fois plus d'impulsions
que n'en génère la roue codeuse : N=2000 impulsions pour une roue
codeuse de 500 pts/tour) et on en déduit directement COUNT_PER_METER
= N/C si C est en mètres.
Ici, l'erreur qu'il faut prendre en compte c'est l'erreur sur
la distance parcourue (tangente à la trajectoire).

-
SYM_LM : C'est LA
valeur qui permet de corriger la disymétrie de diamètre des
2 roues codeuses. Si cette valeur est nulle, c'est que les roues
sont parfaitement identiques, si elle est positive c'est que
la roue droite est plus petite (ou plus grande) et vice-versa.
C'est le paramètre le plus délicat à régler mais c'est aussi
le plus important. Voilà la démarche utilisée
sur Snooky pour le régler.
Il faut faire suivre au robot un rectangle qui s'appuie sur
les lignes existantes sur le terrain. Le rectangle doit être
le plus grand possible pour bien se rendre compte de ce qui
se passe.

- Quand le robot fait sa trajectoire, il faut regarder comment il
se comporte par rapport aux lignes :
-
S'il dévie vers la gauche (coupe la ligne
de la droite vers la gauche) il faut faire varier le SYM_LM
dans un sens
-
S'il dévie vers la droite (coupe la ligne
de la gauche vers la droite) il faut faire varier le SYM_LM
dans l'autre sens.
D'autres paramètres peuvent influencer indirectement
la position captée. Par exemple le réglage
de l'asservissement (du PID) va impacter le comportement des moteurs
et donc des vibrations, efforts latéraux,etc transmis à
la mécanique. Cette mécanique contient entre autre
les roues codeuses qui vont subir cette influence et peuvent donner
une information légèrement erronée. Encore
une fois la précision de la mécanique permet de minimiser
cet effet indirect.
Les paramètres de positionnement présentés plus haut, permettent
de mettre en correspondance la réalité physique et les unités utilisés
par l'asservissement. Une fois que ces paramètres sont bien réglés,
la position captée (ou pensée) doit correspondre à la
position réelle. Le problème est que tout est très intriqué l'un
dans l'autre : pour bien se déplacer, il faut que le PID soit bien
réglé et pour bien régler le PID il faut que les paramètres
soient cohérents. La démarche de réglage peut être
la suivante :
-
Dans un premier temps, on peut régler les paramètres
de positionnement à leur valeur obtenue par calcul
COUNT_PER_METER = N/C ; METER_PER_RADIAN = L et SYM_LM
= 1.
-
Ensuite, on peut commencer à régler le PID. Dans
un premier temps, un terme P suffit amplement. Là, on va régler
le robot pour qu'il soit dynamique sans trop de dépassement. Pour
faire ça, il peut être très utile de collecter des valeurs de
position/vitesse (consigne et mesure). A ce niveau, position désirée
et position mesurée, toutes les 2 internes au robot, doivent coller.
Par contre, la position réelle peut-être plus ou moins n'importe
quoi. Si on le souhaite, on peut affiner l'asservissement avec
des termes I et D.
On cherche à avoir la trajectoire captée
confondue avec l'ordre de trajectoire. On ignore pour l'instant la trajectoire
réelle ...
-
Une fois le PID réglé, c'est à dire que le robot
fait ce qu'on lui demande - du moins qu'il fait ce qu'on lui demande
dans *son* système d'unité qui n'est pas encore
celui qui correspond à la réalité, il faut
mettre en correspondance la réalité et la fiction en ajustant
les paramètres de positionnement. Là le processus est assez itératif
puisque tout est interdépendant : le METER_PER_RADIAN ne peut
être correctement réglé que si le SYM_LM est bien réglé et le
SYM_LM ne peut être correctement réglé que si le METER_PER_RADIAN
est bien réglé.
-
La première trajectoire sera une ligne droite
pure (c'est ce qu'il y a de plus simple). Avec cette première
trajectoire, on peut régler correctement le COUNT_PER_METER
et plus grossièrement le SYM_LM suivant que le robot tire
à gauche ou à droite. Plusieurs essais sont nécessaires pour
affiner comme il faut ces deux paramètres. Il faut particulièrement
faire attention à l'orientation du robot au départ.
Sur ces figures les erreurs sont grandement exagérées.
En pratique les erreurs restent assez faibles pour que la trajectoire
vienne toujours couper le rectangle et ne sorte pas trop du terrain
...
-
Une fois ça fait, on peut reboucler
sur les 3 étapes jusqu'à avoir quelque chose de satisfaisant.
Pour faire tous ces réglages, il faut s'assurer tous les autres
paramètres nuisibles sont hors d'état de nuire
...
-
-
les roues codeuses sont propres
-
Les batteries sont bien chargées. Parfois
on peut se faire avoir par un asservissement qui manque
de pêche à cause des batteries.
-
Le robot est proche de sa configuration
finale. En effet, tant que la mécanique n'est pas complètement
finie et que toute la charge du robot n'est pas installée,
c'est pas utile de régler tous les paramètres au millipoil..
En effet, la moindre opération mécanique sur les moteurs
ou les roues codeuses à tendance à faire varier les paramètres
de positionnement et tout ajout de poids ou changement de
répartition des masses sur le robot nécessitera un réajustement
des PID.
|