Chapitre 2 : odométrie

La mesure de déplacement

Dans le chapitre précédent, nous avons construit notre base roulante et nous l’avons modélisé de la façon suivante :

Intéressons nous maintenant à la mesure du déplacement du robot : l’odométrie.

Le but est d’utiliser les deux roues codeuses pour en déduire un déplacement global du robot et définir sa position en tout temps (X, Y et Téta) :

Sur notre châssis, il existe deux types de mouvements élémentaires :

Au vue de ces deux mouvements, on ne cherchera pas à asservir le robot en cartésien, mais en polaire (cela ne nous empêche pas de convertir la position polaire en cartésien, car on ne va pas se mentir : on travaillera mieux la stratégie avec des coordonnées cartésiennes par la suite).

Observons le déplacement élémentaire du point de vue des codeurs :

Sur ce constat simple :

  • Pour obtenir l’avance du robot: on somme la distance parcouru par la roue 1 et 2 (D = (d1+d2)/2)
  • Pour obtenir la rotation du robot: on soustrait la distance parcouru par la roue 1 et 2 (Alpha = d1-d2)

Et oui, rien de plus compliqué, à chaque cycle d’asservissement, la fonction d’odométrie actualise la position du robot par une simple addition et une soustraction… puis il ajoute les deux résultats à la position précédente.

En ajoutant le passage en coordonnées Cartésiennes, voici le détail de l’algorithme :

Pour mettre des unités à ces coordonnées, il ne reste plus qu’à prendre en compte les dimensions du robot avec ces 3 constantes :

Pour être exact, on n’a pas besoin du diamètre de la roue, mais de son périmètre. Mais est-ce utile de préciser que Perim. Roue = Pi x Diamètre Roue ? Bon… bah c’est fait !

En ajoutant les 3 constantes, l’algorithme devient :

Enfin, il y a un dernier paramètre à ne pas négliger pour avoir une odométrie précise : un coefficient correcteur de diamètre entre la roue codeuse Droite et Gauche. Ce paramètre permet de corriger l’infime défaut mécanique.

L’algorithme final pour le calcul d’odométrie est alors le suivant :

L’angle en sortie est en radian et les X et Y sont en mm.

Pour la suite, à partir de ce premier programme, on peut facilement y ajouter :

  • une conversion de l’angle du robot en degré.
  • faire intervenir « dt » (le temps du cycle) pour le multiplier à :
    • l’avance pour avoir la vitesse linéaire du robot.
    • la rotation qui nous donnera la vitesse angulaire du robot.
  • Pour Eurobot : symétriser l’aire de jeu (choix de la couleur)… tout est ici : Symétrie de la table.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *