Matrizes de Rotação e Orientação de Corpos Rígidos
Objetivos de Aprendizagem
- Ler uma matriz de rotação como os eixos de um referencial escritos em outro e conferir as duas condições que a definem, e .
- Usar a mesma matriz de forma ativa (girar um vetor) e passiva (reescrever um vetor fixo num referencial girado), prevendo a diferença de sinal.
- Compor rotações em torno de eixos fixos por pré-multiplicação e em torno dos eixos móveis do corpo por pós-multiplicação.
- Enunciar a convenção de Euler ZYX usada nesta trilha, reconhecer que ela é igual ao roll-pitch-yaw em torno de eixos fixos na ordem inversa, e ver uma convenção de biblioteca dar outra matriz para os mesmos três números.
- Mostrar o gimbal lock como perda de posto do mapa das taxas dos ângulos de Euler para a velocidade angular, e medir o que ele faz com os ângulos perto do travamento.
Contexto e Motivação
what-a-robot-is-classification-components-and-degrees-of-freedom contou 6 graus de liberdade para um corpo rígido no espaço: 3 de posição e 3 de orientação. Posição é um vetor. Orientação precisa de uma representação, e todo cálculo posterior desta trilha (poses, jacobianos, controladores) herda a que for escolhida aqui.
orthogonality-and-orthogonal-matrices mostrou que uma matriz quadrada de colunas ortonormais satisfaz e que essas matrizes são rotações, reflexões ou combinações das duas. A robótica precisa só das rotações, e precisa ser explícita sobre quatro convenções que livros e bibliotecas escolhem de jeitos diferentes: em que sentido a matriz age, a que referencial pertence um eixo, a ordem dos ângulos de Euler e o sinal de um ângulo. Misturar duas delas dá uma matriz de rotação com cara de válida e orientação errada, e nada na própria matriz denuncia o erro.
Teoria Central
Convenções usadas nesta trilha
Vetores são colunas. Referenciais são dextrógiros, e um ângulo positivo gira no sentido anti-horário quando o eixo aponta para quem olha. Seguindo o Modern Robotics (Lynch e Park), é a orientação do referencial em relação a : suas colunas são os eixos unitários escritos em coordenadas de . As rotações elementares são
com e . O sinal de menos em fica no canto inferior esquerdo, ao contrário das outras duas, porque a ordem cíclica numa rotação em torno de é .
O grupo SO(3)
Colunas unitárias dão 3 equações e colunas ortogonais duas a duas dão mais 3, juntas . Nove entradas menos seis restrições deixam 3 parâmetros livres, o que bate com a contagem da lição anterior. Essas seis restrições admitem ; exigir mantém os referenciais dextrógiros e exclui as reflexões. O conjunto dessas matrizes é o grupo especial ortogonal . O produto de rotações é rotação, a inversa é a transposta, uma rotação preserva comprimentos e, em três dimensões, em geral (rotações no plano comutam).
Três usos, e ativo versus passivo
O Modern Robotics lista três usos de uma matriz de rotação: representar uma orientação, mudar o referencial em que um vetor está escrito e girar um vetor ou referencial. Os dois últimos são as leituras conhecidas como passiva (alias) e ativa (alibi).
- Ativa: o vetor se move, o referencial fica. dá as coordenadas do vetor girado no mesmo referencial.
- Passiva: o vetor fica, o referencial muda. Se são as coordenadas de um vetor em , então , e as coordenadas no referencial girado são .
A mesma age, portanto, com sinal oposto nas duas leituras: girar um vetor de produz os mesmos números que descrever o vetor parado num referencial girado de . Mudanças de referencial se encadeiam cancelando os índices internos, e .
Eixos fixos e eixos móveis
Girar um referencial por é ambíguo até se dizer em que referencial está escrito:
Assim, rotações sucessivas em torno de eixos fixos se acumulam à esquerda, e rotações sucessivas em torno dos eixos do próprio corpo, que se movem com ele, se acumulam à direita.
Ângulos de Euler: a convenção ZYX
Esta trilha usa os ângulos de Euler ZYX do Modern Robotics (Apêndice B): partindo de alinhado com , gire em torno do do corpo, depois em torno do novo , depois em torno do mais recente. Rotações em eixos do corpo pós-multiplicam, então
Lido da direita para a esquerda, o mesmo produto é uma rotação de em torno do fixo, depois em torno do fixo, depois em torno do fixo. O Modern Robotics chama isso de ângulos roll-pitch-yaw XYZ: uma matriz, duas histórias físicas. Quando , os ângulos voltam por
com . Outros textos usam ZYZ, XYZ ou outras ordens, e as bibliotecas codificam a diferença numa string. No Rotation.from_euler do SciPy, letras maiúsculas indicam eixos intrínsecos (do corpo) e minúsculas, extrínsecos (fixos). Então 'ZYX' é a convenção acima, enquanto 'zyx' com os mesmos três números é , outra rotação.
Gimbal lock
Em o primeiro e o terceiro eixos de rotação se alinham, e a matriz depende só de (para ) ou de (para ). Só uma combinação do primeiro e do terceiro ângulos importa, então as coordenadas perdem uma dimensão. O jeito mais limpo de ver a perda é pelas velocidades. A velocidade angular em produzida pelas taxas dos ângulos é
em que cada coluna é um eixo de rotação, escrito em , no momento em que o seu ângulo age. O determinante é . Em a terceira coluna é a primeira, tem posto 2, velocidades angulares fora da sua imagem bidimensional não podem ser produzidas por nenhuma taxa de ângulo, e perto do travamento exigem taxas muito grandes. Nada acontece com a rotação em si: é igual em todo ponto, e a singularidade é das coordenadas, assim como os polos são da latitude e longitude e não da esfera. O Modern Robotics observa que singularidades assim são inevitáveis em qualquer representação de rotação com três parâmetros, um motivo para guardar a orientação como matriz ou quatérnio unitário (ambos tratados no Modern Robotics) e deixar os ângulos de Euler para entrada e exibição.
Exemplos Resolvidos
Exemplo 1: conferindo que uma matriz é uma rotação
resulta em
Em float64, e . Para , . O espelho também satisfaz , mas : é ortogonal e não é rotação, e transformaria um referencial dextrógiro num levógiro.
Exemplo 2: ativa e passiva com a mesma matriz
Sejam e .
textactive, R v = ( 0.866, 0.5, 0) the vector turned 30 degrees passive, R^T v = ( 0.866, -0.5, 0) the same vector, in a frame turned 30 degrees dot with b axes = ( 0.866, -0.5, 0) direct check: projections on the columns of R
A segunda componente troca de sinal. Um programa que chama R @ v quando precisava das coordenadas no novo referencial produz exatamente esse erro, e o resultado continua sendo um vetor unitário, então nenhuma checagem de comprimento o pega.
Exemplo 3: a mesma rotação em torno de um eixo fixo e de um eixo do corpo
Seja , de modo que o do corpo aponta ao longo do fixo. Aplique dos dois jeitos:
As duas orientações diferem. A pós-multiplicação girou o corpo em torno do próprio , que é o fixo, e o script confirma exatamente. Girar em torno de um eixo do corpo é o mesmo que girar em torno do lugar para onde esse eixo aponta, naquele momento, no referencial fixo.
Exemplo 4: ZYX versus zyx
Com :
textRz Ry Rx (this track) scipy 'zyx' (extrinsic z, then y, then x) [ 0.8138 -0.4410 0.3785] [ 0.8138 -0.4698 0.3420] [ 0.4698 0.8826 0.0180] [ 0.5438 0.8232 -0.1632] [-0.3420 0.1632 0.9254] [-0.2049 0.3188 0.9254]
O 'ZYX' do SciPy coincide com até , e 'xyz' com os ângulos listados como também coincide, que é a leitura roll-pitch-yaw. O 'zyx' minúsculo é igual a e difere em até 0,181 numa entrada. O eixo do corpo cai em numa e em na outra, a de distância, e as duas orientações diferem por uma rotação de , por causa de maiúscula e minúscula. As fórmulas com atan2 recuperam da primeira matriz.
Exemplo 5: gimbal lock, rodado
Com , os valores singulares de e do jacobiano das entradas de em relação a , em , por diferenças centrais:
textbeta det E singular values of E rank singular values of d(vec R) rank 0.0 -1.00e+00 1.0000 1.0000 1.0000 3 1.4142 1.4142 1.4142 3 45.0 -7.07e-01 1.3066 1.0000 0.5412 3 1.8478 1.4142 0.7654 3 80.0 -1.74e-01 1.4088 1.0000 0.1233 3 1.9924 1.4142 0.1743 3 89.0 -1.75e-02 1.4142 1.0000 0.0123 3 1.9999 1.4142 0.0175 3 89.9 -1.75e-03 1.4142 1.0000 0.0012 3 2.0000 1.4142 0.0017 3 90.0 -6.12e-17 1.4142 1.0000 0.0000 2 2.0000 1.4142 0.0000 2
O determinante segue e o menor valor singular vai a zero, então o posto cai de 3 para 2 em . Para o zero é exato. Para o jacobiano por diferenças finitas, o menor valor singular em é , ruído da diferença: o posto da tabela usa tolerância , e a tolerância padrão de numpy.linalg.matrix_rank daria 3. No travamento, os ângulos e dão matrizes que concordam até (mesmo ), enquanto difere em 0,766. O as_euler('ZYX') do SciPy nessa matriz devolve com o aviso "Gimbal lock detected. Setting third angle to zero since it is not possible to uniquely determine all angles."
Perto do travamento as coordenadas ficam instáveis. Gire o corpo em torno do próprio e extraia os ângulos de novo:
textstart (alpha, beta, gamma) change in alpha change in beta change in gamma (30, 30.0, 10) +0.57 -0.09 +0.28 (30, 89.0, 10) +24.38 -0.19 +24.37 (30, 89.9, 10) +69.22 -0.43 +69.22
A rotação física é em todas as linhas, medida como o ângulo de . Um controlador que interpolasse ou derivasse esses ângulos perto de comandaria giros rápidos e opostos de e para um movimento minúsculo.
Equívocos Comuns e Armadilhas
- "Toda matriz ortogonal é uma rotação." O do Exemplo 1 é ortogonal com determinante .
- "Se R gira o vetor, R também dá as coordenadas dele no referencial girado." Exemplo 2: a leitura passiva pede , e o erro troca um sinal sem mudar comprimento nenhum.
- "Girar em torno de x dá no mesmo, multiplicando de qualquer lado." Exemplo 3: o fator à esquerda usa o fixo, o fator à direita usa o do corpo, e os resultados diferem.
- "ZYX quer dizer a mesma coisa em toda biblioteca." Exemplo 4: o SciPy distingue
'ZYX'de'zyx', e os mesmos três números produziram orientações a uma da outra. Escreva o produto de matrizes ao lado dos nomes dos ângulos. - "Gimbal lock é um estado físico em que o objeto pode ficar preso." A orientação em é uma rotação comum. Só as coordenadas de três ângulos são singulares ali, como mostra a queda de posto do Exemplo 5.
Resumo
Uma matriz de rotação guarda os eixos de escritos em e é definida por com ; o determinante exclui as reflexões. A mesma matriz gira um vetor de forma ativa () ou reescreve um vetor fixo de forma passiva (), e as duas diferem em sinal. Rotações em torno de eixos fixos pré-multiplicam e rotações em torno de eixos do corpo pós-multiplicam. A convenção de Euler desta trilha é ZYX, , que também é o roll-pitch-yaw XYZ em torno de eixos fixos, e o 'zyx' do SciPy é outra rotação para os mesmos números. Em o mapa das taxas dos ângulos para a velocidade angular cai de posto 3 para posto 2, e perto disso um giro de mudou dois ângulos em . A orientação está bem; as coordenadas é que não estão.