lundi 5 décembre 2011

La Théorie de la Localisation

Avec le robot Lego Mindstorm, il est assez simple et rapide d'atteindre le niveau 1 puis le niveau 2 que j'ai défini précédement. Tout dépend bien entendu des moyens que vous avez pour le faire ! Ainsi les éleves primaire de Chaufour notre dame qui consacrent seulement quelques jours à programmer leur robot sont des balèzes pour leur age.

Mais pour, presque à coup sûr, atteindre le niveau 3, il faudra un minimum de localisation. Il faut donc un moyen pour connaître les positions en X, Y et Cap du robot.
Le moyen c'est de réussir à calculer chaque micro déplacement du robot depuis sa position précédente et d'en conclure les nouvelles positions X, Y et C. Il faudra donc faire quelques calculs !

Pour information, j'utiliserais tout au long de ce message les termes (Xr, Yr, AlphaR, ...) que j'utilise dans mes programmes. Je ne sais pas encore comment faire mais je tâcherais de mettre à votre disposition les blocs que j'ai réalisé, si ça peut vous servir...

Déterminer AlphaR, le nouveau cap du Robot :

Prenons pour commencer simplement l'angle Alpha du robot :
- vous connaissez AlphaP, le cap du robot la dernière fois que vous l'avez calculé
- vous ne connaissez pas dAlpha, l'angle duquel s'est tourné le robot
- vous ne connaissez pas AlphaR, le nouveau cap du Robot. AlphaR = AlphaP + dAlpha

Ce qui nous intéresse c'est donc de calculer dAlpha, je vous passe les calculs, le résultat c'est :
dAlpha = (dD - dG) / EntrRoue
dD : est l'avancement de la roue droite
dG : est l'avancement de la roue gauche
EntrRoue : est la distance entre les roues

Il y a deux méthodes pour déterminer dAlpha :
- Calculer le diamètre des roues et la distance entre les roues ; faire tout un tas de conversion pour obtenir dAlpha en fonction de ces dimensions et des valeurs des codeurs
- Suivre la méthode de Thibaut Détriché (Team Amare) pour obtenir deux coefficients que vous associerez aux incréments de vos codeurs

Bien entendu j'ai commencé par la première méthode mais depuis que j'ai découvert cette seconde méthode, j'obtiens des résultats beaucoup plus précis et surtout si vous modifiez votre mécanique, vous gagnerez beaucoup de temps à reconfigurer vos calculs !
Je vous montrerais prochainement ma façon d'obtenir ces coefficients.

Avec ces coefficients vous obtiendrez dAlpha très rapidement :

(1) dAlpha = CoeffDAngl . dD - CoeffGAngl . dG
dAlpha : angle duquel s'est tourné le robot
CoeffDAngl  & CoeffGAngl : Coefficient déterminé gràce à la méthode de Thibaut Détriché
dD : nombre d'incréments effectués par le codeur de la roue Droite
dG : nombre d'incréments effectués par le codeur de la roue Gauche

Voilà, vous avez dAlpha, AlphaP donc :
(2) AlphaR = AlphaP + dAlpha

J'encourage vivement toute personne utilisant une mécanique et un support de programmation tel que Lego Mindstorm à utiliser ces deux formules (1) et (2) car :
- il y a très peu de calculs à faire  : cela dégage de la ressource à votre centre de commande
- la méthode des coefficients prend en compte l'écrasement de la roue et non un diamètre théorique

Déterminer Xr et Yr les nouvelles positions du Robot :

Après la team Amare, c'est le ClubElek de l'Insa de Lyon qu'il faut remercier pour le calcul d'odométrie !
Si nous reprenons le schémas plus haut, nous recherchons :
(3)    Xr = Xp + dX
         Yr = Yp + dY

Xp et Yp : Coordonnées Précédentes du Robot (connues)
dX et dY : Projection de dDepl sur les axes X et Y
Xr et Yr : Nouvelles coordonnées du Robot

La valeur de dDepl est la moyenne des déplacements des roues droites et gauche :
dDepl = (dD + dG) / 2
L'angle (ou vecteur) de dDepl est la moyenne des angles avant et après du robot :
dAngl = (AlphaP + AlphaR) / 2
Si le calcul d'AlphaR vient après, vous pouvez aussi calculer de cette façon :
(4)  dAngl = AlphaP + dAlpha / 2

Ici dAngl ne va pas être compliqué à calculer par contre il vous faut déterminer la valeur des déplacements des deux roues.

Là encore il y a deux méthodes :
- Calculer le diamètre des roues ; faire tout un tas de conversion pour obtenir dDepl en fonction de ces dimensions et des valeurs des codeurs
- Suivre ma méthode pour obtenir deux coefficients que vous associerez aux incréments de vos codeurs

Là encore je vous conseille la méthode des coefficients :
Le principe c'est de positionner votre robot à un point de référence, de le faire avancer d'une longueur X et de relever les valeurs des codeurs des roues Droite et Gauche. Vous en déterminerez deux coefficients pour chacune des roues par le calcul suivant :

Coeff = Distance parcourue par la roue / Valeur cumulée du codeur

CoeffDLong : Coefficient associé au déplacement de la roue Droite
CoeffGLong : Coefficient associé au déplacement de la roue Gauche


Pour revenir à notre calcul, dès que nous avons ces coefficients, nous pouvons connaître dDepl :
(5) dDepl = (CoeffDLong . dD + CoeffGLong . dG) / 2

dD et dG : incréments du codeur D ou G depuis la dernière mesure

Occupons nous maintenant de déterminer ce qui nous intéresse : dX et dY !
Par projection sur chaque axe on détermine :
(6) dX = dDepl . cos (dAngl)
     dY = dDepl . sin (dAngl)

Avec tout ceci vous avez maintenant Xr et Yr (voir formule (3) ) !

Aucun commentaire:

Enregistrer un commentaire