Tutoriel · Intermédiaire · 25 min de lecture

Erreur transversale : mesurer la qualité du suivi

Le nombre qui dit si un suiveur de trajectoire fonctionne, comment le mesurer honnêtement, et pourquoi Stanley élargit les virages où la poursuite pure coupe.

Un seul nombre, signé

L’erreur transversale est la distance perpendiculaire entre le robot et la trajectoire, avec un signe. Positive à gauche du sens de marche, négative à droite. C’est toute la définition, et c’est le seul tableau de bord honnête d’un suiveur de trajectoire.

Le signe compte plus qu’il n’y paraît. Une distance non signée indique que le robot est à 20 cm d’écart ; une distance signée indique de quel côté, ce dont tout contrôleur a besoin et ce qui rend un tracé d’erreur lisible — un biais apparaît comme un décalage, une oscillation comme une sinusoïde, un virage comme un pic dans une direction connue.

Mesurer sans se tromper soi-même

Trois pièges, dans l’ordre où l’on y tombe.

Ne mesurez pas par rapport à l’estimation. Si le robot croit être sur la trajectoire, son erreur déclarée vaut zéro par construction. L’erreur transversale doit être évaluée par rapport à la vérité terrain — un mètre ruban, une station totale, un système de capture de mouvement, ou en simulation la pose vraie intégrée par le modèle. Dans le simulateur de suivi de trajectoire, le contrôleur voit une position parfois bruitée et l’erreur est toujours calculée à partir de la vérité, seule raison pour laquelle la pénalité GPS apparaît comme un nombre.

Prenez le signe dans le repère de la trajectoire, pas par un test de produit vectoriel. L’implémentation naturelle consiste à tester de quel côté du segment courant se trouve le robot. Ce signe bascule de façon discontinue quand la projection franchit un point de passage, et avec le moindre retard d’actionneur la commande oscille à pleine échelle pendant que les roues bougent à peine — ce qui ressemble exactement à un contrôleur cassé. Projetez sur la trajectoire et prenez la composante latérale dans le repère propre de la trajectoire :

float h = pathHeadingAt(s);                       // tangent direction there
float e = -(x - px) * sinf(h) + (y - py) * cosf(h);  // + is left of travel

Cherchez près de là où vous étiez, pas partout. Une recherche globale du point le plus proche sur une trajectoire qui revient sur elle-même retrouvera volontiers un segment parcouru il y a une minute. Conservez la dernière abscisse curviligne et cherchez dans une fenêtre autour — quelques mètres en arrière, assez en avant pour couvrir l’anticipation.

Il existe un quatrième piège plus subtil qui m’a coûté un contrôleur fonctionnel : dans un virage, les deux segments adjacents se projettent sur le même sommet à la même distance. Gardez celui d’arrivée et l’erreur de cap comme l’écart latéral valent tous deux à peu près zéro, de sorte qu’un contrôleur piloté par ces deux grandeurs quitte la trajectoire en toute confiance. Résolvez l’égalité en faveur du segment de sortie.

RMS, pire cas, et localisation de l’erreur

Publiez trois nombres, car chacun masque ce que les autres montrent.

  • L’erreur RMS est la moyenne honnête. C’est elle qu’on règle.
  • Le pire cas décide si le robot passe dans le couloir. Une RMS de 0,12 m avec un pic de 0,50 m, ce n’est pas la même machine qu’une RMS de 0,12 m avec un pic de 0,15 m.
  • L’erreur en fonction de la distance le long de la trajectoire montre où. C’est le tracé qui indique s’il s’agit d’un problème de réglage ou de géométrie.

C’est pour ce troisième point que le simulateur le dessine. Une anticipation courte produit des oscillations sur tout le parcours ; une anticipation longue est propre en ligne droite et ne pique que dans les virages. La RMS peut être identique.

Deux contrôleurs, deux formes d’échec

La poursuite pure vise un point en avant et suit l’arc. Stanley — le contrôleur qui a remporté le Grand Challenge DARPA 2005 — prend pour référence l’essieu avant et braque sur deux termes additionnés :

