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

Inicie uma transformação de coordenadas especificando qual sistema de coordenadas descreve o ponto de entrada e qual sistema deve descrever a saída. A aritmética matricial correta, com a direção invertida, ainda posiciona os objetos incorretamente.

Leia os índices como direção

Seja R_AB o mapeamento das coordenadas de B para as coordenadas de A, e t_AB a origem de B expressa em A. Usamos vetores coluna:

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

As colunas da matriz de rotação são os eixos de B expressos em A. A translação também é expressa em A. Os pontos recebem translação; vetores livres, como direções, apenas rotacionam. Aplicar o mesmo tratamento a cada matriz de três elementos confunde esses significados.

Um sensor rotacionado em noventa graus

Em 2D, coloque a origem de B em (1, 2) m em A e aponte o eixo x de B ao longo do eixo y de A. Um ponto (2, 0) m em B torna-se:

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
Referencial transladado para (1,2) m e rotacionado 90 graus; o ponto transformado é (1,4) m.

A função transforms no script Python verifica este resultado e seu inverso. Foi executada com Python 3.12.3, NumPy 1.26.4 e Matplotlib 3.6.3. Execute python3 engineering_labs.py para regenerar a figura e os resultados.

Para regenerar, salve o script vinculado como engineering_labs.py em um novo diretório e execute-o lá. Os resultados são salvos no diretório de trabalho: esta figura é transforms.svg, e as coordenadas verificadas estão em transform em engineering-results.json. O mesmo script também gera figuras e arquivos CSV de Kalman, ICP, resposta em frequência e aliasing. Use um diretório de trabalho vazio, pois os arquivos de saída existentes serão sobrescritos.

Inverter requer mais do que negar a translação

A inversa de uma matriz de rotação é sua transposta:

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

Subtraia (1, 2) de (1, 4) e, em seguida, gire −90° para recuperar (2, 0). A translação inversa é (−2, 1), e não simplesmente (−1, −2). Percorra pontos arbitrários para detectar erros de direção.

Compondo transformações homogêneas

Em 3D, uma matriz 4×4 combina rotação e translação:

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

A transformação mais à direita atua primeiro. Com o mapa A, o corpo B e o sensor C, um ponto se move sensor→corpo→mapa. A multiplicação de matrizes geralmente não pode ser reordenada. Corresponder ao intermediário B também ajuda na nomenclatura das variáveis.

Quatérnios representam a mesma rotação

Para o eixo unitário u e o ângulo θ, a ordem dos componentes ROS (x, y, z, w) resulta em:

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

Uma rotação de 90° em torno de z é (0, 0, 0,7071, 0,7071). Algumas bibliotecas usam (w, x, y, z), portanto, verifique a ordem antes de copiar os arrays. q e −q codificam a mesma rotação; a subtração de componentes sozinha não é uma métrica de erro de rotação. Verifique também a normalização.

REP-103 define as convenções SI dextrógiras do ROS, com o eixo x para frente/y para a esquerda/z para cima no corpo e o eixo z para frente/x para a direita/y para baixo na óptica. Verifique as convenções primeiro quando a geometria da câmera parecer rotacionada.

A transformação TF também depende do tempo

Leia uma transformação pai/filho como a pose do filho expressa em seu pai, correspondendo a T_AB acima. As APIs de transformação de ponto exigem uma seleção cuidadosa do quadro de origem/destino. Uma transformação de montagem fixa difere de uma pose de veículo variável no tempo.

REP-105 distingue um mapa corrigido globalmente, que pode apresentar saltos, de um odometro contínuo, porém com deriva. Matrizes corretas com um timestamp incorreto ainda posicionam incorretamente os pontos do sensor em movimento. Continue com a depuração de fusão de sensores para verificar a direção e o tempo em conjunto.

Related reading

Diagnose transform and timing errors in logs.Por que a fusão de sensores falha — sincronização, quadros e calibração extrínsecaExplore another aspect of this fieldPor que o ICP falha: inicialização, valores discrepantes e geometria simétrica.Explore another aspect of this fieldDo mapeamento à navegação no ROS 2 — um procedimento mínimo com Jazzy e Nav2