Asservissement-Positionnement

Détermination des constantes


Introduction

Calibrage de différentes constantes du système.

Documentations

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).


    • METER_PER_RADIAN : C'est la différence de distance parcourue par chaque roue codeuse lorsque le robot tourne sur place d'un radian.
      Cette valeur correspond directement à l'écartement L entre les deux roues codeuses. [Le radian est défini comme l'angle soutenant un arc de même longueur que le rayon de cet arc]. Donc en première approximation, on peut simplement mesurer l'écartement entre les 2 roues codeuses et utiliser cette valeur. Ensuite, pour affiner la valeur, on fait faire au robot M tours sur place (M=10 ou 20 est une bonne valeur : attention à l'enroulement des câbles). A la fin des M tours, on mesure avec un rapporteur l'écart angulaire entre la valeur théorique attendue M*2*PI et la valeur pratique (Bien compter le nombre de tours pour ne pas se tromper de 2*PI ...). Avec cette différence, on ajuste la constante METER_PER_RADIAN [idem, il faut répéter les opérations, dans un sens, puis dans l'autre sens pour faire une moyenne et éliminer les erreurs non systématiques].

    Le décalage du centre du robot est ici largement exagéré, cependant il peut exister. Ce fait indique que les autres paramètres ne sont pas correctement réglés. Il est alors nécessaire d'en tenir compte.

  • 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.

4 - Méthode de réglage

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. 


    • La seconde trajectoire sera une rotation sur place (là encore c'est simple). Comme le SYM_LM est déjà ajusté grossièrement, on peut commencer à ajuster le METER_PER_RADIAN avec la méthode indiquée. Là aussi, il faut répéter l'opération pour s'assurer de la répétabilité des résultats.  [cf paramètre MM_PER_RADIAN]
    • La troisième trajectoire sera le rectangle (dans un sens puis dans l'autre) pour affiner le SYM_LM. [cf paramètre SYM_LM].
      Pour ceci, il faut absolument que le METER_PER_RADIAN soit bien ajusté puisqu'une rotation insuffisante ou trop importante liée à un METER_PER_RADIAN imparfait peut être assimilé à une différence de diamètre des 2 roues. C'est là qu'il est important de parcourir le rectangle dans les 2 sens :
      • Si quelque soit le sens de parcours du rectangle le robot tire vers l'intérieur (resp. l'extérieur) du rectangle cela signifie que le METER_PER_RADIAN est incorrect.

      Le METER_PER_RADIAN est trop faible, donc le robot effectue en réalité un angle inférieur à 90° à chaque rotation. Dans un sens de parcours du rectangle, celà tend à le faire dériver à gauche, dans l'autre sens de parcours, à droite

      • A l'inverse si le robot tire toujours vers la droite (resp. la gauche) quel que soit le sens de parcours du rectangle, cela signifie que le SYM_LM n'est pas bien ajusté.  
    • Le SYM_LM est mal ajusté et la roue gauche tend toujours à parcourir plus de distance que la roue droite. La dérive se fera toujours à droite quelquesoit le sens de parcours.

    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 ...
      • le terrain est propre
      • 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.