Localisation avec les codeurs
Objectif
À partir d’un point de départ connu, connaître la position du PAMI sur le terrain à l’aide de la distance mesurée par chacun des codeurs.
Pré-requis
Vous avez suivi avec succès la partie « Lire les codeurs ». Vous avez également lu la partie sur la loi de commande, car une partie des notions vues là-bas seront réutilisés ici.
Principe
À partir de la distance mesurée par les codeurs, nous étudierons les hypothèses qui permettent d’obtenir une modélisation à la fois simple et précise du déplacement du robot. Comment évolue le PAMI au cours d’un pas de temps ?
###IMG : robot qui avance n’importe comment.
La question est importante car voici deux mouvements possibles de PAMI à partir des mêmes mesures des codeurs.
###IMG Translation puis rotation VS rotation puis translation
Hypothèse : Le pas de temps est suffisamment petit pour que les vitesses des roues puissent être considérées comme constantes pendant la durée de celui-ci.
Modèle cinématique
Cette hypothèse, donnant les vitesses des roues, permet de réutiliser les équations vues lors de l’étude de la loi de commande.
$$V_x = {\frac {V_g + V_d} {2}} - dy \cdot \omega_z$$ $$ V_y = dx \cdot \omega_z $$ $$\omega_z = \frac {V_g - V_d} {2 \cdot e}$$
En considérant que le point de référence est au milieu des deux roues, les termes contenant ωZ s’annulent. L’intégration sur le pas d’intégration devient triviale et n’utilise que les distances mesurées par les codeurs et non les vitesses :
$$D_x = {\frac {d_g + d_d} {2}} $$ $$ D_y = 0 $$ $$\omega_z = \frac {d_g - d_d} {2 \cdot e}$$
Dx est la distance parcourue dans l’axe X du robot, tandis que Rotz est sa rotation. Seulement, qui dit rotation, dit que l’orientation de l’axe X évolue au cours du temps.
Pour exprimer le déplacement dans un référentiel fixe par rapport au terrain, nous devons adapter ces résultats.
Modèle numérique
Nous choisissons comme référentiel, le référentiel du robot au début de son pas de temps. Ce référentiel est fixe par rapport au terrain sur la durée du pas de temps. Exprimons alors le déplacement du robot au cours du pas de temps dans ce référentiel.
À partir des équations ci-dessus, nous noterons :
$$d = \frac {d_g + d_d} {2}$$ $$\Delta\theta_z = \frac {d_g - d_d} {2 \cdot e}$$
Avance puis tourne
Si nous appliquons simplement les équations ci-dessus, nous modélisons le déplacement du robot par une translation selon son axe X puis une rotation (selon l’axe Z).
#Inclure schéma comparant le mouvement avec un arc de cercle
C’est le modèle le plus simple qui reprend directement les équations précédentes.
$$\Delta Pos_x = d$$ $$\Delta Pos_y = 0$$ $$\Delta Orientation = \Delta\theta_z$$
C’est le modèle que nous utiliserons pour notre PAMI. Notons sur le schéma l’écart entre le point calculé et celui théorique du modèle. Dans la pratique, un pas de temps faible rend ΔθZ suffisamment petit pour que l’erreur soit négligeable.
Qu’est-ce que ne « colle » pas avec ce modèle ? Ce modèle ignore que le robot tourne pendant le pas de temps, ainsi, dans le repère du robot au début du pas de temps, la composante en X de la vitesse diminue lorsque l’orientation change, créant une composante sur Y.
Que faire si votre pas de temps n’est pas assez petit ? Voici deux autres modèles pour réduire les dégâts.
Avance dans la bonne direction
Au lieu d’avancer droit, avançons dans la bonne direction.
#inclure schéma comparant l’arc et la corde du déplacement
Avec γ, l’angle qui correspond à la direction de translation dans le référentiel du robot, nous obtenons :
$$\gamma = \frac{\Delta\theta_z}{2} $$ $$\Delta Pos_x = \cos(\gamma) \cdot d $$ $$\Delta Pos_y = \sin(\gamma) \cdot d $$ $$\Delta Orientation = \Delta\theta_z $$
Vous avez ainsi un modèle bien plus précis. Sa principale source d’erreur est d’approximer la longueur de la corde du cercle par celle de son arc.
#Donner un ordre de grandeur en termes de précision gagnée
# Schéma arc et corde de cercle ?
Selon un arc de cercle
Si vous chercher une implémentation qui colle parfaitement avec le modèle, vous utilisez un arc de cercle pour modéliser le déplacement de votre PAMI.
#inclure schéma avec arc cercle + Dx + Dy
En notant la relation entre un arc de cercle, le rayon et l'angle $d=r\cdot \Delta\theta_z$, nous pouvons exprimer le rayon ainsi $r=\frac{d}{ \Delta\theta_z}$. Ainsi, nous obtenons :
$$ \Delta Pos_x = \sin(\Delta\theta_z) \cdot \frac{d}{\Delta\theta_z} $$ $$ \Delta Pos_y = [1-\cos(\Delta\theta_z)] \cdot \frac{d}{\Delta\theta_z} $$ $$ \Delta Orientation = \Delta\theta_z $$
Attention à la potentielle division par zéro !
L’augmentation, en termes de complexité des calculs, n’est pas énorme par rapport au modèle précédent…
Dans un premier temps, utilisez le modèle le plus simple et n’en changez que si vous avez des raisons de croire que vos imprécisions viennent du modèle numérique (ou parce que vous êtes curieux, ça aussi, c’est une bonne raison).
Car les sources d’erreur pour la location sont nombreuses :
- Glissement des roues du PAMI sur le sol
- Résolution trop faible des codeurs
- Imprécision du rapport de réduction du motoréducteur
- Imprécision du rayon des roues ou de leur entraxe.
Dans le référentiel du terrain
Maintenant que votre déplacement est défini dans le repère local du robot, nous devons le transposer dans le repère du terrain. Soit Pos_x, Pos_y la position en (x, y) du robot dans le terrain et θZ son orientation.
#insérer schéma changement de repère
$$Pos_x = Pos_x + \cos(\theta_z) \cdot \Delta Pos_x - \sin(\theta_z) \cdot \Delta Pos_y $$ $$Pos_x = Pos_y + \sin(\theta_z) \cdot \Delta Pos_x + \cos(\theta_z) \cdot \Delta Pos_y $$ $$\theta_z = \theta_z + \Delta\theta$$
Évidement, vous avez choisi le modèle numérique le plus simple, ΔPosy = 0, ce qui simplifie les calculs :
$$Pos_x = Pos_x + \cos(\theta_z) \cdot \Delta Pos_x$$ $$Pos_x = Pos_y + \sin(\theta_z) \cdot \Delta Pos_x$$ $$\theta_z = \theta_z + \Delta\theta$$