Contents — find the section you need

Change parameters and verify

Open the panel, then press Run to load Python. You can stop execution and reset parameters. Results are computed on this device. No Python installation is required.

Local execution steps below are optional for reproducing the source results; they are not required for the browser experiment.

The experiment controls are in English.

Open experiment panel in a new tab

Download reproduction source

Pour initier une transformation de coordonnées, indiquez le repère décrivant le point d'entrée et celui décrivant le point de sortie. Même avec des calculs matriciels corrects et le sens inversé, les objets restent mal positionnés.

Interpréter les indices comme des directions

Soit R_AB la fonction qui transforme les coordonnées de B en coordonnées de A, et t_AB l'origine de B exprimée dans A. Nous utilisons des vecteurs colonnes :

p_A=R_{AB}p_B+t_{AB}

Les colonnes de la matrice de rotation représentent les axes de B exprimés dans A. La translation est également exprimée dans A. Les points subissent une translation ; les vecteurs libres, tels que les directions, ne font que pivoter. Appliquer le même traitement à chaque tableau de trois éléments crée une confusion entre ces significations.

Un capteur pivoté de 90 degrés

En 2D, placez l'origine de B à (1, 2) m dans A et alignez l'axe x de B avec l'axe y de A. Un point (2, 0) m dans B devient :

R_{AB}=\begin{bmatrix}0&-1\\1&0\end{bmatrix},\qquad p_A=\begin{bmatrix}0&-1\\1&0\end{bmatrix}\begin{bmatrix}2\\0\end{bmatrix}+\begin{bmatrix}1\\2\end{bmatrix}=\begin{bmatrix}1\\4\end{bmatrix}
Diagram 1 · Use the button to switch views
Repère translaté à (1, 2) m et pivoté de 90 degrés ; le point transformé est (1, 4) m.

La fonction transforms du script Python vérifie ce résultat et son inverse. Il a été exécuté avec Python 3.12.3, NumPy 1.26.4 et Matplotlib 3.6.3. Exécutez python3 engineering_labs.py pour régénérer la figure et les résultats.

Pour régénérer, enregistrez le script lié sous le nom engineering_labs.py dans un nouveau répertoire et exécutez-le depuis ce répertoire. Les résultats sont enregistrés dans le répertoire de travail : cette figure est nommée transforms.svg, et les coordonnées vérifiées se trouvent sous transform dans engineering-results.json. Le même script génère également les figures et les fichiers CSV de Kalman, ICP, de réponse en fréquence et d'aliasing. Utilisez un répertoire de travail vide, car les fichiers de sortie existants seront écrasés.

L'inversion nécessite plus qu'une simple translation négative

L'inverse d'une matrice de rotation est sa transposée :

p_B=R_{AB}^T(p_A-t_{AB}),\qquad R_{BA}=R_{AB}^T,\qquad t_{BA}=-R_{AB}^Tt_{AB}

Soustrayez (1, 2) de (1, 4), puis effectuez une rotation de −90° pour retrouver (2, 0). La translation inverse est (−2, 1), et non simplement (−1, −2). Effectuez un aller-retour autour de points arbitraires pour détecter les erreurs de direction.

Composition de transformations homogènes

En 3D, une matrice 4×4 combine rotation et translation :

T_{AB}=\begin{bmatrix}R_{AB}&t_{AB}\\0&1\end{bmatrix},\qquad T_{AC}=T_{AB}T_{BC}

La transformation la plus à droite est appliquée en premier. Avec la carte A, le corps B et le capteur C, un point se déplace du capteur vers le corps, puis de nouveau vers la carte. L’ordre des multiplications matricielles est généralement fixe. L’utilisation de l’élément intermédiaire B facilite également la dénomination des variables.

Les quaternions représentent la même rotation

Pour un axe unitaire u et un angle θ, l’ordre des composantes ROS (x, y, z, w) donne :

q=(u_x\sin(\theta/2),u_y\sin(\theta/2),u_z\sin(\theta/2),\cos(\theta/2))

Une rotation de 90° autour de z est représentée par (0, 0, 0,7071, 0,7071). Certaines bibliothèques utilisent (w, x, y, z) ; il est donc important de vérifier l’ordre avant de copier les tableaux. q et −q encodent la même rotation ; la soustraction des composantes seule ne constitue pas une mesure d’erreur de rotation. Il convient également de vérifier la normalisation.

REP-103 définit les conventions SI droites de ROS : axe x vers l'avant/axe y vers la gauche/axe z vers le haut pour le corps et axe z vers l'avant/axe x vers la droite/axe y vers le bas pour l'optique. Vérifiez d'abord les conventions lorsque la géométrie de la caméra semble pivotée.

La transformation dépend également du temps

Interprétez une transformation parent/enfant comme la pose de l'enfant exprimée dans celle de son parent, conformément à T_AB ci-dessus. Les API de transformation de points nécessitent une sélection précise des repères source et cible. Une transformation de montage fixe diffère d'une pose de véhicule variable dans le temps.

REP-105 distingue une carte corrigée globalement, qui peut présenter des sauts, d'un odomètre continu mais instable. Des matrices corrigées à un horodatage incorrect peuvent toujours mal positionner les points des capteurs mobiles. Poursuivez avec le débogage de la fusion de capteurs pour vérifier simultanément la direction et la synchronisation.

Related reading

Diagnose transform and timing errors in logs.Pourquoi la fusion de capteurs échoue — synchronisation, images et étalonnage extrinsèqueExplore another aspect of this fieldPourquoi ICP échoue : initialisation, valeurs aberrantes et géométrie symétriqueExplore another aspect of this fieldDe la cartographie à la navigation dans ROS 2 — une procédure minimale Jazzy et Nav2