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 !
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 droitedG : 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 robotCoeffDAngl & 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
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
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