|
|
|
Asservissement et pilotage de robot autonome |
|
Page 5 sur 7
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.
CalibrationPour
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 patinageEn
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 CLe
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
|
|
|