Asservissement et pilotage de robot autonome

 

Odométrie

Principe

L'odométrie (dead reckoning en anglais) est une technique qui consiste à calculer la position du robot, en cumulant tous les déplacements effectués depuis la dernière position connue. Il s'agit d'une technique de positionnement relative qui est donc peu précise puisque les erreurs de mesure s'accumulent au cours du temps. Par sa nature, on l'associe généralement à l'asservissement du robot, en effet, comme l'asservissement, l'odométrie nécessite de lire les encodeurs moteurs le plus régulièrement possible. On effectue donc les calculs au même moment.

 


[Calcul d'odométrie] Pour plus de clarté, le schéma n'est pas à l'échelle,
dL et dR doivent être très largement inférieur à l'entraxe du robot.

Calibration

Pour utiliser pleinement un système d'odométrie à base de roue folle, ou d'encodeur sur arbre moteur, il faut calibrer les paramètres suivants avec soin :

-Périmètre des roues
-Distance entre les deux roues (entraxe)

Le périmètre des roues influe sur la précision de tous les déplacements du robot (ligne droite et rotation), il faut donc le calibrer en premier. Pour cela rien de plus simple : il suffit de faire une série de lignes droites, et de calculer l'écart entre la valeur théorique et la valeur mesurée. La distance entre les deux roues n'influe, elle, que sur les rotations. Il faut donc, de la même façon, effectuer un certain nombre de rotations sur place, et calculer l'écart entre la théorie et la pratique. Il existe des méthodes un peu plus complètes, notamment la méthode UMBmark (University of Michigan Benchmark test) qui consiste à effectuer un certain nombre de trajectoires en carré avec le robot, dans un sens puis dans l'autre, puis de déduire les corrections sur l'odométrie des positions d'arrivée successives du robot.

Détection du patinage

En couplant deux types de capteur d'odométrie différent, le premier directement relié aux roues de propulsion, et le second traduisant directement l'avancement du robot, il est possible de déterminer si le robot patine. Cela peut être très utile pour détecter les contacts avec un éventuel obstacle.

Mise en oeuvre en C

Le calcul d'odométrie est relativement simple : en faisant l'approximation des petits angles (le calcul doit donc toujours s'effectuer sur des micro-déplacements). On peut déterminer les variations de l'angle et de la position du robot comme ceci :
    dAlpha = (dRight-dLeft)/2;   //variation de l'angle
    dDelta = (dRight+dLeft)/2;   //variation de l'avancement

    //conversion en radian
    alpha += dAlpha / entraxeEnTick;

    //calcul des décalages selon X et Y
    dX = cosf(alpha) * dDelta;
    dY = sinf(
alpha) * dDelta;

    //conversion de la position en mètre
    X += dX / tickParMetre;
    Y += dY / tickParMetre;

Vous trouverez les sources complètes dans les fichiers robot_odometry(.h/.c) présent dans cette archive.


Une optimisation simple consiste à ne pas recalculer le cosinus et le sinus à chaque coup car il s'agit d'une opération très lourde pour un microcontrôleur. On ne recalcule donc le vrai cosinus et sinus qu'une fois sur cent par exemple, le reste du temps on calcule le nouveau sinus par une approximation tiré d'une décomposition de Taylor au second ordre :

cos(x) = cos(a)-sin(a)*(x-a)+O(x-a)^2 (pour x~=a)
et sin(x) = sin(a)-cos(a)*(x-a)+O(x-a)^2 (pour x~=a) 

Julien Rouvière - ClubElek 2007

 


 
Logo INSA Lyon

© ClubElek - INSA Lyon     |     Nous contacter

© 2010 ClubElek
Joomla! is Free Software released under the GNU/GPL License.