δ = θ_e + atan(k · e / v)

Le premier terme aligne le robot avec la direction de la trajectoire. Le second convertit l’erreur transversale en angle de braquage, et la division par la vitesse fait que le même gain se comporte de la même façon à 1 m/s et à 10 m/s.

Deux panneaux superposés. Celui du haut est un gros plan sur un virage du parcours, montrant la trajectoire commandée en pointillés avec le parcours en poursuite pure qui coupe à l'intérieur du virage et le parcours Stanley qui passe à l'extérieur. Celui du bas trace l'erreur transversale absolue en fonction de la distance le long de la trajectoire pour les deux contrôleurs sur tout le parcours, avec Stanley affichant des pics plus hauts dans les virages.
Même parcours, même vitesse, même retard. La poursuite pure coupe à l'intérieur des virages ; Stanley passe à l'extérieur — et dépense 18,5 rad de braquage contre 4,3 pour le faire. Télécharger le SVG

Mesuré sur le même parcours à 2 m/s :

RMS Pire cas Longueur parcourue Effort de braquage
Poursuite pure 0,12 m 0,50 m 0,8 % en moins 4,3 rad
Stanley 0,17 m 0,87 m 2,2 % en plus 18,5 rad

Le signe de la troisième colonne raconte toute l’histoire. La poursuite pure prend la corde et finit en avance ; Stanley refuse de quitter la trajectoire, rate le virage par l’extérieur puis revient — en parcourant plus de distance que la trajectoire donnée.

L’effort de braquage est le nombre qu’on oublie. Quatre fois plus de mouvement d’actionneur, c’est quatre fois plus d’usure sur un servomoteur, quatre fois plus de courant, et sur une propulsion différentielle quatre fois plus de ripage des roues. Stanley n’est pas gratuit.

Choisir

La poursuite pure quand la trajectoire est une suggestion. Balayages de couverture, missions de points de passage, tout ce qui est en extérieur où un virage coupé d’un demi-mètre ne gêne personne. Elle possède un seul réglage géométrique, se dégrade proprement, et tient en une douzaine de lignes.

Stanley quand la trajectoire est une contrainte. Une voie, un rang de cultures, un couloir avec des murs. Il tient la ligne et ne coupe pas, au prix d’un effort de braquage et d’un gain à régler pour de vrai — l’anticipation est géométrique et se transfère d’un robot à l’autre ; k est un gain de commande et ne se transfère pas.

Ni l’un ni l’autre, seuls, à basse vitesse. Les deux divisent par la vitesse ou en dépendent. En dessous d’environ 0,3 m/s, un robot à propulsion différentielle gagne à pivoter sur place vers le cap puis à avancer, ce qu’aucun des deux contrôleurs n’exprime.

Quand ça tourne mal

Symptôme Généralement
L’erreur déclarée reste proche de zéro Mesure par rapport à l’estimation au lieu de la vérité terrain
La commande oscille à chaque point de passage Signe issu d’un test de produit vectoriel qui bascule au sommet
Quitte la trajectoire en confiance après un virage Égalité au sommet résolue vers le segment d’arrivée — le cas silencieux
L’erreur bondit puis récupère La recherche globale du point proche a accroché un segment lointain
La RMS semble bonne, le robot touche un mur Publiez aussi le pire cas ; la RMS masque les pics isolés
Stanley oscille en ligne droite k trop élevé pour la vitesse et le retard ; c’est un gain, pas une géométrie
Les deux contrôleurs dérivent ensemble Le problème est en amont — l’estimation de position, pas le braquage

Testez les deux sur le même parcours dans le simulateur de suivi de trajectoire, puis suivez la feuille de route du suivi de trajectoire, de l’odométrie jusqu’au robot qui accomplit une mission en autonomie.

Explorer le graphe

Fait partie de ces réalisations

Les projets et parcours d'apprentissage qui incluent ce tutoriel.

Pour aller plus loin

Références