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

Para iniciar una transformación de coordenadas, indique qué sistema de referencia describe el punto de entrada y cuál el de salida. Incluso con la aritmética matricial correcta, aunque con la dirección invertida, los objetos se colocan incorrectamente.

Los subíndices se interpretan como direcciones

Sea R_AB la matriz que mapea las coordenadas de B a las de A, y t_AB el origen de B expresado en A. Usamos vectores columna:

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

Las columnas de la matriz de rotación son los ejes de B expresados en A. La traslación también se expresa en A. Los puntos experimentan traslación; los vectores libres, como las direcciones, solo rotan. Aplicar el mismo tratamiento a cada matriz de tres elementos genera confusión en estos significados.

Un sensor rotado noventa grados

En 2D, coloque el origen de B en (1, 2) m en A y alinee el eje x de B con el eje y de A. Un punto (2, 0) m en B se convierte en:

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
El sistema de referencia se traslada a (1,2) m y se rota 90 grados; el punto transformado es (1,4) m.

La función transforms del script de Python (/uploads/labs/expansion/engineering_labs.py) comprueba este resultado y su inverso. Se ejecutó con Python 3.12.3, NumPy 1.26.4 y Matplotlib 3.6.3. Ejecute python3 engineering_labs.py para regenerar la figura y los resultados (/uploads/labs/expansion/engineering-results.json).

Para regenerar, guarde el script vinculado como engineering_labs.py en un nuevo directorio y ejecútelo allí. Los resultados se guardan en el directorio de trabajo: esta figura es transforms.svg, y las coordenadas verificadas se encuentran en transform dentro de engineering-results.json. El mismo script también genera figuras de Kalman, ICP, respuesta en frecuencia y aliasing, así como archivos CSV. Utilice un directorio de trabajo vacío, ya que los archivos de salida existentes se sobrescribirán.

La inversión requiere más que negar la traslación

La inversa de una matriz de rotación es su transpuesta:

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

Reste (1, 2) de (1, 4) y luego rote −90° para recuperar (2, 0). La traslación inversa es (−2, 1), no simplemente (−1, −2). Utilice puntos arbitrarios de ida y vuelta para detectar errores de dirección.

Composición de transformaciones homogéneas

En 3D, una matriz de 4×4 combina rotación y traslación:

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

La transformación de la derecha actúa primero. Con el mapa A, el cuerpo B y el sensor C, un punto se mueve sensor→cuerpo→mapa. La multiplicación de matrices generalmente no se puede reordenar. Hacer coincidir el valor intermedio B también facilita la nomenclatura de las variables.

Los cuaterniones representan la misma rotación

Para el eje unitario u y el ángulo θ, el orden de los componentes ROS (x, y, z, w) da como resultado:

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

Una rotación de 90° alrededor del eje z es (0, 0, 0.7071, 0.7071). Algunas bibliotecas usan (w, x, y, z), así que verifique el orden antes de copiar matrices. q y −q codifican la misma rotación; la resta de componentes por sí sola no es una métrica de error de rotación. Verifique también la normalización.

REP-103 define las convenciones del SI de ROS para coordenadas diestras: cuerpo x-adelante/y-izquierda/z-arriba y óptica z-adelante/x-derecha/y-abajo. Verifique primero las convenciones cuando la geometría de la cámara aparezca rotada.

TF también depende del tiempo

Lea una transformación padre/hijo como la pose del hijo expresada en su padre, coincidiendo con T_AB anterior. Las API de transformación de puntos requieren una selección cuidadosa del sistema de coordenadas de origen/destino. Una transformación de montaje fija difiere de una pose de vehículo variable en el tiempo.

REP-105 distingue entre un mapa corregido globalmente, que puede presentar saltos, y un odom continuo pero con deriva. Las matrices correctas con una marca de tiempo incorrecta aún pueden generar puntos de sensores móviles mal ubicados. Continúe con la depuración de fusión de sensores para verificar la dirección y la sincronización simultáneamente.

Related reading

Diagnose transform and timing errors in logs.Por qué falla la fusión de sensores: sincronización, tramas y calibración extrínsecaExplore another aspect of this fieldPor qué falla ICP: inicialización, valores atípicos y geometría simétricaExplore another aspect of this fieldDesde la cartografía hasta la navegación en ROS 2: un procedimiento mínimo con Jazzy y Nav2.