Introdução à Robótica Luís Paulo Laus 11 de agosto de 2020 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Data de impressão (versão): 11 de agosto de 2020, 11 de agosto de 2020documento composto com LATEX 2ε usando LYX. Todos os direitos reservados. Fica autorizado o uso não comercial pelo Prof. Dr. Roberto Simoni da UFSC e seus alunos da disciplina de Robótica na condição de uma cópia por aluno. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 2 Sumário 1. Descrição de Objetos no Espaço 3D 1.1. Ponto, Reta e Plano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. Funções Seno, Cosseno e Tangente . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.1. Equações Trigonométricas . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3. Equações Trigonométricas e a Função atan2 . . . . . . . . . . . . . . . . . . . . 1.4. Vetor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.1. Produto Interno ou Escalar (Dot Product) . . . . . . . . . . . . . . . . . Ângulo entre Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Projeção de Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ortogonalidade de Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . Cossenos Diretores de um Vetor . . . . . . . . . . . . . . . . . . . . . . 1.4.2. Produto de Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Produto de Matrizes como Produto Escalar . . . . . . . . . . . . . . . . 1.4.3. Produto Externo ou Vetorial (Cross Product) . . . . . . . . . . . . . . . 1.4.4. Decomposição de Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5. Sistemas de Coordenadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6. Descrição de Posição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.7. Descrição de Orientação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.7.1. Matriz de Rotação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Descrição de um Sistema de Coordenadas Usando Matrizes de Rotação Fórmula de Rodrigues . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fórmula de Cayley . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Derivada de Matriz de Rotação . . . . . . . . . . . . . . . . . . . . . . . 1.7.2. Quatérnios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8. Mapeamentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.1. Translação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.2. Rotação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.8.3. Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9. Transformação Homogênea (TH) . . . . . . . . . . . . . . . . . . . . . . . . . . 1.9.1. Interpretação de Transformações Homogêneas . . . . . . . . . . . . . . . Mapeamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Descrição de um Sistema de Coordenadas em Outro . . . . . . . . . . . Operador de Transformação . . . . . . . . . . . . . . . . . . . . . . . . 1.9.2. Inversão de Transformação Homogênea . . . . . . . . . . . . . . . . . . . 1.9.3. Concatenação de Transformações Homogêneas . . . . . . . . . . . . . . 1.9.4. Exemplo do Uso de Transformações Homogêneas . . . . . . . . . . . . . 1.10. Transformação de Sistemas de Coordenada . . . . . . . . . . . . . . . . . . . . 1.11. Ordem das Rotações (TH) para Eixos Fixos e Móveis . . . . . . . . . . . . . . 1.11.1. Ordem Esquerda → Direita ⇒ Eixos Móveis . . . . . . . . . . . . . . . 1.11.2. Ordem Direita → Esquerda ⇒ Eixos Fixos . . . . . . . . . . . . . . . . 1.11.3. Exemplo Numérico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.11.4. Mistura de Eixos Fixos e Móveis . . . . . . . . . . . . . . . . . . . . . . 1.11.5. Dedução alternativa da Fórmula de Rodrigues . . . . . . . . . . . . . . . 1.12. Aplicação à Programação de Robôs . . . . . . . . . . . . . . . . . . . . . . . . . 1.13. Eficiência Computacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.14. Ângulos de Roll, Pitch, Yaw (Eixos Fixos) . . . . . . . . . . . . . . . . . . . . . 1.15. Ângulos de Euler (Eixos Móveis) . . . . . . . . . . . . . . . . . . . . . . . . . . 1.16. Retas no Plano e no Espaço Tridimensional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 7 7 10 11 12 13 14 15 15 15 15 16 16 17 18 20 21 22 24 25 28 30 31 38 38 39 39 40 40 41 41 41 44 46 47 49 50 50 51 51 53 54 55 59 62 64 66 2. Cinemática 2.1. Modelo Cinemático de Robôs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2. Notação de Denavit-Hartenberg Modificada (DHM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 69 70 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Introdução à Robótica — Universidade Tecnológica Federal do Paraná 2.3. Cinemática Direta de Robôs, Método Sistemático . . . . . . . . . . . . . . 2.4. Cinemática Direta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.1. Exemplos de Cinemática Direta . . . . . . . . . . . . . . . . . . . . Cinemática Direta de um Robô Mitsubishi RV-M1 . . . . . . . . . Cinemática Direta de um Robô com Seis Graus de Liberdade . . . Cinemática Direta do Robô PUMA 560 (como na bibliografia) . . Cinemática Direta do Robô PUMA 560 . . . . . . . . . . . . . . . Cinemática Direta do Robô SCARA . . . . . . . . . . . . . . . . . 2.4.2. Cálculo da Cinemática Direta Auxiliado por Computador . . . . . 2.5. Cinemática Inversa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.1. Existência de Soluções Múltiplas . . . . . . . . . . . . . . . . . . . 2.5.2. Considerações Práticas Sobre o Tipo de Equações a Resolver . . . Função atan2 com Argumentos com Duplo Sinal . . . . . . . . . . Solução de Equações Trigonométricas . . . . . . . . . . . . . . . . 2.5.3. Solução para Três Eixos Paralelos . . . . . . . . . . . . . . . . . . 2.5.4. Exemplos de Cinemática Inversa . . . . . . . . . . . . . . . . . . . Cinemática Inversa do robô Mitsubishi RV-M1 . . . . . . . . . . . Cinemática Inversa de um Robô com Seis Graus de Liberdade . . Cinemática Inversa do Robô PUMA 560 . . . . . . . . . . . . . . . Cinemática Inversa do Robô SCARA . . . . . . . . . . . . . . . . . 2.5.5. Cálculo da Cinemática Inversa Auxiliado por Computador . . . . . 2.5.6. Cinemática Inversa com Base em Sistemas Práticos de Orientação Mitsubishi RV-M1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 78 79 79 83 85 87 88 90 91 92 92 95 95 98 101 101 107 120 127 127 132 136 3. Robôs Paralelos 141 3.1. Plataforma Gough-Stewart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 3.2. Plataforma Gough-Stewart modificada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 A. Segunda solução de uma função de arco 149 B. Solução de algumas equações e sistemas de equações comuns em cinemática inversa. 151 C. Inversa de matriz 3 × 3 153 D. Todas as possíveis rotações usando ângulos de Euler 155 D.1. Para eixos móveis (ângulos de Euler) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 D.2. Para eixos fixos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 E. Funções da biblioteca robot.mb do MuPAD 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 161 4 Lista de Figuras 1.1. 1.2. 1.3. 1.4. 1.5. . . . . . 8 9 9 10 52 2.1. Parâmetros da Notação de Denavit-Hartenberg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2. Projeções ortogonais do segmento i da Figura 2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3. Projeções ortogonais do segmento i − 1 da Figura 2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4. Exemplo de Robô Industrial (RV-M1 da Mitsubishi) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5. Pose de referência com eixos e segmentos numerados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.6. Fixação dos eixos Ẑ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.7. Fixação dos eixos X̂ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.8. Símbolos usados para representar robôs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.9. Modelo cinemático do robô Mitsubishi RV-M1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.10. Robô RV-M1 - pose de referência igual a pose zero sem valores iniciais para as variáveis de junta: a) visto de frente e b) visto de lado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.11. Transposição da variação dos valores admissíveis para a junta 1 do robô RV-M1 - vista superior: θ1 é medido no sentido horário porque Ẑ1 aponta para baixo . . . . . . . . . . . . . . . . . . . . . . . . . . 2.12. Modelo cinemático de um robô de seis graus de liberdade . . . . . . . . . . . . . . . . . . . . . . . . . 2.13. Modelo cinemático do robô PUMA 560 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.14. Modelo cinemático do robô PUMA 560 usando o Método de Sistemático da Seção 2.3 . . . . . . . . . 2.15. Modelo cinemático do robô SCARA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.16. círculo trigonométrico mostrando as soluções quando (a) o seno e cosseno de ϕ são conhecidos, (b) apenas o seno de ϕ é conhecido e (c) apenas o cosseno . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.17. Modelo cinemático de uma subcadeira com três eixos paralelos . . . . . . . . . . . . . . . . . . . . . . 2.18. Duas soluções para a cinemática do robô RV-M1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.19. Ordem de cálculo para as oitos soluções do robô de seis graus de liberdade . . . . . . . . . . . . . . . . 2.20. Oito soluções para o robô de seis graus de liberdade . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.21. Ordem de cálculo para as oitos soluções do robô PUMA 560 . . . . . . . . . . . . . . . . . . . . . . . . 2.22. Manipulador esférico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 72 73 74 74 75 75 79 80 3.1. 3.2. 3.3. 3.4. Círculo trigonométrico e (a) funções seno, (b) cosseno e (c) tangente . . . Relação entre seno, cosseno e tangente . . . . . . . . . . . . . . . . . . . . Funções (a) seno e cosseno e (b) tangente . . . . . . . . . . . . . . . . . . Quadrantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rotações e translações sucessivas usando: a) eixos móveis e b) eixos fixos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Plataforma Gough-Stewart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Plataforma Gough-Stewart, posição do centro das juntas esféricas no plano xy: a) base e b) plataforma Plataforma Gough-Stewart modificada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Plataforma Gough-Stewart modificada, posição dos servomotores no plano xy e vista frontal: a) base com os servomotores e b) dois servomotores vistos de frente . . . . . . . . . . . . . . . . . . . . . . . . 82 83 83 85 87 89 93 98 106 113 115 126 132 141 142 144 144 5 1. Descrição de Objetos no Espaço 3D Em robótica, constantemente é necessário descrever a posição e a orientação de objetos no espaço tridimensional. Quando, por exemplo, um robô é programado para apanhar uma peça com sua garra, é necessário descrever a posição da peça para que o controlador do robô consiga posicionar o manipulador de forma adequada. Além disso, a orientação relativa da garra e da peça pode ser importante (ou mesmo fundamental) para a realização da tarefa. Se a peça for alongada, pode ser impossível pegá-la simplesmente porque a garra não abre o suficiente para apanhá-la no maior comprimento; porém, pode ser possível apanhá-la se a garra for orientada perpendicularmente ao maior comprimento. Na criação de modelos matemáticos de robôs, constantemente se enfrenta o problema de descrever a posição e a orientação das diversas partes móveis do robô. Para isso, são usados sistemas de coordenadas. Esse capítulo se dedica a estudar os sistemas de coordenadas, a transformação de coordenadas de um sistema para outro (mapeamento) e a transformação das coordenadas devido à movimentação de objetos. No início do capítulo são introduzidos alguns elementos da geometria euclidiana, da álgebra vetorial e de equações trigonométricas. 1.1. Ponto, Reta e Plano Ponto, reta e plano são os elementos primitivos da geometria euclidiana. Pode-se definir ponto como: um lugar geométrico sem dimensão. De outra forma, ponto é o lugar do cruzamento de duas retas ou de um plano e uma reta. Casos as retas sejam concorrentes, o ponto de cruzamento é chamado de ponto próprio, caso elas não sejam concorrentes, ou seja, sejam paralelas o ponto é chamado de ponto impróprio. No caso de uma reta e um plano ocorre o mesmo: se a reta for paralela ao plano o ponto é impróprio, caso contrário é um ponto próprio. 1.2. Funções Seno, Cosseno e Tangente As funções trigonométricas desempenham um papel importantíssimo no estudo da Robótica porque são usadas para projetar (calcular o comprimento da projeção) segmentos de retas e vetores sobre outros segmentos de retas, ou vetores. Elas associam o valor de um ângulo com o valor de um comprimento que, como veremos, é adimensional por se tratar de uma distância normalizada. A definição da função seno1 e cosseno estão diretamente ligadas ao problema de projeção ortogonal de um segmento de reta sobre outro segmento de reta sendo que os dois formam entre si um ângulo que denotaremos nesta seção por θ. O ângulo θ é chamado de argumento da função. Formalmente, o seno de um ângulo θ, denotado2 por sen θ ou s θ, é definido como sendo a distância normalizada medida do centro de uma circunferência3 de raio unitário, que delimita o chamado círculo trigonométrico, até a projeção ortogonal de um ponto P sobre um eixo vertical; o ponto P pertencente tanto a esta circunferência quanto a uma semirreta que inicia no centro C da circunferência e que forma um ângulo θ com o eixo horizontal; e é desta forma que o ponto P é definido conhecendo-se o ângulo θ. A Figura 1.1-a mostra o seno de θ, conhecendo o valor de θ nós traçamos uma semirreta iniciando em C com uma inclinação relativa a horizontal igual à θ. Esta semirreta intercepta a circunferência no ponto P que é projetado para o lado até encontrar o eixo vertical determinando o ponto Q: o seno do ângulo θ é a distância entre os pontos C e Q. A distância é dita normalizada porque o raio da circunferência também é um comprimento, o que tem o efeito 1A primeira menção ao seno apareceu nos trabalhos do matemático hindu Aryabhata I (476-550) e que uso a palavra jya. Mais tarde, os árabes usaram a palavra jiba que foi distorcido para jaib e que significa dobra e que foi traduzido para o latim sinus (que também significa dobra). François Viète (1540-1603) sugeriu o nome cosseno para o “resíduo” do seno. 2 Em Robótica são usadas muito poucas funções o que permite usar nomes curtos para abreviá-las. Por economia de espaço é preferível abreviar seno de um ângulo θ por s θ ao invés de sen θ que é a notação quase que predominante nas outras áreas. O mesmo ocorre com o cosseno de um ângulo θ, abreviado por c θ. 3 Apesar de muitos autores estarem usando o termo “círculo”, em detrimento de “circunferência”, nós manteremos a nomenclatura clássica segundo a qual uma circunferência é uma curva no plano onde todos os pontos que pertencem a esta curva estão a mesma distância (raio) de um ponto (centro); e círculo é a área no plano limitada por esta curva. Contudo, existe uma tendência de se usar o termo “círculo” para as duas coisas: curva e área. 7 Introdução à Robótica — Universidade Tecnológica Federal do Paraná P Q P P tan θ sen θ θ C C (a) θ θ cos θ Q (b) Q C (c) Figura 1.1.: Círculo trigonométrico e (a) funções seno, (b) cosseno e (c) tangente alterar a escala em que o seno é medido dependendo da unidade usada para medir o raio e o seno. Normalizar em relação à mesma unidade de comprimento que foi usada para medir o raio da circunferência significa dividir a distância encontrada (seno) pelo valor do raio com a unidade e tem o efeito teórico de retirar a unidade do valor encontrado (seno) e, consequentemente, pode-se definir a função seno como sendo adimensionais (sem dimensão). Assim, a função seno, bem como as demais funções trigonométricas, relacionam um ângulo, que por sua vez pode ser medido tanto em graus (◦ ) como em radianos (rad), com um número puro. Note que o ângulo, bem diferente do seu seno, possui sim unidade. As unidades mais usadas para se medir ângulos são: o radiano, que geralmente é usado nos livros de matemática; e o grau, que geralmente é usado em trabalhos das áreas técnicas. Enquanto os matemáticos insistem em dizer que a unidade correta é o radiano os engenheiros reclamam que não há um único transferidor4 no mercado graduado em radianos. Assim, é mais proveitoso usar as duas unidades ao invés de discutir qual a mais correta ou a mais útil. O cosseno de um ângulo θ, denotado por cos θ ou c θ, tem uma definição quase idêntica ao seno, a diferença é o ponto P é projetado sobre o eixo horizontal. A Figura 1.1-b mostra o cosseno do ângulo θ. Esta diferença simples (eixo de projeção) entre as funções seno e cosseno faz com que exista uma relação entre elas. Se o eixo vertical, ao invés do horizontal, for tomado como referência para medição do ângulo θ, o que equivale a somar 90◦ (ou π/2 rad) ao valor de θ, o seno seria trocado pelo cosseno e o cosseno por do seno negativo. Isso fornece as relações: sen (θ + 90◦ ) = cos θ cos (θ + 90◦ ) = − sen θ . Outra relação interessante é sugerida pelo nome da função cosseno: o seno do ângulo complementar, isso é, o quanto falta para 90◦ (ou π/2 rad), por isso sen (90◦ − θ) = cos θ . A tangente de um ângulo θ, denotada por tan θ, é definida como sendo a distância sobre uma reta que tangencia o círculo trigonométrico, daí o nome tangente, no seu ponto mais à direita, medida do ponto de tangência até o ponto onde a reta tangente intercepta uma segunda reta que passa pelo centro C da circunferência e que faz um ângulo θ com o eixo horizontal. Na Figura 1.1-c, o ponto de tangência foi denominado Q e o ponto onde as duas retas se interceptam de P . Veja que o valor da tangente não existe para alguns valores de θ: se, por exemplo, θ valer 90◦ (π/2 rad), a reta que passa pela origem será paralela à reta tangente à circunferência e não haverá um ponto próprio de intersecção. Assim, se θ = 90◦ + 180◦ n (θ = π/2 + n π radianos) onde n = . . . , −2, −1, 0, 1, 2, . . . não haverá um ponto próprio, portanto, o valor da tangente não é definido para estes valores particulares de θ (simplesmente não existe ou pode-se dizer que a tangente destes ângulos tende ao infinito). Uma forma alternativa de calcular o valor da tangente de um ângulo é através do valor do seno e cosseno deste ângulo pela relação: 4 Aparelho para medir ângulos. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 8 Introdução à Robótica — Universidade Tecnológica Federal do Paraná P P0 tan θ sen θ θ C cos θ Q Figura 1.2.: Relação entre seno, cosseno e tangente cos θ 1 sen θ tan θ 4 3 0,5 2 −π − π2 −180◦−90◦ 1 0 θ 0 π 2 90◦ 3π 2 270◦ π 180◦ -0,5 2π −π 360◦ −180◦ − π2 −90◦ -1 -2 θ π 2 90◦ π 180◦ 3π 2 270◦ 2π 360◦ -3 -1 -4 (a) (b) Figura 1.3.: Funções (a) seno e cosseno e (b) tangente tan θ = sen θ , cos θ θ 6= 90◦ + 180◦ n ou θ 6= π/2 + n π, (1.1) onde n = . . . , −2, −1, 0, 1, 2, . . . Esta relação pode ser obtida observando que na Figura 1.2 há dois triângulos retângulos semelhantes: 1) formado por sen θ, cos θ e pelo segmento de reta que vai do centro do círculo C até o ponto P 0 (ou CP 0 ); e 2) formado pelos segmentos CP , CQ e pela tan θ. A equação (1.1) não é nada mais que a aplicação direta do teorema de Tales5 (semelhança de triângulos). Observe que na equação (1.1) foram excluídos os argumentos (valores de θ) que tornam as retas paralelas e, portanto, não possuem valores definidos para sua tangente. Estes mesmos valores têm cossenos nulos o que impossibilita a divisão. O triângulo menor da Figura 1.2 é formado por dois catetos (lados de um triângulo retângulo que formam entre si um ângulo reto): o cateto adjacente (junto ao ângulo θ) com comprimento igual à cos θ e o cateto oposto (oposto ao ângulo θ), com comprimento igual à sen θ. Costuma-se definir a tangente de um ângulo como sendo a relação entre o cateto oposto e o adjacente. A Figura 1.3-a traz o gráfico das funções seno e cosseno no intervalo [−180◦ , 360◦ ] ou [−π, 2 π] rad sobrepostos para que se observe que curvas são idênticas, porém deslocadas. A Figura 1.3-b traz o gráfico da função tangente onde se pode observar as descontinuidades nos pontos −90◦ , 90◦ e 270◦ ou −π/2, π/2 e 3 π/2 rad conforme previsto pela equação (1.1) e pela definição geométrica da função. Um fato importante a ser observado sobre as funções seno, cosseno e tangente é que elas são periódicas, isso é, se repetem exatamente de tempos em tempos. As próprias características geométricas de definição das funções nos dão a ideia que o valor delas deve se repetir depois de uma volta completa quando o ângulo θ retorna ao mesmo lugar (mesma inclinação). Assim, era de se esperar que, pelo menos, a cada 360◦ ou 2 π rad os valor destas funções sejam iguais. Contudo, a função tangente se repete a cada meia volta (180◦ ou π rad), como pode ser observado no gráfico da Figura 1.2-b. O intervalo mínimo necessário para que uma função periódica se repita é chamada de período da função. Os eixos vertical e horizontal dividem o círculo trigonométrico em quatro áreas chamadas quadrantes. Os 5 Tales de Mileto, 625/4-558 a.C. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 9 Introdução à Robótica — Universidade Tecnológica Federal do Paraná 2◦ Q. 1◦ Q. 3◦ Q. 4◦ Q. Figura 1.4.: Quadrantes Tabela 1.1.: Sinal das funções seno, cosseno e tangente nos quatro quadrantes Quadrante seno cosseno tangente 1o + + + 2 + - - 3o - - + 4 - + - o o quadrantes são numerados de forma padronizada conforme a Figura 1.4. Um ângulo θ pode pertencer a qualquer destes quadrantes ou estar na fronteira entre dois deles. Ainda, o sinal das funções seno, cosseno e tangente de um ângulo depende do quadrante no qual o seu argumento está. A Tabela 1.1 traz os sinais que as funções seno, cosseno e tangente apresentam para argumentos nos quatro quadrantes. A Tabela 1.2 trás o valor das funções seno, cosseno e tangente para alguns ângulos muito usados. Note que os valores estão na forma exata, isso é, não foram arredondados. 1.2.1. Equações Trigonométricas Algumas equações são fundamentais para o desenvolvimento e simplificação de expressões comuns encontradas na Robótica. Seno da soma de dois ângulos: sen (a ± b) = sen a cos b ± sen b cos a . (1.2) Tabela 1.2.: Alguns valores das funções seno, cosseno e tangente Ângulo (argumento) 11 de agosto de 2020 ◦ rad seno 0 0 0 30 π/6 45 π/4 60 π/3 1/2 √ 2/2 √ 3/2 90 π/2 180 cosseno √ √ 1 3/2 2/2 tangente √ 0 3/3 1/2 1 √ 3 1 0 @ π 0 -1 0 270 3π/2 -1 0 @ 360 2π 0 1 0 Prof. Luís Paulo Laus, Dr. Eng. 10 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Note que o sinal do segundo termo à direita acompanha o sinal de b. Cosseno da soma de dois ângulos: cos (a ± b) = cos a cos b ∓ sen a sen b . (1.3) Note a inversão do sinal, isso é, se b é negativo o produto dos senos (segundo termo à direita) é positivo e vice-versa. Teorema de Pitágoras6 : sen2 a + cos2 a = 1 . (1.4) Normalmente o Teorema de Pitágoras é enunciado como: “a soma dos catetos ao quadrado de um triângulo retângulo é igual ao quadrado da hipotenusa”. Tendo em mente o círculo trigonométricos da Figura 1.1 não é difícil verificar que a particularização da equação (1.4) é válida. 1.3. Equações Trigonométricas e a Função atan2 ρ y O seguinte sistema de equações transcendentais x = ρ cos θ y = ρ sen θ θ (1.5) x admite infinitas soluções para ρ e θ se forem dados x e y e pode ser representado graficamente como na figura ao lado. Geralmente, só se tem interesse na solução com ρ ≥ 0 e θ ∈ (−π, π] rad ou (−180◦ , 180◦ ] onde −π rad (ou −180 ) é excluído do intervalo porque representa a mesma posição angular que +π rad (ou +180◦ ). Este intervalo cobre uma única volta completa. Pode-se, também, trabalhar com θ ∈ [0, 2 π) rad (ou [0, 360◦ )), mas as calculadoras, linguagens de programação e Software para Processamento Simbólico geralmente usam o intervalo de (−π, π] rad (ou (−180◦ , 180◦ ]) quando calculam funções trigonométricas inversas. ◦ Note que x e y podem ser positivos, negativos ou nulos. Na representação gráfica, x e y são medidos no sentido positivo da esquerda para a direita e de baixo para cima, respectivamente. Para que ρ seja medido de dentro para fora do círculo, é necessário que ρ seja tomado como não negativo (positivo ou nulo) o que, junto com a restrição de valores para θ, limita em uma única solução para o problema. Solução que se obtém elevando as duas equações ao quadrado e somando: x2 = ρ2 cos2 θ y 2 = ρ2 sen2 θ x2 + y 2 = ρ2 cos2 θ + sen2 θ = ρ2 . | {z } =1 Assim, ρ=± p x2 + y 2 . Eliminando o resultado negativo tem-se: ρ= p x2 + y 2 . Conhecendo-se ρ é fácil determinar o valor de θ com as equações: x cos θ = ρ y sen θ = . ρ 6 Pitágoras de Samos (569-475 a.C.) 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 11 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Note que só faz sentido determinar o valor de θ se ρ 6= 0, isso é, se x = 6 0 ou y 6= 0. Caso contrário, qualquer valor de θ satisfará a equação (1.5). Este é um outro caso onde ocorrem infinitas soluções. Se ρ 6= 0 e como o seno e o cosseno de θ são ambos conhecidos, pode-se encontrar uma única solução para θ no intervalo (−π, π] rad ou (−180◦ , 180◦ ], pois só há um único arco neste intervalo que possui um valor específico de seno e cosseno. Neste caso, é conveniente usar a função atan2 que é a função arco-tangente de dois argumentos comum nas bibliotecas de funções matemáticas de diversas linguagens de programação (incluindo a Linguagem C) e em vários p 7 2 + y 2 cos θ e y = Software para Processamento Simbólico . Esta função é definida como θ = atan2 (y, x) =⇒ x = x p x2 + y 2 sen θ para quaisquer valores de x e y. Em outras palavras a função atan2 resolve o problema do quadrante em que o ângulo retornado deve pertencer para que os sinais de x e y não sejam trocados. Assim: θ = atan2 (y, x) onde ρ foi eliminado porque a função atan2 normaliza os seus parâmetros. Como a maioria das calculadoras portáteis não dispõe da função atan2, é necessário calcular um valor auxiliar para θ e então determinar o valor correto levando em conta o quadrante. Denotando o valor auxiliar por θ0 , tem-se que: sen θ0 = tan θ0 = cos θ0 y ρ x ρ = y se ρ 6= 0 x logo: θ0 = arctan y . x Se x for positivo não há a necessidade de ajustar o quadrante porque a função arctan retorna valores no primeiro e quarto quadrantes dependendo do sinal do argumento, isso é, neste caso do sinal de y. Contudo, se x for negativo, será necessário ajustar o quadrante correto (segundo ou terceiro) para isso, soma-se ou subtrai-se 180◦ conforme o sinal de y. Além disso, se x = 0 não é possível realizar a divisão. Assim: θ0 se x > 0 0 ◦ θ + 180 se x < 0 e y ≥ 0 θ0 − 180◦ se x < 0 e y ≤ 0 θ= +90◦ se x = 0 e y > 0 −90◦ se x = 0 e y < 0 0 se x = 0 e y = 0 . Todos estes testes são realizados pela função atan2 e são fundamentais para a determinação correta do quadrante, daí o interesse de usá-la quando ela está disponível. 1.4. Vetor Há três definições para vetor8 : 1) vetor é uma tripla (ou um terno) constituída de uma direção, um sentido e um número não negativo chamado de módulo; 2) vetor é conjunto de todos os segmentos de reta orientados na mesma −−→ direção, com o mesmo sentido e de mesmo comprimento; e 3) vetor é a diferença entre dois pontos: AB = B − A. A primeira definição é um tanto abstrata e se refere às propriedades básicas de caráter estrutural enquanto que a segunda é geométrica e indireta porque está ligada ao conceito do vetor como diferença entre dois pontos que é a terceira definição e, por sua vez, usa uma operação realizada com elementos primitivos (pontos) da geometria euclidiana. Note que no espaço tridimensional bastam três dimensões para descrever um vetor; em algumas aplicações são necessárias mais de três dimensões e pode haver vetores com mais de três elementos. 7 No MuPAD a função atan2 (y, x) é chamada de arg (x, y), com a ordem dos parâmetros trocada, no Mathematica de ArcT an[x, y] e a ordem dos parâmetros também é trocada, no Matlab, octave e na Linguagem C de atan2 (y, x) com os parâmetros na ordem dada. 8 A palavra vetor vem do latim vehere que quer dizer transportar, levar. Na verdade, vetor é o particípio passado de vehere significando, portanto, transportado ou levado. Isso faz sentido porque um vetor “transporta” um ponto de um lugar a outro; daí um vetor poder ser calculado como a diferença de dois −→ pontos: ~v = AB = B − A onde A e B são dois pontos que pode ser interpretado como B = A + ~v , ou seja, o ponto A é transportado até o ponto B pelo vetor ~v . 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. B ~v A 12 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Graficamente os vetores são representados como setas. Contudo, quando se desenha um vetor em uma determinada posição não significa que o vetor “está” nesta posição; ele está livre para se movimentar no espaço tridimensional desde que não altere o módulo, direção e sentido (daí suas definições). Já um vetor aplicado, usado principalmente para modelar forças e velocidades angulares, tem associado a si uma reta de ação ou um ponto de aplicação. Vetor é uma matriz coluna. Notação: vx ~v = vy vz h = vx vy vz iT , onde T é o operador de transposição de matrizes e vx , vy e vz são as componentes ou elementos do vetor ~v no sistema cartesiano (podem ser usados outros sistemas de coordenadas). Todos os vetores deste tipo, com três dimensões, pertencem ao espaço vetorial R3 . É possível trabalhar com vetores que pertencem ao espaço vetorial RN , onde N é um número natural não nulo. Embora não exista interpretação geométrica simples para espaços vetoriais com mais de três dimensões (N > 3), estes espaços são úteis em diversas áreas como, por exemplo, no estudo da dinâmica de robôs. O módulo de um vetor é um escalar (número simples) que é calculado por: |~v | = q vx 2 + vy 2 + vz 2 v uN uX =t v i 2 i=1 onde vi é a i-ésima componente ou elemento do vetor ~v em um espaço N dimensional, no geral N = 3, mas também há interesse nos casos onde N > 3. Se as componentes do vetor forem todos números reais então o módulo será positivo ou nulo. O versor é um vetor com módulo unitário. O versor de um vetor é um outro vetor com a mesma direção e sentido do vetor original, porém com módulo unitário. Por notação: v̂ = vers ~v = ~v . |~v | Todo o versor deve obedecer a seguinte restrição holonômica9 do versor v̂: vx 2 + vy 2 + vz 2 = 1 . As componentes de um versor são os cossenos dos ângulos formados entre o vetor e os eixos coordenados e são chamados de cossenos diretores. O vetor nulo, denotado por ~0, não possui direção e sentido e não é possível calcular o versor do vetor nulo (@ 0̂). Resumindo: Vetor: módulo, direção e sentido (é livre, pode estar em qualquer lugar; vetor livre ou free vector): ~v Vetor Aplicado: módulo, direção, sentido e ponto de aplicação ou reta de ação (line vector) Módulo: pode ser entendido como o comprimento ou magnitude do vetor:|~v | Versor: vetor de módulo unitário, só direção e sentido são importantes, redundante porque possui três números e uma restrição holonômica: v̂ 1.4.1. Produto Interno ou Escalar (Dot Product) É um tipo de produto (existem outros) de dois vetores que dá como resultado um escalar (positivo, negativo ou nulo). O produto escalar dos vetores ~u e ~v é denotado por: 9 Restrição holonômica é qualquer restrição que pode ser escrita na forma: f (x, y, z, . . . , t) = 0 onde x, y, z e t são variáveis quaisquer (t pode ser o tempo). Note que f não necessita obrigatoriamente ser uma função do tempo. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 13 Introdução à Robótica — Universidade Tecnológica Federal do Paraná ~u · ~v = |~u| |~v | cos θ onde θ é o ângulo entre os dois vetores quando se faz as origens coincidir, medido no plano ao qual os vetores pertencem sempre considerando que os vetores sejam livres mesmo que, na verdade, sejam aplicados. No cálculo do produto interno, não importa se é usado o menor ou o maior (interno ou externo) valor do ângulo medido porque o cosseno tem o mesmo valor numérico. O produto escalar é comutativo e associativo, ou seja: ~u · ~v = ~v · ~u ~u · (~v · ~r) = (~u · ~v ) · ~r = ~u · ~v · ~r . Se dois vetores estiverem expressos no sistema cartesiano, o produto escalar é calculado usando os valores das componentes dos vetores (não há a necessidade de calcular o módulo dos vetores e o ângulo entre eles): ux ~u = uy uz vx , ~v = vy vz leva a ~u · ~v = ux vx + uy vy + uz vz = N X ui vi . (1.6) i=1 A definição de produto escalar usando o símbolo de somatória (letra grega sigma) na equação (1.6) é interessante quando se usa um número de dimensões diferente de três. Módulo de vetor pode ser calculado pelo produto escalar: v v uN uN uX uX √ t vi vi = t vi 2 |~v | = ~v · ~v = i=1 i=1 embora o produto escalar possa ser um número positivo ou negativo, o produto escalar de um vetor por si mesmo (auto produto) é sempre positivo. Se os vetores forem interpretados como matrizes colunas, o produto escalar por ser interpretado como: ~u · ~v = ~uT ~v √ √ |~v | = ~v · ~v = ~v T ~v . Rigorosamente, ~uT ~v é uma matriz de dimensão 1 × 1 e não um escalar. Contudo, os autores mais atualizados costumam relevar a diferença conceitual graças a um forte embasamento teórico que está além do escopo deste texto. Assim, o produto escalar pode ser visto como um operador que transforma o primeiro vetor em uma matriz linha, e esta matriz é multiplicada pelo segundo vetor. De outra forma, é possível encarar o operador · com um operador unário pós-fixo (colocado após o operando) que transforma o operando (um vetor, matrix coluna) em uma matriz linha. Ângulo entre Vetores O ângulo entre dois vetores ~u e ~v pode ser calculado por: ~u ^ ~v = θ = arccos ~u · ~v . |~u| |~v | Não existe o conceito de sentido de medição de ângulo θ, ele é apenas o ângulo entre os vetores não importando se é medido de ~u para ~v ou de ~v para ~u. Devido ao uso da função arccos o resultado está sempre no intervalo [0, 180◦ ] ou [0, π] radianos. Portanto, θ é o menor ângulo entre os dois vetores. Nenhum dos vetores pode ter o módulo nulo; o vetor nulo, denotado por ~0, não possui direção e sentido, portanto não se pode determinar qual o ângulo que ele faz com outro vetor. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 14 Introdução à Robótica — Universidade Tecnológica Federal do Paraná ~ u ~ u θ θ ~v ~v Projeção de Vetores Pode-se calcular o comprimento da projeção de um vetor em outro por: ~u · ~v |~u| ~u · ~v proj~v ~u = |~u| cos θ = |~v | proj~u ~v = |~v | cos θ = onde θ é o ângulo entre os dois vetores ~v ~v ~v |~u | co s θ ~v θ θ θ ~ u ~ u θ ~ u |~v | cos θ − |~v | cos θ ~ u |~v | cos θ Note que a projeção de ~v sobre ~u é orientada, isso é, se θ > 90◦ a projeção se torna negativa indicando o sentido contrário à ~u. Ortogonalidade de Vetores Se θ = ±90◦ ⇒ ~u · ~v = 0 e os vetores são ditos ortogonais. Este conceito vale mesmo quando há mais de três dimensões, embora seja difícil de definir geometricamente o que seja “ortogonalidade” com mais de três dimensões. Cossenos Diretores de um Vetor As coordenadas de um vetor podem ser vistas com a projeção do vetor em cada um dos eixos coordenados: vx = projX̂ ~v vy = projŶ ~v vz = projẐ ~v onde X̂, Ŷ e Ẑ são os versores dos eixos coordenados. As coordenadas de um versor são os cossenos dos três ângulos que o versor faz com os eixos dos xx, yy e zz: projX̂ v̂ = |v̂| cos θx = cos θx projŶ v̂ = |v̂| cos θy = cos θy projẐ v̂ = |v̂| cos θz = cos θz e estes valores são chamados de cossenos diretores do vetor ~v . 1.4.2. Produto de Matrizes O produto das matrizes A e B resultando na matriz C é denotado por: C = AB 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 15 Introdução à Robótica — Universidade Tecnológica Federal do Paraná e é geralmente definido pela equação: cij = n X (1.7) ai k bk j k=1 onde n é o número de colunas de A e de linhas de B (o número tem que coincidir, se não coincidir as matrizes A e B não são tais para multiplicação). Note que esta equação define na verdade cada um dos elementos da matriz C que é o resultado do produto das matrizes A e B. Para executar a operação de multiplicar duas matrizes reduzindo as chances de cometer um erro e sem ter que usar a equação acima para calcular cada elemento da nova matriz e depois montar a nova matriz colocando cada elemento calculado na posição correta, costuma-se usar um artifício: escreve-se a matriz B (a segunda matriz) logo abaixo e a direita da matriz A (a primeira matriz); multiplica-se cada elemento de uma linha de A por cada elemento de uma coluna de B seguindo e soma-se o resultado; o total é colocado no cruzamento das linhas com as colunas. A a11 a21 a31 C B a12 a22 a32 c11 b11 b21 b12 b22 c11 = a11 b11 + a12 b21 Produto de Matrizes como Produto Escalar Cada elemento da matriz que resulta do produto de duas matrizes pode ser visto como sendo formado pelo produto escalar das linhas da primeira matriz pelas colunas da segunda. Pode-se observar que cij na equação (1.7) está escrito na mesma forma da equação (1.6). Assim: cij = n X a i k bk j = a i T · bj , k=1 isso é, cada elemento de C é o produto escalar de uma linha de A por uma coluna de B. Se as matrizes A e B forem reescritas como linhas (vetores transpostos) e colunas (vetores), respectivamente, tem-se um produto de uma matriz coluna (formada pelas linhas de A) por uma matriz linha (formada pelas colunas de B). O produto de um elemento da “nova” matriz A pelo elemento da “nova” matriz B é um elemento de C e é também o produto escalar de uma linha por uma coluna, ou seja: a1j a1j T · bi1 a1j T · bi2 h i C = a2j bi1 bi2 = a2j T · bi1 a2j T · bi2 a3j a3j T · bi1 a3j T · bi2 onde a1j é a primeira linha da matriz A, a2j é a segunda linha, a3j é a terceira, bi1 é a primeira coluna da matriz B e bi2 é a segunda. 1.4.3. Produto Externo ou Vetorial (Cross Product) É um tipo de produto entre vetores que resulta em um vetor. O produto vetorial dos vetores ~u e ~v resultando no vetor w ~ é denotado por w ~ = ~u × ~v e o módulo de w ~ é dado por: |w| ~ = |~u| |~v | sen θ onde θ é o menor ângulo entre os vetores ~u e ~v quando se faz as origens coincidir, medido no plano ao qual os vetores pertencem sempre considerando que os vetores sejam livres mesmo que, na verdade, sejam aplicados. Note que θ é suposto positivo porque não há o conceito de sentido de medição do ângulo (não importa se o ângulo é medido de ~u para ~v ou ~v para ~u) para o cálculo do módulo. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 16 Introdução à Robótica — Universidade Tecnológica Federal do Paraná A direção do vetor w ~ é perpendicular aos vetores ~u e ~v simultaneamente. O sentido do vetor w ~ é dado pela “regra da mão direita” que as vezes é chamada de “regra do tapa”: mantendo o polegar da mão direita perpendicular aos demais dedos, alinha-se o dedo indicador com o vetor ~u (por que ele aparece em primeiro no termo ~u × ~v ) gira-se a mão em torno do polegar até alinhar o indicador com o vetor ~v percorrendo o menor caminho possível (menor ângulo) descrevendo um plano no espaço tridimensional com o indicador. O sentido de w ~ será o do polegar. Observe que o produto vetorial não é comutativo porque a troca de ~u por ~v e vice-versa implicaria na troca do sentido do resultado, ou seja, se w ~ = ~u × ~v ⇒ ~v × ~u = −w. ~ Diz-se, então, que o produto vetorial é anticomutativo. Note que se os vetores ~u e ~v forem paralelos (θ = 0) ou antiparalelos (θ = 180◦ ), w ~ será nulo (w ~ = ~0). O sentido dado pela “regra da mão direita” pode parecer arbitrário, mas se os vetores ~u, ~v e w ~ forem colocados lado a lado, nesta ordem, formando uma matriz 3 × 3, o determinante desta matriz será positivo (ou nulo se w ~ = ~0). Se o sentido de w ~ for invertido, como seria o caso de se usar a mão esquerda ao invés da direita, o determinante será negativo. Assim, é criada a noção de sentido positivo para o terno triortogonal usado nos sistemas de coordenadas cartesianos. Quando são usadas coordenadas cartesianas há uma regra mais simples para se calcular o produto vetorial sem que haja a necessidade de calcular o módulo e determinar a direção e o sentido (o que é particularmente difícil de se fazer para vetores genéricos e impossível de se implementar em um computador). Para isso, usa-se o determinante de uma matriz 3 × 3 construída colocando-se os dois vetores lado a lado10 , mantendo a ordem dada no produto, e uma terceira coluna formada pelos símbolos X̂, Ŷ e Ẑ, ou seja: ux vx X̂ uy vz − uz vy ~u × ~v = uy vy Ŷ = uy vz X̂ + uz vx Ŷ + ux vy Ẑ − uz vy X̂ − ux vz Ŷ − uy vx Ẑ = uz vx − ux vz uz vz Ẑ ux vy − uy vx onde X̂, Ŷ e Ẑ são os versores paralelos aos eixos dos xx, yy e zz, respectivamente11 . O produto vetorial pode, ainda, ser visto como um operador que transforma o primeiro vetor em uma matriz, e esta matriz é multiplicada pelo segundo vetor. Em outras palavras, é possível encarar o operador × com um operador unário pós-fixo (colocado após o operando) que transforma o operando (um vetor) em uma matriz. Mais especificamente, uma matriz antissimétrica12 : 0 −uz uy ~u× = uz 0 −ux −uy ux 0 pode ser substituída na expressão ~u × ~v resultando: 0 −uz ~u × ~v = (~u×) ~v = uz 0 −uy ux uy −ux 0 vx uy vz − uz vy vy = uz vx − ux vz vz ux vy − uy vx . Muitas vezes o operador ~u× é denotado pela função S (~u), onde S vem de skew (antissimétrico, em inglês). Diferente do produto escalar, o produto vetorial só é definido para vetores do espaço três e sete dimensões, ou seja, para vetores que pertencem ao R3 ou R7 . Aqui nós só usamos em três dimensões. 1.4.4. Decomposição de Vetores 10 Também é possível empilhar os vetores: ~ u × ~v = X̂ Ŷ Ẑ ux uy uz vx vy vz 11 Os livros de Geometria Analítica geralmente usam os símbolos ı̂, ̂ e k̂ para o mesmo propósito. Já os de física costumam usar ax , ay e az ou âx , ây e âz . Os de Robótica, quase que na totalidade, usam X̂, Ŷ e Ẑ, mas alguns usam x̂, ŷ e ẑ. 12 Matriz antissimétrica é uma matriz que, quando somada com sua transposta, resulta na matriz nula, ou seja, A é antissimétrica se A + AT = 0. A diagonal principal de uma matriz antissimétrica é sempre nula. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 17 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Dado dois vetores ~v e ~u é possível decompor um deles em duas componentes: uma paralela ao segundo vetor e outra ortogonal ao segundo vetor. Assim ~v ~v⊥~u ~ u ~u ~uT ~v ~uT ~u ~u ~uT = I3 − T ~v ~u ~u ~vk~u = (1.8) ~v⊥~u (1.9) ~vk~u onde ~vk~u é a componente do vetor ~v paralela ao vetor ~u e ~v⊥~u é a componente do vetor ~v ortogonal ao vetor ~u. Note que os vetores devem ser interpretados como sendo matrizes colunas. A equação (1.8) se deduz levando em conta que a direção de ~vk~u é a mesma que de ~u, ou seja, ~vk~u = α û = α ~u ~u =α√ |~u| ~uT ~u α = proj~u ~v = ~u · ~v ~uT ~v =√ |~u| ~uT ~u onde α é a projeção de ~v sobre ~u dada por: logo: ~u ~uT ~v ~u ~uT √ ~vk~u = √ = T ~v . ~u ~u ~uT ~u ~uT ~u A equação (1.9) vem do fato da soma das duas componentes ser igual ao vetor ou seja: ~v = ~vk~u + ~v⊥~u logo: ~v⊥~u = ~v − ~vk~u ~u ~uT = I 3 ~v − T ~v ~u ~u ~u ~uT ~v . = I3 − T ~u ~u Se o vetor ~u for unitário, podemos fazer algumas simplificações. Assim, usando o versor k̂ para evitar confusão: ~vkk̂ = k̂ k̂ · ~v = k̂ k̂ T ~v ~v⊥k̂ = I 3 − k̂ k̂ T ~v = −k̂ × k̂ × ~v . 1.5. Sistemas de Coordenadas Para se descrever numericamente um ponto, vetor ou versor é necessário usar um sistema de coordenadas. Os tipos de sistemas de coordenadas mais usados são: 1) o sistema cartesiano ou retangular; 2) o sistema cilíndrico; e 3) o sistema esférico. Em robótica geralmente só se usa o sistema cartesiano. z y O x −z 11 de agosto de 2020 O sistema de coordenadas cartesiano ou retangular é composto de três retas orientadas chamadas de eixos coordenados (o eixo dos xx, dos yy e dos zz) que são ortogonais entre si e que se interceptam (concorrem) em um ponto chamado origem. Note que, uma vez fixados dois eixos (por exemplo: o dos xx e o dos yy), é possível escolher duas orientações para o terceiro eixo (na figura ao lado o eixo dos zz pode ser orientado para cima ou para baixo). Por convenção, o sentido escolhido será para cima formando o que se chama “terno tri-ortogonal positivo”. Para estabelecer o sentido do terceiro eixo dado qualquer dois eixos é possível usar a “regra da mão direita” (ver Seção 1.4.3) tomando o devido cuidado com a ordem dos eixos. Para determinar o sentido do eixo dos zz deve-se mover a mão do eixo dos xx para o dos yy; para determinar o dos xx, de yy para zz; e para determinar o dos yy de zz para xx. Prof. Luís Paulo Laus, Dr. Eng. 18 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Um sinônimo para sistema de coordenadas é a palavra frame (em inglês). Mais exatamente um frame é uma estrutura de dados para armazenar as informações relativas ao sistema de coordenadas. Normalmente há vários sistemas de coordenadas diferentes, que podem ou não ser do mesmo tipo, envolvidos na solução de um problema. Qualquer que seja o tipo de sistema de coordenadas (cartesiano, cilíndrico ou esférico) usado ele será denotado por uma letra maiúscula. Por notação, um sistema de coordenadas A = frame A = {A}, ou sejam, são usadas chaves para denotar os sistemas de coordenadas. Para descrever um sistema de coordenadas podem ser usados a origem do sistema (um ponto) e três versores, cada um paralelo a um dos eixos do sistema. Ou seja, para descrever o sistema de coordenadas A pode ser dado: z OA ou PORG A um ponto X̂ A e três versores ŶA Ẑ , ẐA {A} ŶA y X̂A A OA x onde: OA é a origem do sistema de coordenadas A, ou seja, é um ponto as vezes denotado por PORG A ; X̂A é o versor do eixo dos xx do {A}; ŶA é o versor do eixo dos yy do {A}; ẐA é o versor do eixo dos zz do {A}. Como é possível determinar uma reta usando um ponto e um vetor (ou versor). Desta forma, é possível determinar cada eixo de um sistema de coordenadas usando o seu respectivo versor e a origem. Por isso, o versor do eixo quase se confunde com o próprio eixo. Por simplicidade de notação, cada eixo coordenado é denotado apenas por seu versor. É importante que fique bem claro que o eixo e o seu versor não são a mesma coisa, embora seja comum desenhar um eixo (um reta orienta) e anotar o nome do versor do eixo ao invés do nome do eixo propriamente dito. Para poder registrar o valor numérico das coordenadas de um ponto, vetor ou versor é necessário usar um sistema de coordenadas de referência. Por notação, o sistema de coordenadas tomado como referência aparece como sobrescrito antes do nome do vetor ou ponto (por exemplo: B P é um ponto escrito no sistema de coordenadas B; A OB é um ponto escrito no sistema de coordenadas A, o ponto em questão é a origem de {B}). Um sistema de coordenadas também é sempre escrito em relação a outro sistema conhecido com exceção do primeiro de todos (o sistema de coordenadas universal U ). Como o sistema de coordenadas é geralmente dado por um ponto e três versores, basta escrever este ponto e os versores em relação ao sistema de coordenadas de referência. Assim, U {A} representa o sistema de coordenadas A escrito em relação ao sistema de coordenadas U , ou seja, U {A} representa um ponto e três vetores todos escritos (com os valores numéricos) em relação ao sistema de coordenadas U . Embora os valores numéricos das coordenadas de um ponto ou vetor possam variar, dependendo do sistema de coordenadas usado como referência, o ponto ou vetor continua sendo o mesmo. Logo, quando não interessar o valor numérico pode-se omitir o sistema de coordenadas de referência na notação. Sempre que se está trabalhando com os valores numéricos dos vetores é obrigatório registrar o sistema de coordenadas de referência (sobrescrito antes do nome do vetor) em relação ao qual o vetor está escrito. Os valores numéricos destes versores, em relação ao próprio sistema de coordenadas a que eles se referem são: A X̂A = [ 1 0 T 0 ] ŶA = [ 0 1 T 0 ] ẐA = [ 0 0 T 1 ] A A e a origem A OA = [ 0 0 T 0 ] = ~0 A coordenada cartesiana de um vetor (ou ponto) em um determinado eixo de um sistema de coordenadas é a projeção do vetor sobre este eixo. Para cada coordenada tem-se uma projeção. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 19 Introdução à Robótica — Universidade Tecnológica Federal do Paraná ŶA Av y ~v X̂A Av A vx = projA X̂A A A vy = projA ŶA A A vz = projA ẐA A x projA X̂A A projA ŶA A ~v = A ~v = A ~v = A X̂A ·A ~v ŶA ·A ~v ẐA ·A ~v ~v ~v Um vetor e os versores do sistema de coordenadas podem estar expressos em outro sistema de coordenadas (desde que seja o mesmo sistema para todos para que se possa efetuar as operações). Assim é lícito escrever: onde seja: B X̂A , B ŶA e B A vx = projB X̂A B ~v = B A vy = projB ŶA B ~v = B ŶA ·B ~v A vz = projB ẐA B ~v = B ẐA ·B ~v X̂A ·B ~v ẐA são as projeções dos versores do sistema de coordenadas A em {B}. Veja, ainda, que a notação vetorial A X̂A , A ŶA e A ẐA permite criar uma segunda notação para os vetores, ou ~v = vx A X̂A + vy A ŶA + vz A ẐA onde X̂, Ŷ e Ẑ são dados no se próprio sistema, porque: 1 0 A A A ~v = vx X̂A + vy ŶA + vz ẐA = vx 0 + vy 1 0 0 + vz 0 = 0 + vy + 0 = vy . 1 0 0 vz vz 0 vx 0 0 vx 1.6. Descrição de Posição Uma vez que um sistema de coordenadas está estabelecido, é possível determinar a localização de qualquer ponto no espaço tridimensional usando um vetor de posição (uma matriz 3 × 1). O vetor de posição P~ que localiza o ponto P é −−→ um vetor que vai da origem do sistema de coordenadas até ponto P e, portanto, é dado por P~ = OP = P − O. Em um sistema {A}, A P~ = A P −A OA . Como A OA = ~0, tem-se que A P~ = A P − ~0 = A P , ou seja, o vetor de posição tem o mesmo valor numérico (mesmas coordenadas) que o ponto. Assim, por abuso de notação, usa-se um ponto ao invés de um vetor de posição sempre que não houver possibilidade de interpretação errônea. Se for usado um sistema cartesiano as coordenadas serão únicas para um dado ponto. Se as coordenadas cartesianas de um ponto forem iguais as de outro ponto, os dois pontos são coincidentes. ẐA A AP ~ OA P A P = A P~ = ŶA px py = pz A px py A pz A X̂A A descrição de posição de um corpo pode ser feita pela descrição de posição de qualquer ponto do corpo ou mesmo de um ponto fora do corpo, mas que se mova junto com ele. Um movimento de translação puro, onde a posição relativa de todos os pontos do corpo não se altera, pode ser descrito como a variação de um único ponto do corpo (ou que se mova em paralelo com o corpo). Como um ponto só possui três coordenadas a descrição da variação destas três coordenadas descreve completamente o movimento de translação puro. Diz-se, então, que só existem três graus de liberdade de translação (ou de posição). 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 20 Introdução à Robótica — Universidade Tecnológica Federal do Paraná 1.7. Descrição de Orientação Orientação é uma propriedade dos corpos. Em robótica, estabelecer a orientação de um corpo (uma parte do manipulador ou uma peças a ser manipulada) é tão importante quanto estabelecer a posição do corpo. Note que pontos não possuem orientação e não é possível estabelecer a orientação de um corpo usando um ponto, mas é possível estabelecer a posição de corpo usando um ponto. Para descrever a orientação de um corpo é suficiente (e conveniente) usar um sistema de coordenadas. Pode-se, então, atrelar um sistema de coordenadas ao corpo que se deseja descrever a orientação. Quando o corpo é movido (reorientado) os versores dos eixos coordenados são movidos junto com o corpo. Se a orientação relativa do corpo e dos eixos era conhecida antes do corpo ser movimentado, sabendo a nova orientação dos eixos é possível determinar a nova orientação do corpo. Note que um sistema de coordenadas é composto de três versores e um ponto. O ponto não é importante para a descrição da orientação, mas pode ser usado para a descrição da posição do corpo. Desta forma, a posição e a orientação de um corpo podem ser determinadas fixando um sistema de coordenadas ao corpo. Quando o corpo é movido (transladado ou rotacionado) o sistema de coordenadas deverá mudar para refletir as alterações de posição e orientação do corpo. Ẑpeça X̂peça Ŷpeça Da mesma forma que a translação, só existem três graus de liberdade de rotação. Isso significa que a orientação de um corpo pode ser descrita por apenas três números (ou três equações independentes). No total, um corpo só possui seis graus de liberdade: três de translação e três de rotação. Pode entender como sendo três graus de liberdade de posição e três de orientação. Assim, usar um sistema de coordenadas (três versores e um ponto) para descrever a posição e a orientação de um corpo é redundante. Um sistema de coordenadas possui doze números (três coordenadas por elemento) e é de se esperar que existam restrições sobre os valores destes números. De fato, como os versores têm módulo unitário surgem três equações de restrição e como eles são ortogonais entre si surgem mais três (o produto interno ou escalar de um versor pelos outros é nulo) equações. Estas seis equações de restrição holonômica reduzem os doze graus de liberdade do sistema de coordenadas (composto por doze números) para apenas seis: os três graus de liberdade de translação e os três graus de liberdade rotação. É possível usar formas alternativas para descrever a posição e a orientação de corpo. Por exemplo, podem ser dados três pontos do corpo (há restrições severas na escolha dos pontos, por exemplo, eles não podem estar alinhados). Embora esta forma de se descrever a orientação seja válida ela não é prática. Quando o corpo é movido, é complicado estabelecer o novo valor dos pontos a menos que sejam usados sistemas de coordenadas em cada parte móvel. Mas se forem usados sistemas de coordenadas, para que usar pontos? Pode-se, também usar três ângulos de rotação medidos em relação a eixos convenientes. Ou então usar um vetor: rotação em torno do versor do vetor de um ângulo igual ao módulo do vetor. Mas isso não simplifica a composição de movimentos, fundamental no estudo da robótica. Estas formas são usadas para especificar orientação em casos particulares (programação), mas não são úteis no modelamento do robô. É possível, ainda, usar um quatérnio (quatro números, ver Seção 1.7.2) ou um quatérnio unitário (quatro números mais uma restrição holonômica), mas as operações ficam mais complicadas impossibilitando o uso de Software para Processamento Simbólico. Nas próximas seções ficará claro que o uso de sistemas de coordenadas é simples, robusto e práticos podendo ser assimilado facilmente. É vantajoso usar múltiplos sistemas de coordenadas (um para cada corpo) mesmo parecendo redundante o pouco eficiente. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 21 Introdução à Robótica — Universidade Tecnológica Federal do Paraná 1.7.1. Matriz de Rotação Considere os sistemas {A} e {B} na figura ao lado. Pode-se imaginar que {A} e {B} eram inicialmente coincidentes mas que {B} sofreu uma rotação de um ângulo θ ao redor do eixo dos zz. Os eixos dos zz dos dois sistemas continuam coincidindo após a rotação, mas os eixos dos xx e dos yy não. Observando o plano xy é fácil calcular os versores de um dos X̂A sistemas em relação ao outro sistema. ŶA ẐA ≡ ẐB ŶB θ sen θ ŶB OA cos θ X̂B θ ŶA sen θ cos θ X̂A X̂B RotZ(θ) Assim, o versor do eixo dos xx do sistema {B} em relação à {A} é dado por: X̂B · X̂A projX̂A X̂B cos θ A X̂B = sen θ = projŶ X̂B = X̂B · ŶA A X̂B · ẐA projẐA X̂B 0 onde os versores são dados em um sistema conveniente (que não foi indicado porque pode ser qualquer um). Da mesma forma, o versor do eixo dos yy é dado por: − sen θ projX̂A ŶB ŶB · X̂A A ŶB = cos θ = projŶ ŶB = ŶB · ŶA A 0 projẐA ŶB ŶB · ẐA e do eixo dos zz (que não foi alterado pela rotação), por: 0 projX̂A ẐB A ẐB = 0 = projŶ ẐB A projẐA ẐB 1 ẐB · X̂A = ẐB · ŶA ẐB · ẐA . Para quaisquer sistemas de coordenadas, pode-se registrar as coordenadas dos versores dos eixos de um sistema dadas em relação ao segundo sistema em uma matriz 3 × 3: A BR = A X̂B .. . A ŶB .. . A ẐB (1.10) . Esta matriz é chamada de matriz de rotação porque representa a rotação de um sistema: o sistema {A} foi rotacionado até obter o sistema {B}. Note que, por notação, o superíndice de A B R é o sistema de referência {A} em relação qual os versores de {B} são escritos e B é o subíndice de A R. De outra forma, o subíndice de A B B R é o sistema de se obteve da rotação do sistema {A} que, por sua vez, aparece como superíndice de A R. B Cada coluna da matriz de rotação da equação (1.10) é a projeção do versor os versores do outro, assim: . . A A X̂B .. A ŶB .. A ẐB BR = projX̂A X̂B projX̂A ŶB projX̂A ẐB = projŶ X̂B projŶ ŶB projŶ ẐB A A A projẐA X̂B projẐA ŶB projẐA ẐB X̂B · X̂A ŶB · X̂A ẐB · X̂A = X̂B · ŶA ŶB · ŶA ẐB · ŶA X̂B · ẐA ŶB · ẐA ẐB · ẐA 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. de um sistema de coordenadas sobre 22 Introdução à Robótica — Universidade Tecnológica Federal do Paraná onde o valor numérico dos versores é dado em um sistema de coordenadas conveniente (o mesmo sistema de referência para os dois sistemas {A} e {B}). Veja que em cada elemento desta matriz está escrito a projeção de um versor de {B} sobre um versor de {A}. Contudo, a projeção de um versor sobre outro é uma operação comutativa porque o produto escalar é comutativo e o módulo dos versores é unitário. Assim: A BR projX̂A X̂B projX̂A ŶB = projŶ X̂B projŶ A A projẐA X̂B projẐA projX̂B X̂A projŶB = projX̂ ŶA projŶ B B projX̂B ẐA projŶB X̂ · X̂B X̂A · ŶB A = ŶA · X̂B ŶA · ŶB ẐA · X̂B ẐA · ŶB projX̂A ẐB projŶA ẐB ŶB projẐA ẐB X̂A projẐB X̂A ŶA projẐB ŶA ẐA projẐB ẐA X̂A · ẐB ŶA · ẐB . ẐA · ẐB ŶB Examinando a primeira linha da matriz acima (a do meio das três matrizes) é fácil observar que os três elementos desta linha são as projeções do versor X̂A sobre cada um dos versores do sistema {B}. Em outras palavras, a primeira linha contém as coordenadas do versor X̂A dadas em relação ao sistema {B}, ou seja, B T X̂A = h projX̂B X̂A projŶB X̂A projẐB X̂A i = O mesmo vale para as outras linhas: a segunda linha vale B ŶAT e a A B R também pode ser vista como: B X̂A T B T A ŶA BR = B ẐA T h X̂A · X̂B X̂A · ŶB terceira linha vale B X̂A · ẐB i . T ẐA . Assim, a matriz de rotação onde cada linha contém um versor de {A} transposto visto do sistema {B}. Se esta matriz for transposta, obtém-se: A T BR = .. . B X̂A B ŶA .. . B . ẐA Se A e B forem trocados na definição de matriz de rotação dada pela equação (1.10), obtém-se: B AR = .. . B X̂A B ŶA .. . B ẐA que contém, em cada coluna, um versor do sistema {A} dado em relação ao sistema {B} e que é exatamente igual a transposta da matriz de rotação A B R. Assim: B AR T =A BR . Isso significa que se um sistema de coordenadas {B} for dados em relação a outro {A}, o sistema de coordenadas {A} também está sendo dados em relação ao sistema {B}, ao menos no tocante a orientação dos sistemas, sem levar em consideração a posição da origem. Multiplicando a transposta da matriz de rotação 11 de agosto de 2020 A BR (dada pela equação (1.10)) pela por ela mesma. Obtém-se: Prof. Luís Paulo Laus, Dr. Eng. 23 Introdução à Robótica — Universidade Tecnológica Federal do Paraná A T A BR BR = = A X̂B T h ŶB T A ẐB T A A A X̂B ·A X̂B X̂B A A ŶB X̂B ·A ŶB A ẐB A X̂B ·A ẐB A A ŶB · X̂B A A ŶB · ŶB A A A A A A ẐB · X̂B ẐB · ŶB i A ŶB · ẐB ẐB ·A ẐB onde os elementos da diagonal principal são produtos escalares de um versor por si mesmo e valem o módulo ao quadrado do versor que, por sua vez, vale um. Os elementos fora da diagonal principal são produtos escalares de dois versores ortogonais entre si e, portanto, valem zero. Assim: 1 0 0 A T A B R B R = 0 1 0 = I3 0 0 1 o que significa que a transposta da matriz de rotação ordem, é igual a matriz identidade, ou seja: A T BR A BR é igual à inversa de A B R, já que o produto das duas, nesta −1 =A =B B R A R. As matrizes de rotação são ortogonais: o produto escalar de uma coluna pela outra dá zero. Este fato gera três restrições sobre a matriz de rotação; aliado as outras três (o módulo de cada coluna da matriz vale sempre um) totalizam seis restrições. Isso implica que uma matriz de rotação, apesar de possuir nove números, só pode representar (ou refletir) três verdades independentes já que existem seis equações de dependência funcional que restringem os graus de liberdade que a matriz representa. A matriz A B R que corresponde a projeção de {B} em {A} é chamada de matriz de rotação de {A} para {B} porque será usada na descrição de um novo sistema de coordenadas, {B}, conhecendo-se o sistema de coordenadas A, se for interpretada coluna à coluna. Veja que a matriz A B R também descreve o sistema de coordenadas A em {B}, se for lida linha à linha. As matrizes de rotação formam o grupo ortogonal especial chamado de SO (n) onde n é a dimensão do espaço (n = 3 para o caso do espaço 3D). Todas as matrizes deste grupo tem determinante unitário. Há também o grupo ortogonal (geral) chamado de O (n). As matrizes do O (n) possuem determinante ±1. O subgrupo com determinante positivo são as matrizes de rotação e o com determinante negativo realizam uma rotação imprópria combinando a rotação com reflexão (espelhamento). A álgebra formada pelas matrizes de rotação, ou SO (n), é uma álgebra de Lie denotada por so (n). Se a matriz de rotação A BR produz uma rotação em torno do vetor B ~v então A B ~v = A v = B ~v BR ~ A já que B ~v não sobre rotação em torno dele mesmo. Assim, B ~v é um dos autovetores de A B R. Com B R tem dimensão 3 × 3 ela deve ter três autovetores e três autovalores. O primeiro autovalor é 1 e os outros dois são complexos conjugados: cos θ ± j sen θ onde θ é o ângulo de rotação. Descrição de um Sistema de Coordenadas Usando Matrizes de Rotação Um sistema de coordenadas pode ser dado por um ponto e três versores paralelos aos eixos coordenados. Os três versores podem ser agrupados formado uma matriz de rotação. Assim, uma forma conveniente de registrar um sistema de coordenadas é através de uma matriz de rotação e um ponto: A {B} = {A B R, A OB } onde: A BR é a matriz de rotação de {A} para {B} (contém os versores de {A} projetados em {B}) A é a origem de {B} em relação à {A} OB 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 24 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Fórmula de Rodrigues A matriz de rotação R produz uma rotação sobre o vetor ~v transformando-o no vetor ~v 0 , ou seja ~v 0 = R ~v . Rodrigues13 [7] descobriu que uma rotação em torno de um eixo que passa pela origem pode ser expressa em função de quatro parâmetro: um versor k̂ que especifica a direção e sentido do eixo rotação; e um ângulo θ. Assim, é possível escrever uma matriz de rotação R em função do versor k̂ e do ângulo θ. Na forma matricial, a equação descoberta por Cayley, mas atribuída erroneamente a Rodrigues, é dada por: ~v 0 = R ~v onde kx kx v θ + c θ R = ky kx v θ + kz s θ kz kx v θ − ky s θ kx ky v θ − kz s θ kx kz v θ + ky s θ ky kz v θ − kx s θ kz kz v θ + c θ ky ky v θ + c θ kz ky v θ + kx s θ onde, por sua vez, c θ = cos θ, s θ = sen θ, v θ = 1 − cos θ e k̂ = h kx Para deduzir a Fórmula de Rodrigues observe que, na figura ao lado, o vetor ~v 0 , resultante da rotação do vetor ~v em torno do eixo dado pelo versor k̂ que passa pela origem O de um ângulo θ, pode ser calculado por: ky P kz θ −−→ NV −−→ VQ ~v = k̂ projk̂ ~v = k̂ k̂ · ~v −−→ −−→ −−→ = N P c θ = OP − ON c θ = ~v − k̂ k̂ · ~v c θ = k̂ × ~v s θ .14 N Q −−→ ON iT V −−→ −−→ −−→ ~v 0 = ON + N V + V Q onde ~v 0 k̂ k̂ · ~v P V N θ k̂ × ~v k̂ θ Q O onde o vetor k̂ × ~v é simultaneamente ortogonal à ~v e k̂ e −−→ k̂ × ~v é igual à N P . −−→ −−→ −−→ Os vetores N V e V Q são obtidos escalando os vetores ortogonais N P e k̂ × ~v que têm o mesmo módulo. Os −−→ −−→ vetores N V e V Q podem ser vistos como sendo os catetos adjacente e oposto, respectivamente, do triângulo retângulo −−→ −−→ V OQ que tem hipotenusa igual a k̂ × ~v = N P . O fato de que k̂ × ~v = N P é no mínimo curioso. Observe o −−→ c \ triângulo retângulo N OP , o módulo do vetor N P corresponde ao comprimento do cateto oposto ao ângulo N OP = k̂ ~v −−→ c \ e o módulo de ~v corresponde a hipotenusa do triângulo, portanto N P = |~v | sen N OP = |~v | k̂ sen k̂ ~v = k̂ × ~v já que k̂ = 1. Assim, pode-se escrever: −−→ −−→ −−→ ~v 0 = ON + N V + V Q = k̂ k̂ · ~v + ~v − k̂ k̂ · ~v c θ + k̂ × ~v s θ = ~v c θ + k̂ k̂ · ~v (1 − c θ) + k̂ × ~v s θ = ~v c θ + k̂ k̂ · ~v v θ + k̂ × ~v s θ . 13 Benjamin Olinde Rodrigues (1794-1851). O nome da fórmula foi atribuído erroneamente a Rodrigues; ela de fato foi deduzida por Cayley. O uso de meio ângulo na formulação de rotações e a descoberta de que uma rotação pode ser representada por um vetor e um ângulo são de Rodrigues. 14 A função v ou seno-verso é chamada de “função seno ao avesso” ou “função seno rebatida”. A cerca de 500 anos atrás ela já foi considerada mais importante que função cosseno. Ela é usada aqui para economizar espaço e otimizar o número de operações quando for feita uma implementação prática da fórmula. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 25 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Substituindo os vetores pelas suas componente e fatorando as componentes de ~v , é possível colocar a equação acima na forma matricial: vx c θ + (ky vz − kz vy ) s θ + kx (kx vx + ky vy + kz vz ) v θ ~v 0 = vy c θ + (kz vx − kx vz ) s θ + ky (kx vx + ky vy + kz vz ) v θ vy c θ + (kx vy − ky vx ) s θ + kz (kx vx + ky vy + kz vz ) v θ (kx kx v θ + c θ) vx + (ky kx v θ − kz s θ) vy + (kx kz v θ + ky s θ) vz = (kx ky v θ + kz s θ) vx + (ky ky v θ + c θ) vy + (ky kz v θ − kx s θ) vz (kx kz v θ − ky s θ) vx + (ky kz v θ + kx s θ) vy + (kz kz v θ + c θ) vz kx kx v θ + c θ ky kx v θ − kz s θ kx kz v θ + ky s θ vx = kx ky v θ + kz s θ ky ky v θ + c θ ky kz v θ − kx s θ vy vz kx kz v θ − ky s θ ky kz v θ + kx s θ kz kz v θ + c θ h iT onde a matriz 3 × 3 multiplicada pelo vetor ~v = vx vy vz na equação acima corresponde à matriz de rotação R. Note que, nas equações acima, não foi indicado o sistema de referência porque todos os pontos e vetores estão dados no mesmo sistema. Muitas vezes a Fórmula de Rodrigues é apresentada como uma matriz de rotação como: Rot k̂, θ = c θ I 3 + v θ k̂ k̂ T + s θ k̂× 3×3 T onde I 3 é a matriz identidade de ordem 3, k̂ k̂ T é uma matriz 3 × 3 obtida do produto de k̂3×1 por k̂1×3 e k̂× é a matriz antissimétrica 3 × 3 obtida do versor k̂ (ver Seção 1.4.3) algumas vezes denotada por S k̂ . O operador Rot k̂, θ rotaciona de um ângulo θ em torno de um eixo genérico que passa pela origem e é especificado pelo versor k̂ onde o sentido de medição do ângulo é dado pela regra da mão direita15 . Por exemplo, {A} pode ser rotacionado em torno de k̂ obtendo um novo sistema de coordenadas, {A0 }. ẐA ẐA0 ŶA0 θ k̂ θ ŶA X̂A θ X̂A0 Note que, se a matriz de r 11 Rot k̂, θ = r21 r31 15 O rotação é conhecida, é fácil determinar qual o versor k̂ e o ângulo θ correspondentes: r12 r13 kx kx v θ + c θ kx ky v θ − kz s θ kx kz v θ + ky s θ r22 r23 = ky kx v θ + kz s θ ky ky v θ + c θ ky kz v θ − kx s θ r32 r33 kz kx v θ − ky s θ kz ky v θ + kx s θ kz kz v θ + c θ polegar é alinhado com o eixo de rotação e os demais dedos indicam o sentido de medição do ângulo. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 26 Introdução à Robótica — Universidade Tecnológica Federal do Paraná da diagonal principal, tem-se que: r11 = kx kx v θ + c θ r22 = ky ky v θ + c θ r33 = kz kz v θ + c θ somando vem: r11 + r22 + r33 = (kx kx + ky ky + kz kz ) v θ + 3 c θ = 1.(1 − c θ) + 3 c θ = 1 + 2 cθ e se: r32 − r23 = 2 kx s θ r13 − r31 = 2 ky s θ r21 − r12 = 2 kz s θ então: r11 + r22 + r33 − 1 2 r32 − r23 1 k̂ = r13 − r31 . 2 sen θ r21 − r12 θ = arccos e (1.11) Veja que o valor de θ calculado pela fórmula acima é sempre positivo (no intervalo [0, 180◦ ]). Uma rotação de um ângulo maior que 180◦ é representada por uma rotação no sentido contrário (sentido de k̂) do ângulo replementar (360◦ − θ). Assim uma segunda solução é possível: θ0 = 360◦ − θ = −θ 0 = −k̂ . k̂ No caso de uma rotação de θ = 0 ou ±180◦ não é possível calcular o versor k̂ pela fórmula acima (causa uma divisão por zero). Se θ = 0◦ a transformação homogênea se torna a matriz identidade e k̂ é indeterminado. Se θ = ±180◦ a transformação homogênea continua representando uma rotação e se transforma em: r11 r12 r13 2 kx kx − 1 2 kx ky 2 kx kz Rot k̂, ±180◦ = r21 r22 r23 = 2 kx ky 2 ky ky − 1 2 ky kz r31 r32 r33 2 kx kz 2 ky kz 2 kz kz − 1 que leva a solução, se r11 + r22 + r33 = −1, se r11 6= −1 q kx = r112+1 ⇒ ky = 2r12 kx k = r13 z ou, se r22 6= −1 ⇒ q ky = r222+1 kx = 2r21 ky k = r23 z ou ainda, se r33 6= −1 2 kx 2 ky q r33 +1 k = z 2 r32 ⇒ ky = 2 kz k = r31 x 2 kz que sempre produz uma solução porque não é possível que os três elementos r11 , r22 e r33 sejam igual à −1 ao mesmo tempo porque isso implicaria em kx = ky = kz = 0 o que não é possível já que o módulo de um versor é sempre unitário. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 27 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Fórmula de Cayley A matriz de rotação R produz uma rotação sobre o vetor ~v transformando-o no vetor ~v 0 , ou ~v 0 = R ~v . O módulo não é alterado pela rotação (||~v | = |~v 0 ||), assim ~v 0 · ~v 0 = ~v · ~v ~v 0 · ~v 0 − ~v · ~v = 0 (~v 0 − ~v ) · (~v 0 + ~v ) = 0 porque (~v 0 − ~v ) · (~v 0 + ~v ) = ~v 0 · ~v 0 + ~v 0 · ~v − ~v · ~v 0 − ~v · ~v = ~v 0 · ~v 0 − ~v · ~v . Isso significa que os vetores f~ = ~v 0 − ~v = (R − I) ~v ~g = ~v 0 + ~v = (R + I) ~v são ortogonais, logo f~ · ~g = 0. Note que I é a matriz identidade de ordem igual à R. Usando a Fórmula de Rodrigues, pode-se mostrar que o determinante de det (R + I) = 4 (1 + cos θ) e, portanto, (R + I) só é singular se θ = ±180◦ . Por outro lado, det (R − I) = 0. Como a matriz (R + I), no geral, não é singular, −1 ~v = (R + I) ~g −1 f~ = (R − I) (R + I) ~g . Definindo a matriz S = (R − I) (R + I) −1 (1.12) podemos escrever f~ = S ~g . Se si j e gi são os componentes de S e ~g , e como f~ e ~g são ortogonais, fˆ · ~g = 0, isso implica que ! n n n X X X si k gk gi = (si k + sk i ) gi gk = 0 i=1 k=1 | i, k {z fi } e16 , portanto, que si k + sk i = 0 para qualquer i e k. Portanto, a matriz S é antissimétrica17 na forma (para o caso particular onde n = 3) 0 −sz sy S = ~s× = sz 0 −sx . −sy sx 0 Como (ver equação (1.12)) S = (R − I) (R + I) −1 S (R + I) = R − I SR+S =R−I I +S =R−SR I + S = (I − S) R tem-se que −1 R = (I − S) (I + S) (1.13) e a equação (1.13) é conhecida como fórmula de Cayley18 . A fórmula de Cayley dada pela equação (1.13) junto com a sua forma dual expressa na equação (1.12) estabelecem uma relação unívoca entre uma matriz de rotação e uma Pn 16 O símbolo para somatório duplo significa que i varia de 1 a n, mas k varia de i a n. i, k matriz S é antissimétrica se S + S T = 0. Olhando os elementos de S, isso significa que si k + sk i = 0. 18 Arthur Cayley (1821-1895). 17 Uma 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 28 Introdução à Robótica — Universidade Tecnológica Federal do Paraná matriz antissimétrica. Além disso, o vetor ~s tal que S = ~s× é paralelo ao eixo de rotação representada pela matriz de rotação R e o módulo de ~s está relacionado com o ângulo de rotação θ da matriz de rotação por sen θ θ = tan 1 + cos θ 2 θ = 2 arctan |~s| . |~s| = Assim é possível usar a equação (1.12) para determinar o eixo de rotação de uma matriz de rotação. Entretanto, usar a Fórmula de Rodrigues19 (ver Seções 1.7.1 e 1.11.5) é computacionalmente mais eficiente porque a equação (1.12) envolve o cálculo da inversa de uma matriz. O importante é que existe uma forma de representar uma rotação usando um vetor, mas esta forma de representação não é interessante porque as operações não são simples. Em outras palavras, a álgebra destes vetores de rotação não produz vetores úteis e que representem rotações com relação simples com os operandos. Um exemplo interessante de aplicação da fórmula de Cayley é se 0 −sz S = ~s× = sz −sy 0 sx sy −sx 0 então20 R= sx 2 1 + sy + sz 2 + 1 2 sx 2 − sy 2 − sz 2 + 1 2 (sx sy − sz ) 2 (sx sz + sy ) 2 (sx sy + sz ) −sx 2 + sy 2 − sz 2 + 1 2 (sy sz − sx ) 2 (sx sz − sy ) 2 (sy sz + sx ) −sx 2 − sy 2 + sz 2 + 1 e se forem substituídos os parâmetros homogêneos q1 q0 q2 sy = q0 q3 sz = q0 sx = temos que R= 1 q0 2 + q1 2 + q2 2 + q3 2 q0 2 + q1 2 − q2 2 − q3 2 2 (q1 q2 − q0 q3 ) 2 (q0 q2 + q1 q3 ) 2 (q0 q3 + q1 q2 ) q0 2 − q1 2 + q2 2 − q3 2 2 (q2 q3 − q0 q1 ) 2 (q1 q3 − q0 q2 ) 2 (q0 q1 + q2 q3 ) q0 2 − q1 2 − q2 2 + q3 2 que guarda uma relação direta com os quatérnios (ser Seção 1.7.2). Se substituirmos os parâmetros de Rodrigues θ kx 2 θ sy = tan ky 2 θ sz = tan ky 2 sx = tan onde kx 2 + ky 2 + kz 2 = 1 teremos a Fórmula de Rodrigues (ver Seções 1.7.1 e 1.11.5) e o vetor ~s é chamado de vetor de Rodrigues. 19 Benjamin 20 Esta Olinde Rodrigues (1794-1851). fórmula têm um custo computacional elevado: 1 divisão (inversão), 21 multiplicações e 18 adições. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 29 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Ainda vale notar que o posto de (R − I) vale dois no caso geral o que implica que det (R − I) = 0. O posto pode ser calculado usando R dado pela Fórmula de Rodrigues, genérico, assim kx kx v θ + c θ kx ky v θ − kz s θ R = ky kx v θ + kz s θ kz kx v θ − ky s θ (kx kx − 1) v θ R − I = ky kx v θ + kz s θ kz kx v θ − ky s θ ky ky v θ + c θ kz ky v θ + kx s θ kx ky v θ − kz s θ (ky ky − 1) v θ kz ky v θ + kx s θ kx kz v θ + ky s θ ky kz v θ − kx s θ kz kz v θ + c θ kx kz v θ + ky s θ ky kz v θ − kx s θ (kz kz − 1) v θ Usando o método de eliminação de Gauss ou método do escalonamento, (R − I) é equivalente à (k k − 1) v θ x x 0 0 kx ky v θ − kz s θ kx kz v θ + ky s θ 2 kz kz v θ −2 ky kz v θ 0 0 que claramente possui duas, e apenas duas, linhas linearmente independentes o que mostra que o posto de (R − I) vale dois no caso geral. Se v θ = 0, o posto degenera para zero e isso ocorre quando θ = 0◦ . Derivada de Matriz de Rotação A principal propriedade de uma matriz de rotação é que = I3 A A T BR BR ou seja, A T BR −1 =A . Imaginando que B R A BR varia no tempo e derivando em relação ao tempo, temos que d d d A BR dt d(A T B R) A BR dt o que significa que a matriz deve ser a velocidade angular. A BR dt A T BR A T BR + A A T BR BR +A BR d A BR dt d dt A T BR = dI3 dt dt =0 !T A T BR =0 é antissimétrica (quando somada com a sua própria transposta dá zero) e Agora considere um ponto P e seu vetor de posição P~ dado em relação à {A} submetido a uma velocidade de rotação21 ω ~ também dado em relação à {A}. A velocidade instantânea de P é dada por: A ~vP = dA P A = ω ~ ×A P~ dt mas, se P~ sofreu uma rotação, podemos imaginar como ele era antes de sofrer a rotação, digamos P~ 0 , e as coordenadas de P~ 0 em relação ao sistema {A} são as mesma que de P~ no sistema rotacionado {B}: P~ =A P~ 0 A~ B~ A A ~0 P =A B R P = BR P B 21 O eixo de rotação passa pela origem de {A}. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 30 Introdução à Robótica — Universidade Tecnológica Federal do Paraná e, derivando em relação ao tempo d A A ~0 BR P d A d P BR = = dt dt dt T A~ A ~0 P =A P B R A A d BR A T A ~ d P = P BR dt | dt {z } A A ~0 P Aω ~× Portanto ω ~× = d A BR A T R dt B ou seja, derivando uma matriz de rotação é possível saber o vetor de velocidade angular. A 1.7.2. Quatérnios Os quatérnios, ou quaterniões, ou ainda quatérnions, foram inventados22 na tentativa de generalizar a ideia dos números complexos em duas dimensões para três dimensões. Um quatérnio é uma entidade matemática do tipo q = q0 1̂ + q1 ı̂ + q2 ̂ + q3 k̂ onde q0 , q1 , q2 e q3 são números reais e ı̂, ̂, e k̂ são números complexos, mas que não tem relação direta com os números complexos da Álgebra de Números Complexos que trabalha apenas em duas dimensões (real e imaginário na forma x + j y). Se q0 = q1 = q2 = q3 = 0 diz-se que o quatérnio é nulo e simboliza-se por 0. Da mesma forma que se pode encarar o número zero como sendo um número complexo, pode-se também encarar o número zero como sendo um quatérnio. O quatérnio nulo é o elemento neutro da adição de quatérnios. Pode-se expressar um quatérnio na notação matricial como uma combinação linear das matrizes 1 0 0 0 0 0 0 1 0 0 1 0 0 −1 0 1 0 0 0 0 −1 0 0 1 0 0 0 1 , ı̂ = , ̂ = e k̂ = 1̂ = 0 0 1 0 0 1 0 0 −1 0 0 0 0 0 0 0 0 1 −1 0 0 0 0 −1 0 0 0 0 na forma 0 0 0 0 1 0 0 −1 q = q0 1̂ + q1 ı̂ + q2 ̂ + q3 k̂ . Neste contexto os quatérnios podem ser vistos como matrizes de números reais de dimensão 4 × 4. Note ainda que é supérfluo indicar a multiplicação por 1̂ porque pode-se admitir, por abuso de notação, que o termo que não é multiplicado por ı̂, ̂, ou k̂ é o termo multiplicado por 1̂ suprimido da notação. Assim, pode-se adotar a forma q = q0 + q1 ı̂ + q2 ̂ + q3 k̂ sem receio de que isso cause algum equivoco e isso é feito pela maioria dos autores. Pode-se também expressar um quatérnio como uma combinação linear do tipo q = q0 U + q1 I + q2 J + q3 K onde U = 1 0 0 1 I= j 0 0 −j J = 0 1 −1 0 K= 0 j j 0 onde, por sua vez, j 2 = −1. Neste contexto os quatérnios podem ser vistos como matrizes de números complexos de dimensão 2 × 2. 22 Foram inventados por William Rowan Hamilton (1805-1865) em 1843. Os quatérnios são membros de uma álgebra de divisão nãocomutativa e formam um espaço não-euclidiano. Mais exatamente, o conjunto de quatérnios com as operações de adição e multiplicação é um corpo não comutativo ou um anel com divisão. Em 1901, Josiah Willard Gibbs (1839-1903) publicou o primeiro trabalho de álgebra vetorial descrevendo o produto escalar e vetorial. A álgebra vetorial de Gibbs, que é a álgebra vetorial que se conhece hoje, se mostrou ser uma alternativa mais simples e robusta aos quatérnios. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 31 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Apesar de sua estrutura permitir que os quatérnios possam ser interpretados como vetores de quatro dimensões, eles devem ser vistos mais como entidades matemáticas contendo uma parte real e três partes imaginárias do que como sendo um vetor. Por isso, os quatérnios as vezes são chamados de números hipercomplexos. Vale notar que a ~ álgebra vetorial convencional não se aplica a eles. Contudo, pode-se definir os pares ordenados 1̂ = 1, 0 , ı̂ = 0, X̂ , ̂ = 0, Ŷ e k̂ = 0, Ẑ onde X̂, Ŷ e Ẑ são os versores da base canônica do espaço tridimensional. Note que q0 é multiplicado pelo par ordenado 1, ~0 para tornar a soma possível na expressão acima ou, de outra forma, a soma simplesmente não é realizada (como ocorre com os números complexos onde a parte real não é somada com a parte imaginária). Assim, uma forma alternativa de representar um quatérnio é como um par ordenado do tipo q = (w, ~v ) T onde w = q0 e ~v = [q1 , q2 , q3 ] , ou seja, um quatérnio pode ser visto como um par ordenado onde a primeira parte é T um escalar e a segunda é um vetor. Assim, define-se qre = q0 como sendo a parte real do quatérnio e qve = [q1 , q2 , q3 ] com sendo a parte vetorial do quatérnio. Note que qre é um escalar e qve é um vetor (no sentido tradicional). Define-se ainda: Re (q) = q0 como sendo a parte real do quatérnio q; e Im (q) = q1 ı̂ + q2 ̂ + q3 k̂ como sendo a parte imaginária do quatérnio q. Note que Re(q) é um escalar e Re(q) = qre , mas Im(q) é um quatérnio (e não um vetor como qve ). Se Re(q) = q0 = 0 diz-se que q é um quatérnio puro ou vetorial. Dois quatérnios são iguais se e somente se todas as suas componentes forem iguais. A adição e subtração são definidas de maneira evidente, adicionando ou subtraindo componente a componente. A regra de multiplicação satisfaz as seguintes relações: ı̂2 = ̂2 = k̂ 2 = ı̂ ̂ k̂ = −1 . Destas relações pode-se verificar que: ı̂ ̂ = −̂ ı̂ = k̂, ̂ k̂ = −k̂ ̂ = ı̂, k̂ ı̂ = −ı̂ k̂ = ̂, e que a multiplicação dos quatérnios p e q resulta em: pq = p0 + p1 ı̂ + p2 ̂ + p3 k̂ q0 + q1 ı̂ + q2 ̂ + q3 k̂ = p0 q0 + p0 q1 ı̂ + p0 q2 ̂ + p0 q3 k̂ + p1 q0 ı̂ + p1 q1 ı̂ ı̂ + p1 q2 ı̂ ̂ + p1 q3 ı̂ k̂ + p2 q0 ̂ + p2 q1 ̂ ı̂ + p2 q2 ̂ ̂ + p2 q3 ̂ k̂ + p3 q0 k̂ + p3 q1 k̂ ı̂ + p3 q2 k̂ ̂ + p3 q3 k̂ k̂ = p0 q0 − p1 q1 − p2 q2 − p3 q3 + (p0 q1 + p1 q0 + p2 q3 − p3 q2 ) ı̂ + (p0 q2 − p1 q3 + p2 q0 + p3 q1 ) ̂ + (p0 q3 + p1 q2 − p2 q1 + p3 q0 ) k̂ que não é comutativa porque: q p = p0 q0 − p1 q1 − p2 q2 − p3 q3 + (p0 q1 + p1 q0 −p2 q3 +p3 q2 ) ı̂ + (p0 q2 +p1 q3 + p2 q0 −p3 q1 ) ̂ + (p0 q3 −p1 q2 +p2 q1 + p3 q0 ) k̂ . Note as diferenças sutis nos sinais (em vermelho). São necessárias 16 multiplicações e 12 adições de escalares para realizar uma multiplicação de quatérnios. por 1. O elemento neutro da multiplicação de quatérnios é o quatérnio 1+0 ı̂+0 ̂+0 k̂, também denotado simplesmente T T Se p = (t, ~u), onde t = p0 e ~u = [p1 , p2 , p3 ] , e q = (w, ~v ), onde w = q0 e ~v = [q1 , q2 , q3 ] , o produto de p por q pode ser representado por: p q = (t w − ~u · ~v , ~u × ~v + t ~v + w ~u) onde · e × denotam os produtos escalar e vetorial respectivamente. A multiplicação não é comutativa e, por isso, não é possível definir a operação de divisão. Contudo, à exemplo do que ocorre com as matrizes, pode-se definir o elemento inverso que faz o papel da divisão por um quatérnio23 . Para obtenção do inverso, há necessidade das definições de conjugado e de norma de um quatérnio. Assim, define-se: 23 Por essa razão os quatérnios formam um anel com divisão. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 32 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Conjugado: q = q ∗ = q0 − q1 ı̂ − q2 ̂ − q3 k̂; p √ √ Norma: |q| = q q = q q = q0 2 + q1 2 + q2 2 + q3 2 .2425 Se |q| = 1 diz-se que q é um quatérnio unitário. O inverso de quatérnio q é q −1 = q |q| 2 . É fácil verificar que q −1 q = q q −1 = 1. Assim, se: r = pq rq −1 = p q q −1 = p 1 = p p = r q −1 e, da mesma forma, r = pq −1 p r = p−1 p q = 1 q = q q = p−1 r . Se q é unitário, então q −1 = q. Se p e q são dois quatérnios pode-se verificar que: (p q) = q p (p q) −1 = q −1 p−1 . Da mesma forma que é possível associar pontos e vetores bidimensionais a números complexos, também é possível associar pontos e vetores tridimensionais a quatérnios puros. Diz-se que dois quatérnios são paralelos ou perpendiculares se as partes vetoriais dos dois quatérnios forem paralelas ou perpendiculares, respectivamente. Note que a parte real não é importante no paralelismo ou na perpendicularidade de quatérnios (ela pode ou não ser zero em um ou nos dois quatérnios). Uma propriedade interessante da multiplicação de quatérnios é que se Im(q) Im(p) − Im(q) Im(p) for um quatérnio nulo p e q são paralelos. Da mesma forma, se Im(q) Im(p) + Im(q) Im(p) for um quatérnio nulo p e q são perpendiculares. Pode-se demonstrar que a rotação de um ponto (de um vetor de posição), de um ângulo θ em torno de um eixo caracterizado pelo versor26 â = ax ı̂ + ay ̂ + az k̂ pode ser representada pelo quatérnio q = cos θ θ + sen â . 2 2 Note que q não é um quatérnio puro, mas é unitário porque: r r θ θ 2 θ 2 θ 2 θ θ 2 2 2 2 + sen ax + sen ay + sen az = cos2 + sen2 (ax 2 + ay 2 + az 2 ) = 1 . |q| = cos 2 2 2 2 2 2 É muito simples determinar o versor â que caracteriza o eixo de rotação e o ângulo θ de rotação se o quatérnio q for conhecido: θ = 2 arccos q0 q1 1 â = q2 sen θ2 q3 1 = p 1 − q0 2 q2 q3 q1 24 Note que o produto de quatérnios q q ou q q resulta em um número real (um quatérnio com a parte imaginária nula). Veja a equação da multiplicação. 25 Alguns autores chamam o que está sendo definido aqui como norma de módulo e q q (sem a raiz) é chamada de norma. 26 O versor â e pode ser interpretado como um quatérnio puro e unitário associado a um versor do espaço tridimensional e, portanto, atende a seguinte restrição: ax 2 + ay 2 + az 2 = 1. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 33 Introdução à Robótica — Universidade Tecnológica Federal do Paraná que admite uma segunda solução θ0 = −θ e â0 = −â. Note que, por causa do uso de arco metade e da função arco cosseno, o ângulo θobtido com esta equação varia de zero a 360◦ quando q0 vale +1 e −1, respectivamente. Alguns autores consideram uma vantagem importante o fato da informação a respeito do eixo e ângulo de rotação poder ser obtida de um quatérnio de forma única (considerando aqui apenas ângulos positivos) e simples já que a obtenção do eixo e ângulo a partir da matriz de rotação é um pouco mais complicada porque apresenta casos especiais quando θ = 180◦ . De fato, apenas examinando a parte complexa de um quatérnio é possível se ter uma boa noção do eixo de rotação que ele representa. As rotações em torno dos eixos de referência podem ser representadas por: α α + sen ı̂ 2 2 β β y qβ = cos + sen ̂ 2 2 γ γ z qγ = cos + sen k̂ . 2 2 qαx = cos Uma rotação em torno do eixos dos xx de um ângulo α, seguida27 de uma rotação em torno do eixos dos yy de um ângulo β e seguida, ainda, de uma rotação em torno do eixo dos zz de um ângulo γ pode ser representada como: α β β γ γ α xyz x y z cos + sen ̂ cos + sen k̂ qαβγ = qα qβ qγ = cos + sen ı̂ 2 2 2 2 2 2 α β γ α β γ = cos cos cos − sen sen sen + 2 2 2 2 2 2 α β γ α β γ + sen cos cos + cos sen sen ı̂ + 2 2 2 2 2 2 α β γ α β γ + cos sen cos − sen cos sen ̂ + 2 2 2 2 2 2 α β γ α β γ + cos cos sen + sen sen cos k̂ . 2 2 2 2 2 2 Reaproveitando alguns produtos é possível calcular este quatérnio com doze multiplicações e quatro adições. Note que ordem das operações é importante porque o produto de quatérnios não é comutativo. A questão da ordem de rotações é tratada em detalhes na Seção 1.11 onde são considerados sistemas de coordenadas móveis e fixos. As mesmas considerações valem para os quatérnios, isso é, no exemplo acima, a ordem dada (primeiro x, depois y e por último z) corresponde a uma rotação em torno de eixos móveis. Para determinar os ângulos conhecendo o quatérnio unitário q fazemos: 2 (q0 q2 + q1 q3 ) = sen β sen α cos β q0 q1 − q2 q3 = 2 1 cos α cos β − q1 2 − q2 2 = 2 2 1 cos α cos β q0 2 + q3 2 − = 2 2 sen γ cos β q0 q3 − q1 q2 = 2 cos γ cos β 1 2 2 q0 + q1 − = 2 2 ou e, se β 6= ±90◦ : 1 1 α = atan2 q0 q1 − q2 q3 , − q1 2 − q2 2 = atan2 q0 q1 − q2 q3 , q0 2 + q3 2 − 2 2 β = arcsen (2 (q0 q2 + q1 q3 )) 1 γ = atan2 q0 q3 − q1 q2 , q0 2 + q1 2 − . 2 27 Quando se diz que uma rotação é feita depois da outra está implícito que esta ordem depende dos eixo de referência para se realizar a segunda, terceira. . . rotações. Os eixos de referência podem ficar fixos ou se moverem junto com o objeto a ser movido. Aqui é considerando que os eixo de referência são móveis (ver Seção 1.11). 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 34 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Quando β 6= ±90◦ encontramos uma singularidade conhecida como gimbal lock 28 onde é perdido um grau de liberdade porque os eixos dos xx e dos zz ficam alinhados. Não é possível determinar o valor de α e γ, mas é possível determinar o valor da soma ou diferença deles, conforme o caso; para β = 90◦ : √ √ √ √ 2 2 2 2 α+γ α+γ α+γ α+γ q= cos + sen ı̂ + cos ̂ + sen k̂ 2 2 2 2 2 2 2 2 α + γ = 2 atan2 (q1 , q0 ) e para β = −90◦ : √ √ √ 2 2 2 2 α−γ α−γ α−γ α−γ cos + sen ı̂ − cos ̂ − sen k̂ q= 2 2 2 2 2 2 2 2 α − γ = 2 atan2 (q1 , q0 ) . √ Se a posição do ponto antes da rotação é representada pelo quatérnio puro r, então a posição após a rotação é representada pelo quatérnio r0 e é calculada pela expressão r0 = q r q −1 ou, levando em conta que q é um quatérnio unitário, por (1.14) r0 = q r q . Note que −q realiza a mesma rotação que q porque r0 = (−q) r (−q) −1 −1 = (−1 q) r (−1 q) = (−1) q r q −1 (−1) −1 = (−1) (−1) q r q −1 = q r q −1 onde foi usado o fato de que a multiplicação de quatérnio por escalar ser comutativa, embora a de quatérnio por quatérnio não seja. Na verdade, q pode ser multiplicado por qualquer número real com exceção do zero que, mesmo assim, a rotação não é alterada. Por isso, um quatérnio qualquer, com exceção do quatérnio nulo, sempre pode ser associado a uma rotação, isso é, pode ser visto como uma operação de rotação. Esse é um dos motivos da ligação tão íntima entre os conceitos de rotação e quatérnios: é difícil desassociar as ideias. Se o quatérnio for unitário, são necessárias 18 multiplicações e 12 adições de escalares para realizar uma operação de rotação de vetor. Usando a T notação vetorial com q = (w, ~v ), onde w = q0 e ~v = [q1 , q2 , q3 ] , a rotação de um vetor r = (0, ~r) vale r0 = (0, ~r + 2 ~v × (~v × ~r + w ~r)) de onde é fácil verificar o número de operações de escalares. Os quatérnios são similares as matrizes de rotação para representação de rotações. Alguns autores consideram a representação por quatérnios mais elegante e mais econômica, sobretudo quando são realizadas várias rotações (concatenação de rotações). Isso porque se forem realizadas duas rotações, uma pelo quatérnio q e outra por p, nesta ordem, obtém-se: r0 = p (q r q) p = pq r q p = pq r (pq) ou seja, só é necessário realizar uma multiplicação de quatérnio por quatérnio a mais do que a no caso onde só há uma rotação. A concatenação de rotações feita em computador e usando notação de ponto flutuante acumula erros aritméticos que podem distorcer os valores dos quaterniões e das matrizes de rotação. Uma vantagem prática dos quaterniões é que a distorção pode ser eliminada simplesmente normalizando o quaternião. Já no caso das matrizes de rotação é 28 A expressão gimbal lock vem dos giroscópios onde os anéis (gimbals) podem se alinhar e o mecanismo perde um grau de liberdade, isso é, passam a girar apenas em um plano fazendo com que o instrumento perca a capacidade de monitorar a velocidade de rotação (vista como um vetor 3D). 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 35 Introdução à Robótica — Universidade Tecnológica Federal do Paraná necessário restabelecer a ortogonalidade da matriz e isso demanda algoritmos mais pesados e que favorecem um eixo em detrimento dos outros como o algoritmo de Gram-Schmidt29 , por exemplo. Os quatérnios não conseguem expressar uma rotação e uma translação em uma única operação tornando o seu emprego em robótica mais difícil e trabalhoso do que a outra opção que é baseada em matrizes de rotação. Para o quatérnio unitário q = q0 + q1 ı̂ + q2 ̂ + q3 k̂, a matriz de rotação equivalente é dada por: q0 2 + q1 2 − q2 2 − q3 2 2 (q1 q2 − q0 q3 ) 2 (q0 q2 + q1 q3 ) R= . 2 (q0 q3 + q1 q2 ) q0 2 − q1 2 + q2 2 − q3 2 2 (q2 q3 − q0 q1 ) 2 (q1 q3 − q0 q2 ) 2 (q0 q1 + q2 q3 ) q0 2 − q1 2 − q2 2 + q3 2 Esta equivalência significa que o vetor ~r0 que representa o vetor ~r após a rotação e que é dado por ~r0 = R ~r é o mesmo vetor que r0 = q r q (ver equação (1.14)) se os quatérnios puros r e r0 forem interpretados com vetores. A matriz de rotação acima é fatorando os termos de r em r0 , uma linha da matriz para cada constante hipercomplexa. Se o quatérnio não for unitário, podemos escrever q0 2 + q1 2 − q2 2 − q3 2 1 R= 2 2 (q0 q3 + q1 q2 ) q0 + q1 2 + q2 2 + q3 2 2 (q1 q3 − q0 q2 ) 2 (q1 q2 − q0 q3 ) 2 (q0 q2 + q1 q3 ) q0 2 − q1 2 + q2 2 − q3 2 2 (q2 q3 − q0 q1 ) 2 (q0 q1 + q2 q3 ) q0 2 − q1 2 − q2 2 + q3 2 que foi deduzida usando a Fórmula de Cayley (ver Seção 1.7.1). Note que o denominador contém a norma ao quadrado de q o que normaliza os termos da matriz que, por sua vez, são todos quadráticos. Algumas vezes a matriz de rotação R é apresentada na forma 1 − 2 q2 2 + q3 2 2 (q1 q2 − q0 q3 ) 2 (q0 q2 + q1 q3 ) R = 2 (q0 q3 + q1 q2 ) 1 − 2 q1 2 + q3 2 2 (q2 q3 − q0 q1 ) 2 (q1 q3 − q0 q2 ) 2 (q0 q1 + q2 q3 ) 1 − 2 q1 2 + q2 2 que usa o fato de que q0 2 + q1 2 + q2 2 + q3 2 = 1. Dependendo de como for implementada, a conversão de quatérnio em matriz de rotação pode demandar: 1) 10 multiplicações e 21 adições; 1) 16 multiplicações e 15 adições; ou 3) 19 multiplicações e 12 adições. O total de operações com escalares é, no entanto, sempre 31. Se for feito q = cos θ2 + sen θ2 â, obtém-se a forma matricial da Fórmula de Rodrigues30 . Para uma matriz de rotação r11 R = r21 r31 r12 r22 r32 r13 r23 r33 o quatérnio unitário equivalente q = q0 + q1 ı̂ + q2 ̂ + q3 k̂ vale: √ r11 + r22 + r33 + 1 q0 = ± 2 r32 − r23 q1 = 4 q0 r13 − r31 q2 = 4 q0 r21 − r12 q3 = 4 q0 para θ = 6 ±180◦ . Note que há duas soluções (observe o duplo sinal de q0 ) já que trocar o sinal de um quatérnio não muda a rotação que ele representa. 29 Jørgen Pedersen Gram (1850-1916) e Erhard Schmidt (1876-1959). Olinde Rodrigues (1794-1851). 30 Benjamin 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 36 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Para θ = ±180◦ , q0 = 0 r 11 R = r21 r31 e r12 r22 r32 r13 q1 2 − q2 2 − q3 2 2 q1 q2 2 q1 q3 2 q1 q2 q2 2 − q1 2 − q3 2 2 q2 q3 2 q1 q3 2 q2 q3 q3 2 − q2 2 − q1 2 r23 = r33 que, da mesma forma que o caso geral, admite duas soluções. Note que há três formas de se calcular estas duas soluções iniciando por q1 , q2 ou q3 , respectivamente, e calculando os dois termos que faltam com base no primeiro termo calculado. Iniciando por q1 : √ r11 − r22 − r33 + 1 q1 = ± 2 r21 q2 = , se q1 6= 0 2 q1 r31 q3 = , se q1 6= 0 2 q1 e se q1 for zero, inicia-se por q2 : √ q2 = ± −r11 + r22 − r33 + 1 2 r12 , se q2 = 6 0 2 q2 r32 , se q2 = 6 0 q3 = 2 q2 q1 = e se q2 for zero, inicia-se por q3 : √ q3 = ± −r11 − r22 + r33 + 1 2 r13 , se q3 = 6 0 2 q3 r23 , se q3 = 6 0. q2 = 2 q3 q1 = Não é possível que todas as componentes de q sejam nulas (q é um quatérnio unitário). Se este for o caso, a rotação é indefinida. Provavelmente, a principal aplicação para os quatérnios é realizar interpolações de rotação que são importantes para a geração de trajetórias em robótica e para animação de gráficos tridimensionais31 , mas que podem ser feitas com matrizes de rotação a um custo computacional mais elevado. Interpolação de rotações podem ser obtidas com interpolação linear usando quatérnios sem a necessidade de calcular senos e cossenos, o que é quase32 obrigatório quando se usa matrizes de rotação. Quando é necessário rotacionar um objeto (ponto, vetor, conjunto de pontos, sistema de coordenadas, etc.) ao redor de um eixo passando por várias etapas intermediárias (como no caso da animação de uma rotação de uma peça onde, a cada instante, a peça é mostrada com uma orientação diferente33 ) pode-se partir do quatérnio p = cos η2 + sen η2 r̂ até o quatérnio q = cos θ2 + sen θ2 â, onde â é um versor paralelo ao eixo de rotação e θ é o ângulo de rotação, pela fórmula qh = p (1 − h) + q h onde h ∈ [0, 1]. Para o caso onde p representa a rotação inicial nula (não há rotação, a orientação inicial é a do próprio objeto dado, logo p = 1 + 0 ı̂ + 0 ̂ + 0 k̂ = 1 ), a equação a cima se simplifica para: θ θ θ θ qh = 1 − h + h cos + h sen â = 1 + h cos − 1 + sen â . 2 2 2 2 Note que a variável h é multiplicada pelo quatérnio cos θ2 − 1 + sen θ2 â que é constante (não muda com h). Assim, para cada valor diferente de h tem-se um quatérnio qh que é usado para gerar o objeto rotacionado em cada posição 31 Muito usados em simuladores e jogos como o Tomb Raider, por exemplo. pode-se desenvolver uma expressão para matrizes de rotação baseada na solução de quatérnios. 33 Normalmente isso se faz girando a “câmera” ao redor do objeto. Isso envolve rotacionar o vetor de posição da câmera e ao menos um versor (geralmente o que aponta para baixo). Os outros dois versores que descrevem a orientação da câmera: o que aponta para o objeto e o que aponta para a direita da câmera, podem ser calculados sem usar rotação o que é computacionalmente mais eficiente. 32 Naturalmente, 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 37 Introdução à Robótica — Universidade Tecnológica Federal do Paraná desejada. Em ambos os caso qh não é um quatérnio unitário para h 6= 0, 1 o que demanda normalização. Para o caso em que p = 1, pode-se calcular o módulo de qh por |qh | = 2 (1 − q0 ) h2 − 2 (1 − q0 ) h + 1 θ θ = 2 1 − cos h2 − 2 1 − cos h+1 2 2 e, no caso geral, por |qh | = 2 (1 − p1 q1 − p2 q2 − p3 q3 − p0 q0 ) h2 − 2 (1 − p1 q1 − p2 q2 − p3 q3 − p0 q0 ) h + 1 . Nos dois casos o módulo de qh só depende de h (os termos entre parênteses são constantes e podem ser calculados a priori). Pode ser provado que esta interpolação linear leva a uma velocidade angular variável: mais rápido no meio da rotação e mais lento no início e fim. Se for desejada uma velocidade angular constante pode-se usar uma interpolação linear esférica para gerar o quatérnio que cria a rotação por: qh = p (p q) = (p q) h 1−h q h = (q p) p 1−h = q (q p) onde a exponencial do quatérnio q = cos θ2 + sen θ2 â é definida por: θ θ h q = cos h + sen h â . 2 2 Note que, se p = 1 + 0 ı̂ + 0 ̂ + 0 k̂ = 1, então qh = q h dado pela equação acima. Interpolar por esse processo já não é tão vantajoso como interpolar pelo primeiro processo em relação à interpolação feita com matrizes de rotação porque demanda o cálculo de seno e cosseno a cada passo. 1.8. Mapeamentos Mapear um ponto, vetor ou sistema de coordenadas significa representá-lo em outro sistema de coordenada. Não é alterada a posição nem tampouco a orientação do objeto mapeado, mas os valores numéricos mudam porque o sistema de referência muda. São possíveis três mapeamentos distintos: translação, rotação e geral que é uma combinação dos dois primeiros. 1.8.1. Translação Um mapeamento de translação ocorre quando os dois sistemas de coordenadas são paralelos: cada eixo de um dos sistemas de coordenadas é paralelo ao eixo respectivo do outro sistema. Como pode ser visto na figura abaixo, para mapear um ponto de um sistema para outro basta somar o vetor de posição da origem do novo sistema de referência com o vetor posição do ponto. ẐB P {B} ẐA AP ~ BP ~ =? AO ~ B ŶB ~B P =B P~ +A O A~ OB {A} ŶA X̂B OA X̂A Só se pode somar os vetores de posição, expressos em sistemas de coordenadas diferentes, porque os sistemas de coordenadas são paralelos: B {A} k {B} ⇒A B R =A R = I . 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 38 Introdução à Robótica — Universidade Tecnológica Federal do Paraná 1.8.2. Rotação Um mapeamento de rotação ocorre quando as origens dos dois sistemas de coordenadas são coincidentes, mas os eixos não são paralelos. Mais exatamente, nem todos os eixos de um sistema de coordenadas é paralelo ao respectivo eixo do outro sistema; é possível que um deles seja paralelo, mas não os três. Para calcular a descrição do ponto mapeado no novo sistema pode-se partir da ideia de que as novas coordenadas do ponto são as projeções do versor de posição do ponto em cada um dos eixos coordenados do outro sistema. Assim, para mapear um ponto P dado no sistema {B} para o sistema {A} calcula-se cada uma das coordenadas por: ẐA ẐB P ŶB BP ~ ŶA X̂A Ap y X̂B projB ŶA B A px = projB X̂A B A py = projB ŶA B P~ = B ŶA ·B P~ A pz = projB ẐA B P~ = B ẐA ·B P~ B X̂A T P~ = B X̂A ·B P~ ~ P OA = OB Lembrando que: A BR = A X̂B .. . A ŶB .. . A ẐB = T B ŶA B ẐA T pode-se transformar as três equações escalares acima em uma única equação matricial. Para isso, pode-se colocar o vetor de posição A P~ na forma matricial: P = A~ A px projB X̂A py = projB ŶA A pz projB ẐA A onde o vetor à direita pode ser obtido pelo produto da matriz P = A~ A px py = A pz A B X̂A ·B P~ ŶA ·B P~ = B B ~ ŶA · P B P~ B P~ = B~ P B A BR B B X̂A ·B P~ ŶA ·B P~ B ŶA ·B P~ B pelo vetor de posição X̂A T B P~ (veja Seção 1.4.2). Assim: ŶA T B T ẐA B h B P~ i 3×1 B~ =A B R P . 3×3 Embora pareça estranho, para descrever o ponto P em {A} sabendo-se como este ponto é descrito em {B}, deve-se mapear o sistema de coordenadas A em {B} (descrever os versores de {A} em {B}) e então projetar o vetor de posição de P , B P~ , sobre os versores de {A} descritos em {B}. Note que para realizar qualquer operação os vetores devem estar descritos no mesmo sistema de coordenadas. Por isso, os versores de {A} foram mapeados em {B}. 1.8.3. Geral translação O mapeamento mais geral que se consegue fazer inclui: rotação 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 39 Introdução à Robótica — Universidade Tecnológica Federal do Paraná ẐA P ẐB ŶB BP ~ ẐA AP ~ X̂A AO ~ P =A A~ ŶA B ~B P~ +A O B~ A ~ P =A B R P + OB A~ X̂B B ŶA X̂A Este mapeamento está baseado em uma ordem intrínseca de operações, ou seja, ele: 1. descreve o ponto P em um sistema de coordenadas paralelo ao {A} (rotação); 2. soma a origem de {B} em relação ao {A} (translação). Esta ordem está baseada na limitação que o mapeamento de translação possui: os sistemas de coordenadas devem ser paralelos. Como no caso geral os sistemas não são paralelos, primeiro busca-se uma nova descrição do ponto em um sistema paralelo, depois se realiza a translação que é sempre possível já que os sistemas estão paralelos. 1.9. Transformação Homogênea (TH) Uma transformação homogênea é uma matriz 4 × 4 na forma: A B R3×3 A B T 4×4 = 01×3 A OB3×1 11×1 A A denotada por A OB , por B T e que é formada por uma submatriz de rotação (B R no exemplo acima), por um ponto uma matriz hnula 1 × 3 e por i uma matriz identidade de ordem 1. A última linha de uma transformação homogênea sempre vale 0 0 0 1 por que é formada pela matriz nula 1 × 3 e pela matriz identidade de ordem 1. Uma transformação homogênea pode ser usada para mapear um ponto descrito em um sistema para outro: A onde P3×1 0 A OB 1 B P3×1 1 = A B BR P +A O B 1 (1.15) . Note que o resultado da equação (1.15) é o mesmo que o obtido na Seção 1.8.3, Ou seja, 1 quando um ponto é pré-multiplicado por uma transformação homogênea A B T ele é primeiro projetado em um sistema de coordenadas paralelo à {A} e depois somado com a origem de {B} dado em relação à {A}. B P4×1 = B B P4×1 =A B T 4×4 P4×1 = A BR 1.9.1. Interpretação de Transformações Homogêneas Uma mesma transformação homogênea pode ser vista como: • um operador de mapeamento; • uma forma de descrever um sistema de coordenadas em relação a outro; • um operador de transformação. É importante interpretar as transformações homogêneas de formas diferentes porque, dependendo das circunstâncias, é mais fácil criar uma transformação homogênea para ser usada para um propósito específico (por exemplo, descrever um sistema de coordenadas em relação à outro) usando interpretação alternativa (por exemplo, interpretando-a como um operador de transformação). 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 40 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Mapeamento Posição Pode-se usar transformações homogêneas para mapear: Velocidade, Torque, etc. O mapeamento transforma a descrição de um ponto ou vetor (valores numéricos)34 de sistema de coordenadas para outro. Para mapear um ponto ou vetor de um sistema de coordenadas para outro, basta pré-multiplicar o ponto ou vetor pela transformação homogênea cuja submatriz de rotação traz a descrição do sistema de coordenadas. Contudo, uma transformação homogênea é uma matriz 4 × 4 e um ponto e um vetor são matrizes 3 × 1. Para tornar o ponto ou vetor tal para a multiplicação é necessário acrescentar uma linha (um elemento) a este ponto ou vetor. O valor do elemento acrescentado à última linha depende do que se deseja mapear, assim: P3×1 P3×1 → P4×1 = ponto 1 P~3×1 P~3×1 → P~4×1 = vetor de posição 1 ~v3×1 ~v3×1 → ~v4×1 = vetor livre ou aplicado. 0 Vetores livres (free vectors) ou aplicados (line vectors) não são somados a origem do novo sistema de referência (somar velocidade ou força com posição?). Já os pontos e vetores de posição devem ser somados última coluna da matriz de transformação homogênea, que traz a origem do sistema, depois de serem multiplicados pela submatriz de rotação. Veja que, no caso dos vetores aplicados (line vectors), é necessário mapear a orientação (o vetor em si) e, em separado, o ponto de aplicação ou reta de ação do vetor. Descrição de um Sistema de Coordenadas em Outro Na Seção 1.5 é mostrado que para descrever um sistema de coordenadas é necessário fornecer um ponto e ao menos dois versores, mas é conveniente fornecer os três versores. Já na Seção 1.7.1 é mostrado que uma matriz de rotação, que é formada por três versores, e um ponto podem ser usadas para representar um sistema de coordenadas. Portanto uma matriz de transformação homogênea, que contém uma matriz de rotação e um ponto, também pode ser vista como uma descrição de um sistema de coordenadas. Assim, por exemplo: A BT = A BR 0 A OB 1 = A X̂B 0 A ŶB A 0 ẐB 0 A OB 1 = A X̂B ŶB ẐB OB 0 0 0 1 contém os três versores de {B} e a origem de {B} descritos em relação à {A}. Por notação, em uma transformação homogênea o índice superior indica o sistema de referência e o inferior o sistema que está sendo descrito em relação ao sistema de referência. Para memorizar: sistema de referência T sistema descrito Operador de Transformação translação Existem duas operações de transformação: rotação Elas modificam um ponto, vetor ou mesmo um sistema de coordenadas inteiro: move (translada ou rotaciona) o ponto, vetor ou sistema de coordenadas no espaço tridimensional. Note que “rotacionar um ponto” significa rotacionar o sistema de coordenadas no qual o ponto está descrito ao redor de uma reta (o eixo) o que implica em uma translação do ponto. Observe a ordem das operações (a multiplicação de matrizes, no geral, não é uma operação comutativa). 34 Pode ser um sistema de coordenadas inteiro (todos os vetores presentes no sistema de coordenadas). 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 41 Introdução à Robótica — Universidade Tecnológica Federal do Paraná No caso da translação basta multiplicar o ponto, vetor ou sistema de coordenadas por uma transformação homogênea que é função das distâncias em x, y e z que deseja transladar. Esta transformação homogênea é dada por: 1 0 0 x 0 1 0 y Transl (x, y, z) = 0 0 1 z 0 0 0 1 que possui a submatriz de rotação igual a matriz identidade de 3 × 3. O efeito de multiplicar esta transformação homogênea por um ponto (ou vetor) é o somar as quantidades x, y e z as respectivas coordenadas do ponto ou do vetor. No caso de um sistema de coordenadas dado por uma transformação homogênea, o efeito é de somar as quantidades x, y e z ao ponto (origem) da transformação homogênea. No caso da rotação, é necessário estabelecer o eixo de rotação e especificar o ângulo segundo o qual o ponto, vetor ou sistema de coordenadas será rotacionado. Da mesma forma que a translação, a rotação pode ser obtida multiplicado por uma transformação homogênea, função do eixo de rotação e do ângulo. Na prática, é interessante escrever uma transformação homogênea para cada um dos eixos de referência que serão funções apenas do ângulo de rotação e uma quarta transformação homogênea (que é a forma matricial da Fórmula de Rodrigues35 ) para um eixo que, da mesma forma que os eixos de referência, passa pela origem, mas possui uma orientação qualquer (especificado pelo versor k̂) como mostrado a seguir: 0 0 cα −sα 0 RotX (α) = 0 sα cα 0 0 0 0 1 cβ 0 sβ 0 0 1 0 0 RotY (β) = −sβ 0 cβ 0 0 0 0 1 cγ −sγ 0 0 sγ cγ 0 0 RotZ (γ) = 0 0 1 0 0 0 0 1 kx kx v θ + c θ ky kx v θ + kz s θ Rot k̂, θ = kz kx v θ − ky s θ 0 1 0 0 kx ky v θ − kz s θ kx kz v θ + ky s θ 0 ky ky v θ + c θ ky kz v θ − kx s θ kz ky v θ + kx s θ kz kz v θ + c θ 0 0 0 0 1 iT .36 As três primeiras rotações podem ser obtidas kx ky kz usando geometria plana. A quarta (Fórmula de Rodrigues), foi deduzida na Seção 1.7.1 usando álgebra vetorial e na Seção 1.11.5 usando as três primeiras. onde c θ = cos θ, s θ = sen θ, v θ = 1 − cos θ e k̂ = h Uma implementação da função que cria uma transformação homogênea que representa uma rotação de um ângulo α em torno do eixo dos xx, a função RotX (α), na metalinguagem do octave ou Matlab é: function r = rotx ( t ) 35 Benjamin Olinde Rodrigues (1794-1851). função v ou seno-verso é chamada de “função seno ao avesso” ou “função seno rebatida”. A cerca de 500 anos atrás ela já foi considerada mais importante que função cosseno. 36 A 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 42 Introdução à Robótica — Universidade Tecnológica Federal do Paraná ct = cos ( t ); st = sin ( t ); r = [1 0 0 0 ct - st 0 st ct 0 0 0 0 0 0 1]; Já uma implementação na linguagem do MuPAD (veja seção 2.5.5) pode se dada por: rotx : = t - > matrix (4 ,4 ,[[ [ [ [ 1, 0, 0, 0 , cos ( t ) , - sin ( t ) , 0 , sin ( t ) , cos ( t ) , 0, 0, 0, 0] , 0] , 0] , 1]]): Para rotacionar um vetor de um ângulo θ em torno de um dos eixos aplica-se uma rotação (Rot) de um ângulo θ, onde o sentido de medição do ângulo é dado pela regra da mão direita37 . Exemplo: ẐA ŶA X̂ 0 θ ŶA X̂A X̂ 0 θ X̂A É dada por: cθ sθ A 0 A X̂ = RotZ (θ) X̂A = 0 0 −sθ 0 cθ 0 0 0 0 0 1 0 0 1 1 cθ 0 sθ = 0 0 0 0 o que é equivalente a mapear o versor X̂ 0 , que é o eixo dos xx do sistema de coordenadas A0 que, por sua vez, é o sistema de coordenadas que se obtém rotacionado o sistema de coordenadas A de um ângulo θ em trono do eixo dos zz do sistema de coordenadas A, no sistema de coordenadas A. Portanto, para descrever um sistema de coordenadas que foi rotacionado de um ângulo qualquer em torno de um eixo, aplica-se uma das equações de rotação acima (RotX, RotY, RotZ ou Rot) e depois faz-se a interpretação das colunas desta matriz. Para transformar um sistema de coordenadas em outro, pode-se pensar em termos de transformações necessária para “ir” de um sistema de coordenadas ao outro (o que é geralmente mais intuitivo). O operador Rot k̂, θ rotaciona de um ângulo θ em torno de um eixo genérico especificado pelo versor k̂. Por exemplo, {A} pode ser rotacionado em torno de k̂ obtendo um novo sistema de coordenadas, {A0 }. 37 O polegar é alinhado com o eixo de rotação e os demais dedos indicam o sentido de medição do ângulo. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 43 Introdução à Robótica — Universidade Tecnológica Federal do Paraná ẐA ẐA0 ŶA0 θ k̂ θ ŶA X̂A θ X̂A0 1.9.2. Inversão de Transformação Homogênea B A inversa de uma transformação homogênea A B T que mapeia um ponto P dado no sistema {B}, denotado por P , A B para um ponto dado no sistema {A} ( P ) deve ser uma transformação homogênea A T que mapeia um ponto P dado no sistema {A}, denotado por A P , para um ponto dado no sistema {B} (B P ). Assim: B B R O A A −1 A . =B BT A T = 0 1 Como a origem do sistema {B}, dado no próprio sistema de coordenadas B é o vetor nulo (B OB = ~0), se for mapeado para {A}, obtém-se A OB . Se este ponto for mapeado novamente para {B} ele deve continuar sendo o vetor nulo, assim: B A A B ~ OB =B A R OB + OA = 0 isolando B OA , tem-se: B Lembrando que: A A T A OA = −B OB . A R OB = −B R B AR −1 T =A =A B R B R que quando substituído na primeira equação fornece: B AT −1 =A = B T A T BR T A −A OB BR 0 1 que é transformada inversa de A B T e que foi obtida usando um número mínimo de operações que implica em uma acumulação de erro mínima além da obvia vantagem sobre o custo computacional. Além disso, é possível calcular a inversa de uma transformação homogênea mesmo que os elementos da matriz sejam equações (e não apenas números) o que é inviável com os métodos tradicionais. Outra forma de se obter a inversa de uma transformação homogênea decorre de uma propriedade da inversa de uma matriz: o produto de uma matriz por sua inversa é a matriz identidade. Ou seja A A −1 BT BT A transformação homogênea A BT = I 4×4 . é conhecida é pode ser expressa na forma de suas quatro submatrizes como: A A R O B 3×1 A B 3×3 BT = 01×3 11×1 mas inversa da transformação homogênea A B T não é conhecida e será expressa na forma de quatro matrizes genéricas e que devem ser calculadas: A3×3 , B 3×1 , C 1×3 e D 1×1 . Deste forma: A B 3×3 3×1 A −1 . = BT C 1×3 D 1×1 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 44 Introdução à Robótica — Universidade Tecnológica Federal do Paraná A matriz identidade também pode ser vista como sendo 1 0 0 0 1 0 I 4×4 = 0 0 1 0 0 0 Assim, o produto de A BT por logo A −1 , BT composta por quatro submatrizes: 0 I 3×3 03×1 0 = . 01×3 11×1 0 1 que resulta na matriz identidade I 4×4 , fica: I 0 3×3 3×1 A A −1 , = I4×4 = BT BT 01×3 11×1 A B R3×3 A 01×3 OB3×1 11×1 A3×3 B 3×1 C 1×3 D 1×1 = I 3×3 03×1 01×3 11×1 de onde, multiplicando uma matriz pela outra (linhas por colunas) se obtêm: A A A A R A + O C R B + O D I B B 3×1 1×3 3×1 3×1 1×1 B 3×3 B 3×3 3×3 = 3×3 01×3 A3×3 + 11×1 C 1×3 01×3 B 3×1 + 11×1 D 1×1 01×3 03×1 11×1 . A segunda linha da igualdade acima fornece duas equações. A primeira equação é 01×3 A3×3 + 11×1 C 1×3 = 01×3 que tem solução C 1×3 = 01×3 . A segunda equação é 01×3 B 3×1 + 11×1 D 1×1 = 11×1 que tem solução D 1×1 = 11×1 . Já a primeira linha da igualdade de matrizes é bem mais interessante e também fornece duas equações. A primeira equação que se obtêm é A A B R3×3 A3×3 + OB3×1 C 1×3 = I 3×3 . Como C 1×3 = 01×3 , −1 A B R3×3 A B R3×3 A3×3 A B R3×3 A3×3 = I 3×3 −1 =A B R3×3 I 3×3 −1 A T A3×3 =A B R3×3 = B R3×3 . A segunda equação obtida de primeira linha é A B R3×3 B 3×1 + A OB3×1 D 1×1 = 03×1 . Como D 1×1 = 11×1 , A B R3×3 B 3×1 + A OB3×1 11×1 = 03×1 A B R3×3 B 3×1 = −A OB3×1 −1 A B 3×1 = −A B R3×3 OB3×1 T A B 3×1 = −A B R3×3 OB3×1 . Substituindo A, B, C e D na definição da inversa de A B T , obtém-se: A T A T A A B R − R O B 3×3 3×1 3×1 B 3×3 A −1 = B 3×3 = BT C 1×3 D 1×1 01×3 11×1 que, naturalmente, leva ao mesmo resultado que a abordagem geométrica. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 45 Introdução à Robótica — Universidade Tecnológica Federal do Paraná 1.9.3. Concatenação de Transformações Homogêneas A multiplicação de várias transformações homogêneas pode ser interpretada como a transformação de sistema de coordenadas em outro (movimento) passando por vários estágios ou como o mapeamento de um sistema de coordenadas em outro passando por várias descrições intermediárias. Na figura abaixo, são representados três sistemas de coordenadas e duas transformações homogêneas que relacionam estes sistemas indicadas com setas duplas: a ponta preenchida (I) indica, que neste sentido da seta, um sistema de coordenadas é transformado no outro pela transformação homogênea (por exemplo, A B T transforma o sistema de coordenadas {A} em {B}); a ponta vazia (B) indica que, neste sentido da seta, um sistema de coordenadas é descrito em outro pela transformação homogênea (por exemplo, A B T descreve o sistema de coordenadas {B} em {A}). Note que, assim como na multiplicação de transformações homogêneas por ponto, a notação nos ajuda a interpretar a multiplicação de transformação por transformação homogênea: o subíndice de uma transformação homogênea é simplificado com o superíndice da próxima transformação homogênea. ẐB AT B ẐA BT C {B} ŶB OB ŶC X̂C ẐC A CT = X̂B {A} ŶA A B = BT C T OC {C} OA A B BT C T X̂A É fácil ver que o produto de duas transformações homogêneas mapeia os três versores e o ponto da segunda transformação homogênea na primeira: A CT = = = = A BR A 0 OB B 1 B X̂C 0 ŶC 0 A B B R ŶC A B B R ẐC 0 0 0 A X̂C 0 A CR 0 A ŶC 0 A OC 1 A B ẐC 0 ẐC 0 A B B R X̂C A B B OC 1 A B B R OC 1 +A OB OC +A OB 1 . Usando a analogia de mapeamento com transformação, é possível interpretar o produto de duas transformações homogêneas como a transformação (rotação ou translação) da segunda transformação homogênea (que descreve um sistema) pela primeira (um operador de transformação). Assim, supondo de dois sistemas {A} e {B} são inicialmente coincidentes, a transformação homogênea que descreve {B} em relação à {A} vale: 0 0 0 0 A T = B 0 0 1 0 0 1 0 0 0 = I4×4 . 0 1 Se o sistema {B} for transportando para a posição 11 de agosto de 2020 1 h x y z iT , o novo sistema {B 0 } será descrito em relação à {A} Prof. Luís Paulo Laus, Dr. Eng. 46 Introdução à Robótica — Universidade Tecnológica Federal do Paraná por: 1 0 0 x 0 A A B 0 T = Transl (x, y z) B T = 0 0 1 0 0 1 0 0 y . z 1 Se, então, ele for rotacionado em relação ao eixo dos xx de {A} de um ângulo α, o novíssimo sistema {B 00 } será descrito em relação à {A} por: 1 0 0 x 0 c α − s α y c α − z s α A A B 00 T = RotX (α) B 0 T = 0 sα cα y sα + z cα 0 0 0 1 que é igual à A B 00 T = RotX (α) Transl (x, y z) I4×4 onde se nota que a primeira transformação realizada fica mais a direita e a última mais a esquerda. A ordem é muito importante porque, no geral, a multiplicação de matrizes não é comutativa. Também é importante levar em conta o sistema de coordenadas em relação ao qual a transformação é realizada. Se, por exemplo, o sistema {B 0 } fosse rotacionado em relação ao eixo dos xx do próprio {B 0 } ao invés do de {A}, {B 00 } seria descrito por: 1 0 A B 00 T = Transl (x, y z) RotX (α) = 0 0 0 0 cα −sα sα cα 0 0 x y z 1 porque isso esta nova operação é equivalente a primeiro rotacionar {B} em torno do eixo dos xx de {A} e depois h iT transladar para a posição x y z em relação à {A} (mais detalhes na Seção 1.11). 1.9.4. Exemplo do Uso de Transformações Homogêneas O objetivo desta Seção é exemplificar o uso das transformações homogêneas para mapear um ponto, transformar (mover) um ponto e descrever um sistema de coordenadas. Apenas para efeito didático será considerado um sistema plano simplesmente porque é mais fácil de visualizar as relações geométricas no plano38 . Assim, a coordena z dos pontos e versores considerados (com a obvia exceção do versor do eixo dos zz) será nula e as rotações serão em torno do eixo dos zz para evitar que os pontos e versores saiam do plano xy. Considere o ponto P e o sistema de coordenadas A ilustrado ao lado. Os versores do eixo dos xx e do eixo dos yy do sistema A são representados na origem do sistema mas poderiam ser representados em qualquer lugar. Observe que as coordenadas cartesianas do ponto P no sistema de coordenadas A são: 2, 3 e 0. Isso significa que o comprimento da projeção do ponto P sobre o eixo dos xx do sistema A medido da origem do sistema até o ponto de intersecção da projeção com o eixo vale duas unidades de comprimento; para o eixo dos yy vale três unidades de comprimento; e zero para o eixo dos zz (o ponto P pertence ao plano xy do sistema A). Estas h iT coordenadas podem ser escritas na forma A P = 2 3 0 onde é importante observar que: o sistema de referência ({A}) foi registrado; o ponto é dado como um vetor (vetor de posição — matriz coluna). {A} P 3 ŶA X̂A A P = 2 h 2 3 0 iT 38 O método apresentado vai parecer exageradamente sofisticado para ser empregado na geometria plana, contudo, quando se trabalha no espaço tridimensional, a sofisticação matemática compensa porque é muito difícil, senão impossível, visualizar as relações geométricas no espaço. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 47 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Na figura ao lado é mostrado um segundo sistema de referência, {B}. A origem do sistema A, denotada por OA , pode ser escrita em relação à h iT {B} por B OA = 2 4 0 e nota-se que o eixo dos xx dois sistemas 3 } {A iT Ŷ A 4 2 ˆA X A P 2 h = ◦ 30 {B} ŶB X̂B B P = h 2 2, 23 7, 6 0 3 0 formam um ângulo de 30◦ entre si (o mesmo ocorre com os eixos dos yy). Pode-se, então, imaginar duas situações. Na primeira, {B} sempre esteve na posição indicada e pode-se usar uma transformação homogênea para descrever {A} em relação à {B}. Na segunda {A} e {B} eram originalmente coincidentes, mas {A} foi transportado para o ponto h iT e então girado de 30◦ ao redor do eixo dos zz que é 2 4 0 perpendicular ao plano do papel. O ponto P foi transportado junto com {A}. Pode-se usar uma transformação homogênea para descrever esta operação de transformação. Nas duas situações a transformação homogênea é a mesma (mesmos valores numéricos). Esta transformação pode ser usada para mapear a descrição do ponto P de {A} para {B}. Para descrever {A} e relação à {B} é necessário saber os valores numéricos: da origem de {A} e relação à {B}; e dos versores dos eixos de {A} escritos em relação à {B}. A origem de {A} vale: iT B Escrever os versores dos eixos de {A} em relação à {B} é um exercício de trigonometria básica. Basta observar as projeções na figura ao lado tomando cuidado com sinal dos senos e cossenos e lembrando que o módulo dos versores é unitário. Assim: h iT h iT B ∼ 0, 87 0, 5 0 X̂A = = cos 30◦ sen 30◦ 0 h iT h iT B ∼ ŶA = . = −0, 5 0, 87 0 − sen 30◦ cos 30◦ 0 OA = h 2 4 0 iT . ŶB ŶB ŶA X̂A 30◦ P 30◦ X̂B X̂B Como o eixo dos zz de {A} e {B} são paralelos, B ẐA = h 0 0 1 iT . Pode-se, então escrever a transformação homogênea que descreve o sistema A em 0, 87 −0, 5 B 0, 5 0, 87 X̂A B ŶA B ẐA B OA B ∼ = AT = 0 0 0 0 1 0 0 0 relação à {B}: 0 2 0 4 . 1 0 0 1 Para mapear o ponto P em {B}, ou seja, transformar a descrição de P em {A} (A P ) para uma descrição de P em {B} (isso é, B P ), basta multiplicar esta transformação homogênea por A P com um elemento (linha) a mais para poder realizar a multiplicação pela matriz 4 × 4 obtendo 0, 87 −0, 5 0 2 2 0, 87 2 − 0, 5 3 + 2 2, 23 0, 5 0, 87 0 4 3 0, 5 2 + 0, 87 3 + 4 7, 6 B B A ∼ . P =A T P = = = 0 0 0 1 0 0 0 0 0 0 1 1 1 1 Assim, a mesma transformação homogênea que descreve o sistema A em relação ao sistema B, pode ser usada como operador de mapeamento. Na segunda situação imaginada, os dois sistemas de coordenadas eram originalmente coincidentes e então {A} foi transportado arrastando consigo o ponto P . Note que a ordem em que as transformações são feitas é muito importante: h iT primeiro {A} foi transportado para o ponto 2 4 0 ; só então ele foi rotacionado de 30◦ em relação ao próprio 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 48 Introdução à Robótica — Universidade Tecnológica Federal do Paraná eixo dos zz. Usando os operadores da Seção 1.9.1 1 0 0 1 B ◦ ∼ A T = Transl (2; 4; 0) RotZ (30 ) = 0 0 0 0 pode-se escrever transformação homogênea 0, 87 0, 87 −0, 5 0 0 0 2 0 4 0, 5 0, 87 0 0 0, 5 = 0 0 1 0 0 1 0 0 0 0 0 1 0 1 −0, 5 0 2 0, 87 0 0 1 0 0 4 0 1 que representa a transformação ou transporte do sistema de coordenadas {B} para {A}, mas que também descreve o sistema A em {B} e pode ser usado para mapear a descrição dos pontos (vetores, versores e sistemas de coordenadas) dados no sistema A para {B}. A ordem da execução das transformações é muito importante porque está ligada à ordem na qual se escrevem os operadores de transformação39 . Se, por exemplo, a primeira operação realizada fosse a de rotação (de 30◦ ao redor do eixo dos zz), então, a translação seria executada em relação ao novo sistema obtido pela rotação, mas que possui origem coincidente com o sistema B. Como este novo sistema não está alinhado com {B}, as distância a serem percorridas não seriam mais de duas unidades de comprimento em relação ao eixo dos xx e quatro ao dos yy. Deveriam ser de 3, 73 unidades de comprimento (aproximadamente) em relação ao eixo dos xx e 2, 46 em relação ao eixo dos yy a fim do obter {A} na mesma posição e orientação relativa à {B} que foi obtida no primeiro caso porque40 : B AT = Transl (2; 4; 0) RotZ (30◦ ) = RotZ (30◦ ) Transl (3, 73 . . . ; 2, 46 . . . ; 0) . Na prática, é muito difícil e trabalhoso construir a descrição de um sistema de coordenas usando o método empregado na primeira situação imaginada. Como as transformações homogêneas obtidas são exatamente iguais, é mais simples usar os operadores de transformação para criar as transformações homogêneas que serão usadas tanto para mapeamento como para descrição. Vale, então, lembrar que: Para descrever um sistema de coordenadas B em relação ao sistema A (referência) deve-se imaginar uma forma de ir de A para B, ou seja, deve-se determinar uma sequência de operadores de transformação que transportam o sistema A, usado como referência, até que ele coincida com B, o sistema que se deseja descrever. Resumindo: A B T = ir de A para B . Por esta razão, a transformação homogênea A B T é lida: “transformação de A para B”. Ela descreve o sistema B em {A}; mapeia os pontos (ou vetores, ou sistemas de coordenadas) de {B} em {A}. 1.10. Transformação de Sistemas de Coordenada Um sistema de coordenas B é descrito em {A} por A B T . Podemos fazer o sistema B sofrer uma rotação ou uma translação (ou ambas) multiplicado A B T por um dos operadores matriciais vistos na Seção 1.9.1 para obter a descrição do novo sistema, digamos {B 0 }, descrito em relação à {A}, ou seja, A B 0 T . O problema está na ordem na qual as matrizes são escritas, assim A A B 0 T = Transl (x, y, z) B T translada {B} em relação ao sistema de referência A, mas se a ordem for trocada A B 00 T =A B T Transl (x, y, z) translada {B} em relação ao próprio {B} e só resulta na mesma matriz se {A} e {B} forem paralelos. Como x, y e z dependem do sistema de coordenadas, o correto seria escrever A A x, A y, A z A B 0 T = Transl BT A A B B B x, y, z B 00 T =B T Transl 39 Lembre-se sempre que, no geral, a multiplicação de matrizes não é comutativa e que os operadores de transformação são matrizes. distância foram calculadas por Transl (px ; py ; 0) = RotZ (30◦ )−1 Transl (2; 4; 0) RotZ (30◦ ). As matrizes só são iguais para px = 3, 732050807568877 . . . e py = 2, 464101615137755 . . . . 40 Estas 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 49 Introdução à Robótica — Universidade Tecnológica Federal do Paraná e aqui foi usado B 00 porque, no geral, as duas equações acima resultam em matrizes diferentes. Da mesma forma A B0 T = Rot A k̂, θ A BT rotaciona {B} em torno de um eixo que passa pela origem do sistema A, mas A B0 T =A B T Rot B k̂, θ rotaciona {B} em torno de um eixo que passa pela origem do próprio sistema B (a origem de {B} fica parada: A A B O =B 0 O). Note que o versor do eixo, k̂, deve ser descrito no sistema de coordenadas correto. 1.11. Ordem das Rotações (TH) para Eixos Fixos e Móveis A ordem em que as transformações são executadas é fundamental para determinar a ordem que os operadores de transformação, que são transformações homogêneas, devem ser escritos nas equações quando há rotações envolvidas. Quando não há rotações, apenas translações, a ordem não é importante. Uma única transformação homogênea realiza primeiro uma translação e depois uma rotação. Qualquer uma delas pode ser nula, isso é, não é necessário realizar a translação nem a rotação: a matriz de transformação homogênea pode ser igual a matriz identidade. Ainda, no caso de translações é indiferente se o sistema de coordenadas se nove junto com o sistema que está sendo movido ou se a translação é realizada em relação a eixos fixo. Já no caso de rotações, apenas quando são realizadas mais de uma rotação, faz diferença se os eixos de referência, em torno dos quais as rotações são realizadas, estão fixos ou se movem a cada nova rotação. 1.11.1. Ordem Esquerda → Direita ⇒ Eixos Móveis os eixos são móveis A ordem de interpretação da esquerda para a direita implica que: ordem direta de interpretação Como exemplo, considere a rotação representada abaixo: ẐA ẐA ŶB ẐB ŶB X̂C ẐC ≡ ẐB β α α ŶC β β ŶA ŶA α X̂A ≡ X̂B por: X̂B A transformação homogênea que representa esta rotação (que descreve o sistema {C} em relação à {A}) é dada RotX (α) RotZ (β) RotX (α) é a 1a rotação realizada, o eixo dos xx é fixo X̂A RotZ (β) é a 2a rotação realizada, o eixo dos zz é o eixo móvel ẐB , modificado por RotX (α) e é equivalente a interpretar a rotação como sendo um operador de transformação onde a primeira transformação (a da esquerda) ocorre em relação a eixos fixos, a segunda transformação ocorre em relação à primeira, a terceira em relação à segunda e assim por diante. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 50 Introdução à Robótica — Universidade Tecnológica Federal do Paraná 1.11.2. Ordem Direita → Esquerda ⇒ Eixos Fixos os eixos são fixos A ordem de interpretação da direita para esquerda implica que: ordem inversa de interpretação Como exemplo, considere a rotação representada abaixo: ẐB ẐA ≡ ẐB β ẐC α α ŶB β X̂A por: ŶA α ŶB α X̂B β ŶC X̂C X̂B X̂A A transformação homogênea que representa esta rotação (que descreve o sistema {C} em relação à {A}) é dada RotZ (β) é a 1a rotação realizada, o eixo dos zz é fixo ẐA RotX (α) RotZ (β) RotX (α) é a 2a rotação realizada, o eixo dos xx é fixo X̂ A e é equivalente a interpretar a rotação como sendo um operador de transformação onde todas as transformações ocorrem em relação a eixos fixos. Considere a situação onde é aplicada uma rotação de um ângulo β ao redor do eixo dos zz fixo e depois de α ao redor dos eixos do xx, fixo também. Para se ter a mesma interpretação em eixos móveis, isso é equivalente a rotacionar em torno de zz, e depois rotacionar o sistema obtido em relação ao antigo eixo dos xx (que ficou para traz, foi alterado pela rotação em torno de zz). Para isso, é necessário inverter a rotação a fim de localizar o antigo eixo dos xx: Rot X̂f ixo , RotZ (β) Rot X̂f ixo , | {z eixos móveis α = Rot RotZ (−β) X̂, α α = RotZ (β) Rot RotZ (−β) X̂, α = } = RotX (α) RotZ (β) {z } | eixos fixos onde Rot k̂, α é uma rotação de um ângulo α ao redor do versor k̂. Uma outra forma de visualizar o que ocorre é imaginar a transformação de um ponto P que sofre primeiro uma rotação em torno do eixo dos zz e depois uma rotação em torno do eixo dos xx. Primeiro o ponto P se transforma no ponto P 0 dado por P 0 = RotZ (β) P onde que P e P 0 são dados em relação a um sistema de coordenadas e a rotação é realizada em torno do eixo dos zz deste mesmo sistema. Depois o ponto P 0 é rotacionado em torno do dos xx do mesmo sistema de coordenadas se transformando no ponto P 00 = RotX (α) P 0 . Substituindo P 0 na equação anterior obtém-se: P 00 = RotX (α) RotZ (β) P que mostra a primeira rotação aparece mais a direita e última mais a esquerda quando os eixos de referência para todas as rotações são fixos. 1.11.3. Exemplo Numérico Na Figura 1.5 são mostradas duas formas de atingir o sistema de coordenadas {E} partindo do sistema {A}. Na Figura 1.5a são usados eixos móveis. A primeira transformação é uma rotação de 30◦ em torno do eixo dos zz de {A}. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 51 6 YˆC 0 YˆD 0 Xˆ Xˆ C0 D0 30 ◦ ŶE ŶE X̂E X̂E Introdução à Robótica — Universidade Tecnológica Federal do Paraná X̂D 60 ◦ 3 ˆC X ŶA Ŷ B ŶD Ŷ C ˆB X ◦ ◦ 60 30 X̂A ŶA ŶB 0 X̂A 3 X̂B 0 6 (a) (b) Figura 1.5.: Rotações e translações sucessivas usando: a) eixos móveis e b) eixos fixos ◦ Esta transformação cria o sistema {B} que é descrito em relação ao sistema {A} por A B T = RotZ (30 ). O novo sistema de coordenadas, {B}, é então transladado de 3 unidades de comprimento na direção do eixos dos xx do novo sistema de coordenadas (eixos móveis), ou seja, X̂B para se obter o próximo sistema. O próximo sistema de coordenadas, {C}, ◦ é descrito em relação ao anterior, {B}, por B C T = Transl (3, 0, 0). Fazemos, então, uma rotação de 60 em torno do eixo dos zz do sistema {C} e o novo sistema de coordenadas, {D}, é descrito em relação à {C} por C T = RotZ (60◦ ). D Por último, deslocamos de 6 unidades de comprimento na direção do eixo do xx do novo sistema de coordenadas, X̂D , que ficou paralelo à ŶA . Concatenando as transformações: A ET =A B T B C D C T DT E T ◦ = RotZ (30 ) Transl (3, 0, 0) RotZ (60◦ ) Transl (6, 0, 0) √ 0 −1 0 32 3 15 1 0 0 2 . = 0 0 1 0 0 0 0 1 (1.16) A equação (1.16), quando lida da esquerda para direita, mostra as transformações na ordem em que elas ocorrem usando eixos móveis. A outra forma de se obter o sistema {E} é usando eixos fixos como mostrado na Figura 1.5b. Para que seja exatamente o mesmo sistema {E} do caso anterior (eixos móveis) nós usamos a equação (1.16) lendo-a da direita para esquerda (do fim para o começo). Neste caso, a primeira transformação é uma translação de 6 unidades de comprimento na direção do eixo dos xx do sistema {A}, X̂A . Esta transformação cria o sistema {B 0 } que é descrito em relação ao ◦ sistema {A} por A B 0 T = Transl (6, 0, 0). A segunda transformação é uma rotação de 60 em torno dos zz do sistema {A}. Note que nós estamos usando eixos fixos, por isso não movemos em relação ao novo sistema {B 0 } e sim ao sistema original, {A}. A rotação de 60◦ cria o sistema {C 0 } que é descrito em relação ao sistema {A} por A C0 T 11 de agosto de 2020 = RotZ (60◦ ) Transl (6, 0, 0) Prof. Luís Paulo Laus, Dr. Eng. 52 Introdução à Robótica — Universidade Tecnológica Federal do Paraná e é necessário usar as duas transformações. É interessante notar que {C 0 } pode ser descrito em relação à {B 0 } porque B0 C0 T −1 A A B0 T C0 T A C0 T =A B0 T B0 C0 T = = (Transl (6, 0, 0)) −1 RotZ (60◦ ) Transl (6, 0, 0) = Transl (−6, 0, 0) RotZ (60◦ ) Transl (6, 0, 0) ou seja, pode-se chegar à {C 0 } partindo de {B 0 } fazendo: uma translação de 6 unidades de comprimento na direção X̂B 0 (para a direita na Figura 1.5b); uma rotação de 60◦ em torno do eixo dos zz de {B 0 }; e uma translação de 6 na direção oposta à X̂B 0 (para a esquerda na Figura 1.5b). A próxima transformação é uma translação de 3 unidades de comprimento na direção de X̂A (veja a linha com traços e pontos na Figura 1.5b com comprimento de 3 unidades de comprimento) que cria o sistema {D0 }. O sistema {D0 } é descrito em relação ao sistema {A} por A D0 T = Transl (3, 0, 0) RotZ (60◦ ) Transl (6, 0, 0) e as três transformações (todas até aqui) são usadas. A última transformação é uma rotação de 30◦ em torno do eixo dos zz dos sistema {A} (veja a seta curva com indicação de 30◦ na Figura 1.5b) e quando esta última transformação é usada obtemos a equação (1.16). Se as Figuras 1.5a e 1.5b forem sobrepostas, os sistemas {A} e {E} de ambas as figuras irão coincidir. 1.11.4. Mistura de Eixos Fixos e Móveis É perfeitamente possível misturar transformações feitas em relação a eixos fixos com móveis. O fato do eixos ser fixo ou móvel impacta apenas na posição da transforma homogênea dentro do produto do matrizes. Por exemplo, considere que dois sistemas de coordenadas {A} e {B} são inicialmente coincidentes. Então, o sistema {B} sofre uma rotação de 30◦ em torno do eixo dos zz. Tantos faz se o eixo dos zz é o do sistema {A} ou {B} porque eles são coincidentes mesmo durante o movimento. Em seguida, o sistema {B} sofre uma rotação de 45◦ em torno do eixo dos yy do próprio sistema {B}, ŶB . Por fim, o sistema {B} sofre uma rotação de 60◦ em torno do eixo dos xx dos sistema {A}, X̂A . Para calcular a transformação homogênea que descreve o sistema {B} em relação ao sistema {A}, A B T , iniciamos pela rotação em torno de ẐA ou ẐB representada por RotZ (30◦ ). Depois vem a rotação em torno de ŶB representada por RotY (45◦ ). Como o eixo ŶB é móvel, RotY (45◦ ) é escrito a direita de RotZ (30◦ ) (em relação a eixos móveis a ordem é da esquerda para a direita, −→). Por fim, vem a rotação em torno de X̂A representada por RotX (60◦ ). Como X̂A é fixo, RotX (60◦ ) deve ser escrita a esquerda das outras duas rotações (em relação a eixos fixos a ordem é da direita para a esquerda , ←−) conforme a equação: A BT = RotX (60◦ ) RotZ (30◦ ) RotY (45◦ ) | {z } | {z } | {z } 3a 1a (1.17) 2a note que os parênteses são meramente ilustrativos porque a multiplicação de matrizes é associativa. Eles indicam o objeto que sofreu a terceira rotação. Resumindo: se o eixo de rotação ou translação é um eixo fixo, a matriz de transformação homogênea respectiva é escrita a esquerda do produto de matrizes até o momento, se o eixo é móvel, a matriz respectiva é escrita a direita: fixo ⇒ esquerda, móvel ⇒ direita. Uma animação pode ser gerada com os seguintes comandos do MuPAD: // posição inicial da câmera plot :: setDefault ( plot :: Scene3d :: CameraDirection = [8.5 ,11.6 ,5.5]): // animação plot ( plot :: Point3d ([ -0.1 , -0.1 , -0.1] , // para estender o campo de visão Visible = FALSE ) , plot :: TH ( rotx (0) , // sistema de referência LineColorX = [0.90234375 , 0.6015625 , 0.67578125] , LineColorY = [0.59765625 , 0.80078125 , 0.61328125] , LineColorZ = [0.59765625 , 0.76171875 , 0.89453125]) , 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 53 Introdução à Robótica — Universidade Tecnológica Federal do Paraná plot :: TH ( rotz ( a * PI /180) , a = 0 .. 30 , TimeRange = 0 .. 10 , V isi bl eB ef or eB eg in = FALSE , VisibleAfterEnd = FALSE ) , plot :: TH ( rotz (30* PI /180)* roty ( a * PI /180) , a = 0 .. 45 , TimeRange = 10 .. 25 , V isi bl eB ef or eB eg in = FALSE , VisibleAfterEnd = FALSE ) , plot :: TH ( rotx ( a * PI /180)* rotz (30* PI /180)* roty (45* PI /180) , a = 0 .. 60 , TimeRange = 25 .. 45 , V isi bl eB ef or eB eg in = FALSE , VisibleAfterEnd = FALSE ) , plot :: TH ( rotx (60* PI /180)* rotz (30* PI /180)* roty (45* PI /180) , TimeRange = 45 .. 50 , V isi bl eB ef or eB eg in = FALSE , VisibleAfterEnd = FALSE ) , Width = 230 , Height = 160 , Axes = None , AnimationStyle = Loop ); O primeiro comando define a posição da câmera. O segundo comando plota a animação propriamente dita. No segundo comando, a primitiva plot::Point3d plota um ponto invisível para forçar o início do gráfico e evitar que os eixos do sistema de coordenadas {A} sejam cortados. A primeira primitiva plot::TH serve para criar o sistemas de coordenadas {A} com cores mais claras que o sistema {B}. A segunda primitiva cria o sistema {B} fazendo a primeira rotação em torno de ẐA e ẐB que são coincidentes durante o rotação. Esta rotação é feita de um ângulo variável de 0 a 30◦ e dura de 0 a 10 segundos. A próxima primitiva plot::TH faz a segunda rotação em torno de ŶB com um ângulo que varia de 0 a 45◦ e tem duração de 15 segundos (de 10 a 25 segundos). O eixo ŶB é mostrado em verde escuro. Então a próxima primitiva plot::TH faz uma rotação em torno de X̂A com um ângulo variando de 0 até 60◦ e com duração de 20 segundos (de 25 a 45 segundos). O eixo de rotação é mostrado em rosa. Por fim, a última primitiva mostra o resultado final por 5 segundos. Os outros argumentos definem: o tamanho da área de plotagem de 230 × 129 mm, que os eixos não devem ser traçados e que a animação deve se repetir quando chegar ao fim. A equação (1.17) pode ser interpretada de quatro formas diferentes conforme o esquema abaixo: RotX (60◦ ) | {z } móvel 1a RotZ (30◦ ) | {z } móvel 2a RotY (45◦ ) | {z } 3a móvel RotX (60◦ ) | {z } fixo 2a RotZ (30◦ ) | {z } RotY (45◦ ) | {z } 1a 3a fixo RotX (60◦ ) | {z } 3a RotX (60◦ ) | {z } 3a RotZ (30◦ ) | {z } móvel RotZ (30◦ ) | {z } fixo 1a fixo RotY (45◦ ) | {z } 2a 2a RotY (45◦ ) | {z } 1a onde o resultado final é sempre o mesmo, mas a ordem intrínseca pode ser vista como tendo seis versões diferentes. O exemplo descrito no início desta seção corresponde à terceira versão mostrada acima: 1a rotação em torno de ẐA e ẐB ; 2a rotação em torno de ŶB , móvel como indicado na seta, e 3a rotação em torno de X̂A , fixo como indicado na seta. 1.11.5. Dedução alternativa da Fórmula de Rodrigues Na Seção 1.7.1 a Fórmula de Rodrigues foi deduzida usando álgebra vetorial e na Seção 1.7.2 foi mencionado que é possível obter esta fórmula usando a relação entre matrizes de rotação e quatérnios. Também é possível deduzir esta fórmula usando teoria de grupos. Nesta seção, a Fórmula de Rodrigues é deduzida usando apenas rotações em torno dos eixos coordenados. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 54 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Observe na figura ao lado que a rotação em torno do eixo que passa pela origem do sistema {A} e é paralelo ao versor k̂ pode ser obtida, por exemplo, rodando em torno do eixos ẐA até que o eixo dos xx fique alinhado com a projeção de k̂ no plano xy; o ângulo de rotação é representado por α. O novo eixo dos yy, denotado por ŶA00 na figura, é ortogonal ao plano que contém ẐA e k̂. Rodamos em torno do novo eixos dos yy até que o eixos dos zz se alinhe com k̂; o ângulo de rotação é representado por β. A rotação em torno de k̂ de um ângulo θ é realizada em torno do novo eixos dos zz. Finalmente, desfazemos as duas primeiras rotações na ordem contrária a que elas foram feitas. ẐA ẐA0 ŶA0 θ β k̂ ŶA00 θ Usando a notação matricial: Rot k̂, θ = RotZ (α) RotY (β) RotZ (θ) RotY (−β) RotZ (−α) ŶA α X̂A θ onde X̂A0 sα = q cα = q sβ = ky kx + ky 2 2 kx kx 2 + ky 2 q kx 2 + ky 2 c β = kz Assim √ kx2kz −√ ky 0 kx kx +ky 2 kx 2 +ky 2 k √ ky kz √ 2x 2 ky 0 2 2 kx +ky RotZ (α) RotY (β) = q kx +ky − kx 2 + ky 2 0 kz 0 0 0 0 1 q √ kx2kz 2 √ ky2kz 2 − kx 2 + ky 2 kx +ky kx +ky − √ ky √ k2x 2 0 kx 2 +ky 2 kx +ky RotY (−β) RotZ (−α) = kx ky kz 0 0 0 0 0 0 1 Substituindo as matrizes obtêm-se: Rot k̂, θ c θ ky 2 2 − s θ kx kz 2 2 ky s θ ky 2 2 + c θ kx k z 2 2 = kx kz kx +ky kx +ky y kx 2 + kx +ky 2 kx +k + kx +ky 2 kx 2 +ky 2 c θ ky s θ k y x kz x kz − ks θ2k+k kx + kc θ2k+k ky kz kx 2 +ky 2 kx 2 +ky 2 x y2 x y2 = kx ky − + kx 2 +ky 2 kx 2 +ky 2 s θ ky x kz kx kz − kx 2 + ky 2 + kcxθ2k+k 2 kx 2 +ky 2 y 0 4 2 2 2 2 2 3 kx ky − ky + 2 c θ kx kx 2 +ky 2 s θ ky k z x 2 +ky 2 +k ky − kx 2 +ky 2 c θ kx kx 2 +ky 2 s θ ky kz x 2 +ky 2 +k kx kx 2 +ky2 s θ kx kx 2 + ky 2 kx 2 +ky 2 − s θ kx kx 2 +ky 2 c θ ky k z x 2 +ky 2 −k kx kz s θ ky + kx kz − c θ kx kz kx 2 +ky 2 s θ kx kx 2 +ky 2 c θ ky k z x 2 +ky 2 −k 2 ky kz ky kz − s θ kx − c θ ky kz kz 2 + kx 2 + ky 2 c θ 2 kx +ky c θ ky kz − kx 2 +k + ky kz 2 y 0 0 0 0 0 1 kx +kx ky +c θ kx kz +c θ ky kx 2 +ky 2 kx 3 ky +s θ kx 2 kz +kx ky 3 +c θ kx ky kz 2 −c θ kx ky +s θ ky 2 kz kx 2 +ky 2 kx ky −s θ kx 2 kz +kx ky 3 +c θ kx ky kz 2 −c θ kx ky −s θ ky 2 kz kx 2 +ky 2 kx 2 ky 2 +c θ kx 2 +ky 4 +c θ ky 2 kz 2 kx 2 +ky 2 s θ ky + kx kz − c θ kx kz 0 ky kz − s θ kx − c θ ky kz kx kz − s θ ky − c θ kx kz s θ kx + ky kz − c θ ky kz c θ kx 2 + c θ ky 2 + kz 2 0 0 0 0 0 1 Substituindo kz 2 = 1 − kx 2 − ky 2 nos elementos 11, 12, 21 e 22 da matriz acima e c θ kx 2 + c θ ky 2 = c θ − c θ kz 2 no elemento 33 e simplificando, obtêm-se a Fórmula de Rodrigues como mostrada na Seção 1.7.1. 1.12. Aplicação à Programação de Robôs De uma forma geral nós dividimos a programação de robôs em dois modos: online e offline. A programação offline geralmente trata da sequência de ações, comunicação com outras máquinas, ou seja, a parte algorítmica do programa. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 55 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Na programação online são definidos as posições/orientações, normalmente chamadas de “pontos”, por os quais o robô transportar a ferramenta. Quase sempre, o robô é levado para a posição/orientações de atuação usando uma ferramenta similar a um joystick e esta posição/orientações é gravada na memória para ser usada durante a execução do programa. Esta estratégia funciona muito bem para um número relativamente pequeno de posição/orientações. Ela se baseia no fato do robô não ter nenhum conhecimento a respeito do ambiente em que trabalha. Este conhecimento é fornecido para cada posição/orientações levando a ferramenta do robô até a posição/orientações usando um joystick. Nesse caso, não é possível descrever a posição/orientações para o robô atuar através um sistemas de coordenadas, mas é possível consultar a posição/orientações atingida ou gravada na memória usando o sistema de coordenadas particular do robô. Os pontos de aproximação e afastamento geralmente são calculados de forma offline com base nos pontos gravados. Para um número grande de posições/orientações, é mais conveniente orientar o robô através da identificação de alguns pontos da peça a ser manipulada. Assim, levando o robôs para quatro pontos (só a posição da ferramenta é importante) é possível correlacionar as coordenadas no sistema da peça com as coordenadas no sistema do robô e identificar os parâmetros de uma matriz de transformação homogênea que descreve a peça em relação ao sistema de coordenadas do robô. Esta transformação homogênea é usada para levar o robô a qualquer posição/orientações determinados no sistema de coordenadas da peça, mas aplicados (mapeados) no sistema do robô. São necessários quatro pontos porque uma matriz transformação xC homogênea possui doze parâmetros a serem determinados, cada x3a ponto fornece três equações. Considere a vista inferior da cantoneira x2a y3a yC mostrada ao lado onde serão instaladas três presilhas pelo robô. A posição/orientação de cada presilha é descrita através de um sistema de coordenadas. É possível descrever três dos sistemas y2a de coordenadas mostrados em relação ao quarto. A escolha do x1a sistema de coordenadas de referência é um tanto arbitrária. Um bom candidato, neste exemplo, é {3a }, onde será instalada uma das três presilhas. Outra possibilidade é usar {C}, sistema da y1a cantoneira. É fácil mapear de um sistema para o outro, se for necessário. A princípio, a robô não tem conhecimento da posição e orientação da cantoria: ele não conhece a matriz 0C T que descreve a cantoneira em relação ao robô (base do robô, {0}). Usando um joystick, é possível fazer com que o robô toque em quatro pontos da cantoneira. Quaisquer quatro pontos não coplanares servem. O importante é que os pontos possam ser determinados em relação ao sistema de coordenadas da cantoneira e “tocados” pelo robô para determinar as suas coordenadas em relação ao sistema de coordenadas do robô. Na prática, é comum usar mais do que quatro pontos e usar um algoritmo de mínimos quadrados para maximizar a verossimilhança dos parâmetros obtidos. Para isso, é muito comum usar decomposição em valores singulares (SVD -Singular Value Decomposition) e a pseudo-inversa de Moore–Penrose41 . Também é possível usar apenas três pontos se for usada uma representação baseada na fórmula de Cayley (ver Seção 1.7.1), mas isso resulta em um problema não linear com múltiplas soluções. O usual é sintetizar o quarto ponto com base nos três primeiros usando uma transformação invariante, isso é, que possa ser calculada nos dois sistemas de coordenadas. A forma mais ou mesmos padrão é usar o produto externo para determinar um quarto ponto usando um vetor ortogonal ao plano dos três pontos conhecidos: P4 = (P1 − P3 ) × (P2 − P3 ) + P3 e, neste caso, P1 , P2 e P3 não podem ser colineares. Note que o cálculo é feito com os pontos dados tanto no sistema do robô quanto da peça, {0} e {C}, e por isso o sistema no qual as coordenadas foram medidas não está indicado na equação acima. Isso é interessante para problemas como o da cantoneira onde todos os pontos mensuráveis são coplanares ou quase coplanares (depende da espessura da cantoneira). Cuidado, combinações lineares de três pontos não funcional porque o quarto ponto recai no mesmo plano que os demais e isso inclui ponto médio. Se for feito r11 r21 0 T = C r31 0 r12 r13 r22 r23 r32 r33 0 0 px py pz 1 e como 0 41 Eliakim Pi = 0C T C Pi Hastings Moore (1862-1932) e Roger Penrose (1931-) 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 56 Introdução à Robótica — Universidade Tecnológica Federal do Paraná para i = 1, . . . , 4, temos o sistema linear 0 p1x p1y 0 p 1z 0 p2x 0 p2y 0 p 2z = 0 p3x 0 p3y 0 p 3z 0 p4x 0 p4y 0 p 4z C 0 C C C C p1x C p1y 0 p1z 0 0 0 0 1 0 0 p 1z 0 0 0 0 1 p1z 0 0 0 1 0 0 0 1 p2z 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 p2z 0 0 0 C p2x C p2y 0 0 0 0 0 0 C p3x C p3y C C C p 1x C p 2x 0 p 2y C C 0 1 0 p 3z 0 0 0 0 1 p3z 0 0 0 1 0 0 0 1 p4z 0 0 0 0 0 0 p4z 0 0 0 C p4x C p4y 0 0 0 0 0 0 C C p 4x 0 p4y C p 2y 0 0 p3y p2x C 0 0 p 3x 0 C 0 0 C 0 0 C C p1y 0 0 C C p1x 0 0 0 C C p 2z 0 0 p3z p 1y 0 C 0 0 C C p 3y 0 0 p 4z 0 C p 3x 0 C p 4x C p 4y r11 r12 r13 r21 r22 r23 r31 r32 r33 px py pz que possui solução se os pontos não forem coplanares. Se eles forem coplanares, o determinante da matriz acima será nulo e ela não poderá ser invertida. h iT Se o vetor de parâmetros a determinar for r11 r12 r13 r21 r22 r23 r31 r32 r33 px py pz , dado nesta ordem, cada novo ponto i agregará três linhas a matriz na forma: C p ix C piy C 0 piz 0 0 0 0 0 0 C 0 pix 0 C piy C 0 0 0 0 0 1 0 0 piz 0 0 0 0 1 piz 0 0 0 . 1 0 C C pix C piy Devido aos erros de medição, é comum que a submatriz de rotação de 0C T não seja ortogonal. Neste caso é possível ortogonalizar a matriz usando um algoritmo como o de Gram-Schmidt42 . Conhecendo-se 0C T é possível mapear não só pontos, mas também a orientações descritas no sistema da cantoneira para o sistema do robô. Assim, as posições/orientação de aproximação e afastamento podem ser determinadas rápida e seguramente43 . Por exemplo, a posição/orientação de aproximação para instalar a primeira presilha pode ser determinada estipulando uma certa distância na direção contrária a do eixo dos xx do sistema 1a , assim o vetor 1a ~vP = h −d 0 0 0 iT já em coordenadas homogêneas e onde d é uma distância conveniente. Em relação ao sistema da cantoneira, {C}, a posição/orientação de aproximação para a primeira presilha é dada por C PT ~vP Transl =C 1a T Transl 1a e em relação ao robô, por 0 PT 0 = 0C T C P T = CT C 1a T 1a ~vP . O mesmo pode ser feito para as demais posições de aproximação e afastamento. 42 Jørgen 43 O Pedersen Gram (1850-1916) e Erhard Schmidt (1876-1959). uso de vários pontos leva um processo mais exato do que a gravação de pontos individuais. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 57 Introdução à Robótica — Universidade Tecnológica Federal do Paraná z 3a z6 y3a x3a x6 x5 = xC 6 z5 = zC 9 y5 = yC 4 z8 zA = z 1a x8 z7 x4 7 y4 y11 11 z10 x11 y2a x2a x12 z11 y8 yA = y1a z4 y12 12 y9 y6 x9 z 2a 5 z0 z12 z9 xA = x1a y10 10 y7 x10 x7 y0 x0 Esta técnica offline de cálculo de posições/orientações é ainda mais útil quando a cantoneira é fixada ao robô ao invés de permanecer fixa em relação a ele. Ao lado é mostrado a cantoneira sendo levada até um alimentador de peças fixo que fornece as presilhas para serem instaladas. Neste caso, programar online as posições/orientação de instalação das presilhas, de aproximação e afastamento é uma tarefa árdua e demorada. Tudo pode ser simplificado com o uso das matrizes de transformação homogêneas. Por exemplo, a posição/orientação {5} é programa online e faz com que a posição/orientação {1a } do robô e da cantoneira (os dois se movem em conjunto) seja coincidente com a posição/orientação {A} do alimentador fixo. Em outras palavras, {5} é escolhido usando um joystick de tal forma que o robô faz o encaixe de uma presilha, que está no alimentador, na primeira posição de inserção. Isso faz com que o alimentador fique identificado em relação ao robôs. As outras oito posições/orientações necessárias podem ser determinadas computacionalmente, sem a necessidade de gravá-las online o que implicaria em operar (pilotar) o robô até elas. Por exemplo, a posição/orientação {4} de aproximação para inserção da primeira presilha é fácil de ser determinada em relação à {A} = {1a }. Ela está a uma certa distância d sobre o eixo dos xx X̂A , ou seja, podemos criar o vetor A ou, em relação à base 0 onde 0 CT foi identificada e C 1a T ~vP = h d 0 0 0 iT ~vP = 0A T A~vP = 01a T A~vP = 0C T C A vP 1a T ~ é constante. Basta deslocar {5} na direção de ~vP para obter {4} em relação à base 0 0 vP 05 T 4 T = Transl ~ onde 05 T foi grava online ou determina com base no dados gravados. O mesmo pode ser aplicado para as demais posições aproximação e afastamento. No caso de afastamento é ainda mais simples porque o eixo dos zz de todos os sistemas são paralelos entre si. Quando o robô está em {5}, a primeira posição de inserção {1a } fica no alimentador. Para inserir a segunda presilha é necessário levar a segunda posição de inserção, {2a }, até o alimentador. A posição/orientação {8} que o robô deve assumir para levar o segundo ponto de inserção até o alimentador pode ser calculada sabendo que existe uma e que, quando aplicada a {5} transforma em {8} , e quando aplicada a {2a } transforma em transformação homogênea T a {1 }, assim e 0T =T 5 0 0 e 1a T = T 2a T 0 8T e =0 a T T 1 0 8T =01a T −1 0 2a T −1 0 0 2a T 5T onde {1a } e {2a } estão descritos em {0}, poderia ser em {C} e =Ca T T 1 0 8T Para a última presilha 0 11 T 11 de agosto de 2020 =01a T =C 1a T −1 C 2a T −1 0 C 2a T 5T −1 0 0 3a T 5T =C 1a T . −1 0 C 3a T 5T Prof. Luís Paulo Laus, Dr. Eng. . 58 Introdução à Robótica — Universidade Tecnológica Federal do Paraná 1.13. Eficiência Computacional Quando se realiza produtos de transformações homogêneas em um computador ou sistema equivalente, é interessante usar as características construtivas das transformações homogêneas para reduzir o número de operações de multiplicação e adição de escalares necessário para se obter o resultado. O conhecimento prévio da última linha de toda e qualquer transformação homogênea ajuda a reduzir muito o número de operações aumentando a eficiência computacional. B A Considere o caso da multiplicação de duas transformações homogêneas A B T e C T nesta ordem resultando em C T . Se o cálculo for realizando admitindo que as matrizes são matrizes 4 × 4 genéricas, será necessárias quatro multiplicações e três adições para cada elemento da matriz A C T resultando em sessenta e quatro multiplicações e quarenta e oito adições de escalares. Contudo, sabe-se que: A CT = A B BT C T = A BR 0 A OB 1 B CR B 0 OC 1 = A B BR C R 0 A B B R OC 1 + A OB que implica na multiplicação de uma matriz 3 × 3 por outra também 3 × 3; na multiplicação de uma matriz 3 × 3 por um ponto (3 × 1); e na soma de um ponto com outro. Para realizar a multiplicação das matrizes, são necessárias três multiplicações e duas adições por elemento da matriz o que resulta em vinte e sete multiplicações e dezoito adições. Para multiplicar o ponto pela matriz são necessárias nove multiplicações e seis adições. Finalmente, para somar os dois pontos são necessárias três adições. No total, devem ser realizadas trinta e seis multiplicações e vinte e sete adições de escalares. Pouco mais da metade das operações realizadas quando se considera as matrizes de transformação homogêneas como sendo matrizes genéricas. Em outras palavras, quando se implementa programas para multiplicar transformações homogêneas, é fundamental usar o conhecimento a respeito da última linha para reduzir o número de cálculos necessários. Nas seções anteriores, ficou estabelecido que o resultado e a interpretação do produto de várias transformações homogêneas dependem fortemente da ordem na qual estas transformações são escritas. Contudo, é possível realizar a mesma operação com eficiência computacional diferente. Isso porque é possível realizar os produtos em uma ordem diferente da qual eles são dados em uma equação sem mudar a ordem das matrizes nesta equação. Isso é particularmente interessante quando é necessário mapear ou transformar um ponto ou vetor (ou alguns poucos pontos e vetores). Considere o caso onde o ponto P é dado em relação a um sistema {C} (C P é conhecido) e este ponto dever ser B A mapeado para o sistema {A} sabendo-se, também, as transformações homogêneas A B T e C T . Para calcular P pode-se proceder de duas formas: A P =A B T A P = A BT B C CT P C B P CT onde os parênteses são usados para indicar (forçar) a ordem em que as operação são realizadas. Inegavelmente o resultado é o mesmo e as duas equações acima calculam o ponto A P de forma correta. Contudo, o número de operações de multiplicação e adição de escalares necessário para realizar o produto pela primeira equação é muito menor, ou seja, a primeira equação é computacionalmente mais eficiente que a segunda. Isso porque a primeira equação multiplica C B uma transformação homogênea (B C T ) por um ponto ( P ), o que resulta em outro ponto ( P ) que, por sua vez, é A pré-multiplicado por outra transformação homogênea (B T ). Neste caso, foram realizadas duas multiplicações de transformação homogênea por ponto; cada uma delas envolve a multiplicação de uma matriz de rotação 3 × 3 por um ponto 3 × 1, o que demanda nove multiplicações e seis adições, e a soma de um ponto com outro (ver equação (1.15)) totalizando nove multiplicações e nove adições. Assim, para calcular A P pela primeira equação são necessárias dezoito multiplicações e dezoito adições. Note que os cálculos já estão otimizados levando em conta tanto a estrutura particular das transformações homogêneas como do ponto, que foi transformado em uma matriz 4 × 1 onde o último elemento vale um. B Pela segunda equação, primeiro são multiplicadas as duas transformações homogêneas (A B T e C T ), resultando A em outra transformação homogênea (C T ), para depois multiplicar o resultado pelo ponto. Como visto acima, a multiplicação de duas transformações homogêneas demanda no mínimo trinta e seis multiplicações e vinte e sete adições de escalares o que já supera o número de operações demandada pela primeira equação. Ainda será necessário C multiplicar a transformação homogênea obtida (A C T ) pelo ponto P usando, no total, quarenta e cinco multiplicações e trinta e seis adições. É interessante notar que se for necessário mapear vários pontos ou invés de apenas um, pode ser que a segunda equação se torne mais eficiente que a primeira porque o produto das transformações homogêneas é realizado uma única vez. Se o número total de pontos a serem mapeados for representado por x, o número total de multiplicações usando a 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 59 Introdução à Robótica — Universidade Tecnológica Federal do Paraná primeira equação por m1 e o número total de adições por a1 , pode-se estabelecer que: m1 = 18x a1 = 18x porque todas as operações devem ser repetidas para cada ponto. Se número total de multiplicações usando a segunda equação for representado por m2 e número total de adições por a2 , pode-se estabelecer que: m2 = 36 + 9x a2 = 27 + 9x . A primeira equação será menos eficiente que a segunda se o número de multiplicações m1 e de adições a1 demando pela primeira equação for superior ao número de multiplicações m2 e adições a2 demandado pela segunda equação, ou seja: e m2 ≤ m1 a2 ≤ a1 e isso acontece se 36 + 9x ≤ 18x e 27 + 9x ≤ 18x ou seja, se x≥4 e x≥3 que implica que x≥4 o que significa que para três pontos ou menos a primeira é mais eficiente que a segunda. Contudo, para quatro pontos ou mais, a segunda equação passa a ser mais eficiente que a primeira. Para quatro pontos a segunda equação demanda cinco adições a menos que a primeira e número de multiplicações é igual. Note que esse resultado é válido para qualquer processador porque independe da diferença de tempo para realizar multiplicações e adições. Em alguns casos, contudo, é necessário levar em conta o tempo para realizar as operações (custo computacional) porque, para um dado número de pontos, o número de multiplicações demandado por uma equação é maior que o demando pela outra, mas o número de adições é menor: para determinar qual equação é mais eficiente é necessário saber que tipo de operação, multiplicação ou adição, é realizada mais rápido. No caso de processadores modernos dotados de FPU (Float Point Unit) este tempo pode ser igual o que contraria a intuição de que uma multiplicação é muito mais demorada que uma soma. Outros dois casos interessantes relacionados à eficiência computacional é a inversão de transformações homogêneas e multiplicação da inversa de uma transformação homogênea por um ponto. Como foi visto na Seção 1.9.2, para inverter uma transformação homogênea é necessário transpor a submatriz de rotação e multiplicar a transposta pelo ponto (última coluna). A operação de transposição não demanda nenhum cálculo, apenas cópia em memória, e se as rotinas para multiplicação forem escritas levando em conta a transposição, nem mesmo esta cópia será necessária. Já a multiplicação de uma matriz 3 × 3 pelo ponto demanda nove multiplicações e seis adições. Isso é muito eficiente se comparado aos métodos numéricos para inversão de matrizes. Contudo, quando a inversa de uma transformação homogênea deve ser multiplicada por um ponto, é mais eficiente desenvolver uma equação particular do que inverter a matriz para depois multiplicá-la pelo ponto (o que demandaria um total de dezoito multiplicações e quinze adições). Suponha que seja necessário calcular o P em relação ao sistema {B} conhecendo-se as coordenadas deste ponto na sistema {A} e a transformação homogênea A B T . Isso pode ser feito por: B mas a inversa de A BT −1 A P =A P B T vale A −1 BT 11 de agosto de 2020 = A T BR T A −A OB BR 0 1 Prof. Luís Paulo Laus, Dr. Eng. 60 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Tabela 1.3.: Número de operações com escalares Representação Número de Multiplicações Número de Adições inversão de transformação homogênea T −1 9 6 multiplicação de transformação homogênea por transformação homogênea TT 36 27 multiplicação de transformação homogênea por inversa de transformação homogênea T T −1 36 27 multiplicação de inversa de transformação homogênea por transformação homogênea T −1 T 45 33 TP 9 9 T −1 P 9 9 T ~v 9 6 T −1 ~v Rot k̂, θ 9 6 15 9 21 18 qp 16 12 rotação de vetor (quatérnio puro) usando quatérnio unitário qrq 18 12 rotação de vetor (quatérnio puro) usando quatérnio unitário e translação qrq +t 18 15 Operação multiplicação de transformação homogênea por ponto multiplicação de inversa de transformação homogênea por ponto multiplicação de transformação homogênea por vetor multiplicação de inversa de transformação homogênea por vetor Fórmula de Rodrigues (além de seno e cosseno de θ) Fórmula de Cayley (além de tangente e inverso de escalar) −1 (I − S) multiplicação de quatérnios (I + S) assim B P =A B T = −1 A P = A T A P BR A T BR T A OB −A BR 0 1 T A OB −A B R 1 = AP = A T BR A A T BR T A OB −A BR 0 1 P −A O B 1 . A P3×1 1 = ou seja, a multiplicação da inversa de uma transformação homogênea por um ponto implica na subtração de dois pontos e na multiplicação do resultado por uma matriz de rotação transposta. No total são usadas nove multiplicações e nove adições, o mesmo número de operações para se multiplicar uma transformação homogênea (sem inverter) por um ponto. Na Tabela 1.3 encontram-se o número de operações com escalares para realizar cada operação. Observe que a rotação e translação de um ponto pode ser feita de duas formas: 1) multiplicando por uma transformação homogênea; ou 2) aplicando um quatérnio unitário ao vetor de posição e depois somando um vetor de translação. O custo computacional usando quatérnio é praticamente o dobro do custo usando transformações homogêneas. Programas para tratamento de matrizes, como o Matlab e o octave, são pouco eficientes no tratamento das transformações homogêneas porque, a menos que sejam implementadas rotinas específicas, eles multiplicarão e inverteram as transformações homogêneas usando os métodos genéricos. Assim, por exemplo, para multiplicar uma transformação homogênea por um vetor são realizadas 16 multiplicações e 12 adições, quase o dobro do necessário. A inversão de transformação homogênea é ainda pior porque depende de como o algoritmo é implementado e em cada caso pode demandar um número diferente de operações que é com certeza bem maior o necessário. O uso de uma metodologia de análise orientada à objeto pode auxiliar no desenvolvimento de pacotes de software (classes) para tratar as transformações homogêneas de forma eficiente e transparente para o usuário final. Usando sobrecarga de operadores, comum em linguagens que dão suporte à orientação à objetos com C++, é possível que o programador escreva uma linha como: 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 61 Introdução à Robótica — Universidade Tecnológica Federal do Paraná AC_T = AB_T * BC_T ; onde os operandos são elementos da classe Transformacao_Homogenea que implementa a multiplicação, a atribuição e a armazenagem de forma eficiente. Pode-se também criar classes de pontos e vetores que permitem a multiplicação eficiente destes elementos por transformações homogêneas de modo a facilitar o seu uso. Linhas de comando com: C_P = CB_T * ( BA_T * A_P ); A_v = AC_T * C_v ; podem realizar as operações de forma eficiente se o operador de multiplicação de transformação homogênea por ponto for implementado na classe Ponto e o operador de multiplicação de transformação homogênea por vetor for implementado na classe Vetor. Note que o resultado da multiplicação de uma transformação homogênea por um ponto resulta em um ponto, e por um vetor resulta em um vetor. Daí a colocação de que os operadores de multiplicação de transformação homogênea por ponto e vetor devem pertencer às classes Ponto e Vetor respectivamente. Também os operadores de multiplicação de transformação homogênea por ponto e vetor devem ser implementados nestas classes respectivas. Já os operadores de multiplicação inversa de transformação homogênea por transformação homogênea e de inversão (função) devem ser implementados na classe Transformacao_Homogenea. No tocante a armazenagem homogêneas, só são necessários doze escalares (e não dezesseis) h de transformações i . 0 0 0 1 por que a última linha é sempre Note que as considerações sobre eficiência computacional estão sempre intimamente ligadas a arquitetura do microprocessador usado. Alguns processadores44 podem multiplicar uma transformação homogênea por outra em quatro ciclos de clock, o mesmo que um Pentium demora para multiplicar um escalar por outro. Além disso, as chamadas GPU (Graphics Processing Units) possuem hardware dedicado e eficiente para realizar transformações de coordenadas, muito parecidas com as transformações homogêneas. Um campo promissor de pesquisa aplicada é usar uma GPU para realizar cálculos com transformações homogêneas. Com o advento dos circuitos integrados de lógica programável de alta capacidade, abre-se a possibilidade de implementar estas operações usando um hardware dedicado. A geração atual de FPGA (Field Programmable Array Logic) traz até milhões de portas lógicas o que é mais do que suficiente para implementar todo o controle de um robô em hardware e com a vantagem de se poder reconfigurar este hardware o que acelera as etapas de desenvolvimento. Um dos campos de estudo mais promissores é o uso de grandes sistemas de lógica reconfigurável formando um computador reconfigurável. A aplicação da chamada “Computação Reconfigurável” na Robótica é grande e o maior interesse recai sobre o controle e simulação de robôs por demandarem um número de operações muito grande. Há ainda a possibilidade de usar estes sistemas para aumentar a inteligência dos robôs. 1.14. Ângulos de Roll , Pitch, Yaw (Eixos Fixos) Para descrever a orientação de um corpo no espaço tridimensional pode-se usar dois artifícios: 1. descrever em relação a eixos fixos; 2. descrever em relação a eixos móveis; As duas são equivalentes, o uso de uma ou outra forma depende da aplicação. A descrição usando eixos fixos geralmente é feita com um sistema emprestado da aviação45 : os ângulos de roll (rolamento), pitch (arfagem) e yaw (guinada). As operações são feitas na seguinte ordem: 1. RotX (γ): roll 2. RotY (β): pitch 3. RotZ (α): yaw 44 Como o Super SH4 da Hitachi. são termos náuticos. Em um avião, estes movimentos são controlados pelas superfícies de comando: o rolamento, rolagem, bancagem ou inclinação lateral da aeronave é controlada pelos ailerons, a arfagem ou tangagem é controlada pelo profundor (cabrar quando o movimento é para cima e picar quando é para baixo), também chamado de elevador ou leme de profundidade, e a guinada pelo leme da cauda ou direção. Em comparação, o eixo ao nariz a cauda do avião é o eixo x, de asa a asa é y e o vertical é o z. 45 Também 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 62 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Como os eixos são fixos, uma matriz de rotação (transformação homogênea) de roll, pitch, yaw vale: cα cβ cα sβ sγ − sα cγ sα cβ RPY(α, β, γ) = RotZ (α) RotY (β) RotX (γ) = −sβ 0 cα sβ cγ + sα sγ 0 sα sβ sγ + cα cγ sα sβ cγ − cα sγ cβ sγ cβ cγ 0 0 0 . (1.18) 0 1 Note que este operador é inversível, isso é, se for conhecido a transformação homogênea é possível calcular os valores de α, β e γ que, quando aplicados na equação acima, resultam na transformação original. Supondo que os valores numéricos da matriz acima são conhecidos e denotando-os por r11 , r12 , etc. tem-se: r11 r21 RPY(α, β, γ) = r31 0 r12 r13 r22 r23 r32 r33 0 0 0 0 0 1 que permite montar o sistema de equações: r11 r 21 r31 r32 r 33 = cα cβ = sα cβ = −sβ = cβ sγ = cβ cγ que, por sua vez, permite calcular β por: β = − arcsen r31 que admite uma segunda solução para β chamada de β 0 e dada por: β0 = 180◦ − β −180◦ − β se β ≥ 0 se β < 0 . Se β 6= ±90◦ (r31 6= ±1), α e γ poderão ser calculados por: α = atan2 (r21 , r11 ) γ = atan2 (r32 , r33 ) onde a função atan2 é estudada na Seção 1.3. A segunda solução (β 0 , α0 e γ 0 ) é completada por: α − 180◦ se α > 0 α0 = α + 180◦ se α ≤ 0 γ − 180◦ se γ > 0 γ0 = γ + 180◦ se γ ≤ 0 porque o cosseno de β 0 tem o sinal trocado em relação ao cosseno de β o que muda o sinal de r11 , r21 , r32 e r33 (ver Seção 2.5.2). 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 63 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Caso β seja igual ±90◦ , o cosseno de β será nulo e a equação (1.18) se tornará: 0 − sen (α − γ) cos (α − γ) 0 0 cos (α − γ) sen (α − γ) 0 RPY(α, +90◦ , γ) = −1 0 0 0 0 0 0 1 0 − sen (α + γ) − cos (α + γ) 0 0 cos (α + γ) − sen (α + γ) 0 ◦ RPY(α, −90 , γ) = 1 0 0 0 0 0 0 1 e o que não permite determinar um valor único para α e γ, mas permite determinar o valor de sua soma ou diferença: α − γ = atan2 (−r12 , r22 ) se r31 = −1 α + γ = atan2 (−r12 , r22 ) se r31 = 1 . Pode-se, então, arbitrar um valor para α e calcular γ ou vice-versa. Se α, β e γ são variáveis no tempo com derivadas α̇, β̇ e γ̇, o vetor velocidade angular instantânea vale: γ̇ c α c β − β̇ s α 0 −sα cα cβ α̇ ω ~ = β̇ c α + γ̇ c β s α = 0 c α s α c β β̇ α̇ − γ̇ s β 1 0 −sβ γ̇ 0 − √ r12 2 r11 α̇ 1−r31 r11 = √ se β 6= ±90◦ r β̇ 0 21 1−r31 2 γ̇ 1 0 r31 0 = 0 se β = ±90◦ α̇ ∓ γ̇ q p e a magnitude da velocidade angular vale |~ ω | = α̇2 + β̇ 2 + γ̇ 2 − 2 sβ α̇ γ̇ = α̇2 + β̇ 2 + γ̇ 2 + 2 r31 α̇ γ̇. É interessante notar, tanto na expressão para o vetor ω ~ quanto na expressão para a magnitude, que a visão de que as derivadas α̇, β̇ e γ̇ agem como componentes de um vetor velocidade angular não se sustenta. É possível, no entanto, criar um h iT isomorfismo entre um vetor de derivadas α̇ β̇ γ̇ e a velocidade angular ω ~ onde a matriz r12 √ 0 − r 11 0 −sα cα cβ 1−r31 2 r11 J = 0 cα sα cβ = √ 0 r 21 1−r31 2 1 0 −sβ 1 0 r31 agem como um mapa linear. A matriz J contém derivadas parciais e são chamadas de jacobino46 . Observe que o jacobiano acima não é uma matriz de rotação porque a primeira e a terceira coluna, no geral, não são ortogonais e o seu determinante vale det J = − cos β. 1.15. Ângulos de Euler (Eixos Móveis) É mais usual empregar eixos móveis do que eixos fixos. Para representar a rotação em torno de eixos móveis, pode-se usar os ângulos de Euler47 , um conjunto de três rotações. Não há eixos preestabelecidos, portanto são possíveis doze 46 Carl Gustav Jacob Jacobi (1804-1851). Euler (1707-1783). 47 Leonhard 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 64 Introdução à Robótica — Universidade Tecnológica Federal do Paraná transformações diferentes (usando os eixos xyz, xzy, xyx, xzx, yxz, yzx, yxy, yzy, zxy, zxy, zxz e zyz). As mais comuns são zyx e zyz, assim: 0 sα cβ sα sβ sγ + cα cγ sα sβ cγ − cα sγ 0 RotZYX (α, β, γ) = RotZ (α) RotY (β) RotX (γ) = −sβ cβ sγ cβ cγ 0 0 0 0 1 cα cβ cγ − sα sγ −sα cγ − cα cβ sγ cα sβ sα cβ cγ + cα sγ cα cγ − sα cβ sγ sα sβ RotZYZ (α, β, γ) = RotZ (α) RotY (β) RotZ (γ) = −sβ cγ sβ sγ cβ 0 0 0 cα cβ cα sβ sγ − sα cγ cα sβ cγ + sα sγ 0 0 . 0 1 Note que uma rotação de Euler usando os eixos zyx equivale a uma rotação usando os ângulos de roll, pitch, yaw, a diferença entre elas está na ordem de interpretação dos ângulos, mas o efeito produzido sobre o objeto a ser rotacionado é o mesmo. Note, ainda, que estes operadores são inversíveis, isso é, se for conhecido a transformação homogênea é possível calcular os valores de α, β e γ que, quando aplicados nas equações acima, resultam na transformação original. A inversão da rotação de Euler usando os eixos zyx é exatamente igual à inversão da rotação usando os eixos de roll, pitch, yaw. A inversão da rotação de Euler usando os eixos zyz é calculada de forma análoga. Construindo o sistema de equações: r13 = c α s β r = sα sβ 23 r33 = c β r31 = − s β c γ r = sβ sγ 32 de onde se pode calcular β por: β = arccos r33 e que admite uma segunda solução: β 0 = −β . Se β 6= 0 e β 6= 180◦ , α e γ podem ser calculados por: α = atan2 (r23 , r13 ) γ = atan2 (r32 , −r31 ) . A segunda solução (β 0 , α0 e γ 0 ) é completada por: α − 180◦ se α > 0 α0 = α + 180◦ se α ≤ 0 γ − 180◦ se γ > 0 γ0 = γ + 180◦ se γ ≤ 0 porque o seno de β 0 tem o sinal trocado em relação ao seno de β já que seno é uma função ímpar o que muda o sinal de r13 , r23 , r32 e r31 (ver Seção 2.5.2). 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 65 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Contudo, se β valer zero ou 180◦ , a rotação se torna: cos (α + γ) − sen (α + γ) 0 sen (α + γ) cos (α + γ) 0 RotZYZ (α, 0, γ) = 0 0 1 0 0 0 − cos (α − γ) − sen (α − γ) − sen (α − γ) cos (α − γ) RotZYZ (α, 180◦ , γ) = 0 0 0 0 0 0 0 1 0 e 0 0 −1 0 0 1 0 o que, da mesma forma que no caso anterior, não permite determinar um valor único para α e γ, mas permite determinar o valor de sua soma ou diferença: α − γ = atan2 (−r12 , r22 ) se r33 = −1 α + γ = atan2 (−r12 , r22 ) se r33 = 1 . Pode-se, então, arbitrar um valor para α e calcular γ ou vice-versa. Se α, β e γ são variáveis no tempo com derivadas α̇, β̇ e γ̇, o vetor velocidade angular instantânea vale: γ̇ c α s β − β̇ s α 0 −sα cα sβ α̇ ω ~ = β̇ c α + γ̇ s α s β = 0 c α s α s β β̇ α̇ + γ̇ c β 1 0 cβ γ̇ 0 − √ r23 2 r13 α̇ 1−r33 ◦ r 13 = 0 √ r23 β̇ se β 6= 0, ±180 2 1−r33 γ̇ 1 0 r33 0 0 = 0 se β = 0 e 0 se β = ±180◦ α̇ − γ̇ α̇ + γ̇ e a magnitude da velocidade angular vale |~ ω| = q p α̇2 + β̇ 2 + γ̇ 2 + 2 cβ α̇ γ̇ = α̇2 + β̇ 2 + γ̇ 2 + 2 r33 α̇ γ̇. 1.16. Retas no Plano e no Espaço Tridimensional No plano xy uma reta pode ser dada por: y= a ↑ x + b ↑ dois parâmetros (a e b) No espaço tridimensional xyz uma reta que passa pelos pontos [ x0 y0 z0 ]T e [ x1 y1 z1 ]T é dada por: x − x0 y − y0 z − z0 = = x1 − x0 y1 − y0 z1 − z0 que podem ser reduzidas48 à: 48 São três equações, duas linearmente independentes, formando um sistema de equações. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 66 Introdução à Robótica — Universidade Tecnológica Federal do Paraná y − y0 z − z0 = (x1 − x0 ) y1 − y0 z1 − z0 x1 − x0 x1 − x0 x1 − x0 y− y0 + x0 = z− z0 + x0 y1 − y0 z1 − z0 z1 − z0 x0 y1 − x1 y0 x1 − x0 x0 z1 − x1 z0 y+ = z+ y1 − y0 z1 − z0 z1 − z0 x − x0 = (x1 − x0 ) x1 − x0 y1 − y0 x1 − x0 x= y1 − y0 x= x= a y + ↑ b = c ↑ z + d ↑ ↑ quatro parâmetros (a, b, c, e d) Portanto são necessários quatro parâmetros para definir uma reta no espaço tridimensional. Note, ainda, que há duas equações, e não apenas uma como no caso bidimensional (plano). Já um plano no espaço tridimensional pode ser definido por: z= a ↑ y + b ↑ x + c ↑ três parâmetros (a, b, e c) 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 67 2. Cinemática 2.1. Modelo Cinemático de Robôs Um robô pode ser imaginado como sendo uma cadeia de corpos rígidos chamados de segmentos (link) unidos entre si por ligações móveis chamadas juntas (joints). Quando se tem dois corpos rígidos que podem se mover um em relação ao outro com a restrição de que o movimento se dê sobre uma superfície de contato este conjunto de corpos recebe o nome de par inferior. Existem apenas seis tipos de pares inferiores: rotativo, prismático, cilíndrico, plano, fuso e esférico. Os pares inferiores do tipo rotativo e prismático permitem apenas um único grau de liberdade, os demais permitem dois (cilíndrico e fuso) ou três (plano e esférico). Alguns autores consideram que o fuso também só possui um único grau de liberdade porque a rotação e a translação são restritas: um movimento de translação sempre implicará numa rotação e vice-versa. No geral, cada junta é acionada por um atuador (um motor elétrico ou cilindro hidráulico) e, portanto, só possui um único grau de liberdade. Por isso as juntas do robô poderão ser de dois tipos: rotativa (movimento angular) ou prismática (movimento linear)1 . Não há interesse de se usar juntas com mais de um grau de liberdade porque: 1) há a necessidade de manter o robô holonomicamente restrito; 2) as juntas mais complexas podem ser analisadas usando um conjunto de juntas mais simples; 3) a ordem de acionamento das juntas é importante; e 4) é construtivamente difícil prover acionamento à uma junta com mais de um grau de liberdade. Embora a cinemática seja o estudo do movimento sem levar em conta sua causa, em robótica o termo é usado para descrever as relações entre o movimento das juntas do robô e o movimento dos diversos segmentos que compõem o robô, sobretudo do último segmento livre que transporta a ferramenta. Definimos, então, um conjunto de variáveis de junta que expressam a posição da junta seja ela rotativa (com movimento angular) ou prismática (com movimento linear). A cinemática cria um mapeamento entre as variáveis de junta e a posição e orientação de cada segmento do robô. Surpreendentemente, este mapeamento é estático: posição para posição; não há o envolvimento de velocidades (cinemática e dinâmica). Geralmente, só há interesse no último segmento, aquele que transporta a ferramenta ou efetuador (end-effector). Têm-se, então, dois tipos de cinemática: 1. cinemática direta: define a posição e orientação do efetuador em função das variáveis de junta; 2. cinemática inversa: determina o valor das variáveis de junta para se atingir, com o efetuador, uma certa posição e orientação. Os dois tipos de junta (rotativa e prismática) de interesse são caracterizados por uma reta. No caso da junta rotativa a reta é o eixo de rotação; no caso da junta prismática, a reta indica a direção (e sentido se for considerado uma reta orientada) sobre o qual o movimento se dá. Neste caso, qualquer reta paralela à direção do movimento da junta é suficiente para especificar o movimento indistintamente (não há uma reta que seja “melhor” do que suas paralelas se a junta for prismática). Para obter uma descrição do movimento (posição e orientação variando no tempo) é preciso saber descrever a posição e orientação dos segmentos do robô. Para isso atrela-se um sistema de coordenadas a cada segmento do robô. Assim, o problema de descrever a posição e orientação relativa dos segmentos se transforma no problema de descrever a posição e orientação relativa dos sistemas de coordenadas que é solucionado com a construção de transformações homogêneas. Um local no segmento conveniente para o sistema de coordenadas é no início ou no fim do segmento sobre uma das juntas (junta distal ou proximal) fazendo com que o eixo da junta coincida com um dos três eixos do sistema de coordenadas. Isso faz com que o problema de descrever a posição e orientação dos sistemas de coordenadas se transforme no problema de descrever a posição e orientação relativa dos eixos, que são retas, e mais uma certa “posição” inicial (angular ou linear) sobre o eixo. Para caracterizar os eixos são necessários quatro parâmetros (já que os eixos são retas). As transformações homogêneas, com as restrições sobre a matriz de rotação e sobre a última linha, que 1 Eventualmente usa-se juntas esféricas, também chamadas de joelhos, passivas para manter a distância entre dois pontos constante, contudo, isso só é comum em robôs com cadeia cinemática fechada. 69 Introdução à Robótica — Universidade Tecnológica Federal do Paraná sempre vale [ 0 0 0 1 ], possuem seis graus de liberdade, portanto, mais que o suficiente. O fato de uma matriz de transformação homogênea representar mais graus de liberdade que o estritamente necessário tem a vantagem de permitir uma flexibilidade maior na colocação dos sistemas de coordenadas. A princípio, qualquer atribuição de sistemas de coordenadas é possível porque existem seis graus de liberdade para descrever a posição relativa de um sistema de coordenadas em relação ao outro. Isso permite que o sistema de coordenadas seja atrelado a qualquer lugar com qualquer orientação relativa2 . Por outro lado, isso traz a necessidade de determinar os seis parâmetros que caracterizam a posição e orientação relativa de cada segmento. Esse inconveniente torna-se um problema grave na hora de calibrar o robô3 . Uma forma alternativa de proceder é criar uma regra para fixação dos sistemas de coordenadas na qual algumas relações entre sistemas de coordenadas adjacentes são estabelecidas. Por exemplo: fixar a origem de um sistema de coordenadas sobre um dos eixos do sistema de coordenadas anterior. Isso faz com que dois graus de liberdade sejam perdidos porque a origem de um sistema de coordenadas, que por ser um ponto poderia estar em qualquer lugar do espaço tridimensional fique situada sobre uma reta, assim, o parâmetro que caracteriza a posição da origem é um único escalar e não três como no caso geral. A ideia de reduzir o número de parâmetros do modelo restringindo o posicionamento dos sistemas de coordenadas foi usada por Denavit-Hartenberg4 na criação de uma notação. Na verdade eles criaram varias notações; será usada apenas uma delas. 2.2. Notação de Denavit-Hartenberg Modificada (DHM) Para reduzir o número de parâmetros eles restringiram a posição e orientação relativa de dois sistemas de coordenadas adjacentes fazendo com que dois eixos se cortassem a 90◦ . Em outras palavras: um dos eixos de um sistema de coordenadas deve sempre interceptar um dos eixos do sistema de coordenadas adjacente formando um ângulo reto. Essa ideia é importantíssima: perde-se um grau de liberdade de rotação e um de posição. Já foi estabelecido que um lugar conveniente para colocar o sistema de coordenadas é no início ou no fim do segmento (em relação à base imóvel do robô: no eixo da junta distal ou proximal). A notação de Denavit-Hartenberg original usa a junta distal. Contudo, isso traz alguns inconvenientes: a inversão do modelo se torna mais difícil; a calibração do robô tende a perder qualidade (os algoritmos de calibração perdem eficiência). Portanto, a abordagem a ser usada consiste de se localizar o sistema de coordenadas na junta mais próxima à base do robô (mais longe do efetuador). Esta “nova” notação é chamada de DHM para diferenciá-la da original. Note que o sistema de coordenadas se move com o segmento (seja um movimento angular ou linear conforme a junta entre o segmento considerado e o anterior seja prismática ou rotativa). Assim, para construir o modelo cinemático direto de um robô: 1. numera-se cada segmento iniciando pela base (zero) até o último segmento livre que contém o efetuador ou ferramenta (N ); 2. numeram-se as juntas (ou eixos das juntas) de acordo com o número do segmento: a junta mais próxima à base terá o número do segmento, a mais distante terá o número do próximo segmento (as juntas serão numeradas de 1 a N ); 3. posiciona-se o eixo dos zz de cada sistema de coordenadas sobre o eixo da junta orientado com sentido conforme a variação desejada da variável de junta (se a junta i for do tipo prismática Ẑi aponta para o sentido de crescimento da variável de junta, se for rotativa Ẑi é orientado de acordo com a regra da mão direita); 4. posiciona-se o eixo dos xx de cada sistema de coordenadas fazendo com que o eixo dos xx de uma junta intercepte o eixo dos zz do próximo sistema de coordenadas (para obter a redução no número de parâmetros). Geralmente, a notação DHM é descrita através interpretação geométrica de cada parâmetro. Ao invés disso, serão fornecidas regras para fixar os sistemas de coordenadas e determinar os parâmetros. Destas regras, será possível equacionar a transformação homogênea que relaciona dois sistemas de coordenadas adjacentes. A interpretação geométrica, que é difícil, dos parâmetros só serve para provar que o processo é lícito. Na Figura 2.1 podem ser vistos dois segmentos intermediários, a atribuição dos sistemas de coordenadas e os parâmetros do modelo. Note que os segmentos são propositalmente deformados para produzir parâmetros não triviais e sistemas de coordenadas localizados adequadamente para facilitar a visualização. Nas Figuras 2.2 e 2.3 são mostradas as projeções ortogonais do segmento i e i − 1 da Figura 2.1 para que se tenha uma ideia mais exata do quanto eles são deformados. 2 Isso é feito se for usada a notação de Sheit-Utcker. quatro parâmetros por sistema de coordenadas podem ser identificados; se forem usados mais que quatro parâmetros eles serão funcionalmente dependentes o que dificulta, ou mesmo impossibilita, a identificação que, por sua vez, é uma das fases da calibração. 4 Jacques Denavit (1930-) e Richard Scheunemann Hartenberg (1907-1997). 3 Apenas 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 70 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Eixo i + 1 Eixo i Segmento i Eixo i − 1 Segment o i−1 Ŷi+1 Ẑi+1 X̂i+1 αi Ŷi Ẑi−1 di Ẑi X̂i ai Ŷi−1 θi α i− 1 X̂i−1 ai−1 k Ẑi Figura 2.1.: Parâmetros da Notação de Denavit-Hartenberg 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 71 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Figura 2.2.: Projeções ortogonais do segmento i da Figura 2.1 ai−1 é distância de Ẑi−1 até Ẑi medida ao longo de X̂i−1 e é chamada de comprimento do segmento i − 1; αi−1 é o ângulo entre Ẑi−1 e Ẑi medido em torno de X̂i−1 e é chamado de ângulo de torção do segmento i − 1; di é o deslocamento (positivo ou negativo) de X̂i−1 até X̂i medida ao longo de Ẑi (e com o sentido de Ẑi ) e é chamado de off-set da junta i; θi é o ângulo entre X̂i−1 até X̂i medido em torno de Ẑi e é chamado de ângulo da junta i. Note que dois parâmetros (ai−1 e αi−1 ) são características de um segmento específico e outros dois parâmetros (di e θi ) são parâmetros da junta, ou seja, dependem da relação entre dois segmentos adjacentes. Para chegar ao sistema de coordenadas i partindo do sistema de coordenadas i − 1 será necessário: 1. rodar em torno do eixo X̂i−1 de um ângulo αi−1 ; 2. deslocar o sistema de coordenadas sobre o eixo X̂i−1 de uma distância ai−1 ; 3. deslocar sobre o eixo Ẑi de uma distância di ; 4. rodar em torno do eixo Ẑi de um ângulo θi . Considerando que os eixos são móveis (movimento é executado com relação ao resultado da modificação anterior e não com relação a eixos fixos), pode-se definir a seguinte transformação homogênea do sistema de coordenadas i − 1 para i: i−1 T i = Transl (ai−1 , 0, 0) RotX (αi−1 ) Transl (0, 0, di ) RotZ (θi ) c θi − s θi 0 ai−1 c αi−1 s θi c αi−1 c θi − s αi−1 −di s αi−1 = s αi−1 s θi s αi−1 c θi c αi−1 di c αi−1 0 0 0 1 (2.1) que pode ser visto como uma função de ai−1 , αi−1 , di e θi . Outros autores preferem atrelar o sistema de coordenadas de referência à porção distal do segmento (no eixo distal) o que leva à seguinte transformação homogênea: i i+1 A 11 de agosto de 2020 = Transl (0, 0, di ) RotZ (θi ) Transl (ai , 0, 0) RotX (αi ) c θi − c αi s θi s αi s θi ai c θi s θi c αi c θi − s αi c θi ai s θi . = 0 s αi c αi di 0 0 0 1 Prof. Luís Paulo Laus, Dr. Eng. 72 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Figura 2.3.: Projeções ortogonais do segmento i − 1 da Figura 2.1 Note que não há vantagem explícita entre uma e outra forma, contudo: 1. atrelar o sistema de coordenadas do segmento ao eixo proximal faz com que o último sistema de coordenadas fique mais próximo à base o que simplifica o cálculo da cinemática inversa, ou de outra forma, atrelar o sistema de coordenadas ao eixo distal introduz um comprimento extra (do último segmento) que poderia ser evitado e que, no geral, aumenta a complexidade da cinemática inversa; 2. não se sabe exatamente porque, mas os algoritmos de calibração (que descobrem os valores ótimos dos parâmetros para reduzir o erro de posicionamento e orientação) têm dificuldade de trabalhar (convergir) se o sistema de coordenadas é atrelado ao eixo distal. Uma implementação da equação (2.1) na metalinguagem do octave ou Matlab é: function r = dh(alpha, a, d, theta) % Transformação homogênea de Denavit-Hartenberg % alpha, a, d, theta - são os parâmetros do modelo if nargin == 1, r = rotz(alpha(4))*transl(0,0,alpha(3))*rotx(alpha(1))*transl(alpha(2),0,0); elseif nargin == 4, r = rotz(theta)*transl(0,0,d)*rotx(alpha)*transl(a,0,0); else r = eye(4); end, 2.3. Cinemática Direta de Robôs, Método Sistemático Este método foi desenvolvido pelo Prof. Dr. Luís Paulo Laus com a ajuda do Prof. Dr. Alfranci Freitas Santos e Prof. Dr. Luiz Carlos de Abreu Rodrigues. A grande diferença entre esse método e os apresentados em outros livros é que ele é mais intuitivo: ao invés de procurar os ângulos e comprimentos que descrevem a posição e orientação de um sistema de coordenadas em relação a outro em um desenho, procura-se executar um movimento que leve um sistema de coordenadas a coincidir com outro (o próximo). Uma outra vantagem é que é possível partir de uma pose5 arbitrária 5 Configuração (posição e orientação de cada segmento da cadeia cinemática que define exatamente como o robô está em um dado momento) que o robô assume com um valor específico das variáveis de junta. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 73 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Figura 2.4.: Exemplo de Robô Industrial (RV-M1 da Mitsubishi) Segmento 1 Segmento 2 Segmento 3 Segmento4 Segmento 5 Segmento 0 Junta 1 Junta 2 Junta 3 Junta 4 Junta 5 Figura 2.5.: Pose de referência com eixos e segmentos numerados enquanto que os outros métodos exigem uma pose específica chamada de pose zero6 . Objetivo: determinar, para cada segmento, os quatro parâmetros de Denavit-Hartenberg para construção do modelo cinemático de um robô industrial. 1. Escolha uma pose (posição específica de todas as juntas) que será usada como referência e, portanto, será chamada de pose de referência. Não é necessário escolher a “pose zero”, ou seja, a pose na qual todas as variáveis de junta são nulas, muito embora isso seja desejável. E mais, esta pose pode não ser passível de ser atingida pelo robô real, isso é, pode requerer valores de variáveis de junta inatingíveis, fora dos limites reais das variáveis de junta. É conveniente dispor de um desenho do robô nesta pose. Muito embora qualquer desenho possa servir, alguns são mais fáceis de usar do que outros. Evite desenhos em perspectiva cônica como o mostrado na Figura 2.4 porque tornam a visualização dos eixos muito difícil e são muito trabalhos de serem feitos. Prefira desenhos em projeção ortogonal como o mostrado na Figura 2.5 ou, melhor ainda, desenhos simplificados em perspectiva cavaleira (axonométrica) com na Figura 2.9. 2. Trate as variáveis de junta como parâmetros ordinários; mais tarde (no passo 10), estes “parâmetros” serão transformados em valores iniciais para as variáveis de junta ou, de outra forma, os valores das variáveis de junta 6 Configuração que o robô assume com todas as variáveis de junta zeradas. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 74 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Ẑ2 Ẑ3 Ẑ4 Ẑ5 Ẑ1 Eixo saindo do papel (para cima) Eixo entrando no papel (para baixo) Figura 2.6.: Fixação dos eixos Ẑ Ẑ2 Ẑ3 Ẑ4 X̂3 X̂1 = X̂2 Ẑ5 X̂4 = X̂5 Ẑ1 Ẑ0 Ŷ0 X̂0 Figura 2.7.: Fixação dos eixos X̂ que colocam o robô na pose de referência. Neste caso, a pose de referência não é necessariamente a pose “zero” e os valores máximos e mínimos para cada variável de junta devem ser reconsiderados. 3. Numere os eixos do robô partindo da base para o efetuador. O primeiro eixo recebe o número 1, o último recebe o número N que corresponde ao número total de eixos do robô. Observe que a numeração implica numa subordinação de movimentos, portanto, muito cuidado quando os eixos se cruzam, pois há o risco de se numerar errado. Lembre-se sempre que o menor número corresponde ao eixo que fica imóvel quando o outro (ou os outros) é movido. A Figura 2.5 traz os eixos numerados. 4. Fixe os eixos Ẑi (i = 1, 2, 3, . . ., N ) sobre o eixo de rotação da junta rotativa ou o eixo de deslocamento (translação) da junta prismática (neste caso apenas a direção e sentido do eixo são definidos, a sua origem no espaço pode ser definida mais tarde no passo 7). Ao fixar cada eixo, leve em conta que o sentido do eixo é dado pelo sentido em que se pretende contar (medir) a variável de junta: se a junta for rotativa use a regra da mão direita (o polegar indica o sentido do eixo quando os demais dedos indicarem o sentido de crescimento de θi ); se for prismática o sentido é dado pelo sentido de crescimento de di . Na Figura 2.6 os eixos Ẑ2 , Ẑ3 e Ẑ4 estão perpendiculares ao papel e, por este motivo, são representados como pontos (neste caso os desenhos simplificados como o da Figura 2.9 são mais claros que as perspectivas e projeções ortogonais). 5. Fixe os eixos X̂i (i = 1, 2, 3, . . ., N − 1) sobre a perpendicular mútua entre os eixos Ẑi e Ẑi+1 com sentido de Ẑi para Ẑi+1 . No caso geral, isso determina a origem do sistema de coordenadas {i}, mas note o objetivo deste passo é fixar o eixo X̂i , a origem do sistema de coordenadas será fixada no passo 7. Caso Ẑi e Ẑi+1 sejam paralelos, X̂i não tem uma localização definida (ao menos ainda não). O caso em queẐi e Ẑi+1 se cruzam (têm um ponto em comum) costuma causar muita confusão. Para evitar erros faça X̂i k Ẑi × Ẑi+1 passando pelo ponto em comum de Ẑi e Ẑi+1 (× indica o produto vetorial ou externo de vetores) ou no sentido oposto ao de Ẑi × Ẑi+1 quando o próximo sistema de coordenadas estiver nesta direção e sentido. Note que na Figura 2.7 os eixos X̂1 e X̂4 podem estar na situação indicada (ou no sentido contrário ao indicado). 6. A localização do eixo X̂N é arbitrária já que não há um eixo ẐN +1 para definir sua posição e orientação; é conveniente fazê-lo coincidente com o eixo X̂N −1 . 7. Fixe as origens dos sistemas de coordenadas. Para isso, percorra a cadeia cinemática do efetuador para a base fixando as origens dos eixos X̂i (e, portanto, Ẑi e a origem do sistema de coordenadas {i}) que não tinham uma localização definida. Procure alinhar o eixo X̂i ou Ẑi com algum eixo do sistema de coordenadas {i + 1} ou {i − 1}. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 75 Introdução à Robótica — Universidade Tecnológica Federal do Paraná É um pouco melhor alinhar com algum eixo do sistema {i + 1} porque isso pode ajudar na cinemática inversa já que faz com que parâmetros constantes apareçam antes na tabela do passo 9. Foi por isso que o eixo Ẑi das juntas prismáticas e o eixo X̂i das juntas prismáticas e das juntas paralelas à próxima terem sido deixados para depois nos passos 4 e 5: é conveniente ter uma visão mais global do manipulador antes de tomar uma decisão. 8. Localize o sistema de coordenadas {0} = {BASE}. Há, basicamente, duas opções: • fazer que {0} = {1}, neste caso a0 , α0 , d1 e θ1 serão nulos (lembre-se que d1 e θ1 são considerados parâmetros, por enquanto); ou • fazer X̂0 ⊥ Ẑ1 e localizar os outros eixos de {0} arbitrariamente. Assim, o eixo X̂0 pode girar livremente em torno do eixo Ẑ1 e se deslocar livremente no espaço tridimensional (deslocar a origem sobre uma reta perpendicular ao eixoẐ1 ). Os eixos Yˆ0 e Zˆ0 podem ter uma orientação qualquer (desde que, obviamente, os três eixos sejam perpendiculares entre si e formem o terno tri-ortogonal positivo). No robô usado como exemplo, o fabricante usou o sistema de coordenadas {0} fixado no plano de montagem do robô com o eixo Zˆ0 apontando para cima e o eixo X̂0 apontando para fora do papel como mostrado nas Figuras 2.7 e 2.9. Note que a restrição de que X̂0 ⊥ Ẑ1 é atendida e, portanto, o sistema é perfeitamente válido. 9. Monte uma tabela para registrar os valores dos parâmetros. Esta tabela terá N linhas, uma para cada segmento móvel do robô (excluindo a base, que é fixa) e que serão associadas, cada uma, a uma transformação homogênea; e quatro colunas para registrar os valores de: ai−1 - comprimento do segmento (i − 1), αi−1 - torção do segmento (i − 1), di - offset da junta i e θi - ângulo da junta i. Esqueça, por hora, as variáveis de junta, trate-as como parâmetros com valor numérico bem definido. Comece preenchendo a tabela pela primeira linha (i = 1, ou seja, pelo sistema de coordenadas {0} ou pela transformação de {0} para {1}) e vá determinando os valores de ângulos e distâncias obtidos nos passos descritos a seguir necessários para levar o sistema de coordenadas {i − 1} a coincidir com o sistema de coordenadas {i}: Ŷi−1 α Ŷi−1 α i−1 ai− 1 Ẑi−1 2◦ θ Ŷi−1 αa Ŷi−1 θi θ X̂i−1 k X̂i αi−1 • Gire o sistema de coordenadas {i − 1} em torno de X̂i−1 de um ângulo αi−1 até que o novo eixo α dos zz (digamos Ẑi−1 ) fique paralelo ao eixo Ẑi ; desloque o sistema de coordenadas {i − 1}α sobre o eixo X̂i−1 de uma ai−1 até distância αa que o novo eixo dos zz Ẑi−1 coincida com 4◦ ◦ 3 αa X̂i−1 θ αa Ŷi Ẑi−1 ≡ Ẑi−1 ≡ Ẑi di • Gire o sistema de coordenadas {i − 1}αa em αa torno de Ẑi (ou Ẑi−1 , já que eles coincidem) de um ângulo θi até que o novo eixo dos xx fique θ (digamos X̂i−1 ) paralelo ao eixo X̂i ; desloque o sistema de coordenadas {i − 1}θ sobre o eixo Ẑiθ de uma distância di até que o novo eixo dos θd xx (X̂i−1 ) coincida com eixo X̂i (note que você pode primeiro deslocar de uma distância di até que os eixos dos xx até que os eixos dos xx e depois segundo o eixo Ẑ, nunca ao contrário.) θi Ẑi (note que você pode primeiro deslocar de 1 ◦ α uma distância ai−1 até que os eixos dos zz se X̂i−1 ≡ X̂i−1 ⊥ Ẑi cruzem e então girar de um ângulo αi−1 até que α os eixos dos zz coincidam.) k Ẑi Ẑi−1 X̂i Ẑi Jamais troque a ordem das regras acima: sempre gire e desloque primeiro segundo o eixo X̂ e depois segundo o eixo Ẑ, nunca ao contrário. Resumindo: X̂ • gire e translade em torno ou ao longo de Ẑ para acertar para acertar Ẑ coincidindo com o próximo sistema de X̂ coordenadas; Aplicando as regras acima no robô dado como exemplo, para chegar ao sistema de coordenadas {1} partindo do {0} é necessário: girar o sistema de coordenadas {0} em torno de X̂0 de 180◦ para fazer com que Zˆ0 fique com o mesmo sentido que Zˆ1 ; girar o novo sistema de coordenadas em torno de Zˆ1 de −90◦ para que o novo eixo X̂0 fique paralelo à X̂1 ; e finalmente transladar o novo sistema de coordenadas de uma distância d1 para 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 76 Introdução à Robótica — Universidade Tecnológica Federal do Paraná que o novo eixo X̂0 coincida com X̂1 (as origens dos dois sistemas devem coincidir). Note que d1 é registrado com valor negativo na tabela porque o deslocamento se deu no sentido contrário ao do eixo Ẑ1 que aponta para baixo. Quando as equações, criadas com base nos dados tabelados, forem usadas, é só substituir d1 por seu valor numérico que é de 300 mm. Caso contrário, se d1 fosse tabelado positivo ele teria que ser substituído por−300 mm. Como as pessoas tende a esquecer o sinal negativo se ele não for usado imediatamente, é preferível usar um símbolo negativo na tabela e uma constante positiva d1 = 300 mm. i i−1 T i αi−1 ai−1 θi 1 0 1T 180◦ 0 −90◦ 2 1 2T 3 2 3T 4 3 4T 5 4 5T di −d1 Para atingir o sistema de coordenadas {2} basta girar o sistema de coordenadas {1} de −90◦ em relação ao eixo X̂1 , não são necessárias translações nem outra rotação em torno do eixo Ẑ2 . Transladando o sistema de coordenadas {2} de uma distância a2 obtém-se o sistema de coordenadas {3}. Transladando o sistema de coordenadas {3} de uma distância a3 ao longo de X̂3 e girando em torno Ẑ4 de −90◦ (ou do novo “Zˆ3 ”), obtém-se o sistema de coordenadas {4}. Para a obtenção do sistema de coordenadas {5} basta rodar ao redor de X̂4 de +90◦ . Tome muito cuidado ao registrar os valores na tabela já que são dois ângulos e dois comprimentos: eles devem ser registrados conforme o eixo de referência. Assim, obtêm-se as linhas 1 a N da tabela: i i−1 T i αi−1 ai−1 θi 1 0 1T 180◦ 0 −90◦ −d1 2 1 2T −90◦ 0 0 0 3 2 3T 0 a2 0 4 3 4T 0 a3 −90 0 5 4 5T +90◦ 0 0 0 di 0 ◦ 10. Agora que você já obteve todos os “parâmetros” some a variável de junta (di ou θi ) aos valores tabelados de di ou θi conforme o tipo de junta. Observe que os valores tabelados se tornam os valores iniciais7 das variáveis de junta. Assim, a tabela que descreve a cinemática do robô fica: i i−1 T i αi−1 ai−1 θi 1 0 1T 180◦ 0 θ1 − 90◦ −d1 2 1 2T −90◦ 0 θ2 0 3 2 3T 0 a2 θ3 4 3 4T 0 a3 θ4 − 90 0 5 4 5T +90◦ 0 θ5 0 di 0 ◦ Caso os valores iniciais das variáveis de junta sejam não-nulos (é o caso das juntas 1 e 4 no exemplo) não será possível usar o Toolbox do Matlab para modelar este robô. Pode-se evitar que isso aconteça encontrando uma nova pose de referência onde os eixos X̂i (i = 0, 1, 2, . . ., N ) fiquem sempre paralelos e refazendo a tabela para esta nova pose. De uma forma mais simples, pode-se evitar que valores iniciais sejam não-nulos considerando que a pose de referência escolhida não é a pose zero. Por esta abordagem, no exemplo dado, θ4 = −90◦ faz com o eixo da junta 5 (Ẑ5 ) fique como na pose de referência representada na Figura 2.7. Quando θ4 = 0 o eixo da junta 5 se 7 Geralmente o valor inicial de uma variável á chamado de offset mas em robótica este termo deve ser evitado para não confundir com o deslocamento di . O valor inicial é o valor que relaciona o número zero com a verdadeira grandeza que o número zero representa. Por exemplo, um sensor de pressão de 0 a 100 bars com saída de 4 a 20 mA (muito comum na indústria) deve apresentar na saída 4 mA quando a pressão na entrada for de 0 bar; para converter o valor de corrente I para o valor medido de pressão P usa-se a equação P = (I − 4) 100/16 onde a corrente é dada em mA e a pressão em bars. O valor inicial da corrente é de −4 mA. Se o interesse for em estimar o valor de corrente para uma dada pressão, pode-se usar a equação I = (P + 25) 4/25, o valor inicial da pressão é de 25 bars. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 77 Introdução à Robótica — Universidade Tecnológica Federal do Paraná torna vertical para baixo e o segmento 5 fica em cima do segmento 4 (veja o segmento tracejado na Figura 2.7) e os valores admissíveis para θ4 vão de −180◦ a 0◦ (e não de −90◦ a +90◦ ). Ainda, o eixo X̂0 fica paralelo à X̂1 quando θ1 = 0 o que altera a orientação da base do robô e os valores admissíveis para θ1 vão de −240◦ até +60◦ (e não de −150◦ até +150◦ )8 . Assim, pode-se retirar da tabela o “valor inicial” (−90◦ ) que está sendo somado a θ1 e θ4 o que permite utilizar o Toolbox do Matlab para modelar este robô. Note que o modelo obtido vai apenas até o punho do robô ({PUNHO}={WRIST }={N }) e não até a ferramenta {TOOL}, ou a interface mecânica onde a ferramenta é fixada. O punho do robô pode ser entendido de duas formas: 1) um ponto onde os últimos eixos do robô se cruzam; 2) a origem do sistema de coordenadas que modela a posição e orientação do último segmento. Modelar a posição e orientação do punho ao invés da ferramenta faz com que as equações cinemáticas obtidas sejam independentes da ferramenta usada (tipo, tamanho, etc.) permitindo que esta possa ser trocada sem acarretar na necessidade de remodelamento do robô. Em alguns casos especiais, sobretudo em exemplos de dinâmica, a transformação até a ferramenta será incluída. Ao longo do tempo, observou-se que a maioria dos erros ocorrem na fixação do eixo X̂i (no passo 5). Portanto deve-se prestar atenção aos quatro casos possíveis: 1. os eixos Ẑi e Ẑi+1 são paralelos: X̂i estará no plano que contém Ẑi e Ẑi+1 , orientado de Ẑi para Ẑi+1 e perpendicular à ambos (já que eles são paralelos), a posição da origem do sistema de coordenadas {i} ainda não pode ser definida, ou seja, a fixação do eixo X̂i só ocorrerá no passo 7; 2. os eixos Ẑi e Ẑi+1 são coincidentes: neste caso há muita liberdade na fixação do eixo X̂i . O melhor a fazer é fixar X̂i coincidindo ou ao menos paralelo a X̂i+1 . Note que eixos de juntas coincidentes ocorrem apenas quando os dois tipos de junta, prismática e rotativa, estão presentes; 3. os eixos Ẑi e Ẑi+1 se cruzam em um ponto: a origem do sistema de coordenadas {i} será o ponto de cruzamento e X̂i está na direção perpendicular à Ẑi e Ẑi+1 (perpendicular ao plano que contém esses eixos) com um sentido arbitrário; 4. os eixos Ẑi e Ẑi+1 não se cruzam, mas também não são paralelos: neste caso haverá uma, e apenas uma, reta que é perpendicular aos dois eixos, X̂i estará sobre esta reta orientado de Ẑi para Ẑi+1 . Outra observação diz respeito às juntas prismáticas uma vez que, neste caso, o eixo do movimento não é tão bem definido como no caso da junta rotativa. Isso porque apenas a direção e o sentido são definidos, mas não a localização da reta ao longo da qual o movimento se dá já que qualquer reta com a mesma direção e sentido da junta pode ser usada. Assim, é possível usar esta liberdade de localização do sistema de coordenadas de forma a produzir um modelo mais simples de tal forma a levar a uma cinemática inversa mais fácil. Para isso, é conveniente alinhar os eixos dos zz e dos xx de em sistema de coordenadas com os eixos do próximo sistema de coordenadas (seja ele o sistema de um segmento ou da ferramenta9 ). Sobretudo, é importante fazer coincidir a origem do sistema de coordenadas que descreve a o segmento movido por uma junta rotativa com a origem do próximo sistema de coordenadas. Com efeito, a variável de junta di modelará a distância total entre os segmentos i e i + 1 evitando o aparecimento de outras constantes (ai ou di+1 ) que podem tornar mais difícil o cálculo da cinemática inversa. Como regra geral, deve evitar ao máximo o uso de comprimentos constantes (ai e di ) não nulos. Ainda, no projeto de manipuladores é muito importante buscar eixos paralelos ou ortogonais (mesmo que eles não se cruzem) para que os ângulos αi e θ1 (na juntas prismáticas) sejam de 0◦ , ±90◦ ou 180◦ para que o seno ou o cosseno destes ângulos seja 0, 1 ou −1 o que simplifica bastante a Equação (2.1) quando aplicada caso a caso. Quase todos os modelos industriais modernos seguem este princípio com a notável exceção de robôs que possuem um único eixo que forma um ângulo arbitrário com o seu antecessor. Isso é feito para aumentar a destreza da máquina e geralmente só aparece em robôs destinados à pintura, aplicação de cola ou solda a arco. 2.4. Cinemática Direta O objetivo da cinemática direta de robôs é obter uma descrição da posição e orientação da ferramenta em função dos ângulos (no caso de juntas rotativas) ou comprimento (no caso das juntas prismática) de junta do robô que são chamados de “variáveis de junta”. Já foi visto que esta descrição pode ser feita através de sistemas de coordenadas (a submatriz de rotação fornece uma descrição da orientação ao passo que a última coluna fornece uma descrição da 8 Mais a frente, no cálculo da cinemática inversa, veremos que isso é um problema por causa dos valores retornados pelas funções trigonométricas inversas. 9 Como geralmente a cinemática direta e, em decorrência, a inversa são deduzidas para uma ferramenta genérica, é comum usar o sistema de coordenadas na interface mecânica de fixação da ferramenta para esse fim. Geralmente a origem deste sistema de coordenadas é chamado de TCP (Tool Center Point). 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 78 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Junta Rotativa Base Junta Prismática Efetuador Figura 2.8.: Símbolos usados para representar robôs posição). Essa descrição será usada para resolver o problema inverso: conhecendo a posição/orientação desejadas para a ferramenta, deve-se calcular o valor das variáveis para atingir esta posição/orientação Usando a equação (2.1) é fácil obter a descrição do punho do robô em função das variáveis de junta. Aplica-se a equação (2.1) para cada linha da tabela de parâmetros que descreve a cinemática do robô e multiplica-se todas as transformações homogêneas obtidas. Contudo, esse método proporciona uma descrição da posição/orientação do punho do robô ({PUNHO}={WRIST }={W}={N }) e não da ferramenta {TOOL}={T}. Assim, é necessário incluir uma transformação homogênea constante (que não varia em função das variáveis de junta) para descrever a posição/orientação da ferramenta com relação ao sistema de coordenadas da base ({BASE}={B}={0}) através de: B TT N −1 =0T T = 01 T 12 T 23 T 34 T s N T | {z } N T T . 0 T N Note que a última transformação da equação acima é constante (não é alterada por mudanças no valor das variáveis de junta) porém é particular para cada ferramenta (se a ferramenta for trocada é necessário usar outra transformação homogênea para refletir esta mudança). Se a ferramenta não for conhecida não será possível calcular a posição e orientação que ela atingirá (mesmo conhecendo-se o valor das variáveis de junta), contudo, será possível determinar a posição/orientação do punho {W} do robô o que é suficiente (e desejável já que não depende de uma ferramenta específica) para se obter uma solução genérica do problema inverso. 2.4.1. Exemplos de Cinemática Direta Na construção do modelo cinemático é necessário partir de um desenho do robô que representa os tipos de junta e a relação entre elas. Perspectivas cônicas sofisticadas e com riqueza de detalhes, como a mostrada na Figura 2.4, geralmente não são úteis porque tomam o trabalho de interpretar o desenho mais difícil já que escondem a relação entre as juntas e, as vezes, a própria localização de uma junta. Uma vez que se compreende a relação entre as juntas formulando um modelo mental do robô, é possível construir um desenho usando uma representação simbólica das juntas ao invés de uma perspectiva ou de uma projeção ortogonal mais acurada. Esta representação simbólica pode usar uma perspectiva cavaleira (axonométrica) que é mais fácil de ser construída que a perspectiva cônica da Figura 2.4. Na Figura 2.8 são mostrados os símbolos adotados neste livro visando a simplificação dos desenhos. Estes símbolos podem ser usados com outros tipos de perspectiva. Por exemplo, na Figura 2.20 os mesmos símbolos são usados com perspectiva cônica com três pontos de fuga10 . Cinemática Direta de um Robô Mitsubishi RV-M1 O robô Mitsubishi RV-M1, usado como exemplo na Seção 2.3, está representado de forma simbólica na Figura 2.9 e os parâmetros de Denavit-Hartenberg estão listados na Tabela 2.1 que representa a relação cinemática entre as juntas. 10 A perspectiva cônica com três pontos de fuga é considerada a mais realista das perspectivas. É também a mais difícil de se desenhar, daí seu uso limitado a casos onde se dispõe de um software para realizá-la. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 79 Introdução à Robótica — Universidade Tecnológica Federal do Paraná X̂1 = X̂2 X̂3 Ẑ5 Ẑ2 Ẑ1 Ẑ3 Ẑ4 X̂4 = X̂5 Ẑ0 Ŷ0 X̂0 Figura 2.9.: Modelo cinemático do robô Mitsubishi RV-M1 Tabela 2.1.: Parâmetros cinemáticos do robô Mitsubishi RV-M1 i i−1 T i αi−1 ai−1 θi 1 0 1T 180◦ 0 θ1 − 90◦ −d1 2 1 2T −90◦ 0 θ2 0 3 2 3T 0 a2 θ3 0 4 3 4T 0 a3 θ4 − 90◦ 0 5 4 5T 0 θ5 0 +90 ◦ di Note que na primeira e quarta linha da coluna dos θi está escrito θ1 + 90◦ e θ4 − 90◦ , respectivamente. Se o modelo cinemático for construído usando estes valores, as equações obtidas modelaram o robô na pose representada T na Figura 2.9 se os ângulos de junta valerem θ = [0, 0, 0, 0, 0] . Isso significa que para atingir a pose de referência mostrada na Figura 2.9 todas as variáveis de junta deverão valer zero, ou seja, a pose de referência é igual à pose zero. Aplicando a equação (2.1) para cada linha da tabela tem-se uma matriz de transformação homogênea por linha. Estas transformações homogêneas são funções das variáveis de junta, neste caso, dos ângulos θ1 , θ2 , θ3 , θ4 e θ5 . Os demais senos e cossenos que aparecem na equação (2.1) são dos ângulos αi , constantes que aparecem na forma simbólica. Por isso, não é necessário escrever s θ1 para representar o seno de θ1 porque só há ângulos θi . É possível abreviar, por exemplo, o s θi por si sem qualquer risco de erro de interpretação. Isso torna a notação menos redundante e economiza espaço o que é importante porque as expressões são geralmente grandes. Da mesma forma, o c (θ2 + θ3 ) pode ser abreviada por c23 . Não há um θ23 (geralmente os robôs possuem poucas juntas, até no máximo seis ou sete), portanto não há o risco de confundir o c (θ2 + θ3 ) com c θ23 se for usada a notação c23 . Assim, obtém-se: s1 c1 0 c1 − s1 0 0 T = 1 0 0 −1 0 0 0 c − s2 0 2 0 0 1 1 2T = − s2 − c2 0 0 0 0 11 de agosto de 2020 0 0 , d1 1 0 0 , 0 1 Prof. Luís Paulo Laus, Dr. Eng. 80 Introdução à Robótica — Universidade Tecnológica Federal do Paraná c3 − s3 0 a2 s c 0 0 3 3 2 , T = 3 0 0 1 0 0 0 0 1 s4 c4 0 a3 − c s 0 0 4 4 3 e T = 4 0 0 1 0 0 0 0 1 c5 − s5 0 0 0 0 −1 0 4 . T = 5 s5 c5 0 0 0 0 0 1 Multiplicando-se as transformações homogêneas obtidas, tem-se: 0 5T =01 T 12 T 23 T 34 T 45 T c s + s1 s234 c5 1 5 c1 s234 c5 − s1 s5 = − c234 c5 0 c1 c5 − s1 s234 s5 − s1 c234 s1 (a2 c2 +a3 c23 ) − c5 s1 − c1 s234 s5 − c1 c234 c234 s5 − s234 0 0 c1 (a2 c2 +a3 c23 ) . d1 + a2 s2 +a3 s23 1 (2.2) Esta última transformação homogênea descreve a posição (através da última coluna) e a orientação (através da submatriz de rotação) do punho do robô em função dos ângulos θ1 , θ2 , θ3 , θ4 , e θ5 que aparecem na equação na forma de senos e cossenos desses ângulos ou da soma deles. Os outros parâmetros da equação (a2 , a3 e d1 ) são constantes conhecidas e valem: a2 = 250 mm, a3 = 160 mm e d1 = 300 mm segundo o manual do robô; eles também podem ser obtidos por processo de calibração (identificação) do robô. Observe que: s23 = s (θ2 + θ3 ) c23 = c (θ2 + θ3 ) s234 = s (θ2 + θ3 + θ4 ) c234 = c (θ2 + θ3 + θ4 ) . Note que é possível uma segunda solução se for suprimido o −90◦ na primeira linha na coluna dos θi (onde se lê θ1 + 90◦ leia-se θ1 apenas) e na quarta linha (onde se lê θ4 − 90◦ leia-se θ4 apenas). Desta forma, 01 T e 34 T se transformam em: c1 − s1 0 1T = 0 0 − s1 − c1 0 0 0 0 0 0 −1 d1 0 1 que, por consequência, alteram a transformação homogênea c1 c234 c5 − s1 s5 − c1 s5 − s1 c234 c5 0 T = 5 s234 c5 0 11 de agosto de 2020 s4 3 4T = 0 0 e 0 5T c4 − s4 0 a3 c4 0 0 1 0 0 0 0 1 para: − c5 s1 − c1 c234 s5 c1 s234 s1 c234 s5 − c1 c5 − s1 s234 − s234 s5 − c234 0 0 Prof. Luís Paulo Laus, Dr. Eng. c1 (a2 c2 +a3 c23 ) − s1 (a2 c2 +a3 c23 ) d1 + a2 s2 +a3 s23 1 (2.3) 81 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Ẑ2 X̂1 = X̂2 X̂1 = X̂2 X̂3 X̂4 = X̂5 Ẑ1 Ẑ3 Ẑ2 Ẑ1 X̂3 Ẑ3 Ẑ4 Ẑ5 Ẑ4 X̂4 = X̂5 Ẑ0 Ẑ5 Ẑ0 Ŷ0 Ŷ0 X̂0 X̂0 (a) (b) Figura 2.10.: Robô RV-M1 - pose de referência igual a pose zero sem valores iniciais para as variáveis de junta: a) visto de frente e b) visto de lado Tabela 2.2.: Intervalo de variação das variáveis de junta do robô RV-M1 Usando a equação (2.2) Junta Usando a equação (2.3) (conforme o manual) mínimo máximo mínimo máximo 1 −150◦ +150◦ −240◦ +60◦ 2 −30◦ +100◦ −30◦ +100◦ 3 −110◦ 0◦ −110◦ 0◦ 4 −90◦ +90◦ −180◦ 0◦ 5 −180◦ +180◦ −180◦ +180◦ que é muito parecida com a transformação 05 T dada pela equação (2.2), mas não é igual. Neste caso, se for atribuído o valor zero para todas as variáveis de junta, o robô ficará na pose representada na Figura 2.10. Note que se a pose representada na Figura 2.10 for usada como pose de referência ela também será a pose zero e não aparecerão valores inicial de junta na tabela o que permite usar um Toolbox do Matlab para modelar o robô o que, por sua vez, pode ser importante para validação do modelo. Já a pose representada na Figura 2.9 só pode ser considerada igual à pose zero se forem levados em conta os valores iniciais de θ1 e θ4 ; o que não causa maiores transtornos além de inviabilizar o uso do Toolbox do Matlab para modelar este robô. Se o modelo usado for o dado pela equação (2.3), para levar o manipulador a assumir a configuração representada T na Figura 2.9 será necessário que as variáveis de junta assumam o valor de θ = [−90◦ , 0, 0, −90◦ , 0] , ou seja, θ1 e θ4 ◦ deverão valer −90 . Caso a faixa de valores admissíveis para cada variável de junta seja dada em relação à Figura 2.9 (que é o caso deste robô, conforme as especificações do fabricante dadas no manual) haverá a necessidade de se alterar a faixa já que o valor inicial não está mais sendo somado ao valor atual da variável de junta. Assim, se a equação (2.3), que despreza os valores iniciais das variáveis de junta, for usada o intervalo de variação das juntas 1 e 4 deverão ser alterados somando-se o valor inicial (−90◦ ) aos valores máximos e mínimos admissíveis. A Tabela 2.2 traz os valores máximos e mínimos conforme a especificação original do fabricante (que pode ser usado com a equação (2.2)) e os valores ajustados para uso com a equação (2.3)). Caso seja decidido usar a equação (2.3), o intervalo de variação da junta 1 (valores admissíveis para θ1 ) causará uma certa dificuldade na cinemática inversa porque as funções trigonométricas inversas geralmente retornam valores na 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 82 Introdução à Robótica — Universidade Tecnológica Federal do Paraná −240◦ −150◦ referência zero ±180◦ referência ±180◦ +150◦ +60◦ θ1 θ1 zero Figura 2.11.: Transposição da variação dos valores admissíveis para a junta 1 do robô RV-M1 - vista superior: θ1 é medido no sentido horário porque Ẑ1 aponta para baixo Ẑ0 = Ẑ1 X̂0 ≡ X̂1 ≡ X̂2 X̂3 Ẑ2 Ẑ3 X̂5 ≡ X̂6 X̂4 Ẑ5 Ẑ4 Ẑ6 θ = [0, 0, +90◦ , 0, 0, 0]T Figura 2.12.: Modelo cinemático de um robô de seis graus de liberdade faixa (−180◦ , +180◦ ]. Assim, para verificar se o valor obtido pela cinemática inversa é válido (esta dentro do intervalo de variação de θ1 ), será necessário dividir o intervalo em dois: 1) de −180◦ a +60◦ e 2) de +150◦ a +180◦ (o mesmo que [−240◦ , −180◦ ]. Note que valor ±180◦ está incluído no intervalo o que também causa alguns problemas de teste como será visto na Seção 2.5. A Figura 2.11 ilustra o problema da transposição do intervalo de variação dos valores admissíveis para a variável da junta 1. Nela é mostrada a base do robô (segmento 0), a posição de referência para o segmento 1 admitindo que a pose de referência é a mostrada na Figura 2.9 e o intervalo de variação do ângulo da junta 1. Cinemática Direta de um Robô com Seis Graus de Liberdade Para o robô esquematizado na Figura 2.12, usando o procedimento descrito na seção 2.3 página 73 obtém-se a Tabela 2.3. T Note que a pose de referência mostrada na figura acima corresponde aos ângulos de junta θ = [0, 0, +90◦ , 0, 0, 0] . Tabela 2.3.: Parâmetros cinemáticos de um robô de seis graus de liberdade 11 de agosto de 2020 i i−1 T i αi−1 ai−1 θi di 1 0 1T 0 0 θ1 0 2 1 2T 90◦ 0 θ2 0 3 2 3T 0 a2 θ3 0 4 3 4T 0 a3 θ4 0 5 4 5T ◦ +90 0 θ5 d5 6 5 6T −90◦ 0 θ6 0 Prof. Luís Paulo Laus, Dr. Eng. 83 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Aplicando a equação (2.1) para cada linha da Tabela 2.3 tem-se: c1 − s1 0 0 s c 0 0 1 1 0 , 1T = 0 0 1 0 0 0 0 1 c2 − s2 0 0 0 0 −1 0 1 , 2T = s2 c2 0 0 0 0 0 1 c3 − s3 0 a2 s c 0 0 3 3 2 , 3T = 0 0 1 0 0 0 0 1 c4 − s4 0 a3 s c 0 0 4 4 3 , 4T = 0 0 1 0 0 0 0 1 c5 − s5 0 0 0 0 −1 −d5 4 5T = s5 c5 0 0 0 0 0 1 c6 − s6 0 0 0 0 1 0 5 . 6T = − s6 − c6 0 0 0 0 0 1 e Multiplicando-se as transformações homogêneas obtidas, tem-se: 0 6T =01 T 12 T 23 T 34 T 45 T 56 T e assim 0 6T c6 s1 s5 − c1 s6 s234 + c1 c5 c6 c234 c c s c −s s s −c c s 5 6 1 234 1 6 234 1 6 5 = s6 c234 + c5 c6 s234 0 − s1 s5 s6 − c1 c6 s234 − c1 c5 s6 c234 c5 s1 − c1 s5 c234 c1 s5 s6 − c6 s1 s234 − c5 s1 s6 c234 − c1 c5 − s1 s5 c234 c6 c234 − c5 s6 s234 − s5 s234 a2 s2 +a3 s23 −d5 c234 0 0 1 d5 c1 s234 + c1 (a2 c2 +a3 c23 ) d5 s1 s234 + s1 (a2 c2 +a3 c23 ) Esta última transformação homogênea descreve a posição (através da última coluna) e a orientação (através da submatriz de rotação) do punho do robô em função dos ângulos θ1 , θ2 , θ3 , θ4 , θ5 e θ6 que aparecem na equação na forma de senos e cossenos desses ângulos ou da soma deles. Os outros parâmetros da equação (a2 , a3 e d5 ) são constantes conhecidas. Normalmente, estes parâmetros podem ser obtidos do manual do robô interpretando-se algum desenho; eles também podem ser obtidos por processo de calibração (identificação) do robô. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 84 Introdução à Robótica — Universidade Tecnológica Federal do Paraná a2 Ẑ3 X̂3 d3 Ẑ0 = Ẑ1 a3 Ẑ2 d4 X̂0 = X̂1 = X̂2 Ẑ5 X̂4 = X̂5 = X̂6 Ẑ4 = Ẑ6 Figura 2.13.: Modelo cinemático do robô PUMA 560 Tabela 2.4.: Parâmetros cinemáticos do robô PUMA 560 i i−1 T i αi−1 ai−1 θi di 1 0 1T 0 0 θ1 0 2 1 2T −90◦ 0 θ2 0 3 2 3T 0 a2 θ3 d3 4 3 4T −90◦ a3 θ4 d4 5 4 5T ◦ +90 0 θ5 0 6 5 6T −90◦ 0 θ6 0 Cinemática Direta do Robô PUMA 560 (como na bibliografia) O robô PUMA 560 é dos robôs mais bem estudados e documentados. Também é um dos mais antigos. Observe na Figura 2.13 que os eixos das juntas 3 e 4 não são concorrentes o que faz com que apareça o parâmetro a3 . Note que não se seguiu a risca o Método de Sistemático (veja Seção 2.3) no alinhamento do eixo X̂2 que, segundo o método, deveria estar alinhado com o eixo X̂3 , mas está coincidente com X̂1 . Neste caso as equações obtidas são as mesmas que se obtém seguindo a risca o método exceto que d3 é trocado por d2 . Preferiu-se esta forma simplesmente porque é usual na bibliografia. Note que a pose de referência mostrada na Figura 2.13 corresponde aos ângulos de junta (variáveis de junta que, T neste caso, são ângulos): θ = [0, 0, 0, 0, 0, 0] . Aplicando a equação (2.1) para cada linha da Tabela 2.4 tem-se: c1 s1 0 T = 1 0 0 11 de agosto de 2020 − s1 0 c1 0 0 0 0 0 , 1 0 0 1 Prof. Luís Paulo Laus, Dr. Eng. 85 Introdução à Robótica — Universidade Tecnológica Federal do Paraná c2 − s2 0 0 0 0 1 0 1 , T = 2 − s2 − c2 0 0 0 0 0 1 c3 − s3 0 a2 s c 0 0 3 3 2 , T = 3 0 0 1 d3 0 0 0 1 c4 − s4 0 a3 0 0 1 d 4 3 , T = 4 − s4 − c4 0 0 0 0 0 1 c5 − s5 0 0 0 0 −1 0 4 e 5T = s5 c5 0 0 0 0 0 1 c − s6 0 0 6 0 0 1 0 5 6T = − s6 − c6 0 0 0 0 0 1 onde as constantes valem: a2 = 431, 8 mm a3 = 20, 32 mm d3 = 124, 46 mm d4 = 431, 8 mm Multiplicando-se as transformações homogêneas obtidas, tem-se: 0 6T =01 T 12 T 23 T 34 T 45 T 56 T e assim c [c (c c c − s4 s6 ) − s23 s5 c6 ] + s1 (c4 s6 + s4 c5 c6 ) c1 [s23 s5 s6 − c23 (s4 c6 + c4 c5 s6 )] + s1 (c4 c6 − s4 c5 s6 ) − s1 s4 s5 − c1 (c23 c4 s5 + s23 c5 ) c1 (a2 c2 +a3 c23 −d4 s23 ) − d3 s1 1 23 4 5 6 s1 [c23 (c4 c5 c6 − s4 s6 ) − s23 s5 c6 ] − c1 (c4 s6 + s4 c5 c6 ) s1 [s23 s5 s6 − c23 (s4 c6 + c4 c5 s6 )] − c1 (c4 c6 − s4 c5 s6 ) c1 s4 s5 − s1 (c23 c4 s5 + s23 c5 ) s1 (a2 c2 +a3 c23 −d4 s23 ) + d3 c1 0 6T = s23 (s4 s6 − c4 c5 c6 ) − c23 s5 c6 c23 s5 s6 + s23 (s4 c6 + c4 c5 s6 ) s23 c4 s5 − c23 c5 −a2 s2 −a3 s23 −d4 c23 0 0 0 1 que pode ser visualizada mais facilmente se for descrita elemento à elemento: r11 = c1 (c23 (c4 c5 c6 − s4 s6 ) − s23 s5 c6 ) + s1 (c4 s6 + s4 c5 c6 ) r21 = s1 (c23 (c4 c5 c6 − s4 s6 ) − s23 s5 c6 ) − c1 (c4 s6 + s4 c5 c6 ) r31 = s23 (s4 s6 − c4 c5 c6 ) − c23 s5 c6 r12 = c1 (s23 s5 s6 − c23 (s4 c6 + c4 c5 s6 )) + s1 (c4 c6 − s4 c5 s6 ) r22 = s1 (s23 s5 s6 − c23 (s4 c6 + c4 c5 s6 )) − c1 (c4 c6 − s4 c5 s6 ) r32 = c23 s5 s6 + s23 (s4 c6 + c4 c5 s6 ) 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 86 Introdução à Robótica — Universidade Tecnológica Federal do Paraná a2 Ẑ3 X̂3 Ẑ2 d2 Ẑ0 = Ẑ1 X̂2 a3 d4 X̂0 = X̂1 Ẑ5 X̂4 = X̂5 = X̂6 Ẑ4 = Ẑ6 Figura 2.14.: Modelo cinemático do robô PUMA 560 usando o Método de Sistemático da Seção 2.3 Tabela 2.5.: Parâmetros cinemáticos do robô PUMA 560 usando o Método de Sistemático da Seção 2.3 i i−1 T i αi−1 ai−1 θi di 1 0 1T 0 0 θ1 0 2 1 2T 0 θ2 d2 3 2 3T 0 a2 θ3 0 4 3 4T −90◦ a3 θ4 d4 5 4 5T +90◦ 0 θ5 0 6 5 6T −90◦ 0 θ6 0 −90 ◦ r13 = − s1 s4 s5 − c1 (c23 c4 s5 + s23 c5 ) r23 = c1 s4 s5 − s1 (c23 c4 s5 + s23 c5 ) r33 = s23 c4 s5 − c23 c5 px = c1 (a2 c2 +a3 c23 −d4 s23 ) − d3 s1 py = s1 (a2 c2 +a3 c23 −d4 s23 ) + d3 c1 pz = −a2 s2 −a3 s23 −d4 c23 . Cinemática Direta do Robô PUMA 560 Nesta seção é refeita a análise cinemática do robô PUMA 560 seguindo o Método de Sistemático da Seção 2.3 pelo qual o eixo X̂2 está alinhado com o eixo X̂3 como mostrado na Figura 2.14. A única diferença entre as Figuras 2.13 e 2.14 é a posição do sistema de coordenadas {2}. Neste caso as equações obtidas são as mesmas que se obtém se o método não for seguido a risca, exceto que d3 é trocado por d2 . Só é necessário aplicar a equação (2.1) para a segunda e terceira linha da Tabela 2.5 porque apenas estas duas linhas foram afetadas pela diferença de posição do sistema {2}, assim tem-se: 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 87 Introdução à Robótica — Universidade Tecnológica Federal do Paraná c2 − s2 0 0 1 2T = − s2 − c2 0 0 c − s3 0 3 s3 c3 0 2 3T = 0 0 1 0 0 0 0 0 1 d2 e 0 1 0 0 a2 0 , 0 1 que são as únicas transformações homogêneas diferentes do caso anterior. Multiplicando-se as transformações homogêneas, tem-se: 0 0 1 2 3 4 5 6 T =1 T 2 T 3 T 4 T 5 T 6 T e assim c [c (c c c − s4 s6 ) − s23 s5 c6 ] + s1 (c4 s6 + s4 c5 c6 ) c1 [s23 s5 s6 − c23 (s4 c6 + c4 c5 s6 )] + s1 (c4 c6 − s4 c5 s6 ) − s1 s4 s5 − c1 (c23 c4 s5 + s23 c5 ) c1 (a2 c2 +a3 c23 −d4 s23 ) − d2 s1 1 23 4 5 6 s1 [c23 (c4 c5 c6 − s4 s6 ) − s23 s5 c6 ] − c1 (c4 s6 + s4 c5 c6 ) s1 [s23 s5 s6 − c23 (s4 c6 + c4 c5 s6 )] − c1 (c4 c6 − s4 c5 s6 ) c1 s4 s5 − s1 (c23 c4 s5 + s23 c5 ) s1 (a2 c2 +a3 c23 −d4 s23 ) + d2 c1 0 T = 6 s23 (s4 s6 − c4 c5 c6 ) − c23 s5 c6 c23 s5 s6 + s23 (s4 c6 + c4 c5 s6 ) s23 c4 s5 − c23 c5 −a2 s2 −a3 s23 −d4 c23 0 0 0 1 que pode ser visualizada mais facilmente se for descrita elemento à elemento: r11 = c1 (c23 (c4 c5 c6 − s4 s6 ) − s23 s5 c6 ) + s1 (c4 s6 + s4 c5 c6 ) r21 = s1 (c23 (c4 c5 c6 − s4 s6 ) − s23 s5 c6 ) − c1 (c4 s6 + s4 c5 c6 ) r31 = s23 (s4 s6 − c4 c5 c6 ) − c23 s5 c6 r12 = c1 (s23 s5 s6 − c23 (s4 c6 + c4 c5 s6 )) + s1 (c4 c6 − s4 c5 s6 ) r22 = s1 (s23 s5 s6 − c23 (s4 c6 + c4 c5 s6 )) − c1 (c4 c6 − s4 c5 s6 ) r32 = c23 s5 s6 + s23 (s4 c6 + c4 c5 s6 ) r13 = − s1 s4 s5 − c1 (c23 c4 s5 + s23 c5 ) r23 = c1 s4 s5 − s1 (c23 c4 s5 + s23 c5 ) r33 = s23 c4 s5 − c23 c5 px = c1 (a2 c2 +a3 c23 −d4 s23 ) − d2 s1 py = s1 (a2 c2 +a3 c23 −d4 s23 ) + d2 c1 pz = −a2 s2 −a3 s23 −d4 c23 e a única diferença que se observa é que d2 aparece na equação de px e py (no caso anterior era d3 ). Não seguir o método dado pode levar a equações mais complexas, mas não há garantia de que seguir o método produzirá equações mais simples. Nos caso estudados, a única diferença observada foi no “nome” do parâmetro ,não na complexidade da equação. Este fato está diretamente ligado à capacidade de Software para Processamento Simbólico de simplificar as equações. Cinemática Direta do Robô SCARA A topologia SCARA (Selective Compliance Assembly Robot Arm - Braço Robótico para Montagem com Complacência Seletiva) é uma das mais usadas em robôs para colocação de componentes eletrônicos em placas de circuito impresso. O nome indica que esse tipo de manipulador é complacente em direções específicas e isso é importante para montagem onde o encaixe de peças requer uma certa complacência do manipulador. No caso da montagem de placas de circuito impresso (povoamento) há a necessidade de encaixar os componentes eletrônicos na furação da placa e é comum que os terminais não estejam retos. Assim, uma certa flexibilidade de posicionamento lateral (x e y) é desejável, mas não no sentido vertical (z). 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 88 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Ẑ0 = Ẑ1 Ẑ2 X̂0 = X̂1 Ẑ3 = Ẑ4 X̂2 X̂3 = X̂4 Figura 2.15.: Modelo cinemático do robô SCARA Tabela 2.6.: Parâmetros cinemáticos do cinemático do robô SCARA i i−1 T i αi−1 ai−1 θi di 1 0 1T 0 0 θ1 0 2 1 2T 0 a1 θ2 0 3 2 3T 0 a2 0 d3 4 3 4T 0 0 θ4 0 Note que, neste robô, d3 é uma variável de junta e não uma constante com nos casos anteriores. Ele apareceu na Tabela 2.6 porque foi somado ao valor inicial da variável de junta (zero). Ainda, poderia ter sido escolhido outro lugar para o sistema de coordenadas {3}, por exemplo, no centro da garra, sem prejuízo ao modelo obtido. Esta solução é até um pouco melhor porque a distância d3 , que é uma variável, apareceria na Figura 2.15 com uma distância comum. Como o robô SCARA só tem quatro juntas, o que permite no máximo quatro graus de liberdade, não será possível atingir qualquer posição com qualquer orientação. De fato, analisando a configuração cinemática é fácil perceber que é possível atingir qualquer posição dentro de um certo volume, mas a orientação da garra é sempre para baixo (como mostrado na figura) e nunca pode ser alterada (virada para os lados). Aplicando a equação (2.1) para cada linha da Tabela 2.6 tem-se: c1 s1 0 T = 1 0 0 c 2 s2 1 2T = 0 0 11 de agosto de 2020 − s1 0 0 c1 0 0 1 0 0 − s2 0 c2 0 0 1 0 0 0 , 0 1 a1 0 , 0 1 Prof. Luís Paulo Laus, Dr. Eng. 89 Introdução à Robótica — Universidade Tecnológica Federal do Paraná 1 0 0 a2 0 1 0 0 2 e T = 3 0 0 1 d3 0 0 0 1 c4 − s4 0 0 s c 0 0 4 4 3 . T = 4 0 0 1 0 0 0 0 1 Multiplicando-se as transformações homogêneas obtidas, tem-se: 0 4T =01 T 12 T 23 T 34 T c − s124 124 s124 c124 = 0 0 0 0 0 a1 c1 +a2 c12 0 a1 s1 +a2 s12 . d3 1 1 0 (2.4) Como pode ser observado na matriz de transformação homogênea acima, o punho do robô fica sempre orientado segundo o eixo dos zz (veja a terceira coluna). Contudo, é possível girar a ferramenta ao redor do eixo dos zz fazendo com que a orientação da ferramenta no plano xy seja alterada para o valor desejado. A posição que punho do robô pode atingir é dada pela quarta coluna da matriz acima. Note que é possível atingir qualquer posição dentro um certo volume limitado: 1) pelos valores das constantes a1 e a2 ; e 2) pela variação possível (intervalo de variação) das variáveis de junta θ1 , θ2 , d3 e θ4 . 2.4.2. Cálculo da Cinemática Direta Auxiliado por Computador Existem diversos software no mercado destinados a manipular expressões matemáticas. Estes Software para Processamento Simbólico11 são capazes de montar as matrizes dadas pela equação (2.1), multiplicá-las e simplificar o resultado obtendo a expressão final da cinemática direta que é uma transformação homogênea função das variáveis de junta. Um destes software é o MuPAD disponível na internet nos endereços www.mupad.de/ e www.mupad.com/. Para usá-lo, é necessário criar uma função que construa uma matriz 4 × 4 com base nos parâmetros e nas variáveis de junta. Usa-se esta função para criar uma transformação homogênea para linha da tabela de parâmetros e variáveis de junta que descreve a cinemática do robô. Basta, então, multiplicar as transformações homogêneas para obter a cinemática direta do robô. O código abaixo calcula a cinemática direta do robô de seis graus de liberdade mostrado na Seção 2.4.1 na página 83. Como é comum nos programas de computador que trabalham com variáveis de junta, θ foi substituído por q. // funções auxiliares para o cálculo da cinemática direta de robôs transl : = (x ,y , z ) - > matrix (4 ,4 ,[[1 ,0 ,0 , x ] ,[0 ,1 ,0 , y ] ,[0 ,0 ,1 , z ] ,[0 ,0 ,0 ,1]]): rotx : = a - > matrix (4 ,4 ,[[1 ,0 ,0 ,0] ,[0 , cos ( a ) , - sin ( a ) ,0] , [0 , sin ( a ) , cos ( a ) ,0] ,[0 ,0 ,0 ,1]]): rotz : = a - > matrix (4 ,4 ,[[ cos ( a ) , - sin ( a ) ,0 ,0] ,[ sin ( a ) , cos ( a ) ,0 ,0] , [0 ,0 ,1 ,0] ,[0 ,0 ,0 ,1]]): // gera uma TH baseada nos parâmetros de Denavit - Hartenberg dhm : = ( alpha ,a , theta , d ) - > rotx ( alpha )* transl (a ,0 ,0)* rotz ( theta )* transl (0 ,0 , d ): // descrição do robô t01 : = dhm ( 0, 0, t12 : = dhm ( PI /2 , 0, t23 : = dhm ( 0 , a [2] , t34 : = dhm ( 0 , a [3] , 11 Também q [1] , q [2] , q [3] , q [4] , 0): 0): 0): 0): chamados de “Sistemas Algébricos para Computador” ou “Computer Algebra Systems”. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 90 Introdução à Robótica — Universidade Tecnológica Federal do Paraná t45 : = dhm ( PI /2 , t56 : = dhm ( - PI /2 , 0 , q [5] , d [5]): 0 , q [6] , 0): // multiplicação das transformações homogêneas t06 : = t01 * simplify ( t12 * t23 * t34 ) * t45 * t56 ; Vale ressaltar que o MuPAD não é muito inteligente quando faz a simplificação das expressões. Por isso, foi necessário dar uma pequena ajuda: a função simplify é usada para simplificar as expressões no cálculo de 06 T , mas não pode ser usada sobre o resultado final sob pena de transformar a expressão em outra ainda mais complexa. Como regra, deve-se multiplicar as transformações homogêneas relacionadas aos eixos que são consecutivamente paralelos (neste exemplo apenas os eixos 2, 3, 4) e simplificar o resultado intermediário, mas não o resultado total. T A pose de referência usada corresponde aos ângulos de junta θ = [0, 0, +90◦ , 0, 0, 0] . Se for desejado usar a T mesma pose da Seção 2.4.1 porém com os ângulos de junta θ = [0, 0, 0, 0, 0, 0] será necessário calcular 23 T por: t23 : = simplify ( dhm ( 0 , a [2] , q [3]+ PI /2 , 0)): Observe o uso da função simplify para simplificar os senos e cossenos de θ3 (q[3] na linha acima) antes de qualquer multiplicação da matriz 23 T , isso é, a matriz é armazenada já na forma mais simples. 2.5. Cinemática Inversa O objetivo da cinemática inversa é obter o valor de todas as variáveis de junta para se atingir uma posição/orientação (meta) desejada. Há três problemas a se considerar: 1. a existência de mais de um conjunto (vetor) de soluções; 2. a inexistência de qualquer solução (por falta de alcance ou destreza do robô); 3. a contenção de soluções (por falta de graus de liberdade no manipulador). A existência de mais de um conjunto (vetor) de soluções pode representar dois problemas adicionais: 1) pode haver um número finito de soluções (e.g. no caso do PUMA 560 há oito soluções diferentes) e deve-se escolher uma delas; 2) podem existir infinitas soluções (no caso do manipulador ser redundante para a tarefa ou se tornar redundante por estar trabalhando em uma posição/orientação singular). A inexistência de qualquer solução pode ocorrer porque a posição/orientação está fora do “espaço de trabalho” do robô. Define-se, então, espaço de trabalho com sendo o conjunto de posições cartesianas que o robô pode atingir. Neste caso as únicas soluções são substituir o robô ou aproximá-los da meta (mover a base do robô para que fique mais próximo da meta). A inexistência de qualquer solução também pode ocorrer por falta de destreza do robô (o robô pode atingir a posição desejada, mas não com a orientação desejada). Diz-se, então que a meta está fora do “espaço de trabalho destro”. Define-se, então, espaço de trabalho destro com sendo o conjunto de posições cartesianas que o robô pode atingir com qualquer orientação. Naturalmente o espaço de trabalho destro é menor que o espaço de trabalho (total) já que há muitas posições (e.g. com o braço quase que totalmente esticado ou recolhido) que o robô pode atingir, mas com restrição na orientação (não é possível uma orientação arbitrária). Existem manipuladores no mercado com menos de que seis graus de liberdade e que, portanto, não podem atingir qualquer posição/orientação (o espaço de trabalho destro é o conjunto vazio). Estes manipuladores são usados em aplicações onde não são necessários todos os seis graus de liberdade como, por exemplo, nas aplicações de carga e descarga de máquinas, montagem de placas de circuito impresso ou quando a ferramenta tem um eixo de simetria (tocha de solda, desbastador rotativo, etc.). Neste caso a cinemática inversa deve ser calculada levando-se em conta que não é possível obter uma orientação arbitrária. Há duas técnicas para isso: 1. projetar a posição/orientação desejada sobre o espaço de trabalho do robô implicado na perda de um ou mais graus de liberdade e calcular a solução para a posição/orientação projetada; 2. desenvolver a cinemática inversa usando por comparação da cinemática do robô com a cinemática atingível (obtido, por exemplo, usando ângulos de Euler com um dos ângulos constantes). Esta técnica tem a vantagem de fornecer a cinemática direta em uma forma intuitiva para o programador, mas tem a desvantagem de necessitar que as outras formas de descrição sejam traduzidas para a forma usada e não para transformações homogêneas, o que é mais genérico. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 91 Introdução à Robótica — Universidade Tecnológica Federal do Paraná De qualquer forma, há a necessidade de se determinar soluções específicas para cada manipulador ou conjunto manipulador/ferramenta. 2.5.1. Existência de Soluções Múltiplas Dependendo da complexidade do manipulador é possível se atingir a mesma posição/orientação de várias formas diferentes. Considere o caso de um manipulador não redundante com seis juntas rotativas. A tabela abaixo mostra com o número máximo de soluções possíveis está relacionada com o número de comprimentos de segmento (ai−1 ) com valor diferente de zero para um robô com seis juntas. Quanto maior o número de segmentos com comprimento não nulo, maior a quantidade máxima de soluções possíveis. ai Número de Soluções a1 = a3 = a5 = 0 ≤4 a3 = a5 = 0 ≤8 a3 = 0 ≤ 16 Todos ai 6= 0 ≤ 16 Note que não existe uma solução genérica para os robôs com seis graus de liberdade. Contudo, D. Pieper estudou o problema e determinou que: “se três eixos consecutivos do robô se cortarem em um único ponto, haverá solução para a cinemática inversa”. 2.5.2. Considerações Práticas Sobre o Tipo de Equações a Resolver Nas equações de cinemática direta aparecem funções lineares das variáveis de junta, caso a junta seja prismática, e funções transcendentes (seno e cosseno das variáveis de junta e de suas combinações lineares) caso a junta seja rotativa. A solução da cinemática inversa implica na resolução de sistemas de equações não-lineares (apenas se houver juntas rotativas) bastante particulares onde aparecem o seno e cosseno da variável a ser isolada. Note que não se conhece diretamente o valor do ângulo e sim do seno ou do cosseno (ou de ambos). Portanto existem infinitas soluções possíveis já que a solução geral de uma equação como cos ϕ = x é ϕ = ± (arccos x + 360◦ k) k = 0, 1, 2, 3, . . . e para sen ϕ = y k ϕ = 180◦ k + (−1) arcsen y k = . . . , −3, −2, −1, 0, 1, 2, 3, . . . Entretanto, as infinitas soluções não são necessárias já que o valor a ser determinado é o ângulo que um segmento do robô deve fazer com o próximo segmento a partir de uma referência conveniente. Por exemplo: 30◦ , −330◦ e 390◦ levam o robô à mesma posição angular e, portanto, podem ser consideradas como sendo a mesma solução. E mais, quando o controlador usa esses valores para deslocar alguma junta ele só pode usar as soluções que estão dentro da faixa de variação da junta (range), normalmente menor que 360◦ e no máximo igual à 360◦ (salvo raras exceções). Isso faz com que o interesse recaia na menor determinação de um ângulo, isso é, nas soluções no intervalo de (−180◦ , +180◦ ] (que não inclui −180◦ , mas inclui +180◦ ). Algumas vezes é interessante incluir o ponto −180◦ na solução. Por exemplo, quando o robô está com uma junta em, digamos, −150◦ e ele deve mover-se para uma posição/orientação que leve esta junta à ±180◦ (que, independentemente do sinal, correspondem à mesma posição angular) e se o resultado obtido pela cinemática inversa estiver no intervalo (−180◦ , +180◦ ], não incluindo portanto −180◦ , o robô deslocará a junta de 330◦ , e não de 30◦ que corresponde ao menor deslocamento. Assim, deve-se tomar cuidado quando a variação possível da junta (range) incluir o ponto ±180◦ . 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 92 Introdução à Robótica — Universidade Tecnológica Federal do Paraná ϕ0 sen ϕ sen ϕ ϕ ϕ ϕ cos ϕ cos ϕ ϕ0 (a) (b) (c) Figura 2.16.: círculo trigonométrico mostrando as soluções quando (a) o seno e cosseno de ϕ são conhecidos, (b) apenas o seno de ϕ é conhecido e (c) apenas o cosseno Se for possível determinar o valor do seno e do cosseno de uma variável de junta, será possível determinar um único valor para esta variável no intervalo de (−180◦ , +180◦ ] como ilustrado no círculo trigonométrica da Figura 2.16-a. Para isso, serão necessárias ao menos duas equações. Contudo, se apenas o seno ou o cosseno da variável puder ser isolado, haverá uma segunda solução já que tanto o arco-seno como o arco-cosseno só retornam valores em [−90◦ , +90◦ ] e [0, +180◦ ] respectivamente, mas em ambos os caso há um segundo ângulo no intervalo (−180◦ , +180◦ ] com o mesmo valor de seno ou cosseno (conforme o caso) (ver Figura 2.16-b e c). Daí a existência de múltiplas soluções para uma dada posição e orientação. Quando o valor do seno e do cosseno de um ângulo é conhecido, é possível determinar o quadrante em que o ângulo se encontra fazendo uma análise dos sinais. Para calcular o ângulo pode-se usar a função arctan comum nas calculadoras e linguagens de programação porque se x = cos ϕ y = sen ϕ sen ϕ y tan ϕ = = cos ϕ x logo ϕ = arctan tan ϕ = arctan y . x Como a função arctan só retorna valores no intervalo (−90◦ , +90◦ ), ou seja, no primeiro e quarto quadrantes é necessário usar o conhecimento do sinal de x (cosseno do ângulo) e y (seno do ângulo) para determinar o quadrante correto e transportar ϕ para este quadrante. Além disso, quando x = 0 não é possível realizar a divisão, deve-se adotar como solução +90◦ se y > 0, −90◦ se y < 0 e 0 se y = 0 (essa última adoção é feita apenas por convenção já que é impossível que o seno e o cosseno de um ângulo sejam ambos nulos). Naturalmente, um resultado similar pode ser obtido usando o arco-seno ou arco-cosseno, porém, quando um computador calcula a função arco-seno ou arco-cosseno ele usa a função arco-tangente que possui expansão em série de Taylor muito mais simples12 o que facilita o seu cálculo diminuindo o esforço computacional. Uma outra ideia é usar a função atan2. A função atan2 é a função arco-tangente de dois argumentos comum nas bibliotecas de funções matemáticas de diversas linguagem de programação (incluindo a LinguagempC) e em vários Soft13 2 2 ware p para Processamento Simbólico . Neste caso ela é definida como ϕ = atan2 (y, x) =⇒ x = x + y cos ϕ e y = 2 2 x + y sen ϕ para quaisquer valores de x e y. Em outras palavras a função atan2 resolve o problema do quadrante em que o ângulo retornado deve pertencer para que os sinais de x e y não sejam trocados. ∞ 12 arctan (x) = x − X (−1)i+1 x2i−1 x3 x5 x7 x9 x11 x13 x15 + − + − + − + s= enquanto que 3 5 7 9 11 13 15 2i − 1 i=1 i−1 Y arcsen (x) = x + x3 6 + 3x5 40 + 5x7 112 + 35x9 1152 + 63x11 2816 + 231x13 13312 + 143x15 10240 + s= ∞ X !2 2k − 1 k=1 (2i − 1)! x2i−1 , i=1 mas para se calcular o arco-seno ou arco-cosseno usando o arco-tangente ainda é necessário usar: x arcsen x = arctan √ 1 − x2 π x arccos x = − arctan √ . 2 1 − x2 13 No MuPAD a função atan2 (y, x) é chamada de arg (x, y), com a ordem dos parâmetros trocada, no Mathematica de ArcT an[x, y] e a ordem dos parâmetros também é trocada, no Matlab, octave e na Linguagem C de atan2 (y, x) com os parâmetros na ordem dada. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 93 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Se não for possível determinar o valor de x e de y, mas for possível determinar o valor da relação y/x há duas soluções para o arco dadas por: y ϕ = arctan tan ϕ = atan2 (y/x, 1) = arctan x ϕ − 180◦ se ϕ > 0 ϕ0 = ϕ + 180◦ se ϕ ≤ 0 . Quando apenas o cosseno é conhecido é possível calcular o valor do seno usando a identidade: p sen ϕ = ± 1 − cos2 ϕ . Assim, se x = cos ϕ p p 1 − x2 , x ϕ = atan2 (sen ϕ, cos ϕ) = atan2 ± 1 − x2 , x = ± atan2 ou ϕ = atan2 p 1 − x2 , x ϕ0 = −ϕ que fornece dois valores para ϕ, já nos quadrantes corretos. Note que o duplo sinal pode “sair” da função porque ele diz respeito ao sinal do seno do ângulo. Essa fórmula é especialmente útil se x for uma fração, assim se x= a b leva à √ ϕ = ± atan2 p 1− x2 , x = ± atan2 b2 − a2 a , b b ! . Se o sinal do denominador de x, b, for garantidamente positivo: p ϕ = ± atan2 b2 − a 2 , a e se for garantidamente negativo: ϕ = ± atan2 p b2 − a2 , −a . De outra forma, pode-se usar a função arco-cosseno calculando os dois valores possíveis para o ângulo por ϕ = arccos x ϕ0 = −ϕ já que a função cosseno é par. Note que, internamente o computador ou calculadora deverá calcular o arco-cosseno por √ 2 arccos x = arctan 1−x e somar 180◦ se o resultado for negativo para ajustar o quadrante. x De forma semelhante, quando apenas o seno é conhecido (sen ϕ = y) pode-se calcular o cosseno por: p cos ϕ = ± 1 − sen2 ϕ e p p ϕ = atan2 sen ϕ, ± 1 − sen2 ϕ = atan2 y, ± 1 − y 2 . Neste caso o duplo sinal implica em uma solução no primeiro e outra no segundo quadrante; ou uma no quarto e p outra no terceiro quadrante. Assim, para se eliminar o duplo sinal deve-se subtrair o resultado de atan2 y, 1 − y 2 p de 180◦ para encontrar a solução de atan2 y, − 1 − y 2 sem que haja a necessidade de recalcular a função atan2. Assim, os dois resultados possíveis, denotados por ϕ e ϕ0 , são: p ϕ = atan2 y, 1 − y 2 180◦ − ϕ se ϕ ≥ 0 ϕ0 = −180◦ − ϕ se ϕ < 0 . 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 94 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Pode-se, também, usar a função arco-seno, e neste caso a segunda solução também depende do sinal da primeira: ϕ = arcsen (y) 180◦ − ϕ se ϕ ≥ 0 ϕ0 = −180◦ − ϕ se ϕ < 0 . Função atan2 com Argumentos com Duplo Sinal Quando a função atan2 é usada com argumentos com duplo sinal (que pode ter sido gerados pela tomada da raiz de uma equação) haverá duas soluções para o arco. Para calcular a segunda solução não é necessário usar a função atan2 novamente o que é computacionalmente dispendioso. Basta usar uma das regras abaixo, dependo da localização do duplo sinal: ϕ = atan2 (y, x) ϕ − 180◦ se ϕ > 0 ϕ = atan2 (±y, ±x) ⇒ ϕ0 = ϕ + 180◦ se ϕ ≤ 0 ϕ = atan2 (y, x) ϕ = atan2 (±y, x) ⇒ ϕ0 = −ϕ ϕ = atan2 (y, x) 180◦ − ϕ se ϕ ≥ 0 ϕ = atan2 (y, ±x) ⇒ 0 = ϕ −180◦ − ϕ se ϕ < 0 . Note que estas equações funcionam em qualquer quadrante, ou seja, não importa se x ou y é positivo, nulo ou negativo; as equações sempre fornecem o valor correto. A primeira equação envolve a troca de sinal de x e de y o que significa rebater o ângulo de 180◦ . A segunda há uma troca de sinal apenas de y que é mesmo que mudar o sinal do seno do ângulo e equivale a mudar o sinal do próprio ângulo (a função seno é uma função ímpar enquanto que a cosseno é par). A última equação envolve uma troca apenas do sinal de x que é o mesmo que mudar o sinal do cosseno de um ângulo sem mudar o sinal do seno; isso é o mesmo que espelhar o ângulo em relação há 180◦ (ir até 180◦ e voltar o ângulo ϕ), ou seja, a segunda solução e a primeira são suplementares14 . É fácil comprovar15 que s (±180◦ − ϕ) = s ϕ e que c (±180◦ − ϕ) = − c ϕ. Uma última observação é que a maioria das linguagens de programação e dos Software para Processamento Simbólico calcula os ângulos (arcos) em radianos e não em graus. Por isso é necessário substituir 180◦ por π nas expressões acima. Na hora de imprimir os resultados pode ser interessante converter para graus multiplicando o ângulo por 180/π. Para se trabalhar em Linguagem C será necessário incluir o arquivo de cabeçalho math.h que define as funções seno, cosseno, atan2, etc. e as constantes M_PI e M_PI_2, entre outras, e que valem, respectivamente, π e π/2. Solução de Equações Trigonométricas Um tipo de equação muito comum é: a cos ϕ − b sen ϕ = c (2.5) onde a, b e c são conhecidos (constantes, expressões de constantes ou variáveis de junta já calculadas). Há duas formas de se determinar o valor de ϕ e as duas formas tem suas vantagens e desvantagens conforme o caso. Primeiramente, pode-se substituir a por ρ cos α e b por ρ sen α obtendo: ρ cos α cos ϕ − ρ sen α sen ϕ = c ρ (cos α cos ϕ − sen α sen ϕ) = c c cos (α + ϕ) = . ρ As constantes ρ e α são calculadas por: ângulos são suplementares se a sua soma vale 180◦ (ou −180◦ ). Da mesma forma, dois ângulos são complementares se a sua soma vale 90◦ e replementares se vale 360◦ . 15 A prova vem de c (a − b) = c a c b + s a s b e s (a − b) = s a c b − c a s b. 14 Dois 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 95 Introdução à Robótica — Universidade Tecnológica Federal do Paraná a = b = ρ cos α ρ sen α . Isolando o seno e cosseno: a ρ b sen α = ρ cos α = e, uma vez conhecidos os valores do seno e cosseno de um ângulo, α, há apenas uma solução: b a α = atan2 , = atan2 (b, a) se ρ > 0 . ρ ρ Elevando as duas equações ao quadrado e somando: a2 = ρ2 cos2 α b2 = ρ2 sen2 α a2 + b2 = ρ2 sen2 α + ρ2 cos2 α a2 + b2 = ρ2 sen2 α + cos2 α como sen2 α + cos2 α = 1, tem-se que p ρ = ± a2 + b2 . Contudo, a solução para α exige que ρ seja positivo para evitar a troca de sinais simplificando a solução, assim, sem perda de generalidade, pode-se adotar p ρ = a2 + b2 e a solução completa do problema fica cos (α + ϕ) = √ c a2 + b2 c a2 + b2 c − atan2 (b, a) (2.6) ϕ = ± arccos √ 2 a + b2 √ √ que produz duas soluções distintas para ϕ quando c 6= a2 + b2 . No caso em que c = a2 + b2 a solução é única. α + ϕ = ± arccos √ O intervalo de variação das respostas é [−360◦ , 360◦ ] o que pode ser inconveniente já que cobre mais de uma volta completa. Pode ser interessante procurar a menor determinação do resultado o que implica em aumento de complexidade do algoritmo. O uso do arco-cosseno√impõe um limite para os valores de a, b e c porque o argumento da função deve estar no intervalo [−1, 1], logo |c| ≤ a2 + b2 . Além disso, para evitar uma divisão por zero deve-se ter que a2 + b2 = 6 0 o que implica em que a 6= 0 e que b 6= 0. Veja que poderia ter sido usado a b = ρ sen α = −ρ cos α o que conduziria à ρ sen α cos ϕ + ρ cos α sen ϕ = c ρ (sen α cos ϕ + cos α sen ϕ) = c c sen (α + ϕ) = , ρ mas isso leva à uma solução em arco-seno que exige que o primeiro valor obtido seja testado para determinar o segundo valor e, portanto, mais trabalhosa de ser implementa que a solução em arco-cosseno. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 96 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Uma outra solução possível usa a tangente da metade do ângulo para transformar a equação transcendente (2.5) em uma equação polinomial de uma variável x definida por: x = tan ϕ 2 e que produz16 1 − x2 1 + x2 2x sen ϕ = 1 + x2 cos ϕ = que, quando substituídas na equação (2.5) leva à a 1 − x2 2x −b =c 1 + x2 1 + x2 a 1 − x2 − 2b x = c 1 + x2 (a + c) x2 + 2b x + c − a = 0 que, por sua vez, tem solução x= −b ± √ b2 + a2 − c2 a+c então −b ± ϕ = 2 arctan √ a2 + b2 − c2 a+c ! (2.7) . √ que, da mesma forma que a equação (2.6), produz duas soluções distintas para ϕ quando c = 6 a2 + b2 . No caso em √ que c = a2 + b2 a solução é única. O intervalo de variação das respostas é [−180◦ , 180◦ ] cobrindo uma única volta. √ Para que a raiz quadrada da equação (2.7) seja real, deve-se ter que |c| ≤ a2 + b2 que é o mesmo limite imposto aos valores de a, b e c pela equação (2.6). Além disso, para que a divisão seja possível, a + c não pode ser nulo. Caso a + c = 0 o argumento da função arco-tangente tenderá ao infinito e ϕ = ±180◦ . Levando que conta que o cálculo de um arco-cosseno demanda uma multiplicação, duas somas, uma divisão e um cálculo de raiz quadrada a mais que o cálculo de um arco-tangente porque: x π − arctan √ , 2 1 − x2 arccos x = pode-se concluir que o uso da equação (2.7) necessita uma divisão e um cálculo de raiz a menos que a equação (2.6) quando se calcula as duas soluções para ϕ. 16 Usando a equação da soma dos cossenos e senos e fato de que 1 = cos2 a + sen2 a: cos (a + b) = cos a cos b − sen a sen b a=b cos 2 a = cos2 a − sen2 a = a= cos ϕ = 1− cos2 a − sen2 a = cos2 a + sen2 a 1+ sen2 a cos2 a sen2 a cos2 a = 1 − tan2 a 1 + tan2 a ϕ 2 1 − tan2 1+ ϕ 2 ϕ 2 tan 2 e sen (a + b) = cos a sen b + cos b sen a a=b sen 2 a = 2 cos a sen a = a= sen ϕ = 11 de agosto de 2020 a 2 sen 2 cos a sen a 2 tan a cos a = = sen2 a cos2 a + sen2 a 1 + tan2 a 1 + cos2 a ϕ 2 ϕ 2 2 tan ϕ 2 2 tan 1+ . Prof. Luís Paulo Laus, Dr. Eng. 97 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Eixo 3 Ŷ1 Ŷ2 Ŷ3 Eixo 2 Ẑ1 X̂1 X̂2 Ẑ2 Ẑ3 X̂3 Eixo 1 Figura 2.17.: Modelo cinemático de uma subcadeira com três eixos paralelos Tabela 2.7.: Parâmetros cinemáticos de uma subcadeira com três eixos paralelos i i−1 T i αi−1 ai−1 θi di 1 0 1T 0 0 θ1 0 2 1 2T 0 a1 θ2 0 3 2 3T 0 a2 θ3 0 A melhor eficiência computacional e o intervalo de variação mais simples das respostas da equação (2.7) fazem que esta solução seja preferível à solução da equação (2.6). Contudo, há situações em que a equação (2.6) é computacionalmente mais eficiente. Por exemplo, no caso em que a e b são constantes: apenas o arco-cosseno deve ser recalculado quando c varia, a raiz e o atan2 permanecem com o valor constante e, por isso, não necessitam ser recalculados (na prática, os valores da raiz e do atan2 são calculados uma única vez e reutilizados sempre que for necessário recalcular ϕ ou calculados antes mesmo da compilação do programa e inseridos nele como constantes). 2.5.3. Solução para Três Eixos Paralelos Um dos problemas mais comuns no cálculo da cinemática inversa de robôs é aquele que envolve cadeias cinemáticas com eixos paralelos como mostrado na Figura 2.17. A Tabela 2.7 traz os parâmetros de Denavit-Hartenberg que descrevem a cinemática direta do que é normalmente apenas uma parte do robô. Aplicando a equação (2.1) para cada linha da Tabela 2.7 obtém-se o seguinte modelo cinemático: c1 − s1 0 0 s c 0 0 1 1 0 , T = 1 0 0 1 0 0 0 0 1 c2 − s2 0 a1 s c 0 0 2 2 1 , 2T = 0 0 1 0 0 0 0 1 c − s3 0 a2 3 s c 0 0 3 3 2 e 3T = 0 0 1 0 0 0 0 1 c123 − s123 0 a1 c1 +a2 c12 s c 0 a s +a s 123 123 1 1 2 12 0 . 3T = 0 0 1 0 0 0 0 1 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. (2.8) 98 Introdução à Robótica — Universidade Tecnológica Federal do Paraná A transformação homogênea da equação (2.8) pode r r12 r13 px 11 r21 r22 r23 py 0e 3T = r31 r32 r33 pz 0 0 0 1 ser comparada à uma transformação homogênea conhecida: cϕ −sϕ 0 x sϕ cϕ 0 y = 0 0 1 0 0 0 0 1 onde x e y especificam a posição (origem) do sistema de coordenadas {3} e ϕ a orientação (ângulo que os eixos do e = 0 T , tem-se: sistema de coordenadas {3} fazem com os eixos do sistema de coordenadas {0}). Assim, com 03 T 3 c ϕ = c123 s ϕ = s123 x = a1 c1 +a2 c12 y = a1 s1 +a2 s12 . Para que o seno e cosseno de ϕ seja igual a soma dos ângulos θ1 , θ2 e θ3 , é necessário que ϕ seja igual a própria soma; logo tem-se: ϕ = θ1 + θ2 + θ3 = atan2 (s ϕ, c ϕ) = atan2 (r21 , r11 ) . Lembrando que: c12 = c1 c2 − s1 s2 s12 = c1 s2 + s1 c2 o sistema de equações x = y = a1 c1 +a2 c12 (2.9) a1 s1 +a2 s12 se transforma em: x = a1 c1 +a2 c1 c2 −a2 s1 s2 x2 = a1 2 c1 2 + a2 2 c1 2 c2 2 + a2 2 s1 2 s2 2 + 2 a1 a2 c1 2 c2 −2 a1 a2 c1 s1 s2 −2 a2 2 c1 c2 s1 s2 = a1 2 c1 2 + a2 2 c1 2 c2 2 + s1 2 s2 2 − 2 c1 c2 s1 s2 + 2 a1 a2 c1 2 c2 − c1 s1 s2 y = a1 s1 +a2 c1 s2 +a2 s1 c2 y 2 = a1 2 s1 2 + a2 2 c1 2 s2 2 + a2 2 s1 2 c2 2 + 2 a1 a2 c1 s1 s2 +2 a1 a2 s1 2 c2 +2 a2 2 c1 c2 s1 s2 = a1 2 s1 2 + a2 2 c1 2 s2 2 + s1 2 c2 2 + 2 c1 c2 s1 s2 + 2 a1 a2 s1 2 c2 + c1 s1 s2 x2 + y 2 = a1 2 s1 2 + c1 2 + a2 2 c1 2 c2 2 + s1 2 s2 2 + c1 2 s2 2 + s1 2 c2 2 + 2 a1 a2 s1 2 + c1 2 c2 = a1 2 + a2 2 + 2 a1 a2 c2 isolando17 c2 : c2 = x2 + y 2 − a1 2 − a2 2 . 2 a1 a2 Note que a equação acima permite calcular o ângulo θ2 usando a função arccos. Para isso a fração deve ser menor ou igual a 1 e maior ou igual a −1 já que o ângulo a ser calculado é um número real. Assim: −1 ≤ −2 a1 a2 ≤ a1 + a2 − 2 a1 a2 ≤ 2 2 2 (a1 − a2 ) ≤ x2 +y 2 −a1 2 −a2 2 2 a1 a2 x2 + y 2 − a1 2 − a2 2 2 2 ≤1 ≤ 2 a1 a2 x +y ≤ a1 2 + a2 2 + 2 a1 a2 x2 + y 2 ≤ (a1 + a2 ) 2 V 17 A equação x2 + y 2 = k2 = a1 2 + a2 2 + 2 a1 a2 c2 , normalmente apresentada como AB 2 = CA2 BC 2 − 2 CA BC cos CA BC para V o triângulo 4ABC, é chamada de lei dos cossenos. A diferença de sinal no terceiro terno se deve ao fato do ângulo CA BC ser medido internamente ao triângulo 4ABC enquanto que θ2 é medido externamente (é o suplementar do ângulo interno) porque cos (180◦ − ϕ) = − cos ϕ. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 99 Introdução à Robótica — Universidade Tecnológica Federal do Paraná o que estabelece que o ponto a ser atingido pelo punho deve estar no interior de dois círculos concêntricos, com centro na origem do sistema de coordenadas {0} e de raios |a1 − a2 | e a1 + a2 . Isso é verdade para quaisquer valores positivos de a1 e a2 , mas é menos óbvio se a2 > a1 ; a maior área relativa alcançada ocorre se a1 = a2 . Veja ainda que a função arccos só retorna ângulos no intervalo [0, 180◦ ] (ou [0, π] rad). Como os valores teóricos possíveis para θ2 podem se estender de −180◦ à 180◦ (cobrindo todo o círculo trigonométrico) será necessário considerar uma segunda solução denotada por θ20 que possui o mesmo valor de cosseno que θ2 . Lembrando que a função cosseno é par, é fácil ver que a outra solução é igual em módulo à primeira solução, porém com sinal negativo. Assim: 2 x + y 2 − a1 2 − a2 2 θ2 = arccos 2 a1 a2 θ20 = −θ2 . Uma vez que θ2 é conhecido, pode-se fatorar c1 e s1 nas equações de x e y de forma que: x = (a1 + a2 c2 ) c1 − (a2 s2 ) s1 y = (a1 + a2 c2 ) s1 + (a2 s2 ) c1 . Definindo as constantes (conhecidas já que dependem de θ2 , a1 e a2 ): k1 = a1 + a2 c2 k2 = a2 s2 o sistema se torna: x = k1 c1 −k2 s1 (2.10) y = k2 c1 +k1 s1 . (2.11) Definindo, ainda: ρ= q k1 2 + k2 2 α = atan2 (k2 , k1 ) tem-se que: k1 = ρ cos α k2 = ρ sen α e o sistema de equações se torna: x = cos α cos θ1 − sen α sen θ1 = cos (α + θ1 ) ρ y = sen α cos θ1 + cos α sen θ1 = sen (α + θ1 ) . ρ Usando a função arco-tangente de dois argumentos, tem-se: y x α + θ1 = atan2 , = atan2 (y, x) ρ ρ onde a retirada de ρ dos dois denominadores se explica porque: 1) ρ é, por definição, sempre positivo e por isso y/ρ tem o mesmo sinal que y bem como x/ρ tem o mesmo sinal que x; 2) no cálculo da atan2 será realizada a divisão dos y/ρ dois argumentos (após serem feitas as considerações sobre sinal) e x/ρ = xy . Logo, não faz sentido calcular um termo que será simplificado. Assim: θ1 = atan2 (y, x) − α = atan2 (y, x) − atan2 (a2 s2 , a1 + a2 c2 ) e θ3 = ϕ − θ1 − θ2 = atan2 (r21 , r11 ) − θ1 − θ2 . Note que há dois valores para θ2 e, consequentemente, há também dois valores para θ1 e θ3 . Ainda, a ordem de cálculo dos ângulos não é a ordem crescente, como seria de se esperar. A ordem de cálculo bem como as dependências funcionais são ilustradas abaixo: Solução 11 de agosto de 2020 % & θ2 (x, y) → θ1 (x, y, θ2 ) → θ3 (ϕ, θ1 , θ2 ) θ20 (θ2 ) → θ1 (x, y, θ20 ) → θ3 (ϕ, θ1 , θ20 ) . Prof. Luís Paulo Laus, Dr. Eng. 100 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Desta forma, foram determinadas duas soluções para o problema devido a duplicidade de sinal de θ2 . Estas soluções são conhecidas como: cotovelo para cima; e cotovelo para baixo (mostrado com linhas tracejadas no desenho acima). Também é possível calcular θ1 através das equações (2.10) e (2.11) sem usar o artifício de substituir k1 e k2 por funções de ρ e α. Pode-se encarar as equações (2.10) e (2.11) como sendo um sistemas de equações lineares em s1 e c1 e resolvê-lo para o seno e cosseno de θ1 obtendo: y k1 − x k2 k1 2 + k2 2 x k1 + y k2 c1 = k1 2 + k2 2 s1 = e, logo: y k1 − x k2 x k1 + y k2 θ1 = atan2 , = atan2 (y k1 − x k2 , x k1 + y k2 ) k1 2 + k2 2 k1 2 + k2 2 = atan2 (y (a1 + a2 c2 ) − x (a2 s2 ) , x (a1 + a2 c2 ) + y (a2 s2 )) que, do ponto de vista computacional, é mais eficiente que o primeiro método mostrado porque requer um cálculo de atan2 a menos, apesar de requerer quatro multiplicações e uma soma a mais. Lembre-se que, na maioria dos microprocessadores, o cálculo de atan2 é bastante penoso demorando centenas de vezes o tempo para realizar as multiplicações e somas. Note que, quando são calculadas múltiplas soluções, neste caso duas, o primeiro método permite o reaproveitamento de termos o torna mais eficiente que esse segundo método. 2.5.4. Exemplos de Cinemática Inversa A finalidade da cinemática inversa não é apenas obter as equações das variáveis de junta em função da posição e orientação almejadas, mas sim obter um algoritmo para calcular as variáveis de junta de forma computacionalmente eficiente e respeitando aos limites mecânicos do manipulador. Os limites mecânicos podem restringir o número total de soluções válidas. Assim, na determinação deste algoritmo é importante levar em conta: 1. a cinemática direta; 2. a multiplicidade de soluções; 3. casos especiais onde a solução obtida não pode ser calculada; 4. a faixa de valores calculados (imagem) das equações que calculam as variáveis de junta; 5. o impacto que a faixa de variação de uma variável de junta tem sobre o cálculo das demais variáveis de junta, sobretudo quando há mais de uma solução. Cinemática Inversa do robô Mitsubishi RV-M1 A cinemática inversa do robô Mitsubishi RV-M1 é calculada com base na equação (2.2) com a pose zero coincidindo com a pose de referência mostrada na Figura 2.9. Neste caso, o intervalo variação admissível para cada junta do robô é: −150◦ ≤ θ1 ≤ +150◦ ◦ −30 ≤ θ2 ≤ +100◦ −110◦ ≤ θ3 ≤ +0◦ −90◦ −180◦ ≤ θ4 ≤ +90◦ ≤ θ5 ≤ +180◦ . Estes intervalos de variação podem ser usados para simplificar as soluções evitando que sejam consideradas múltiplas soluções que violem um ou mais intervalos de variação. e , que descreve a posição e orientação do “punho” do robô (sistema de coordenaA transformação homogênea 05 T das {5}), é conhecida, isso é, sabe-se o valor numérico de cada elemento desta matriz denotado aqui simbolicamente por: 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 101 Introdução à Robótica — Universidade Tecnológica Federal do Paraná r11 r21 0e 5T = r31 0 r12 r13 r22 r23 r32 r33 0 0 px py pz 1 e que deve ser igual à transformação homogênea 05 T dada pela equação (2.2) que é função das variáveis de junta repetida aqui por conveniência: c1 s5 + c5 s1 s234 c1 c5 − s1 s5 s234 − s1 c234 s1 (a2 c2 +a3 c23 ) c c s − s s − c s − c s s − c c c (a c +a c ) 1 5 234 1 5 5 1 1 5 234 1 234 1 2 2 3 23 0 . 5T = − c5 c234 s5 c234 − s234 d1 + a2 s2 +a3 s23 0 0 0 1 Assim, a equação matricial: 0e 5T =05 T . fornece um sistema de equações com doze equações escalares, mas é muito difícil resolver este sistema. Pode-se observar que os ângulos que se deseja calcular: θ1 , θ2 , θ3 , θ4 e θ5 não aparecem sozinhos em nenhum dos elementos da matriz 0 5 T acima. Para que seja possível isolar os ângulos deve-se procurar algum artifício para obter equações mais simples. O mais usado é procurar alguma simetria que surge da limitação (imobilização) de uma das juntas. Neste caso, pode-se observar que, se a primeira junta for imobilizada, o punho só pode atingir pontos sobre um plano (muito embora a ferramenta possa atingir pontos fora deste plano). Este plano é chamado de plano do punho ou plano do robô. A limitação a um plano implica na perda de um grau de liberdade de posicionamento do robô. Assim, é de se esperar que a transformação homogênea que descreve a posição e orientação do punho em relação ao segmento 1 (15 T ) tenha um valor constante na última coluna (que representa a posição do punho). Esta constante pode ser usada para construir uma equação mais simples, função de apenas uma variável de junta como é visto a seguir. Multiplicando a direita o inverso da transformação homogênea 01 T , que é função de θ1 , pelos dois lados da equação matricial obtém-se: −1 0 0 e 1T 5T −1 0 0 e 1T 5T = −1 0 0 1T 5T = 15 T onde a matriz da direita da equação é função de θ2 , θ3 , θ4 e θ5 e vale: c s − s5 s234 − c234 a2 c2 +a3 c23 5 234 s5 c5 0 0 1 5T = c5 c234 − s5 c234 s234 −a2 s2 −a3 s23 0 0 0 1 enquanto que a da esquerda é função apenas de θ1 e vale: r s +r c r12 s1 +r22 c1 11 1 21 1 r c −r s r12 c1 −r22 s1 −1 0 0 e 11 1 21 1 1T 5T = −r31 −r32 0 0 r13 s1 +r23 c1 py c1 +px s1 r13 c1 −r23 s1 px c1 −py s1 1 e = 5T d1 − pz 1 −r33 0 e . Esta matriz é função apenas de θ1 (e da especificação da meta). Note que o elemento (2, 4) e será denotada por 15 T da matriz 15 T acima, que representa coordenada y do punho do manipulador em relação à {1}, é uma constante (zero) porque houve a perda de um grau de liberdade. Isso permite construir a equação: px c1 −py s1 = 0 (2.12) e e 1 T e que é solucionada como: que obtida dos igualdade dos elementos (2, 4) das matrizes 15 T 5 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 102 Introdução à Robótica — Universidade Tecnológica Federal do Paraná px c1 = py s1 px s1 = = tan (θ1 ) py c1 px θ1 = arctan . py (2.13) Na implementação da solução, deve-se tomar cuidado com o caso especial no qual py = 0 porque não é possível usar a equação acima (divisão por zero) para calcular θ1 , mas o valor deste ângulo é perfeitamente determinado e depende apenas de px : se px > 0 ⇒ θ1 = 90◦ e se px < 0 ⇒ θ1 = −90◦ . Se ambos, px e py forem nulos, não é possível determinar uma solução para θ1 usando apenas as informações de posição. Neste caso, será necessário usar informações relacionadas com a orientação que estão presentes na submatriz de rotação de 05 T . Ainda, devido ao uso da função arctan (que só retorna arcos no primeiro e quarto quadrantes) θ1 é calculado no intervalo (−90◦ , 90◦ ) ou (−π/2, π/2) rad pela equação (2.13). Assim, é possível obter uma segunda solução para θ1 , denota por θ10 , dada por: θ − 180◦ se θ > 0 1 1 θ10 = θ + 180◦ se θ ≤ 0 . 1 1 e que recai no segundo ou terceiro quadrante se θ1 estiver no quarto ou primeiro quadrante, respectivamente. É necessário verificar se estas soluções estão dentro do intervalo de variação da variável de junta θ1 antes de aplicá-las para mover o manipulador. Como o intervalo válido para a junta 1 vai de −150◦ até +150◦ é fácil observar que qualquer valor calculado de θ1 é realizável porque θ1 sempre está no intervalo [−90◦ , 90◦ ] (já considerando o caso especial onde py = 0). Contudo, se θ1 estiver no intervalo (−30◦ , +30◦ ) que é válido, θ10 será calculado com um valor inválido (fora do intervalo) e deverá ser desprezado. e . Na verdade, no caso geral há Conhecendo-se o valor de θ1 , é possível calcular todos os elementos da matriz 15 T dois valores para esta matriz já que há dois valores para θ1 (o próprio θ1 e a segunda solução θ10 ). Assim, a solução para os demais ângulos serão função de θ1 . Note que o seno e cosseno de θ10 será igual em módulo ao seno e cosseno de θ1 , mas com sinal oposto, ou seja: s10 = − s1 c10 = − c1 e isso pode ser usado para calcular ou simplificar as soluções para os outros ângulos que estão relacionadas à θ10 (são função de θ1 ). Os próximos três eixos (eixos 1, 2 e 3) são paralelos entre si o que leva à solução para três eixos paralelos estudada e e 1 T obtém se o sistema de equações: na Seção 2.5.3 na página 98. Assim, igualando os elementos (1, 4) e (3, 4) de 15 T 5 p c +p s = a c +a c y 1 x 1 2 2 3 23 d −p = −a s −a s 1 que pode ser transformado em z p c +p s y 1 x 1 p −d z 1 2 2 3 23 = a2 c2 +a3 c23 = a2 s2 +a3 s23 para poder ser comparado com o sistema de equações (2.9). Se no sistema (2.9): θ1 for trocado por θ2 , θ2 por θ3 , x por py c1 +px s1 e y por pz − d1 , a1 por a2 e a2 por a3 obtém-se o sistema acima. Então, a solução do sistema acima é a mesma que a do sistema (2.9) feitas as mesmas substituições. Assim: ! 2 2 (py c1 +px s1 ) + (pz − d1 ) − a2 2 − a3 2 θ3 = arccos 2 a2 a3 ! 2 px 2 + py 2 + (pz − d1 ) − a2 2 − a3 2 = arccos (2.14) 2 a2 a3 que fornece uma solução no intervalo [0, 180◦ ]. Note que θ1 foi simplificado da expressão acima porque se a equação (2.12) 2 for elevada ao quadrado e somada à (py c1 +px s1 ) = x2 o resultado será px 2 + py 2 = x2 . 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 103 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Para calcular θ3 é necessário que: 2 −1 ≤ que implica que px 2 + py 2 + (pz − d1 ) − a2 2 − a3 2 ≤1 2 a2 a3 2 2 2 (a2 − a3 ) ≤ px 2 + py 2 + (pz − d1 ) ≤ (a2 + a3 ) . Isso significa que a distância em linha reta do centro da junta 1 até o punho está limitada entre |a2 − a3 | e a2 + a3 . Se esta restrição não for atendida não haverá nenhuma solução para a cinemática inversa do robô; o ponto desejado não poderá ser atingido. Tanto na solução para θ1 quanto na solução para θ3 só foram usadas as informações da posição T [px , py , pz ] da meta (na verdade do punho do manipulador). A submatriz de rotação, que fornece as informações sobre a orientação desejada, não foi usada e isso justifica o fato de apenas a posição ser importante para determinar se a solução é ou não possível (atingível). Além disso, a ordem de cálculo até agora não é importante já que nenhuma das duas variáveis de junta depende da outra. É possível uma segunda solução para θ3 , denotada por θ30 , dada por θ30 = −θ3 . Como o intervalo de variação da junta 3 é de [−110◦ , 0] a única solução viável é θ30 , o primeiro valor de θ3 calculado pela função arccos deve ser desprezado porque é sempre positivo. Apenas θ30 faz parte da solução; na implementação computacional da solução da cinemática inversa deste robô, θ3 será calculado pela equação (2.14) com o sinal trocado. Ainda do sistema de equações (2.9), obtém-se uma solução única para θ2 : θ2 = atan2 (pz − d1 , py c1 +px s1 ) − atan2 (a3 s3 , a2 + a3 c3 ) = atan2 ((pz − d1 ) (a2 + a3 c3 ) − (py c1 +px s1 ) a3 s3 , (py c1 +px s1 ) (a2 + a3 c3 ) + (pz − d1 ) a3 s3 ) que na verdade são duas soluções: uma para θ1 e outra para θ10 . Caso as duas soluções para θ3 (o próprio θ3 e a segunda solução θ30 ) fossem viáveis, haveria quatro soluções para θ2 , mas como apenas θ30 é viável o total se reduz para duas soluções. Observe que há duas formas de se calcular θ2 : uma equação usa a função atan2 duas vezes e a outra apenas uma. Para determinar as duas soluções possível para θ2 é possível usar o conhecimento sobre o sinal do seno e cosseno de θ1 para reaproveitar algumas parcelas da primeira equação. O mesmo não é possível na segunda equação e assim a única otimização possível vem do reaproveitamento de parcelas já calculadas. Desta forma: pz − d1 , a2 + a3 c3 , py c1 +px s1 , a3 s3 podem ser calculados uma única vez e py c1 +px s1 é reaproveitado para θ10 porque py c10 +px s10 = − (py c1 +px s1 ). Isso faz com que a primeira solução seja uma pouco mais eficiente que a segunda porque demanda menos multiplicações quando se deseja determinar todas as soluções possíveis18 . O número de cálculo de funções atan2 é o mesmo para as duas equações se for usada uma das fórmulas da Seção 2.5.2 para reaproveitar o termo atan2 (pz − d1 , py c1 +px s1 ) para θ10 . e e 1 T obtém-se o sistema de equações: Igualando os elementos (1, 3) e (3, 3) de 15 T 5 c r +s r = − c234 1 23 1 13 −r33 = s234 que tem por solução: θ234 = θ2 + θ3 + θ4 = atan2 (−r33 , − c1 r23 − s1 r13 ) que admite solução única para θ4 , mas que depende de θ1 e portanto apresenta uma segunda solução. Note que isso não incorre no aumento do número total de soluções que é um fato relacionado à multiplicidade de soluções. Apenas significa que θ4 , por depender do valor de θ1 , deve ser recalculado para θ10 . É interessante observar que θ4 é a primeira variável de junta a ser calculada em cuja solução apareceram elementos da submatriz de rotação. Isso porque θ4 depende do valor de [r13 , r23 , r33 ]T que é o versor 1 Ẑ5 , ou seja, θ4 depende da inclinação da ferramenta em relação ao plano xy do sistema de coordenadas 1. Como o plano xy do sistema de coordenadas 1 é paralelo ao plano xy da base {0}, pode-se dizer que θ4 está intimamente relacionado com o ângulo que a ferramenta (mais exatamente o punho) faz com o plano de fixação do robô. O fabricante chama este ângulo de ângulo de pitch (não de vê ser confundido com ângulo de arfagem da Seção 1.14); aqui ele aparece com o nome de θ234 . Levando em conta que o seno e cosseno de θ10 , 18 Não existe uma vantagem muito grande: a primeira equação demanda apenas quatro multiplicações a mesmo que a segunda. Isso supondo que um teste equivale a uma subtração o que é verdade para a maioria dos microprocessadores. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 104 Introdução à Robótica — Universidade Tecnológica Federal do Paraná que é a segunda solução possível para θ1 , tem o sinal trocado em relação ao seno e cosseno de θ1 , é possível calcular a outra solução para θ234 que está associada à θ10 por: 180◦ − θ se θ234 ≥ 0 234 0 θ234 = −180◦ − θ se θ < 0. 234 234 e, assim, θ4 = θ234 − θ2 − θ3 0 θ40 = θ234 − θ2 − θ3 . Devido ao intervalo de variação admitido para θ2 , θ3 e θ234 (uso da função atan2) pode ser necessário calcular a menor determinação de θ4 e θ40 pra garantir que o valor obtido caia no intervalo de variação (−90◦ , +90◦ ). Uma menor determinação fora deste intervalo implica em um valor impossível para a variável de junta. e e 1 T obtém-se o sistema de equações: Igualando os elementos (2, 1) e (2, 2) de 15 T 5 c r −s r 1 11 1 21 c r −s r 1 12 1 22 = s5 = c5 que tem por solução: θ5 = atan2 (c1 r11 − s1 r21 , c1 r12 − s1 r22 ) que, da mesma forma que θ4 , admite solução única e depende de θ1 . Também é interessante observar que θ5 é função de r11 , r12 , r21 e r22 que são as coordenadas x e y dos versores 1 X̂5 e 1 Ŷ5 . A variável de junta θ5 determina o ângulo que a ferramenta faz com o eixo dos xx (vertical na Figura 2.9) do sistema de coordenadas 4 medido em torno do eixo dos zz. O fabricante denomina o ângulo θ5 de ângulo de roll (não de vê ser confundido com ângulo de rolamento da Seção 1.14). Levando em conta que o seno e cosseno de θ10 , que é a segunda solução possível para θ1 , tem o sinal trocado em relação ao seno e cosseno de θ1 , é possível calcular a solução de θ5 em função de θ10 sem ter que recalcular a expressão acima. Isso porque os sinais dos dois argumentos da função atan2 são trocados e, como visto na Seção 2.5.2, θ50 pode ser calculado por: θ − 180◦ se θ > 0 5 5 θ50 = θ + 180◦ se θ ≤ 0 . 5 5 Se forem desconsideradas as limitações aos movimentos das juntas do robô RV-M1 é possível determinar quatro soluções. Isso significa que o robô poderia atingir a mesma posição e orientação de quatro formas diferentes. Contudo, devido à limitação dos possíveis valores para a junta 3, ele apresenta apenas duas soluções. Pode-se representar o algoritmo para calcular estas duas soluções por: θ2 (θ1 , θ30 , px , py , pz ) θ1 (px , py ) 9 θ30 (px , py , py ) / θ4 = θ234 − θ2 − θ30 θ234 (θ1 , r13 , r23 , r33 ) 1 θ5 (θ1 , r11 , r12 , r21 , r22 ) Solução % θ10 = θ1 ± 180◦ t θ30 - 0 θ234 = ±180◦ − θ234 θ50 = θ5 ± 180◦ 11 de agosto de 2020 θ20 (θ10 , θ30 , px , py , pz ) 0 / θ40 = θ234 − θ20 − θ30 z Prof. Luís Paulo Laus, Dr. Eng. 105 Introdução à Robótica — Universidade Tecnológica Federal do Paraná θ = [90◦ ; 100◦ ; −20◦ ; 0◦ ; 90◦ ]T θ = [−90◦ ; 95, 57◦ ; −20◦ ; 24, 43◦ ; −90◦ ]T Figura 2.18.: Duas soluções para a cinemática do robô RV-M1 No diagrama acima, foram representados dentro de retângulos todos os ângulos que podem ser calculados simultaneamente. As setas contínuas mostram a dependência funcional entre as variáveis de junta e as setas tracejadas indicam quando o valor de uma variável de junta pode ajudar no cálculo ou ser usada para obter uma segunda solução. No caso de θ20 não é exatamente o valor da variável de junta θ2 que pode ser usado para otimizar a solução, mas sim os valores intermediários (valor dos arcos-tangentes de dois argumentos). Na prática, sempre verificando se o valor calculado está dentro da faixa admissível, o algoritmo ilustrado acima geralmente fornece um único valor para cada ângulo porque a segunda solução para θ1 (denominada θ10 ) geralmente leva à um valor de θ2 fora da faixa de valores admissíveis. Devido à limitação mecânica do movimento da juntas 2, só é possível obter duas soluções válidas para posições próximas ao eixo da junta 1 como ilustrado na Figura 2.18. Como estas posições são de pouco interesse, o fabricante decidiu adotar um algoritmo que calcula apenas uma única solução. A chave deste algoritmo é calcular uma solução para θ1 de tal forma que o valor de θ2 cai dentro da faixa de valores válidos. Para isso, é necessário que o manipulador fique de frente para a meta pretendida. Em outras palavras, X̂1 deve “apontar” para a projeção do ponto almejado no plano xy de {1}. Assim, uma solução única para θ1 é dada por: θ1 = atan2 (px , py ) . Com esta solução é possível especificar a posição e a orientação da ferramenta de várias formas diferentes. Como o manipulador não possui seis graus de liberdade, é possível que alguma meta especificada não possa ser atingida. Isso ocorre se, para atingir a orientação desejada, houver a necessidade de orientar o eixo dos zz do punho (Ẑ5 ) para fora do plano do robô. Qualquer solução que demande uma orientação como esta será impossível de ser atingida. Uma solução simples é projetar a meta pretendida no plano do robô, mas a validade da nova meta, que pode ser atingida, é questionável. O robô poderá, então, chegar ao ponto pretendido, mas não com a orientação necessária o que pode inutilizar a solução. Caso não seja possível usar a solução obtida (projetada) será necessário alterar o layout da planta onde o robô está inserido ou substituir o robô. Como última observação vale notar que é possível calcular θ1 sem recorrer ao artifício do plano do punho. Para e =0 T , pode-se montar o sistema de equações: isso, observando a última coluna da equação 05 T 5 p x = s1 (a2 c2 +a3 c23 ) p = c (a c +a c ) y 1 2 2 3 23 que levam à px a2 c2 +a3 c23 py c1 = a2 c2 +a3 c23 s1 = e que levam a solução px py θ1 = atan2 , a2 c2 +a3 c23 a2 c2 +a3 c23 que, ao contrário da primeira impressão que se possa ter, fornece duas soluções e não uma. Além disso, a princípio θ1 depende dos ângulos θ2 e θ3 e aparente chegou-se a uma solução recursiva porque θ2 e θ3 também dependem de θ1 e 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 106 Introdução à Robótica — Universidade Tecnológica Federal do Paraná não parece ser possível obter outra solução independente. Contudo, sabe-se que a função atan2 usa apenas os sinais dos seus argumentos e a relação entre eles. Assim, é possível simplificar a equação acima para: atan2 (px , py ) se a2 c2 +a3 c23 > 0 θ1 = atan2 (−p , −p ) se a c +a c < 0 x y 2 2 3 23 o que implica que θ1 depende apenas do sinal de a2 c2 +a3 c23 . É fácil verificar que a2 c2 +a3 c23 é, na verdade, o comprimento orientado da projeção do punho sobre o plano xy da base, isso é, a distância do centro da base até a projeção vertical do punho (origem do frame 5) no plano xy da base. Se X̂1 “apontar” para a projeção no plano xy de {1} do ponto almejado, a expressão a2 c2 +a3 c23 é positiva e a “frente19 ” do segmento 1 está voltada para a meta. Caso contrário ela é negativa e a parte de trás do segmento 1 fica voltada para a meta o que significa que alcance será limitado a uma região pequena, próxima ao eixo da junta 1. Portanto, é conveniente adotar a solução θ1 = atan2 (px , py ) o que, junto com a limitação para os valores de θ3 , implica em solução única. Além disso, o termo px c1 +py s1 , que aparece na solução de θ2 , será positivo se a “frente” do segmento 1 estiver voltada para a meta e negativa caso contrário. Assim, se for adotada a solução θ1 = atan2 (px , py ) pode-se substituirpx c1 +py s1 por √ px + py o que torna θ2 independente de θ1 , isso é: p θ2 = atan2 (pz − d1 ) (a2 + a3 c3 ) − px + py a3 s3 , p px + py (a2 + a3 c3 ) + (pz − d1 ) a3 s3 . Este tipo de solução é um misto de solução analítica e geométrica. A interpretação geométrica geralmente é importante no estabelecimento de condições que permitem o cálculo da solução para transpor algumas impossibilidades aparentes na solução das equações. Também é importante na interpretação das restrições (quando existem) impostas à solução. e é Para calcular θ2 e θ3 pode-se usar o artifício do plano do robô uma vez que, determinado θ1 , a matriz 15 T 1 0 0e complemente conhecida e pode ser igualada à 5 T . Pode-se, também, usar as matrizes 5 T e 5 T diretamente para gerar equações escalares em que θ1 é conhecido e, portanto, o seu seno e cosseno são constantes. Esta segunda abordagem tem o inconveniente de necessitar de diversas divisões por seno e cosseno de θ1 que torna o algoritmo mais complexo porque cria a necessidade da realização de teste para determinar qual equação será usada (se é a que tem s1 ou c1 no denominador). Para se obter um algoritmo completo, deve-se levar em conta o caso especial no qual px = py = 0. Neste caso, θ1 não pode ser determinado pela posição desejada da meta. O ângulo θ2 pode ser determinados usando a mesma equação da solução geral com a vantagem que a aplicação de px = py = 0 faz com que esta solução fique independente de θ1 . No caso em que o c234 6= 0 pode-se determinar uma solução dupla para a soma dos ângulos θ234 = θ2 + θ3 + θ4 pelo emprego da função arco-seno e uma solução única para θ1 e θ5 . Se c234 = 0 (s234 = ±1) é possível determinar duas soluções para θ4 , que são θ4 = +90◦ e θ4 = −90◦ , mas não é possível determinar exclusivamente o valor de θ1 e θ5 . Entretanto, é perfeitamente possível determinar o valor da soma (se θ234 = +90◦ ) ou da diferença (se θ234 = −90◦ ) de θ1 e θ5 . Neste caso, um ângulo é arbitrado é o outro é calculado. Geralmente, arbitra-se o valor de θ1 como o mesmo valor atual do ângulo e calcula-se o valor de θ5 porque θ5 pode variar de 360◦ enquanto que θ1 pode variar apenas de 300◦ , o que pode levar a uma solução inatingível se θ1 fosse calculado. Cinemática Inversa de um Robô com Seis Graus de Liberdade Neste exemplo é apresentado em detalhes o cálculo da cinemática inversa de um robô fictício de seis graus de liberdade. Parte-se da premissa que este robô admite uma variação de −180◦ até +180◦ para todas as juntas. É discutido como todas as soluções (oito) podem ser calculadas e como é possível otimizar o procedimento de cálculo a fim de reduzir o custo computacional. Na Figura 2.20 são mostras as oito poses possíveis (oito soluções) para se atingir uma meta (posição e orientação) escolhida arbitrariamente. No final da Seção, é listado um programa otimizado para calcular todas as soluções possíveis tomando o devido cuidado com os casos especiais: falta de soluções por falta de alcance ou possibilidade de infinitas soluções. e que descreve a posição e orientação do “punho” do robô (sistema de coordenaA transformação homogênea 06 T das {6}) é conhecida, ou seja, sabe-se o valor numérico de cada elemento desta matriz denotado aqui simbolicamente por: 19 A frente do segmento 1 é a lado onde é montado o segmento 2, a parte de trás do segmento 1 é onde são montados os motores que movimentam as juntas 2 e 3. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 107 Introdução à Robótica — Universidade Tecnológica Federal do Paraná r11 r21 0e T = 6 r31 0 r12 r13 r22 r23 r32 r33 0 0 px py pz 1 que deve ser igual à transformação homogênea 06 T que, por sua vez, foi calculada na Seção 2.4.1 e é função das variáveis de junta: c6 s1 s5 − c1 s6 s234 + c1 c5 c6 c234 c5 c6 s1 c234 − s1 s6 s234 − c1 c6 s5 0 T = 6 s6 c234 + c5 c6 s234 0 − s1 s5 s6 − c1 c6 s234 − c1 c5 s6 c234 c5 s1 − c1 s5 c234 c1 s5 s6 − c6 s1 s234 − c5 s1 s6 c234 − c1 c5 − s1 s5 c234 c6 c234 − c5 s6 s234 − s5 s234 0 0 d5 c1 s234 + c1 (a2 c2 +a3 c23 ) d5 s1 s234 + s1 (a2 c2 +a3 c23 ) , a2 s2 +a3 s23 −d5 c234 1 isso é, 0e 6T =06 T . Esta equação matricial fornece um sistema de equações com doze equações escalares transcendentais e é muito difícil resolver este sistema. Usando o artifício de procurar alguma simetria que surge da limitação de uma das juntas, pode-se observar que, neste caso, se a primeira junta for imobilizada o punho só pode atingir pontos sobre um plano (muito embora a ferramenta possa atingir pontos fora deste plano). Este plano é chamado de plano do punho ou plano do robô. A limitação a um plano implica na perda de um grau de liberdade de posicionamento do robô. Assim, é de se esperar que a transformação homogênea que descreve a posição e orientação do punho em relação ao segmento 1 (16 T ) tenha um valor constante na última coluna (que representa a posição do punho). Esta constante pode ser usada para construir uma equação mais simples, função de apenas uma variável de junta. Trabalhando no “plano do robô”, obtém-se a matriz: c5 c6 c234 − s6 s234 − c6 s5 1 2 3 4 5 1 2 T 3 T 4 T 5 T 6 T =6 T = s6 c234 + c5 c6 s234 0 − c6 s234 − c5 s6 c234 − s5 c234 a2 c2 +a3 c23 +d5 s234 s5 s6 − c5 0 c6 c234 − c5 s6 s234 − s5 s234 a2 s2 +a3 s23 −d5 c234 0 0 1 que tem o segundo elemento da última coluna (2, 4) constante (nulo) e que deve ser igual a: r11 c1 +r21 s1 r12 c1 +r22 s1 r13 c1 +r23 s1 px c1 +py s1 r c −r s r c −r s r c −r s p c −p s 21 1 11 1 22 1 12 1 23 1 13 1 y 1 x 1 −1 0 1 e 0e . 1T 6 T =6 T = r31 r32 r33 pz 0 0 0 1 Comparando o elemento (2, 4) das duas matrizes temos: py c1 −px s1 = 0 py c1 = px s1 s1 py = = tan θ1 . px c1 Logo: θ1 = arctan 11 de agosto de 2020 py px . Prof. Luís Paulo Laus, Dr. Eng. 108 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Note que a função arctan retorna ângulos no intervalo (−90◦ , 90◦ ) ou (−π/2, π/2) rad. No caso especial em que px = 0 a divisão é impossível mas θ1 = 90◦ se py > 0 e θ1 = −90◦ se py < 0. Se ambos px e py forem nulos, θ1 será indeterminado. Pode-se, então, atribuir qualquer valor a θ1 desde que dentro da faixa de variação da junta 1. Como a função arctan, usada no cálculo de θ1 , só cobre meio círculo, é necessário complementar com as soluções que recaem nos intervalos (−180◦ , −90◦ ] e [90◦ , 180◦ ]. Assim, há uma segunda solução para θ1 , denota por θ10 , dada por: θ − 180◦ se θ > 0 1 1 θ10 = θ + 180◦ se θ ≤ 0 . 1 1 e obtendo a equação: Conhecendo o valor de θ1 , pode-se comparar o valor dos elementos (2, 3) de 16 T e 16 T c5 = r13 s1 −r23 c1 θ5 = arccos (r13 s1 −r23 c1 ) . Para θ10 , tem-se que c10 = − c1 e s10 = s1 o que implica que θ5 (θ10 ) = arccos (r13 s10 −r23 c10 ) = arccos (− (+r13 s1 −r23 c1 )) = 180◦ − θ5 (θ1 ). Este valor de θ5 é denotado por θ500 , mas não se trata exatamente de uma terceira solução para θ5 e sim da primeira solução elevando em conta a dependência funcional de θ10 e não de θ1 . Vale sempre a pena lembrar que a multiplicidade de soluções se deve ao uso de funções trigonométricas inversas que fornecem uma única solução para um arco quando há a possibilidade de várias soluções dentro do intervalo de variação da junta. Da mesma forma que a função arco-tangente (arctan), a função arco-cosseno (arccos) também não cobre todo o círculo (só retorna arcos no intervalo [0, 180◦ ]). Assim, é possível uma segunda solução para θ5 , denota por θ50 , dada por: θ50 = −θ5 . Assim, os dois valores possíveis para θ5 estão no intervalo [−180◦ , 180◦ ]. Há então dois valores de θ5 para cada um dos dois valores de θ1 . Ou seja, até aqui a solução pode ser esquematizada como: 5 θ5 (θ1 , r13 , r23 ) θ1 (px , py ) 9 Solução % θ10 (θ1 ) = θ1 ± 180◦ ) θ50 (θ5 ) = −θ5 x 6 θ500 (θ5 ) = 180◦ − θ5 ) θ5000 (θ500 ) = −θ500 . Neste diagrama, a dependência funcional e a multiplicidade de solução são indicadas por setas contínuas; a possibilidade de se reusar o valor das variáveis de juntas θ1 e θ5 para calcular uma outra solução para estas variáveis é indicada com setas tracejadas. e obtendo o Conhecendo o valor de θ1 e θ5 , pode-se comparar o valor dos elementos (2, 1) e (2, 2) de 16 T e 16 T sistema de equações: s c = r s −r c 5 6 11 1 21 1 s s = r c −r s 5 6 22 1 12 1 de onde se conclui que: θ6 = atan2 r22 c1 −r12 s1 r11 s1 −r21 c1 , s5 s5 θ6 = atan2 (r22 c1 −r12 s1 , r11 s1 −r21 c1 ) θ − 180◦ se θ > 0 6 6 θ60 = para θ50 θ + 180◦ se θ ≤ 0 6 6 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. para θ5 109 Introdução à Robótica — Universidade Tecnológica Federal do Paraná onde a segunda solução para θ6 foi obtida considerando que o sinal de s5 é negativo para θ50 já que θ50 ≤ 0 e que o seno é uma função ímpar; logo obtém-se dois sinais para os argumento da função atan2 e, usando as fórmulas da Seção 2.5.2, é possível determinar o segundo valor de θ6 de uma forma computacionalmente mais eficiente, isso é, sem que haja a necessidade de usar a função atan2 novamente. Isso significa que há dois valores possíveis para θ6 , dependendo do sinal de s5 , mas não significa que há realmente dois valores de θ6 para cada valor de θ5 , o que implicaria no aumento do número total de soluções possíveis, apenas significa que o valor de θ6 depende do valor de θ5 ou, mais precisamente, do sinal de s5 . Ainda, para a segunda solução para θ1 , denominada θ10 , é possível calcular θ6 sem recorrer ao cálculo da função atan2 novamente usando o fato que o seno e o cosseno de θ10 têm o mesmo valor que o seno e o cosseno de θ1 , porém com o sinal contrário. Assim, usando as fórmulas da Seção 2.5.2: θ − 180◦ 6 θ600 = θ + 180◦ 6 se θ6 > 0 se θ6 ≤ 0 para θ5 ou θ500 ou θ600 = θ60 e θ6000 = θ6 . e obtém-se o sistema de equações: Comparando o valor dos elementos (1, 3) e (3, 3) de 16 T e 16 T s c 5 234 s s 5 234 = −r13 c1 −r23 s1 = −r33 de onde se conclui que: θ234 = θ2 + θ3 + θ4 = atan2 −r33 −r13 c1 −r23 s1 , s5 s5 θ234 = atan2 (−r33 , −r13 c1 −r23 s1 ) θ − 180◦ se θ 234 234 > 0 0 θ234 = θ + 180◦ se θ ≤0 234 para θ5 para θ50 234 que, da mesma forma que θ6 , depende do valor de θ5 , ou seja, θ234 é calculado para os valores e positivos de θ5 e 0 0 θ234 para os negativos (θ50 ). A equação para θ234 foi criada usando as fórmulas da Seção 2.5.2. Também é possível 0 determinar os valores de θ234 relativos a θ1 , assim: 00 θ234 = 180◦ − θ234 −180◦ − θ 234 se θ234 ≥ 0 se θ234 < 0 . ou 00 0 θ234 = −θ234 e 000 θ234 = −θ234 . As considerações sobre a influência dos valores de θ1 e θ5 no cálculo de θ6 e θ234 podem ser compreendidas mais facilmente se os resultados forem resumidos em uma tabela. Assim, analisando como o seno e o cosseno de θ1 variam entre as soluções, pode-se determinar uma forma mais eficiente de calcular os senos e cossenos de θ5 , necessários para calcular as demais variáveis de junta: 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 110 Introdução à Robótica — Universidade Tecnológica Federal do Paraná θ1 c1 θ1 θ10 θ5 s1 c10 = − c1 s10 = − s1 c5 θ5 θ5 = arccos (r13 s1 −r23 c1 ) θ50 θ50 = −θ5 θ500 θ500 = arccos (−r13 s1 +r23 c1 ) = 180◦ − θ5 θ5000 θ5000 = −θ500 s5 c50 = c5 s50 = − s5 c500 = − c5 s500 = s5 c5000 = − c5 s5000 = − s5 Usando esta tabela, pode-se estabelecer como θ234 varia usando conhecimento sobre os valores de seno e cosseno de θ1 , θ10 , θ5 , θ50 , θ500 e θ5000 em conjunto com as fórmulas da Seção 2.5.2 e com o fato de que s5 ≥ 0 uma vez que θ5 foi calculado usando a função arccos: θ1 θ5 θ234 c5 c1 θ234 = atan2 s5 s1 c50 = c5 s50 = − s5 0 θ234 = atan2 −r33 −r13 c1 −r23 s1 s5 , s5 −r33 −r13 c1 −r23 s1 − s5 , − s5 θ234 = atan2 (−r33 , −r13 c1 −r23 s1 ) 0 θ234 θ − 180◦ 234 = θ + 180◦ 234 c500 = − c5 c10 = − c1 s500 = s5 s10 = c5000 = − c5 s5000 = − s1 − s5 00 θ234 = atan2 000 θ234 = atan2 −r33 r13 c1 +r23 s1 s5 , s5 −r33 r13 c1 +r23 s1 − s5 , − s5 c234 = c234 s234 = s234 se θ234 > 0 c2340 = − c234 se θ234 ≤ 0 s2340 = − s234 c23400 = − c234 00 0 θ234 = −θ234 000 θ234 = −θ234 s23400 = s234 c234000 = c234 s234000 = − s234 O mesmo procedimento pode ser realizado para θ6 com a exceção de que não é necessário determinar o valor do seno e cosseno de θ6 por que nenhuma outra variável de junta depende destes valores: θ1 θ5 θ6 c5 c1 s5 s1 c50 = c5 s50 = − s5 c500 = − c5 c10 = − c1 s500 = s5 s10 = c5000 = − c5 s5000 = − s5 − s1 θ6 = atan2 r22 c1 −r12 s1 r11 s1 −r21 c1 , s5 s5 θ6 = atan2 r22 c1 −r12 s1 r11 s1 −r21 c1 , − s5 − s5 θ6 = atan2 (r22 c1 −r12 s1 , r11 s1 −r21 c1 ) θ − 180◦ 6 θ60 = θ + 180◦ 6 θ6 = atan2 θ6 = atan2 −r22 c1 +r12 s1 −r11 s1 +r21 c1 , s5 s5 θ600 = θ60 −r22 c1 +r12 s1 −r11 s1 +r21 c1 , − s5 − s5 θ6000 = θ6 se θ6 > 0 se θ6 ≤ 0 e obtendo o sistema de Para calcular θ2 e θ3 basta comparar o valor dos elementos (1, 4) e (3, 4) de 16 T e 16 T equações: p c +p s x 1 y 1 p z = a2 c2 +a3 c23 +d5 s234 = a2 s2 +a3 s23 −d5 c234 que podem ser transformadas em: p c +p s −d s x 1 y 1 5 234 pz + d5 c234 11 de agosto de 2020 = a2 c2 +a3 c23 = a2 s2 +a3 s23 Prof. Luís Paulo Laus, Dr. Eng. 111 Introdução à Robótica — Universidade Tecnológica Federal do Paraná já que os eixos 2, 3 e 4 são sempre paralelos. No lado esquerdo tem-se: px , py , pz , c1 , s1 , c234 , s234 e d5 que são conhecidos; no lado direito a2 e a3 são conhecidos, mas c2 , s2 , c23 e s23 são desconhecidos. Comparando com a solução geral para três eixos paralelos, têm-se: ! 2 2 (px c1 +py s1 −d5 s234 ) + (pz + d5 c234 ) − a2 2 − a3 2 θ3 = arccos 2 a2 a3 θ30 = −θ3 θ2 = atan2 (pz + d5 c234 , px c1 +py s1 −d5 s234 ) − atan2 (a3 s3 , a2 + a3 c3 ) (2.15) = atan2 ((pz + d5 c234 ) (a2 + a3 c3 ) − (px c1 +py s1 −d5 s234 ) (a3 s3 ) , (2.16) (px c1 +py s1 −d5 s234 ) (a2 + a3 c3 ) + (pz + d5 c234 ) (a3 s3 )) θ4 = θ234 − θ2 − θ3 . Não esqueça que antes de calcular θ3 é necessário testar se o argumento do arccos está na faixa [−1, 1]; caso contrário o ponto o ser atingido está fora de alcance. Há, ainda, duas soluções para θ3 devido ao uso da função arccos o que implica em total de oito soluções: 1) duas soluções para θ1 (de frente para a meta e de costas); 2) duas soluções para θ5 (espelhamento do punho do robô, solução por baixo e por cima do punho); e 3) duas soluções para θ3 (cotovelo para baixo e cotovelo para cima). Note que há um caso especial quando s5 = 0 que impossibilita o cálculo de θ6 e da soma θ2 + θ3 + θ4 . Neste caso, os quatro eixos 2, 3, 4 e 6 se tornam paralelos e há infinitas soluções possíveis. Assim, 16 T se torna: cos (θ6 + θ234 ) 0 1 T = 6 sen (θ6 + θ234 ) 0 − sen (θ6 + θ234 ) 0 a2 c2 +a3 c23 +d5 s234 0 −1 0 cos (θ6 + θ234 ) 0 a2 s2 +a3 s23 −d5 c234 0 0 1 com θ5 = 0 ou − cos (θ6 − θ234 ) 0 1 6T = sen (θ6 − θ234 ) 0 sen (θ6 − θ234 ) 0 a2 c2 +a3 c23 +d5 s234 0 1 0 cos (θ6 − θ234 ) 0 a2 s2 +a3 s23 −d5 c234 0 0 1 com θ5 = ±180◦ . Para escolher uma das infinitas possíveis soluções é comum manter o valor anterior de θ6 e calcular o valor da soma θ2 + θ3 + θ4 ou vice-versa20 . Para isso, são usados os valores de r31 e r32 para calcular o valor da soma ou diferença (dependendo do valor de θ5 ) dos ângulos com a equação: θ6 ± θ234 = atan2 (r31 , r32 ) onde o sinal ± depende do valor de θ5 (positivo se θ5 = 0 e negativo se θ5 = 180◦ ). As oito soluções podem ser encontradas seguindo a ordem de cálculo ilustrada pelo diagrama da Figura 2.19. Neste diagrama, os ângulos que podem ser calculados simultaneamente aparecem dentro do mesmo retângulo; a dependência funcional e a multiplicidade de solução são indicadas por setas contínuas. A possibilidade de se reusar o valor das variáveis de juntas θ2 ou θ3 , ou de valores intermediários que aparecem no cálculo destas variáveis, para calcular uma outra solução para estas variáveis é indicada com setas tracejadas. No caso das variáveis θ4 , θ234 , θ5 e θ6 estas possibilidade não foi indicada porque: 1) no caso de θ5 ela já foi indicada no diagrama anterior; e 2) para não carregar muito o desenho já que esta informação pode ser obtida da equação que calcula cada solução destas variáveis. 20 Normalmente é mantido o valor da variável de menor variação e calculado a outra (de maior variação) para evitar que a solução caia fora da faixa de variação (range) o que invalidaria a solução. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 112 11 de agosto de 2020 θ3 (θ1 , θ234 , px , py , pz ) 4 / θ2 (θ1 , θ3 , θ234 , px , py , pz ) / θ4 = θ234 − θ2 − θ3 θ30 = −θ3 / θ20 / θ40 = θ234 − θ20 + θ3 0 θ300 (θ1 , θ234 , px , p y , pz ) 4 0 / θ200 (θ1 , θ300 , θ234 , p x , py , p z ) 0 / θ400 = θ234 − θ200 − θ300 θ3000 = −θ300 / θ2000 0 / θ4000 = θ234 − θ2000 + θ300 / θ20000 00 / θ40000 = θ234 − θ20000 − θ300 / θ200000 00 / θ400000 = θ234 − θ200000 + θ300 θ5 (θ1 , r13 , r23 ) θ234 (θ1 , r13 , r23 , r33 ) θ6 (θ1 , r11 , r12 , r21 , r22 ) 8 θ1 (px , py ) E & θ50 (θ5 ) = −θ5 Prof. Luís Paulo Laus, Dr. Eng. 0 θ234 = θ234 ± 180◦ θ60 = θ6 ± 180◦ * Solução 0000 00 4 θ3 = θ3 θ500 (θ5 ) = 180◦ − θ5 00 0 θ234 = −θ234 8 θ600 = θ60 θ10 = θ1 ± 180◦ * θ300000 = −θ300 000000 4 θ3 = θ3 / θ2000000 000 / θ4000000 = θ234 − θ2000000 − θ3 & θ5000 (θ500 ) = −θ500 000 θ234 = −θ234 θ6000 = θ6 * θ30000000 = −θ3 / θ20000000 000 / θ40000000 = θ234 − θ20000000 + θ3 Figura 2.19.: Ordem de cálculo para as oitos soluções do robô de seis graus de liberdade Introdução à Robótica — Universidade Tecnológica Federal do Paraná * 113 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Tabela 2.8.: Reaproveitamento dos dois termos no cálculo de θ3 e valor dos seus senos e cossenos Solução θ1 θ234 1 θ3 arccos c234 2 s234 c1 (px c1 +py s1 −d5 s234 )2 +(pz +d5 c234 )2 −a2 2 −a3 2 2 a2 a3 2a solução (cotovelo para cima) θ3 θ30 = −θ3 s1 3 4 5 6 c10 = − c1 s10 = c2340 = − c234 s2340 = arccos − s234 c2340 = − c234 s2340 = (px c1 +py s1 +d5 s234 )2 +(pz −d5 c234 )2 −a2 2 −a3 2 a2 a3 2 2a solução (cotovelo para cima) arccos s234 (−px c1 −py s1 −d5 s234 )2 +(pz −d5 c234 )2 −a2 2 −a3 2 a2 a3 θ300 θ3000 = −θ300 2 2a solução (cotovelo para baixo) θ30000 = θ300 θ300000 = −θ300 − s1 7 8 arccos c2340 = c234 s2340 = − s234 (−px c1 −py s1 +d5 s234 )2 +(pz +d5 c234 )2 −a2 2 −a3 2 a2 a3 2 2a solução (cotovelo para baixo) θ3000000 = θ3 θ30000000 = −θ3 c3 s3 c3 − s3 c300 s300 c300 − s300 c300 s300 c300 − s300 c3 s3 c3 − s3 A diagrama da Figura 2.19 leva a oito soluções que podem ser denominadas conforme a tabela a baixo: Solução θ1 θ5 θ3 1 de frente para a meta punho por um lado da garra cotovelo para baixo 2 de frente para a meta punho por um lado da garra cotovelo para cima 3 de frente para a meta punho pelo outro lado da garra cotovelo para baixo 4 de frente para a meta punho pelo outro lado da garra cotovelo para cima 5 de costas para a meta punho por um lado da garra cotovelo para cima 6 de costas para a meta punho por um lado da garra cotovelo para baixo 7 de costas para a meta punho pelo outro lado da garra cotovelo para cima 8 de costas para a meta punho pelo outro lado da garra cotovelo para baixo A Figura 2.20 traz uma representação das oito possíveis soluções para uma posição e orientação escolhida arbitrariamente. Nem todas as posições e orientações admitem oito soluções por falta de alcance do manipulador. Note que, assim como na solução do robô de três eixos paralelos, é possível calcular θ2 por duas equações diferentes: a primeira emprega a função atan2 duas vezes; a segunda emprega a função atan2 apenas uma vez. Para determinar qual das duas equações é computacionalmente mais eficiente, é importante determinar se há termos que podem ser reaproveitados entre as soluções. Para determinar como os termos podem ser reaproveitados, coloca-se as oito soluções em uma tabela examinando a dependência de cada solução em relação aos senos e cossenos dos ângulos já calculados dois quais θ2 depende. Como θ2 depende do valor de θ3 , deve-se primeiro analisar a variação do valor de θ3 de solução para solução. Esta análise é feita levando em consideração a diversidade de soluções para o próprio θ3 bem como a diversidade das soluções dos ângulos de que θ3 depende (θ1 e θ234 ). As propriedades das funções seno e cosseno são usadas para relacionar o valor, sobretudo o sinal, do seno e do cosseno de cada ângulo em cada solução em relação aos valores dos ângulos em soluções precedentes. Assim, é possível construir a Tabela 2.8 que demonstra que as oito soluções possível para θ3 podem ser calculadas chamando a função arccos apenas duas vezes. Então, só é necessário calcular θ3 duas vezes usando a função arco-cosseno: primeira e terceira soluções. As 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 114 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Ẑ5 Ẑ5 Ẑ6 X̂6 Ẑ0 = Ẑ1 Ẑ0 = Ẑ1 X̂1 X̂0 X̂5 X̂5 X̂2 X̂3 X̂3 Ẑ3 X̂1 Ẑ4 Ẑ4 X̂0 X̂2 Ẑ2 Ẑ6 X̂6 X̂4 Ẑ2 X̂4 Ẑ3 θ = [30.0◦ , −17.0◦ , 30.0◦ , −150.0◦ , 30.0◦ , −45.0◦ ]T θ = [30.0◦ , 17.0◦ , −30.0◦ , −124.0◦ , 30.0◦ , −45.0◦ ]T X̂4 X̂4 Ẑ4 Ẑ4 X̂5 X̂5 X̂3 Ẑ6 Ẑ6 X̂3 Ẑ3 X̂6 X̂6 Ẑ0 = Ẑ1 Ẑ0 = Ẑ1 X̂2 X̂2 Ẑ5 Ẑ5 X̂1 Ẑ3 X̂1 X̂0 X̂0 Ẑ2 Ẑ2 θ = [30.0◦ , 19.2◦ , 80.7◦ , −56.8◦ , −30.0◦ , 135.0◦ ]T θ = [30.0◦ , 112.5◦ , −80.7◦ , 11.2◦ , −30.0◦ , 135.0◦ ]T Ẑ4 Ẑ4 X̂5 X̂5 X̂3 Ẑ3 X̂4 Ẑ6 X̂4 X̂2 Ẑ6 X̂3 X̂6 X̂6 Ẑ0 = Ẑ1 Ẑ3 Ẑ0 = Ẑ1 Ẑ5 Ẑ2 Ẑ5 Ẑ2 X̂2 X̂0 X̂0 X̂1 X̂1 θ = [−150.0◦ , 67.5◦ , 80.7◦ , 168.8◦ , 150.0◦ , 135.0◦ ]T θ = [−150.0◦ , 160.8◦ , −80.7◦ , −123.2◦ , 150.0◦ , 135.0◦ ]T Ẑ5 Ẑ5 Ẑ6 X̂6 Ẑ0 = Ẑ1 Ẑ3 X̂5 Ẑ6 X̂6 X̂4 Ẑ4 Ẑ2 Ẑ2 X̂2 X̂4 Ẑ0 = Ẑ1 X̂3 X̂5 X̂0 X̂1 Ẑ4 Ẑ3 X̂0 X̂3 X̂1 θ = [−150.0◦ , 163.0◦ , 30.0◦ , −56.0◦ , −150.0◦ , −45.0◦ ]T X̂2 θ = [−150.0◦ , −163.0◦ , −30.0◦ , −30.0◦ , −150.0◦ , −45.0◦ ]T Figura 2.20.: Oito soluções para o robô de seis graus de liberdade 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 115 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Tabela 2.9.: Reaproveitamento dos dois termos no cálculo de θ2 θ2 Solução θ1 c234 c1 s234 3 − s234 c300 c300 − c234 − c1 s234 s300 c300 − s300 − s1 8 s300 − s300 5 7 c3 c300 − c234 4 s3 − s3 s1 6 θ3 c3 1 2 θ234 c3 c234 − s234 s3 c3 − s3 atan2 (pz + d5 c234 , px c1 +py s1 −d5 s234 ) 1o atan2 (a3 s3 , a2 + a3 c3 ) 2o atan2 (pz + d5 c234 , px c1 +py s1 −d5 s234 ) A atan2 (a3 s3 , a2 + a3 c3 ) C idem à anterior A atan2 (−a3 s3 , a2 + a3 c3 ) -C atan2 (pz − d5 c234 , px c1 +py s1 +d5 s234 ) B atan2 (a3 s300 , a2 + a3 c300 ) D idem à anterior B atan2 (−a3 s300 , a2 + a3 c300 ) -D atan2 (pz − d5 c234 , −px c1 −py s1 −d5 s234 ) ±180◦ − B atan2 (a3 s300 , a2 + a3 c300 ) D idem à anterior ±180◦ − B atan2 (−a3 s300 , a2 + a3 c300 ) -D atan2 (pz + d5 c234 , −px c1 −py s1 +d5 s234 ) ±180◦ − A atan2 (a3 s3 , a2 + a3 c3 ) C idem à anterior ±180◦ − A atan2 (−a3 s3 , a2 + a3 c3 ) -C demais soluções ou são iguais a uma dessas duas soluções ou são iguais a uma dessas soluções com o sinal trocado. Trocar o sinal de um ângulo não afeta o valor do cosseno deste ângulo, apenas o do seno (que fica com sinal trocado). Para fazer a mesma análise para θ2 calculado pela equação (2.15), é conveniente trabalhar com as duas parcelas de forma independente (1o e 2o termos) como mostrado na Tabela 2.9. É necessário usar as equações da Seção 2.5.2 para determinar a relação entre cada solução e suas precedentes. Cada um dos termos da equação de θ2 deve ser calculo apenas duas vezes: o primeiro termo tem duas soluções denominadas A e B na tabela acima; o segundo termo também tem duas soluções denominadas C e D. Estes quatro valores são usados para determinar as oito soluções possíveis. Também é necessário analisar a segunda solução para θ2 dada pela equação (2.16) para comparar o esforço computacional com a implementação usando a equação (2.15). A Tabela 2.10 traz a análise do impacto que cada solução, por mudar o valor dos senos e cossenos dos ângulos de que θ2 depende, tem sobre o valor de θ2 . Neste caso, também é necessário usar a função atan2 quatro vezes, isso é, apenas as primeiras quanto soluções devem ser calculadas integralmente. As quatro últimas podem ser obtidas calculando o ângulo suplementar das quanto primeiras. Como, na maioria dos processadores, o cálculo da função atan2 demanda um esforço computacional muito maior que somas e multiplicações, pode-se considerar que há um empate, em termos de esforço computacional, entre as soluções dadas pela equação (2.15) e (2.16) já ambas demandam quatro cálculos de atan2. Contudo, pode-se procurar determinar com mais exatidão qual das duas soluções demanda o menor esforço computacional contabilizando o número total de operações necessárias para calcular cada uma das soluções. Para isso, é conveniente observar que as duas soluções usando os termos dados na Tabela 2.11 que também traz o número total de somas e multiplicações necessárias para calcular cada termo. Para implementar os termos A, B, C e D da equação (2.15) só são necessários os termos da Tabela 2.11. Para somar estes termos e considerar os suplementos para A e B são necessárias dez adições. O caso da equação (2.16) é um pouco mais complicado. É necessário observar que os argumentos da função atan2 são compostos pela soma de produtos. Estes produtos podem ser reaproveitados entre as quatro primeiras soluções e, por isso, são necessários apenas oito deles. Mais oito adições para se implementar complemente as quatro primeiras soluções e mais quanto adições para implementar as quatro últimas perfazem um total de doze adições e oito multiplicações. Apenas duas adições e oito multiplicações a mais que as demandas pela equação (2.15). Vale ainda notar que a solução usando a equação (2.15) demanda o cálculo da menor determinação do ângulo já que a soma do resultado de duas atan2 pode recair no intervalo [−360◦ , 360◦ ], maior que o intervalo de variação admitido para a junta 2. Para realizar esse cálculo são necessários dezesseis testes e oito adições o que complica o 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 116 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Tabela 2.10.: Reaproveitamento dos dois termos no cálculo de θ2 (outra equação) Solução θ1 θ234 2 c234 s234 c1 − s234 7 c3 = atan2 ((pz + d5 c234 ) (a2 + a3 c3 ) − (px c1 +py s1 −d5 s234 ) (−a3 s3 ) , (px c1 +py s1 −d5 s234 ) (a2 + a3 c3 ) + (pz + d5 c234 ) (−a3 s3 )) θ200 = − c234 (px c1 +py s1 +d5 s234 ) (a2 + a3 c300 ) + (pz − d5 c234 ) (a3 s300 )) c300 θ2000 = atan2 ((pz − d5 c234 ) (a2 + a3 c300 ) − (px c1 +py s1 +d5 s234 ) (−a3 s300 ) , (px c1 +py s1 +d5 s234 ) (a2 + a3 c300 ) + (pz − d5 c234 ) (−a3 s300 )) θ20000 θ200000 c300 = ±180◦ − θ2000 = atan2 ((pz − d5 c234 ) (a2 + a3 c300 ) − (−px c1 −py s1 −d5 s234 ) (−a3 s300 ) , = θ2000000 c3 ±180◦ − θ200 = atan2 ((pz + d5 c234 ) (a2 + a3 c3 ) − (−px c1 −py s1 +d5 s234 ) (a3 s3 ) , (−px c1 −py s1 +d5 s234 ) (a2 + a3 c3 ) + (pz + d5 c234 ) (a3 s3 )) s3 − s234 θ20000000 c3 8 atan2 ((pz − d5 c234 ) (a2 + a3 c300 ) − (−px c1 −py s1 −d5 s234 ) (a3 s300 ) , (−px c1 −py s1 −d5 s234 ) (a2 + a3 c300 ) + (pz − d5 c234 ) (−a3 s300 )) − s300 c234 = (−px c1 −py s1 −d5 s234 ) (a2 + a3 c300 ) + (pz − d5 c234 ) (a3 s300 )) s300 s234 − s1 atan2 ((pz − d5 c234 ) (a2 + a3 c300 ) − (px c1 +py s1 +d5 s234 ) (a3 s300 ) , s300 c300 − c1 6 (px c1 +py s1 −d5 s234 ) (a2 + a3 c3 ) + (pz + d5 c234 ) (a3 s3 )) θ20 − s300 5 atan2 ((pz + d5 c234 ) (a2 + a3 c3 ) − (px c1 +py s1 −d5 s234 ) (a3 s3 ) , s3 c300 − c234 4 = θ2 − s3 s1 3 atan2 ((pz + d5 c234 ) (a2 + a3 c3 ) − (px c1 +py s1 −d5 s234 ) (a3 s3 ) , (px c1 +py s1 −d5 s234 ) (a2 + a3 c3 ) + (pz + d5 c234 ) (a3 s3 )) c3 1 = θ2 θ3 − s3 = ±180◦ − θ20 = atan2 ((pz + d5 c234 ) (a2 + a3 c3 ) − (−px c1 −py s1 +d5 s234 ) (−a3 s3 ) , (−px c1 −py s1 +d5 s234 ) (a2 + a3 c3 ) + (pz + d5 c234 ) (−a3 s3 )) = ±180◦ − θ2 Tabela 2.11.: Termos presentes nas várias versões das equações (2.15) e (2.16) 11 de agosto de 2020 Termo Multiplicações Adições pz ± d5 c234 1 2 px c1 +py s1 ±d5 s234 3 3 a2 + a3 c3 1 1 a2 + a3 c300 1 1 a3 s3 1 0 a3 s300 1 0 Prof. Luís Paulo Laus, Dr. Eng. 117 Introdução à Robótica — Universidade Tecnológica Federal do Paraná algoritmo. Já a solução usando a equação (2.16) não requer esse cuidado. Esse mesmo cuidado deve ser tomado no cálculo de θ4 já que ele é calculado através da subtração de três ângulos, cada um no intervalo de [−180◦ , 180◦ ]. Uma solução na metalinguagem do octave ou Matlab é dada abaixo onde se pode observar alguns cuidados com a exatidão dos valores sendo calculados, sobretudo os valores que devem ser testados como c5 e c3 . Esta solução parte de uma solução específica para calcular as demais (se houverem). É muito fácil alterar o programa para calcular as e , denotado por t no código. Como é de praxe em programas para cálculo soluções partindo do conhecimento de 06 T de cinemática inversa, as variáveis de junta são denotadas por q ao invés de θ. A segunda solução foi indicada por b e a primeira por a no nome das variáveis. O resultado da execução deste programa pode ser observado em cada configuração mostrada na Figura 2.20. function qs = robot6dof_ci ( q ) % calcula todas as soluções possíveis para uma pose dada % q - ângulos de junta em radianos ( define a pose ) % % teste : q = [30; -17;30; -150;30; -45]* pi /180 % parâmetros dhm do robô ( alpha a d theta ) r = [0 0 0 0; pi /2 0 0 0; 0 1.0 0 0; 0 1.3 0 0; pi /2 0 1.1 0; - pi /2 0 0 0]; r (: ,4) = q (:); % substitui a coluna de theta % transformação de 0 para 6 ( função dos ângulos de junta q ) t = eye (4); for i = 1: rows ( r ) , t = t * dh ( r (i ,:)); % dh - função para criação de TH de i -1 para i end , % cálculo de theta1 if t (1 ,4) ! = 0 , q1a = atan ( t (2 ,4) / t (1 ,4)); if q1a > 0 , q1b = q1a - pi ; else q1b = q1a + pi ; end else , q1a = pi /2; q1b = - pi /2; end cq1a = cos ( q1a ); sq1a = sin ( q1a ); % cálculo de theta5 cq5a = t (1 ,3)* sq1a - t (2 ,3)* cq1a ; q5aa = acos ( cq5a ); q5ab = - q5aa ; q5ba = pi - q5aa ; q5bb = - q5ba ; % cálculo de theta6 e da soma theta2 + theta3 + theta4 if abs ( cq5a ) >= 1 - eps , % caso especial q5aa = q5ab = 0; 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 118 Introdução à Robótica — Universidade Tecnológica Federal do Paraná q5ba = q5bb = q6aa auxq6 q234aa else , q6aa q234aa end , pi ; - pi ; = q (6); = atan2 ( t (3 ,1) , t (3 ,2)); = auxq6 - q6aa ; = atan2 ( t (2 ,2)* cq1a - t (1 ,2)* sq1a , t (1 ,1)* sq1a - t (2 ,1)* cq1a ); = atan2 ( - t (3 ,3) , -t (1 ,3)* cq1a - t (2 ,3)* sq1a ); if q6aa > 0 , q6ab = q6aa - pi ; else , q6ab = q6aa + pi ; end , q6ba = q6ab ; q6bb = q6aa ; if q234aa > 0 , q234ab = q234aa - pi ; else , q234ab = q234aa + pi ; end , q234ba = - q234ab ; q234bb = - q234aa ; cq234aa = cos ( q234aa ); sq234aa = sin ( q234aa ); % cálculo de theta3 cq3aaa = (( t (1 ,4)* cq1a + t (2 ,4)* sq1a - r (5 ,3)* sq234aa )^2 + ( t (3 ,4) + r (5 ,3)* cq234aa )^2 - r (3 ,2)^2 - r (4 ,2)^2)/(2* r (3 ,2)* r (4 ,2)); if abs ( cq3aaa ) > 1 + eps , q3bba = q3bbb = q3aaa = q3aab = NaN ; else , if cq3aaa > 1 , cq3aaa = 1; elseif cq3aaa < -1 , cq3aaa = -1; end , q3bba = q3aaa = acos ( cq3aaa ); q3bbb = q3aab = - q3aaa ; end , cq3aba = (( t (1 ,4)* cq1a + t (2 ,4)* sq1a + r (5 ,3)* sq234aa )^2 + ( t (3 ,4) r (5 ,3)* cq234aa )^2 - r (3 ,2)^2 - r (4 ,2)^2)/(2* r (3 ,2)* r (4 ,2)); if abs ( cq3aba ) > 1 + eps , q3baa = q3bab = q3aba = q3abb = NaN ; else , if cq3aba > 1 , cq3aba = 1; elseif cq3aba < -1 , cq3aba = -1; end , q3baa = q3aba = acos ( cq3aba ); q3bab = q3abb = - q3aba ; end , sq3aaa = sin ( q3aaa ); sq3aba = sin ( q3aba ); 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 119 Introdução à Robótica — Universidade Tecnológica Federal do Paraná % cálculo de theta2 aux1 = atan2 ( r (4 ,2)* sq3aaa , r (3 ,2)+ r (4 ,2)* cq3aaa ); aux2 = atan2 ( r (4 ,2)* sq3aba , r (3 ,2)+ r (4 ,2)* cq3aba ); auxq2aa = atan2 ( t (3 ,4) + r (5 ,3)* cq234aa , t (1 ,4)* cq1a + t (2 ,4)* sq1a - r (5 ,3)* sq234aa ); auxq2ab = atan2 ( t (3 ,4) - r (5 ,3)* cq234aa , t (1 ,4)* cq1a + t (2 ,4)* sq1a + r (5 ,3)* sq234aa ); if auxq2aa > 0 , auxq2bb = pi - auxq2aa ; else , auxq2bb = - pi - auxq2aa ; end , if auxq2ab > 0 , auxq2ba = pi - auxq2ab ; else , auxq2ba = - pi - auxq2ab ; end , q2aaa = auxq2aa - aux1 ; q2aab = auxq2aa + aux1 ; q2aba = auxq2ab - aux2 ; q2abb = auxq2ab + aux2 ; q2baa = auxq2ba - aux2 ; q2bab = auxq2ba + aux2 ; q2bba = auxq2bb - aux1 ; q2bbb = auxq2bb + aux1 ; % cálculo de theta4 q4aaa = q234aa - q2aaa q4aab = q234aa - q2aab q4aba = q234ab - q2aba q4abb = q234ab - q2abb q4baa = q234ba - q2baa q4bab = q234ba - q2bab q4bba = q234bb - q2bba q4bbb = q234bb - q2bbb % todas as qs = [ q1a q1a q1a q1a q1b q1b q1b q1b - q3aaa ; q3aab ; q3aba ; q3abb ; q3baa ; q3bab ; q3bba ; q3bbb ; oito soluções possíveis ( uma solução por linha ) q2aaa q3aaa q4aaa q5aa q6aa ; q2aab q3aab q4aab q5aa q6aa ; q2aba q3aba q4aba q5ab q6ab ; q2abb q3abb q4abb q5ab q6ab ; q2baa q3baa q4baa q5ba q6ba ; q2bab q3bab q4bab q5ba q6ba ; q2bba q3bba q4bba q5bb q6bb ; q2bbb q3bbb q4bbb q5bb q6bb ]; Cinemática Inversa do Robô PUMA 560 O intervalo variação admissível para cada junta do robô PUMA 560 é: −170◦ < θ1 < +170◦ −225◦ < θ2 < +45◦ −250◦ < θ3 < +75◦ ◦ < θ4 < +135◦ −100◦ < θ5 < +100◦ −135 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 120 Introdução à Robótica — Universidade Tecnológica Federal do Paraná −180◦ +180◦ . < θ6 < Note que, para as variáveis de junta θ1 , θ4 , θ5 e θ6 , as funções trigonométricas inversas, em conjunto com a busca de uma segunda solução quando convier, são suficientes para determinar todos as soluções de forma direta no intervalo de variação [−180◦ , +180◦ ] que cobre uma volta completa. Já para as variáveis θ2 e θ3 , procurar apenas uma solução cobrindo uma volta completa não é o suficiente. É necessário reconsiderar o valor calculado procurando uma determinação do ângulo que caia dentro do intervalo válido porque o controlador espera valores menores que −180◦ . Assim se, por exemplo, a função atan2 for usada para calcular θ2 , será necessário subtrair 360◦ do valor calculado se este valor estiver no intervalo que vai de +135◦ até +180◦ . e que descreve a posição e orientação do “punho” do robô (sistema de coordenaA transformação homogênea 06 T das {6}) é conhecida, isso é, sabe-se o valor numérico de cada elemento desta matriz denotado aqui simbolicamente por: r 11 r21 0e 6T = r31 0 r12 r13 r22 r23 r32 r33 0 0 px py . pz 1 e= Trabalhando no “plano do robô” a transformação homogênea 16 T 0 1T (θ1 ) −1 0e 6T é dada por: r11 c1 +r21 s1 r12 c1 +r22 s1 r13 c1 +r23 s1 px c1 +py s1 r21 c1 −r11 s1 1e 6T = r31 0 r22 c1 −r12 s1 r23 c1 −r13 s1 r32 r33 0 0 py c1 −px s1 pz 1 deve ser igual à transformação homogênea 16 T =12 T 23 T 34 T 45 T 56 T que vale: c4 c5 c6 c23 − c6 s5 s23 − s4 s6 c23 − c4 s6 − c5 c6 s4 1 6T = s4 s6 s23 − c6 s5 c23 − c4 c5 c6 s23 0 s5 s6 s23 − c6 s4 c23 − c4 c5 s6 c23 − c5 s23 − c4 s5 c23 a2 c2 +a3 c23 −d4 s23 c5 s4 s6 − c4 c6 s4 s5 d3 c6 s4 s23 + s5 s6 c23 + c4 c5 s6 s23 c4 s5 s23 − c5 c23 −a2 s2 −a3 s23 −d4 c23 0 0 1 . Igualando os elementos (2, 4) das matrizes acima, tem-se: py c1 −px s1 = d3 . (2.17) Esta equação foi estudada na Seção 2.5.2. Se na equação (2.5) a for substituindo por py , b por px , c por d3 e ϕ por θ1 , a equação (2.5) se transforma na equação (2.17) e a solução da equação (2.17) acima será a equação (2.7) com as substituições indicadas. Assim: q −px ± px 2 + py 2 − d3 2 . θ1 = 2 arctan py + d3 Note que há duas soluções diferentes para θ1 : θ1 = 2 arctan −px + q px 2 + py 2 − d3 2 py + d3 q −px − px 2 + py 2 − d3 2 . θ10 = 2 arctan py + d3 traz). As duas soluções para θ1 fazem com que o robô fique de frente ou de costas para a meta (colocando o braço para 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 121 Introdução à Robótica — Universidade Tecnológica Federal do Paraná p O uso da equação (2.7) impõe a restrição de que px 2 + py 2 ≥ d3 , ou seja, existe um cilindro vertical (com eixo alinhado com Ẑ0 ) de raio d3 cujo interior não pode ser atingido pelo punho do manipulador. Isso não significa que a ferramenta não possa atingir o interior deste cilindro já que normalmente ela está mais além do punho; lembre-se que px e py são as coordenadas do punho, não da ferramenta. Apesar desta restrição ser pouco importante para o alcance do manipulador, é necessário verificar se px 2 + py 2 ≥ d3 2 antes de tentar calcular a raiz. Também é necessário verificar se py 6= −d3 para evitar uma divisão por zero. Caso de que py = −d3 , θ1 vale ±180◦ o que está fora do intervalo de variação admissível para a junta 1 e, portanto, fora do alcance do robô. Conhecendo-se o valor de θ1 é possível determinar o valor de θ3 igualando os elementos (1, 4) e (3, 4) das e que, junto com a equação (2.17), levam ao sistema de equações: matrizes 16 T e 16 T a2 c2 +a3 c23 −d4 s23 = px c1 +py s1 d3 = py c1 −px s1 −a s −a s −d c = p . 2 2 3 23 4 23 z A equação (2.17) foi incluída para eliminar θ1 da solução de θ3 porque a estratégia para se resolver um sistema de equações como o apresentado acima inclui elevar cada equação ao quadrado e somá-las. É fácil observar que, se o lado direito das equações forem elevados ao quadrado e somados, θ1 será eliminado. Lembrando que: c23 = c2 c3 − s2 s3 s23 = s2 c3 + s3 c2 tem-se: a2 c2 +a3 (c2 c3 − s2 s3 ) − d4 (c2 s3 + c3 s2 ) = px c1 +py s1 d3 = py c1 −px s1 −a s −a (c s + c s ) + d (s s − c c ) = p . 2 2 3 2 3 3 2 4 2 3 2 3 z (2.18) Elevando ao quadrado as três equações acima e somando, tem-se: a2 2 c2 2 + 2 a2 a3 c2 2 c3 −2 a2 d4 c2 2 s3 −2 a2 d4 c2 c3 s2 −2 a2 a3 c2 s2 s3 +a3 2 c2 2 c3 2 + +d4 2 c2 2 s3 2 + d4 2 c3 2 s2 2 + a3 2 s2 2 s3 2 − 2 a3 d4 c2 c3 2 s2 −2 a3 d4 c2 2 c3 s3 + +2 a3 d4 c2 s2 s3 2 + 2 a3 d4 c3 s2 2 s3 −2 a3 2 c2 c3 s2 s3 +2d4 2 c2 c3 s2 s3 + +d3 2 + a2 2 s2 2 + 2 a2 a3 c3 s2 2 − 2 a2 d4 s2 2 s3 +2 a2 d4 c2 c3 s2 +2 a2 a3 c2 s2 s3 + +d4 2 c2 2 c3 2 + a3 2 c2 2 s3 2 + a3 2 c3 2 s2 2 + d4 2 s2 2 s3 2 + 2 a3 d4 c2 c3 2 s2 +2 a3 d4 c2 2 c3 s3 − −2 a3 d4 c2 s2 s3 2 − 2 a3 d4 c3 s2 2 s3 +2 a23 c2 c3 s2 s3 −2d4 2 c2 c3 s2 s3 = = 2 px py c1 s1 +px 2 c1 2 + py 2 s1 2 + py 2 c1 2 − 2 px py c1 s1 +px 2 s1 2 + pz 2 que, eliminado-se os termos opostos, traz: d3 2 + a2 2 c2 2 + a2 2 s2 2 + 2 a2 a3 c2 2 c3 +2 a2 a3 c3 s2 2 − 2 a2 d4 c2 2 s3 − −2 a2 d4 s2 2 s3 +a3 2 c2 2 c3 2 + d4 2 c2 2 c3 2 + a3 2 c2 2 s3 2 + a3 2 c3 2 s2 2 + +d4 2 c2 2 s3 2 + d4 2 c3 2 s2 2 + a3 2 s2 2 s3 2 + d4 2 s2 2 s3 2 = pz 2 + px 2 c1 2 + py 2 c1 2 + px 2 s1 2 + py 2 s1 2 que, fatorando os senos e cossenos ao quadrado nos termos semelhantes e simplificando, vem: a2 2 + a3 2 + d3 2 + d4 2 + 2 a2 a3 c3 −2 a2 d4 s3 = px 2 + py 2 + pz 2 . Rearranjando os termos obtém-se: a cos ϕ − b sen ϕ = c a3 c3 −d4 s3 = k onde k é dado por: k= 11 de agosto de 2020 px 2 + py 2 + pz 2 − a2 2 − a3 2 − d3 2 − d4 2 . 2 a2 Prof. Luís Paulo Laus, Dr. Eng. 122 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Note que a equação a ser solucionada para determinar θ3 é muito similar a do θ1 e, portanto, tem a mesma solução que a equação (2.5). Neste caso, vale mais a pena usar a equação (2.6) (ao invés da equação (2.7) que foi usada para calcular θ1 ) porque a função atan2 é constante e apenas será necessário calcular um arco-cosseno. Substituindo a por a3 , b por d4 , c por k e ϕ por θ3 na equação (2.6) tem-se: k θ3 = − atan2 (d4 , a3 ) ± arccos p 2 a3 + d4 2 que, de mesma forma que a solução do θ1 , fornece dois resultados: k θ3 = − atan2 (d4 , a3 ) + arccos p a3 2 + d4 2 k θ30 = − atan2 (d4 , a3 ) − arccos p . a3 2 + d4 2 (2.19) As duas soluções21 para θ3 que fazem com que o cotovelo do robô fique para cima ou para baixo, dependo se o robô está de frente ou de costas para a meta (θ1 ). Mais exatamente, se robô estiver de frete para a meta, θ3 deixará o cotovelo para baixo e θ30 com o cotovelo para cima. Se, por outro lado, o robô estiver de costas para a meta, θ2 será tal que braço vire para trás apontando para a meta e θ3 deixará o cotovelo para cima e, reciprocamente, θ30 com o cotovelo para baixo. O primeiro termo da equação (2.19) é constante. Sabendo o valor numérico de a3 e d4 (20, 32 mm e 431, 8 mm, respectivamente), determina-se atan2 (d4 , a3 ) ∼ = 83, 31◦ . O o intervalo de variação para θ3 é de −83, 31◦ até +92, 69◦ e 0 ◦ ◦ para θ3 de −267, 31 até −83, 31 . A união dos dois intervalos cobre todo o intervalo de variação da junta 3 sem que haja a necessidade de procurar uma determinação de θ3 diferente da calculada pela equação (2.19). Só é necessário verificar se θ3 e θ30 calculados pela equação (2.19) estão dentro de intervalo de variação da junta. Caso contrário o valor é desprezado. Os limites impostos ao argumento do arco-cosseno restringem os valores possíveis para px , py e pz entre duas 2 p p esferas concêntricas cujos raios ao quadrado valem a2 2 + a3 2 + d3 2 + d4 2 − 2 a2 a3 2 + d4 2 = a2 − a3 2 + d4 2 + d3 2 2 p p e a2 2 + a3 2 + d3 2 + d4 2 + 2 a2 a3 2 + d4 2 = a2 + a3 2 + d4 2 + d3 2 . Quando θ3 = − atan2(d4 , a3 ) ∼ = −83, 31◦ , obtém-se o máximo alcance do manipulador a partir da origem, pois este valor de θ3 alinha os segmentos dois e três. Este valor pode ser determinado substituindo o maior alcance possível que ocorre quando px 2 + py 2 + pz 2 = p a2 2 + a3 2 + d3 2 + d4 2 + 2 a2 a3 2 + d4 2 na equação (2.19) e simplificando ou observando a geometria do robô. Note, ainda, que o teste que determina se é ou não possível calcular θ3 (se a meta almejada está ou não ao alcance do robô) não depende de θ1 e, portanto, pode ser realizado antes de se calcular θ1 . Isso é importante porque permite verificar se a posição desejada pode ser atingida. Caso não seja possível atingir a meta desejada não é necessário gastar tempo para calcular os ângulos. Conhecendo-se θ1 e θ3 é possível calcular θ2 de duas formas diferentes: a primeira é isolando o seno e o cosseno de θ2 no sistema de equações (2.18); a segunda, usa as transformações homogêneas já conhecidas uma vez que são funções de θ1 e θ3 , ambos já calculados. Assim, isolando o seno e o cosseno de θ2 no sistema de equações (2.18), tem-se: (d4 c3 +a3 s3 ) (px c1 +py s1 ) + (a3 c3 −d4 s3 +a2 ) pz 2 a2 (a3 c3 −d4 s3 ) + a2 2 + a3 2 + d4 2 (a3 c3 −d4 s3 +a2 ) (px c1 +py s1 ) − (d4 c3 +a3 s3 ) pz c2 = 2 a2 (a3 c3 −d4 s3 ) + a2 2 + a3 2 + d4 2 s2 = − que, como os denominadores são iguais e sempre positivos, levam há: θ2 = atan2 (− (c3 d4 + a3 s3 ) (px c1 +py s1 ) + (a3 c3 −d4 s3 +a2 ) pz , (a3 c3 −d4 s3 +a2 ) (px c1 +py s1 ) − (d4 c3 +a3 s3 ) pz ) . 21 Na prática, calculamos k1 = a2 2 + a3 2 + d3 2 + d4 2 1 k2 = 2 a2 p a3 2 + d4 2 k3 = − atan2 (d4 , a3 ) θ3 = k3 ± arccos k2 px 2 + py 2 + pz 2 − k1 onde k1 , k2 e k3 são calculados uma única vez no início do programa. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 123 Introdução à Robótica — Universidade Tecnológica Federal do Paraná De outra forma, levando-se em conta que as transformações homogêneas 01 T e 23 T são conhecidas. Ou seja: 0 1 2 1 T 2 T (θ2 ) 3 T −1 0e 6T =06 T =01 T 12 T (θ2 ) 23 T 34 T (θ4 ) 45 T (θ5 ) 56 T (θ6 ) 0e 6T =34 T (θ4 ) 45 T (θ5 ) 56 T (θ6 ) 3e 6T =36 T Assim, pode-se calcular θ2 se os elementos (1, 4) e (2, 4) das matrizes: c23 (r12 c1 +r22 s1 ) − r32 s23 c23 (r13 c1 +r23 s1 ) − r33 s23 c23 (px c1 +py s1 ) − a2 c3 −pz s23 −r32 c23 − s23 (r12 c1 +r22 s1 ) −r33 c23 − s23 (r13 c1 +r23 s1 ) a2 s3 −pz c23 − s23 (px c1 +py s1 ) r22 c1 −r12 s1 r23 c1 −r13 s1 py c1 −d3 − px s1 0 0 1 c23 (r11 c1 +r21 s1 ) − r31 s23 −r c − s (r c +r s ) 31 23 23 11 1 21 1 e= r21 c1 −r11 s1 3 6T 0 e c5 c4 c6 − s4 s6 s5 c6 3 T = 6 − c4 s6 − c5 s4 c6 0 − s4 c6 − c5 c4 s6 − c4 s5 − s5 s6 c5 c5 s4 s6 − c4 c6 s4 s5 0 0 a3 d4 0 1 forem igualando, assim tem-se o sistema de equações: a = c (p c +p s ) − a c −p s 3 23 x 1 y 1 2 3 z 23 d = a s −p c − s (p c +p s ) . 4 2 3 z 23 23 x 1 y 1 Que é um sistema de equações lineares para c23 e s23 . Resolvendo para c23 e s23 leva à: (a2 c3 +a3 ) (c1 px + s1 py ) + (a2 s3 −d4 )pz pz 2 + (c1 px + s1 py )2 (a2 s3 −d4 ) (c1 px + s1 py ) − (a2 c3 +a3 )pz = pz 2 + (c1 px + s1 py )2 c23 = s23 Note que os denominadores das expressões acima são iguais e sempre positivos a menos que à meta desejada implique em posicionar o punho no plano xy do sistema de coordenadas {0} e de talpforma que c1 px + s1 py = 0 (isso é, pz = 0 e θ1 = − arctan (px /py )). Contudo, para que isso ocorra deve-se ter d3 = px 2 + py 2 o que implica em posicionar o punho sobre uma superfície cilíndrica de raio igual a d3 e eixo coincidente com Ẑ0 ; o mesmo cilindro que restringia os valores possíveis para θ1 . Tomando-se os devidos cuidados para evitar a anulação do denominador, pode-se calcular θ23 = θ2 + θ3 por: θ23 = atan2 ((a2 s3 −d4 ) (c1 px + s1 py ) − (a2 c3 +a3 )pz , (a2 c3 +a3 ) (c1 px + s1 py ) + (a2 s3 −d4 )pz ) e θ2 : θ2 = θ23 − θ3 . Esta forma de se calcular θ2 tem duas vantagens bem evidentes sobre a primeira: 1) ela é um pouco mais simples e =3 T , que é usada no cálculo das outras variáveis (custo computacional menor); e 2) fornece uma equação matricial, 36 T 6 de junta. Nos dois casos é necessário calcular qual a determinação de θ2 que recai no intervalo de variação da junta 2. e e 3 T acima obtendo Lembrando que θ1 , θ2 e θ3 são conhecidos, pode-se igualar o elemento (2, 3) das matrizes 36 T 6 a equação: c5 = −r33 c23 − s23 (r13 c1 +r23 s1 ) que leva a dois resultados para θ5 : θ5 = arccos (−r33 c23 − s23 (r13 c1 +r23 s1 )) θ50 = −θ5 . Os dois resultados se devem a um fenômeno chamado espelhamento do punho, muito comum em punhos esféricos. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 124 Introdução à Robótica — Universidade Tecnológica Federal do Paraná e e 3 T forem igualados obtém-se o sistema de equações: Se os elementos (1, 3) e (3, 3) da matriz das matrizes 36 T 6 − c s = c (r c +r s ) − r s 4 5 23 13 1 23 1 33 23 s s = r c −r s 4 5 23 1 13 1 que, no caso geral em que s5 6= 0, determinam uma única solução para θ4 que depende do sinal de θ5 (se for usado θ5 positivo ou θ50 que é negativo), assim: θ4 = atan2 (r23 c1 −r13 s1 , r33 s23 − c23 (r13 c1 +r23 s1 )) para θ5 θ − 180◦ se θ > 0 4 4 θ40 = para θ50 . θ + 180◦ se θ ≤ 0 4 4 Da mesma forma, igualando os elementos (2, 1) e (2, 2), tem-se: c s = −r c − s (r c +r s ) 6 5 31 23 23 11 1 21 1 − s s = −r c − s (r c +r s ) 5 6 32 23 23 12 1 22 1 que, no caso geral em que s5 6= 0, também determinam uma única solução para θ6 que depende do sinal de θ5 da mesma forma que a solução obtida para θ4 : θ6 θ60 = atan2 (r32 c23 + s23 (r12 c1 +r22 s1 ) , −r31 c23 − s23 (r11 c1 +r21 s1 )) para θ5 θ − 180◦ se θ > 0 6 6 = para θ50 . θ + 180◦ se θ ≤ 0 6 6 Para o caso especial em que s5 = 0 os elementos (1, 4), (3, 4), (2, 1) e (2, 2) da matriz 36 T se anulam o que impede o seu uso no cálculo de θ4 e θ6 . Contudo, s5 = 0 apenas para θ5 = 0 ou ±180◦ já que a função arco-cosseno foi usada no cálculo de θ5 . Como ±180◦ está fora do intervalo válido para θ5 que vai de −100◦ até +100◦ , pode-se considerar apenas o caso onde θ5 = 0 e, portanto, s5 = 0, c5 = 1 que faz com que a matriz 36 T se torna: c4 c6 − s4 s6 − s4 c6 − c4 s6 0 a3 c (θ4 + θ6 ) − s (θ4 + θ6 ) 0 a3 0 0 1 d 0 0 1 d 4 4 3 . T = = 6 θ5 =0◦ − c4 s6 − s4 c6 s4 s6 − c4 c6 0 0 − s (θ4 + θ6 ) − c (θ4 + θ6 ) 0 0 0 0 0 1 0 0 0 1 Onde aparece o seno ou cosseno da soma de θ4 e θ6 . Em outras palavras, é impossível calcular o valor independente de θ4 e θ6 , mas é possível determinar o valor da soma destes ângulos. Isso porque, quando s5 = 0, os eixos 4 e 6 se e e 3T alinham tornando-se redundantes. Assim, igualando os elementos (3, 1) e (3, 2) das matrizes 36 T tem-se: 6 s =0 5 se θ5 = 0 ⇒ θ4 + θ6 = atan2 (r11 s1 −r21 c1 , r12 s1 −r22 c1 ) . Procedendo desta forma, um dos ângulos deve ter o seu valor arbitrado, geralmente com o valor anterior, e o outro ângulo é calculado por uma das equações acima. Normalmente, arbitra-se o valor para θ4 , que tem uma variação menor (de −135◦ à +135◦ ) a calcula-se o valor de θ6 que, por possuir uma variação maior (de −180◦ até +180◦ ) sempre recai em uma solução passível de ser atingida pelo manipulador. Se o valor de θ6 fosse arbitrado poderia incorrer em uma solução de θ4 impossível de ser atingida (fora dos limites da junta). As oito soluções podem ser encontradas seguindo a ordem de cálculo representada pelo diagrama da Figura 2.21. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 125 11 de agosto de 2020 / θ4 (θ1 , θ23 , r13 , r23 , r33 ) / θ6 (θ1 , θ23 , r11 , r21 , r31 , r12 , r22 , r32 ) + θ50 = −θ5 / θ40 = θ4 ± 180◦ / θ60 = θ6 ± 180◦ 5 θ500 (θ10 , θ23 , r13 , r23 , r33 ) / θ400 (θ10 , θ23 , r13 , r23 , r33 ) / θ600 (θ10 , θ23 , r11 , r21 , r31 , r12 , r22 , r32 ) + θ5000 = −θ500 / θ4000 = θ400 ± 180◦ / θ6000 = θ600 ± 180◦ 0 5 θ50000 (θ1 , θ23 , r13 , r23 , r33 ) 0 / θ40000 (θ1 , θ23 , r13 , r23 , r33 ) 0 / θ60000 (θ1 , θ23 , r11 , r21 , r31 , r12 , r22 , r32 ) + θ500000 = −θ50000 / θ400000 = θ40000 ± 180◦ / θ600000 = θ60000 ± 180◦ A θ1 (px , py ) / θ2 (θ1 , θ3 , px , py , pz ) θ3 (px , py , pz ) D Prof. Luís Paulo Laus, Dr. Eng. θ10 (px , py ) / θ20 (θ10 , θ3 , px , py , pz ) Solução ; θ1 / θ200 (θ1 , θ30 , px , py , pz ) θ30 (px , py , pz ) # θ10 0 0 0 5 θ5000000 (θ10 , θ23 , r13 , r23 , r33 ) / θ4000000 (θ10 , θ23 , r13 , r23 , r33 ) / θ6000000 (θ10 , θ23 , r11 , r21 , r31 , r12 , r22 , r32 ) / θ2000 (θ10 , θ30 , px , py , pz ) + θ50000000 = −θ5000000 / θ4000000 = θ400000 ± 180◦ Figura 2.21.: Ordem de cálculo para as oitos soluções do robô PUMA 560 / θ6000000 = θ600000 ± 180◦ Introdução à Robótica — Universidade Tecnológica Federal do Paraná 5 θ5 (θ1 , θ23 , r13 , r23 , r33 ) 126 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Note que a ordem do cálculo de θ1 e de θ3 não importa e só há dois valores (θ1 e θ10 ; θ3 e θ30 ) para cada ângulo já que θ3 não é função de θ1 nem tão pouco θ1 é função de θ3 . Contudo, há quatro soluções diferentes para θ2 já que ele depende dos valores de θ1 e θ3 . Quando o duplo sinal de θ5 é levado em conta, obtém-se um total de oito soluções. Cinemática Inversa do Robô SCARA Comparando as equações (2.4) e (2.8) é fácil perceber que a solução da cinemática inversa para o robô SCARA é muito semelhante à do robô com três eixos paralelos. A diferença mais significativa está no elemento (3, 4) que dá a posição segundo o eixo dos zz do punho: zero para o robô com três eixos paralelos e d3 para o SCARA. A segunda diferença é a troca de θ3 por θ4 . Assim, comparando as equações (2.4) e (2.8) com: r11 r12 r13 px cϕ −sϕ 0 x r r r p s ϕ c ϕ 0 y 21 22 23 y 0e . 4T = = r31 r32 r33 pz 0 0 1 z 0 0 0 1 0 0 0 1 Tem-se que: px = a1 c1 +a2 c12 py = a1 s1 +a2 s12 pz = d3 ϕ = θ1 + θ2 + θ4 que fornece a solução: θ2 = arccos px 2 + py 2 − a1 2 − a2 2 2 a1 a2 θ20 = −θ2 θ1 = atan2 (y, x) − atan2 (a2 s2 , a1 + a2 c2 ) θ4 = ϕ + θ1 + θ2 d3 = pz As duas soluções podem ser encontradas seguindo a ordem de cálculo abaixo: Sulução % & θ2 → θ1 → θ4 , d 3 θ20 → θ1 → θ4 , d3 Note que a linguagem de programação do SCARA deve prover um meio de se especificar: 1) a posição [px , py , pz ] que deve ser atingida pela ferramenta (ou pelo punho); e 2) o ângulo ϕ que a ferramenta deve fazer (ângulo de alinhamento) com o eixo dos xx da base X̂0 medido em torno do eixo dos zz da base Ẑ0 . 2.5.5. Cálculo da Cinemática Inversa Auxiliado por Computador Infelizmente a geração atual de Software para Processamento Simbólico não é capaz de resolver as equações de cinemática inversa de forma totalmente automática. Contudo, é possível resolver o problema usando o software como ferramenta de auxílio trabalhando iterativamente. Para equações simples, como no caso do cálculo de θ1 do PUMA 560, é mais fácil usar o software apenas para inverter e multiplicar as matrizes. Descobrir quais os elementos das matrizes que podem ser igualados a fim de criar as equações para, então, resolvê-las são tarefas que podem ser desempenhas usando o software, mais é mais fácil e rápido fazer isso manualmente. Para equações complicadas, como no caso do cálculo de θ3 do PUMA 560 onde foi necessário elevar expressões grandes ao quadrado e simplificar o resultado, o uso de Software para Processamento Simbólico pode ter um desempenho muito superior ao que é humanamente possível além de diminuir a possibilidade de ocorrência de erro (se for bem usado). Assim, o uso de Software para Processamento Simbólico tem seus pontos fortes: 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 127 Introdução à Robótica — Universidade Tecnológica Federal do Paraná 1. no calculo da cinemática direta usada com base para a cinemática inversa; 2. na multiplicação e inversão de matrizes, particularmente interessante quando se trabalha no plano do robô; 3. porque garante um nível maior de correção do resultado obtido (o software não erra, mas o operador pode induzir um erro); e 4. quando se trabalha com sistemas de equações e a solução é encontrada elevando estas equações ao quadrado e somando-as para eliminar senos e cossenos de um mesmo ângulo. O último ponto levanta uma hipótese interessante: já que o software manipula expressões complexas com facilidade, pode-se tentar resolver um ângulo por tentativa e erro, igualando a última coluna das matrizes, elevando as equações ao quadrado, somando e simplificando o resultado a fim de eliminar algumas variáveis de junta deixando apenas uma. Note que, geralmente, este método leva a soluções múltiplas para um ângulo e há a necessidade de verificar se realmente a junta calculada admite mais de uma solução. Por outro lado, os Software para Processamento Simbólico se mostram impotentes e difíceis de usar para: 1. determinar qual(is) variável(is) de junta pode ser calculada com equações matriciais disponíveis; 2. determinar a ordem de cálculo das variáveis de junta; 3. trabalhar com a possibilidade de soluções múltiplas (é possível concluir erradamente que uma variável possui soluções múltiplas quando de fato ela possui apenas uma única solução); 4. determinar qual(is) das doze equações escalares obtidas de uma equação matricial devem ser usadas para resolver uma variável de junta específica; 5. determinar qual equação matricial deve ser usada para calcular alguma variável de junta. Assim o procedimento de resolução da cinemática inversa com auxílio de software é um procedimento manual onde apenas parte do procedimento pode ser automatizado. Logo o conhecimento de técnicas de solução continua sendo imprescindível além de ser necessário dominar os comandos de manipulação de matrizes e equações que cada software dispõe. Neste texto é usado o MuPAD nos exemplo porque há a possibilidade de se obter o software gratuitamente22 . A sintaxe do MuPAD é baseada na linguagem Pascal e muito similar à linguagem C. Quando existe a necessidade de se descrever uma ação ou objeto que não tem similar no Pascal o MuPAD usa a sintaxe emprestada de outras linguagens como ADA. Abaixo são apresentados alguns elementos do MuPAD: PI, E, I são as constantes π, e e j, respectivamente; x, y, Var, a1 são variáveis do usuário e seus nomes (identificadores) seguem as mesmas regras da linguagem C; x[5] é o quinto elemento da lista x, diferente da linguagem C as listas (vetores) inicial na posição 1; := é o operador de atribuição (igual ao Pascal); = é o operador de comparação (igualdade) usado para criar equações; <>, <, >, <=, >= são os operadores de comparação (desigualdades); +, -, *, /, ^, ! são os operadores de soma, subtração, multiplicação, divisão, e exponencial e fatorial; :e; são os separadores de comando; , é o separador de elementos das listas, conjuntos e sequências; sin(), cos() são as funções seno e cosseno; [1, 2, 3] é uma lista contendo os números 1, 2, 3, nas listas a ordem em que os elementos aparecem é importante; {1, 2, 3} é um conjunto contendo os números 1, 2, 3, nos conjuntos a ordem em que os elementos aparecem não é importante; 2..5 é o intervalo [2, 5]; 22 Universidades e centros de pesquisa podem se candidatar a uma licença gratuita. Estudantes podem obter gratuitamente uma versão de demonstração. Atualmente esta versão de demonstração vai muito além do necessário para o estudo da Robótica. Consulte o site www.mupad.com. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 128 Introdução à Robótica — Universidade Tecnológica Federal do Paraná ?simplify fornece uma descrição detalhada da função simplify (help); simplify() é uma função que simplifica a expressão fornecida como argumento; expand() expande a expressão fornecida como argumento (pode ser entendida com operação contrária a realizada pela função simplify); lhs() retorna o lado esquerdo da equação fornecida como argumento; rhs() retorna o lado direito da equação fornecida como argumento; %, %2, %3 são o último, o penúltimo e o antepenúltimo resultado obtido, respectivamente; Type::Real, Type::PosInt são os tipos (conjuntos) dos números reais e inteiros positivos, respectivamente; assume(), unassume() atribui uma propriedade a um identificador e desatribui qualquer propriedade anteriormente atribuída a um identificador; matrix() cria uma matriz, devem ser fornecidos as dimensões m e n (número de linhas e número de colunas) e uma lista de listas (cada uma contendo uma linha da matriz) com o mesmo número de elementos; delete() apaga um identificador liberando a memória. O MuPAD é muito útil para simplificar expressões trigonométricas como, por exemplo, o sistema de equações (2.9) que surgiu na Seção 2.5.3: x = a c +a c 1 1 2 12 y = a s +a s . 1 1 2 12 A solução deste sistema de equações envolve elevar as duas equações ao quadrado e somá-las para eliminar θ1 . Na linguagem do MuPAD, pode-se escrever: eq1 : = x = a1 * cos ( q1 ) + a2 * cos ( q1 + q2 ); eq2 : = y = a1 * sin ( q1 ) + a2 * sin ( q1 + q2 ); eq1 ^2 + eq2 ^2; expand (%); simplify (%); onde foi usado q1 no lugar de θ1 e q2 no lugar de θ2 . Estas cinco linhas de comando fornecem com resposta final: x2 + y 2 = a12 + 2 cos (q2) a1 a2 + a22 . As duas primeiras linhas do código definem as duas equações do sistema armazenando-as em duas variáveis (containers): eq1 e eq2. A terceira eleva as duas equações ao quadrado e soma-as. A quarta linha expande a expressão resultante e a quinta simplifica. Note que é possível obter um resultado mais agradável se forem usados índices para representar as constantes a1 e a2 bem como as variáveis q1 e q2. Assim, se as duas primeiras linhas forem substituídas por eq1 : = x = a [1]* cos ( q [1]) + a [2]* cos ( q [1]+ q [2]); eq2 : = y = a [1]* sin ( q [1]) + a [2]* sin ( q [1]+ q [2]); o resultado final será: x2 + y 2 = a1 2 + 2 cos (q2 ) a1 a2 + a2 2 que, sem dúvida, é muito mais legível que a expressão original. Basta, então, isolar o c2 , coisa que também, pode ser feito com auxílio do MuPAD com o comando: linsolve({%},[cos(q[2])])[1]. Versões mais antigas no MuPAD não são capazes de elevar uma equação inteira ao quadrado. Neste caso, é necessário separar em lado direito e esquerdo e elevar cada lado ao quadrado individualmente para depois somar os resultados e montar a equação. No exemplo acima, isso pode ser feito substituindo a terceira linha por: lhs(eq1)^2 + lhs(eq2)^2 =rhs(eq1)^2 + rhs(eq2)^2;. Note que o MuPAD não é capaz de achar sozinho a solução. Ele necessita ser orientado no sentido de simplificar o sistema de equações a fim de eliminar variáveis. Mesmo assim, a colaboração do software é quase que imprescindível na resolução da cinemática inversa. A seguir são apresentados os comandos necessários para calcular a cinemática inversa do Robô de 6 graus de liberdade descrito na Seção 2.4.1. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 129 Introdução à Robótica — Universidade Tecnológica Federal do Paraná // Solução da Cinemática Inversa de um robô de seis graus de // liberdade com auxílio de computador ( MuPAD 4.0 ou superior ) // Uso : carregue o arquivo com o comando read (" robot6dofci . mu ") ou // copie cada bloco ( algumas linhas ) para o MuPAD // lê algumas funções auxiliares e a matriz genérica ( gene ) read ( NOTEBOOKPATH . " robot . mb " ): // constroe a descrição do robô t01 : = dhm ( 0, 0 , q [1] ,0): t12 : = dhm ( PI /2 , 0 , q [2] ,0): t23 : = dhm ( 0 , a [2] , q [3] ,0): t34 : = dhm ( 0 , a [3] , q [4] ,0): t45 : = dhm ( PI /2 , 0 , q [5] , d [5]): t56 : = dhm ( - PI /2 , 0 , q [6] ,0): // plano do robô t16a : = invth ( t01 ) * gene ; t16b : = simplify ( t12 * t23 * t34 )* t45 * t56 ; // igualando os elementos (2 ,4) das duas matrizes t16a [2 ,4] = t16b [2 ,4]; % + p [ x ]* sin ( q [1]); % / cos ( q [1]); % / p [ x ]; subs (% , sin ( q [1])/ cos ( q [1]) = tan ( q [1])); eqq1 : = q [1] = arctan ( lhs (%)); // com q [1] conhecido pode - se determinar c [1] = cos ( q [1]) e s [1] = sin ( q [1]) sb : = { cos ( q [1]) = c [1] , sin ( q [1]) = s [1]}: // igualando os elementos (2 ,3) das duas matrizes subs ( - t16a [2 ,3] , sb ) = - t16b [2 ,3]; eqq5 : = q [5] = arccos ( lhs (%)); // com q [5] conhecido pode - se determinar c [5] = cos ( q [5]) e s [5] = sin ( q [5]) sb : = { op ( sb ) , cos ( q [5]) = c [5] , sin ( q [5]) = s [5]}: // igualando os elementos (2 ,1) e (2 ,2) das duas matrizes subs ( t16a [2 ,1] , sb ) = subs ( t16b [2 ,1] , sb ); subs ( t16a [2 ,2] , sb ) = subs ( t16b [2 ,2] , sb ); %2 / -s [5]; %2 / s [5]; eqq6 : = q [6] = atan2 ( lhs (%)* s [5] , lhs (%2)* s [5]); // com q [6] conhecido pode - se determinar c [6] = cos ( q [6]) e s [6] = sin ( q [6]) sb : = { op ( sb ) , cos ( q [6]) = c [6] , sin ( q [6]) = s [6]}: // igualando os elementos (1 ,3) e (3 ,3) das duas matrizes subs ( t16a [1 ,3] , sb ) = subs ( t16b [1 ,3] , sb ); subs ( t16a [3 ,3] , sb ) = subs ( t16b [3 ,3] , sb ); %2 / -s [5]; %2 / -s [5]; eqq234 : = q [234] = atan2 ( lhs (%)* s [5] , lhs (%2)* s [5]); // com q [234] conhecido pode - se determinar c [234] = cos ( q [234]) e s [234] = sin ( q [234]) sb : = { op ( sb ) , cos ( q [2] + q [3] + q [4]) = c [234] , sin ( q [2] + q [3] + q [4]) = s [234]}: // igualando os elementos (1 ,4) e (3 ,4) das duas matrizes subs ( t16a [1 ,4] , sb ) = subs ( t16b [1 ,4] , sb ); 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 130 Introdução à Robótica — Universidade Tecnológica Federal do Paraná subs ( t16a [3 ,4] , sb ) = subs ( t16b [3 ,4] , sb ); %2 - d [5]* s [234]; %2 + d [5]* c [234]; // elevando os dois lados ao quadrado e somando lhs (%2)^2 + lhs (%)^2 = expand ( expand ( rhs (%2))^2 + expand ( rhs (%))^2); lhs (%) = simplify ( rhs (%)); ( lhs (%) - a [2]^2 - a [3]^2) / (2* a [2]* a [3]) = ( rhs (%) - a [2]^2 - a [3]^2) / (2* a [2]* a [3]); eqq3 : = q [3] = arccos ( lhs (%)); // com q [3] conhecido pode - se determinar c [3] = cos ( q [3]) e s [3] = sin ( q [3]) sb : = { op ( sb ) , cos ( q [3]) = c [3] , sin ( q [3]) = s [3]}: // ainda dos elementos (1 ,4) e (3 ,4) das duas matrizes subs ( t16a [1 ,4] , sb ) = subs ( t16b [1 ,4] , sb ); subs ( t16a [3 ,4] , sb ) = subs ( t16b [3 ,4] , sb ); %2 - d [5]* s [234]; %2 + d [5]* c [234]; lhs (%2) = subs ( expand ( rhs (%2)) , sb ); lhs (%2) = subs ( expand ( rhs (%2)) , sb ); // isolando cos ( q [2]) e sin ( q [2]) linsolve ({%2 ,%} ,{ cos ( q [2]) , sin ( q [2])}); op (%); lhs (%[1]) = simplify ( rhs (%[1])); lhs (%2[2]) = simplify ( rhs (%2[2])); // os denominadores são iguais e sempre positivos denom ( rhs (%2)) = denom ( rhs (%)); eqq2 : = q [2] = atan2 ( collect ( simplify ( numer ( rhs (%2))) ,[ p [ z ] , a [3] , d [5]]) , collect ( simplify ( numer ( rhs (%3))) ,[ p [ z ] , a [3] , d [5]])); // com q [2] conhecido pode - se determinar c [2] = cos ( q [2]) e s [2] = sin ( q [2]) // sb : = { op ( sb ) , cos ( q [2]) = c [2] , sin ( q [2]) = s [2]}: eqq4 : = q [4] = q [234] - q [2] - q [3]; // caso especial onde s [5] = 0 e c [5] = 1 ( q [5] = 0) t16b2 : = simplify ( subs ( t16b ,{ sin ( q [5]) = 0 , cos ( q [5]) = 1})); // igualando os elementos (3 ,1) e (3 ,2) das duas matrizes ( pode ser (1 ,1) e (1 ,2)) subs ( t16a [3 ,1] , sb ) = subs ( t16b2 [3 ,1] , sb ); subs ( t16a [3 ,2] , sb ) = subs ( t16b2 [3 ,2] , sb ); eqq2346_1 : = q [2] + q [3] + q [4] + q [6] = atan2 ( lhs (%2) , lhs (%)); // caso especial onde s [5] = 0 e c [5] = -1 ( q [5] = +/ - 180) t16b2 : = simplify ( subs ( t16b ,{ sin ( q [5]) = 0 , cos ( q [5]) = -1})); // igualando os elementos (3 ,1) e (3 ,2) das duas matrizes ( pode ser (1 ,1) e (1 ,2)) subs ( t16a [3 ,1] , sb ) = subs ( t16b2 [3 ,1] , sb ); subs ( t16a [3 ,2] , sb ) = subs ( t16b2 [3 ,2] , sb ); eqq2346_2 : = q [2] + q [3] + q [4] - q [6] = atan2 ( - lhs (%2) , lhs (%)); A lista de comandos acima foi criada interativamente e salva (copiada) para um arquivo de texto. Ela pode ser executada com um único comando (usando a função read) ou em blocos calculando uma variável de cada vez (copiar e colar). Nos dois casos o resultado (que não é mostrado aqui) pode ser visualizado na tela do computador. Note, ainda, que só é calculada uma única solução para cada variável de junta (representadas pelo vetor q), ou seja, é necessário determinar as demais soluções. Também não foi feita nenhuma consideração a respeito da faixa de valores (alcançabilidade). Em outras palavras, o software ajuda a deduzir as equações, mas a inteligência humana ainda é necessária para criar o programa que use estas equações para, efetivamente, calcular as soluções da cinemática inversa. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 131 Introdução à Robótica — Universidade Tecnológica Federal do Paraná X̂2 Ẑ1 X̂3 X̂1 Ẑ3 Ẑ2 Ŷ3 Ẑ0 Ŷ0 i i−1 T i αi−1 ai−1 θi 1 0 1T 0 0 θ1 + 90◦ d1 2 1 2T +90◦ a1 θ2 + 90◦ 0 3 2 3T +90 0 0 d3 ◦ di Obs.: a1 e d1 são constante conhecidas. X̂0 Figura 2.22.: Manipulador esférico 2.5.6. Cinemática Inversa com Base em Sistemas Práticos de Orientação O cálculo da cinemática inversa através de transformações homogêneas permite que o programador (ou a linguagem de programação do robô) represente a posição e orientação desejada (meta) de várias formas diferentes e usando vários sistemas de coordenadas diferentes conforme seja conveniente. Pode-se, então, descrever a posição da ferramenta usando coordenadas retangulares com relação à base do robô e a orientação usando ângulos de Euler ou ângulos de roll, pitch e yaw. Ou então, pode-se especificar um acréscimo na posição para se aproximar da meta em relação à ferramenta e, portanto, usando o sistema de coordenadas da própria ferramenta ({T } = {T OOL}). O uso de transformações homogêneas permite que qualquer representação em qualquer sistema desejado seja mapeado para uma transformação homogênea escrita em relação ao sistema de coordenadas da base ({B} = {0}) e com esta transformação homogênea é possível calcular o valor das variáveis de junta usando a metodologia dada. É possível até trocar a ferramenta mudando a transformação homogênea N T T que descreve a posição e a orientação da ferramenta em relação ao punho (sistema de coordenadas do último segmento ou {N } onde N é o número de juntas do robô). Como a transformação N T T é constante (não depende das variáveis de junta) não é necessário refazer o cálculo da cinemática inversa. Contudo, o cálculo da cinemática inversa é difícil e trabalhoso. Os Software para Processamento Simbólico são capazes apenas de auxiliar na solução, mas não são capazes de encontrá-la automaticamente e há ainda o problema das soluções múltiplas, da perda de graus de liberdade em situações singulares e da especificação da meta desejada no caso de não se possuir os seis graus de liberdade. Além disso, criar as transformações homogêneas para só então realizar o cálculo da cinemática inversa demanda esforço computacional muitas vezes desnecessário. É o caso onde uma representação cinemática alternativa pode ser encontrada. Esta representação alternativa pode ter a orientação da ferramenta descrita com ângulos medidos em relação (e em ordem) a um sistema de coordenadas conveniente e a posição descrita com coordenadas cartesianas em relação ao mesmo sistema ou a outro sistema (geralmente o sistema da base). Em alguns casos o número de juntas do robô é menor que o número máximo de graus de liberdade (seis) o que faz com que haja varias formas de se especificar a posição e orientação da ferramenta, cada uma funcionalmente depende da outra e todas de certa forma incompletas. É o caso do manipulador esférico mostrado na Figura 2.22, como ele só possui três juntas só é possível especificar três graus de liberdade. Este limite poderia ser ainda inferior porque depende da relação entre as juntas e não apenas do número delas: caso o manipulador fosse redundante, por exemplo, com quatro juntas rotativas e eixos paralelos também só seria possível especificar três graus de liberdade. O problema está em definir quais (três) dos seis graus de liberdade que serão especificados. Este problema tem duas partes: 1) quais as possíveis combinações; e 2) qual(is) a(s) combinação(ões) de graus de liberdade que interessam ao programador e ao gerador de trajetória (que é uma parte do controlador que tem relação com a cinemática inversa). A cinemática direta do manipulador esférico mostrado na Figura 2.22 é criada com base em: − s1 c1 0 T = 1 0 0 11 de agosto de 2020 − c1 0 0 − s1 0 0 1 0 0 0 , d1 1 Prof. Luís Paulo Laus, Dr. Eng. 132 Introdução à Robótica — Universidade Tecnológica Federal do Paraná − s2 − c2 0 a1 0 0 −1 0 1 T = 2 c2 − s2 0 0 0 0 0 1 1 0 0 0 0 0 −1 −d 3 2 T = 3 0 1 0 0 0 0 0 1 e que fornece: s1 s2 − c1 s2 0 3T = c2 0 c1 − s1 c2 s1 c1 c2 0 s2 0 0 − s1 (a1 + d3 c2 ) c1 (a1 + d3 c2 ) d1 + d3 s2 1 onde a1 e d1 são constantes e θ1 , θ2 e d3 são variáveis de junta. Note que o sistema de coordenadas 3 foi localizado a uma distância d3 do sistema de coordenadas 2. Isso faz com que o sistema de coordenadas 3 coincida com o sistema de coordenadas da ferramenta {T = T OOL} e foi feito propositalmente para que a transformação 03 T descreva a posição e orientação da ferramenta sem que haja a necessidade de se escrever uma transformação 3T T . Para esse robô, a cinemática inversa depende de como a meta será especificada o que tem um impacto direto na linguagem de programação e na geração de trajetória. Observando a matriz 03 T acima, pode-se imaginar que a ordem de cálculo mais simples e trivial é: 1) calcular θ1 (solução única); 2) calcular θ2 (solução única); e 3) calcular d3 também com solução única o que leva a uma única solução para a cinemática inversa. Contudo, para calcular θ1 é necessário que o ângulo entre o eixo dos yy do sistema de coordenadas da ferramenta e o eixo dos xx ou dos yy do sistema de coordenadas da base seja especificado. Não parece que este ângulo seja especialmente útil para o programador. De fato, parece ser mais provável que o programador deste manipulador tenha interesse em especificar a posição da ferramenta e não sua orientação. Isso nos leva a discutir como é possível especificar a meta para o manipulador esférico sem que haja redundância (forma mínima) e de forma completa (sem ambiguidade). Através de uma análise cinemática da Figura 2.22 é fácil concluir que é possível especificar: h iT • três graus de liberdade de posição, ou seja, a posição da ferramenta OT = px py pz em relação ao sistema de coordenadas da base, a orientação dependerá do ponto especificado; • um grau de liberdade de orientação, por exemplo, o ângulo que o eixo dos zz da ferramenta faz com o plano xy da base, e dois graus de liberdade de posição, por exemplo, as coordenadas x e y (px e py ) da ferramenta; • dois graus de liberdade de orientação, por exemplo, o ângulo que o eixo dos zz da ferramenta faz com o plano xy da base e o ângulo que a projeção do eixo dos zz da ferramenta no plano xy faz com o eixo dos xx da base, e um grau de liberdade de posição, por exemplo, a cota (pz ) da ferramenta em relação ao sistema de coordenadas da base. Note que não é possível especificar três graus de liberdade de orientação porque não há como realizar uma terceira rotação. De outra forma, pode-se observar que a submatriz de rotação da transformação homogênea 03 T , que descreve a ferramenta em relação à base já que {T } = {3}, é função de apenas duas variáveis de junta indicando a perda de um grau de liberdade. Da mesma forma, pode-se observar que a última coluna da matriz 03 T , que descreve a posição da ferramenta em relação à base, é função de três variáveis de junta e pode-se provar que as três coordenadas são independentes (as três coordenadas da origem do sistema de coordenadas 3 escritos em relação ao sistema de coordenadas 0 são funcionalmente independentes). Para provar a independência funcional é necessário realizar uma análise funcional cujos detalhes da teoria fogem ao escopo deste livro, mas que envolvem provar que o posto do Jacobiano escrito para o vetor 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 133 Introdução à Robótica — Universidade Tecnológica Federal do Paraná de posição em relação às variáveis de junta J = ∂px ∂θ1 ∂py ∂θ1 ∂pz ∂θ1 ∂px ∂θ2 ∂py ∂θ2 ∂pz ∂θ2 ∂px ∂d3 ∂py ∂d3 ∂pz ∂d3 − c1 (a1 + d3 c2 ) = − s1 (a1 + d3 c2 ) 0 d3 s1 s2 −d3 c1 s2 d3 c2 − s1 c2 c1 c2 s2 é cheio para d3 6= 0 e θ2 6= ± arccos − ad31 . Para d3 = 0 ou θ2 = ± arccos − ad31 ocorre a perda de um grau de liberdade, ou seja, para estes casos particulares as coordenadas da ferramenta se tornam funcionalmente dependentes (o conhecimento do valor de duas coordenadas permite o cálculo da terceira para que a restrição seja mantida). Note que a primeira restrição implica em não admitir que a ferramenta atinja um ponto sobre uma circunferência de raio a1 , com centro sobre o eixo dos zz do sistema de coordenadas da base e uma distância d1 da origem e paralela ao plano xy da base e a segunda restrição implica em não admitir que a ferramenta atinja um ponto qualquer do eixo dos zz do sistema de coordenadas da base. Se para aplicação que o manipular esférico se destina for considerado que é importante especificar apenas a posição da ferramenta, então a submatriz de rotação da matriz 03 T não será usada na solução da cinemática inversa. Esta solução será calculada resolvendo o sistema de equações: px = − s1 (a1 + d3 c2 ) py = pz = d1 + d3 s2 c1 (a1 + d3 c2 ) onde px , py e pz especificam a posição da ferramenta (origem do sistema de coordenadas 3). Para obter a solução para θ1 , divide-se a primeira equação pela segunda obtendo: s1 −px s1 (a1 + d3 c2 ) = = = tan θ1 py c1 (a1 + d3 c2 ) c1 se a1 + d3 c2 6= 0 onde a restrição de que a1 + d3 c2 = 0 não ocorra é o mesmo que não permitir px = 0 e py = 0, ou seja, px e py não podem ser simultaneamente nulos o que significa que θ1 não pode ser calculado se a posição especificada estiver sobre o eixo dos zz da base. No caso em que o ponto desejado está sobre o eixo dos zz (px = 0 e py = 0), será necessário especificar a orientação da ferramenta de forma parcial (um grau de liberdade de rotação). No caso geral (px 6= 0 ou py 6= 0) há duas soluções para θ1 : θ1 = θ10 = −px arctan py θ − 180◦ 1 θ + 180◦ 1 se θ1 > 0 se θ1 ≤ 0 . Pode-se calcular o seno de θ2 por: s2 = pz − d1 d3 se d3 6= 0 onde a restrição d3 = 6 0 significa que a posição especificada não pode estar sobre uma circunferência de raio a1 , com centro sobre o eixo dos p zz do sistema de coordenadas da base e uma distância d1 da origem e paralela ao plano xy da base. Isso significa que px 2 + py 2 6= a1 , caso contrário, o valor de θ2 fica indeterminado, isso é, se for imposta apenas a posição da ferramenta, e esta posição estiver sobre a já mencionada circunferência, qualquer valor de θ2 satisfaz o problema. Pode-se, ainda, calcular o cosseno de θ2 por: −px s1 −a1 se s 6= 0 e d 6= 0 1 3 d3 py c2 = c1 −a1 se c 6= 0 e d 6= 0 . d3 1 3 que, junto com a solução para o seno de θ2 levam a uma única solução para θ2 : atan2 pz − d1 , −px − a1 se s1 = 6 0 e d3 > 0 s1 θ2 = atan2 p − d , py − a se c1 = 6 0 e d3 > 0 . z 1 c1 1 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 134 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Há uma outra solução para d3 < 0 que consiste em trocar os sinais dos argumentos, no entanto, geralmente uma junta prismática não admite ser estendida no sentido negativo (isso depende, á claro, da referência usada para medição da variável de junta). Para calcular d3 pode usar d3 = ou d3 = pz − d1 s2 −px s1 −a1 c2 py c1 −a1 c2 se s2 6= 0 se s1 6= 0 e c2 6= 0 se c1 6= 0 e c2 6= 0 . Como o seno e cosseno de um arco não podem ser simultaneamente nulos, sempre é possível calcular d3 . Pode-se, assim, propor o seguinte algoritmo para o a solução da cinemática inversa do manipulador esférico: 1. ler px , py e pz ; 2. se px = 0 e py = 0 2.1. arbitrar (ler, atribuir o valor antigo ou solicitar ao programador) um valor para θ1 ; 3. senão 3.1. se py 6= 0 x 3.1.1. calcular θ1 = arctan −p py ; 3.2. senão 3.2.1. se px > 0 3.2.1.1. θ1 = 90◦ 3.2.2. senão 3.2.2.1. θ1 = −90◦ θ − 180◦ 1 4. calcular a segunda solução para θ1 por θ10 = θ + 180◦ 1 5. se p se θ1 > 0 se θ1 ≤ 0 . ; px 2 + py 2 6= a1 (ponto não está sobre a circunferência proibida) 5.1. se |θ1 | = 6 90◦ (c1 6= 0) 5.1.1. calcular θ2 = atan2 pz − d1 , py c1 − a1 5.2. senão 5.2.1. calcular θ2 = atan2 pz − d1 , −px s1 − a1 5.3. se |θ2 | = 6 90◦ (c2 6= 0) 5.3.1. se |θ1 | = 6 90◦ (c1 6= 0) 5.3.1.1. calcular d3 = py c1 −a1 c2 5.3.2. senão 5.3.2.1. calcular d3 = −px s1 −a1 c2 5.4. senão 5.4.1. calcular d3 = pz −d1 s2 6. senão 6.1. atribuir d3 e arbitrar um valor para θ2 (na prática é pouco provável que isso venha a ocorrer porque dificilmente a garra poderá ser posicionada sobre o eixo da junta 2). O algoritmo acima não trata o caso em que d3 < 0 porque parece pouco provável que isso ocorra na prática devido a limitação mecânica do atuador. Uma solução mais geral deveria incluir esta hipótese. Note, ainda, que ele é muito mais complexo que a solução trivial onde é especificada a orientação da ferramenta. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 135 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Uma recomendação prática: quando é necessário dividir pelo seno de um ângulo normalmente se tem também a opção de dividir pelo cosseno do mesmo ângulo, como no caso do cálculo de θ2 do exemplo. Deve-se, então testar se o seno ou o cosseno é nulo a fim de evitar a divisão por zero; note que se um deles for nulo outro não será o que significa que não há a necessidade de realizar dois testes e que sempre será possível realizar o cálculo. É mais conveniente testar se o cosseno é nulo, ou melhor, se ângulo vale ±90◦ porque o ângulo já está calculado e não há a necessidade de calcular o cosseno do ângulo apenas para realizar o teste. Naturalmente se o seno ou cosseno do ângulo a ser testado já estiver disponível é mais simples usá-lo. Ainda, a precisão do cálculo nunca é muito exata, pois envolve cálculo com ponto flutuante (quando muito) ou com ponto fixo (pouco exato). Assim, se o ângulo não valer exatamente 90◦ , mas sim um valor próximo, o teste será verdadeiro (|ϕ| = 6 90◦ onde ϕ é o ângulo sendo testado) e será calculado um valor de cosseno próximo a zero o que acarretará um erro. Note que se, neste caso, fosse usado a equação com seno o erro tenderia a ser muito menor porque, se o ângulo tem um valor próximo à 90◦ , o seu seno terá um valor próximo da unidade o que causa potencialmente um erro menor em operações de divisão. Por isso, deve-se usar a equação com seno se o ângulo estiver em uma faixa próxima a ±90◦ e não apenas quando ele for exatamente igual a +90◦ ou −90◦ e esta faixa pode ser bem abrangente (digamos que 45◦ < |ϕ| < 135◦ , onde ϕ é o ângulo a ser testado se |ϕ| = 90◦ ) se a intenção é determinar se será usada uma fórmula com seno ou cosseno deste ângulo. Mitsubishi RV-M1 Um dos problemas a se enfrentar quando se tem menos do que seis eixos é que não é possível atingir uma posição e orientação arbitrária. O robô fica, então, limitado a algumas tarefas ou classe de tarefas específicas que não demandam seis graus de liberdade. Não é possível, para estes robôs, especificar uma posição e orientação arbitrárias porque o robô pode não ser capaz de atingir esta posição e orientação. Neste caso, pode-se adotar duas soluções: 1. projetar a posição e orientação pretendidas no espaço de trabalho do robô obtendo uma posição e orientação “próximas” às pretendidas, mas que o robô pode atingir; 2. buscar uma maneira de especificar a posição e orientação de forma que sempre a especificação está dentro do espaço de trabalho do robô. A primeira solução geralmente é inútil porque a posição e orientação aproximadas dificilmente servirão para resolver o problema. Além disso, o critério de proximidade depende da aplicação: para algumas aplicações, como alimentação de peças em uma máquina automática, a posição e parte da orientação podem ser fundamentais. Outras aplicações, como alimentação de injetoras onde a carga transportada é líquida, podem valorizar mais a orientação do que a posição. A segunda abordagem é bastante interessante e muito usada na prática industrial. O fato do programador simplesmente não poder especificar uma posição fora do espaço de trabalho do robô é muito atraente por causa da robustez intrínseca do processo. É claro que é possível especificar, por exemplo, posições fora do alcance do manipulador por estarem muito longe, mas não é possível estabelecer uma posição atingível com uma orientação não atingível, por exemplo. A possibilidade da posição especificada estar fora do espaço de trabalho do manipulador é um fato corriqueiro e sempre dever ser testada, mesmo nos caso onde há graus de liberdade o suficiente para atingir a posição e orientação desejadas. O que se pretende é um método que permita especificar a meta que, desde que esteja dentro do alce do robô, possa ser atingida sem que haja problemas com a falta de eixos e seu impacto sobre o número de graus de liberdade do manipulador. A solução para estes casos passa por duas etapas: 1. determinar quais as formas de especificação de posição e orientação são úteis para o programador; 2. determinar se as forma selecionadas são completas o suficiente sem serem redundantes. A tarefa a qual o robô se destina fornece um insight sobre como o programador deve especificar as metas: quais sistemas para especificar a posição e orientação são úteis ao programador. Determinar quais destes sistemas é completo sem ser redundante é uma tarefa um pouco mais complicada. O modelo cinemático traz informações importantes, mas que são de difícil tratamento. Em alguns casos especiais, a ferramenta não é apenas um acessório intercambiável do robô; ela é parte do manipulador. Se a configuração cinemática do robô for simples, pode ser interessante desenvolver uma cinemática inversa particularizada para uma ferramenta ou para ferramentas muito similares (com, por exemplo, diferenças no comprimento). Foi justamente este tipo de solução que a Mitsubishi adotou para o robô RV-M1: a orientação da ferramenta em relação ao último segmento é sempre fixa com também são fixas duas das coordenadas da origem da ferramenta. Apenas é possível configurar a distância que a origem da ferramenta está do punho sobre o eixo dos zz do punho. Há um comando da linguagem de programação para configurar esta distância. Assim, tomando como exemplo o robô RV-M1 da Mitsubishi, observe que o sistema de coordenadas da base 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 136 Introdução à Robótica — Universidade Tecnológica Federal do Paraná do robô, visto na Figura 2.9, é bastante intuitivo o que permite que ele seja usado pelo programador para descrever posições e orientações da ferramenta. Se o sistema de coordenadas da ferramenta ({T } = {6}) for fixado a distância −d6 da origem do sistema de coordenadas {5} (do punho) sobre o eixo Ẑ5 e a orientação com os versores paralelos aos eixos da base (sistema de coordenadas {0}), a transformação homogênea que descreve a ferramenta em relação ao sistema de coordenadas do punho ({5}) é 0 0 −1 0 1 0 0 0 5 ◦ ◦ . T = Transl (0, 0, −d ) RotZ (+90 ) RotX (−90 ) = 6 T 0 −1 0 −d6 0 0 0 1 A transformação homogênea que descreve a ferramenta em relação à base do robô é: 0 TT = = 0 5 T 5T T c1 c5 − s1 s5 s234 − c5 s1 − c1 s5 s234 s5 c234 0 s1 c234 − c1 s5 − c5 s1 s234 c1 c234 s1 s5 − c1 c5 s234 s234 c5 c234 0 0 s1 (a2 c2 +a3 c23 +d6 c234 ) c1 (a2 c2 +a3 c23 +d6 c234 ) d1 + a2 s2 +a3 s23 +d6 s234 1 onde 05 T é dada pela equação (2.2). Observe que a submatriz de rotação desta equação é morfologicamente similar a rotação usando ângulo de Euler ZXY (ver Apêndice D para todas as possibilidades): cα cγ − sα sβ sγ −sα cβ cα sγ + sα cγ sβ 0 sα cγ + cα sβ sγ cα cβ sα sγ − cα cγ sβ 0 RotZXY (α , β , γ) = −sγ cβ sβ cγ cβ 0 0 0 0 1 Estas submatrizes não são iguais, mas pode ser tornadas iguais se forem escolhidos ângulos de referência convenientes. Assim, se α = −θ1 β = θ234 γ = −θ5 a submatriz de rotação da matriz usando ângulo de Euler ZXY se torna igual à submatriz de rotação da transformação homogênea 0T T . Como θ1 pode ser calculado usando a última coluna de 0T T , isso é, θ1 é uma função da posição apenas, a orientação pode ser especificada, então, usando apenas dois ângulos: β (chamado de ângulo de pitch pelo fabricante) e γ (que o fabricante chama de ângulo de roll no manual do robô). Para ser mais exato, o fabricante chama de: ângulo de pitch a soma dos ângulos θ234 e de ângulo de roll o próprio ângulo θ5 (com sinal contrário, devido a convenção para se medir ângulos). Uma vez que estes ângulos são conhecidos porque são especificados pelo usuário, pode-se montar o seguinte sistema de equações: px = s1 (a2 c2 +a3 c23 +d6 c234 ) py = c1 (a2 c2 +a3 c23 +d6 c234 ) p = d + a s +a s +d s . z 1 2 2 3 23 6 234 Multiplicando as duas primeiras equações por s1 e c1 , respectivamente, e somando, vem que p s +p c = a c +a c +d c x 1 y 1 2 2 3 23 6 234 pz = d1 + a2 s2 +a3 s23 +d6 s234 . Se px ou py forem diferentes de zero (basta que um deles seja diferente de zero), o termo a2 c2 +a3 c23 +d6 c234 também será diferente de zero e θ1 poderá ser calculado por: θ1 = atan2 (px , py ) 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. (2.20) 137 Introdução à Robótica — Universidade Tecnológica Federal do Paraná se a2 c2 +a3 c23 +d6 c234 > 0 e há ainda uma segunda solução (se o termo for negativo). Contudo, a2 c2 +a3 c23 +d6 c234 é a distância da ferramenta até o eixo da junta 1 e pode sempre ser tomada como positiva para o robô fique de frente para a meta. Então é possível admitir apenas uma solução única23 para θ1 dada pela equação (2.20). Se px e py forem ambos nulos, o valor de θ1 não poderá ser determinado com base na posição almejada. Como o que se pretende é desenvolver um método para especificar a posição e orientação da meta, o caso em que px = py = 0 é particular e demanda que θ1 seja especificado a parte. Há, ainda, um caso especial deste caso particular: se c β = c234 = 0 (β = θ234 = ±90◦ ) os eixos da junta 1 e 5 ficarão alinhados e será possível determinar o valor da soma (se θ234 = +90◦ ) ou da diferença (se θ234 = −90◦ ) de θ1 e θ5 . Neste caso, um ângulo é arbitrado é o outro é calculado. Geralmente, arbitra-se o valor de θ1 como o mesmo valor atual do ângulo e calcula-se o valor de θ5 porque θ5 pode variar de 360◦ enquanto que θ1 pode variar apenas de 300◦ o que pode levar a uma solução inatingível. Uma vez determinado θ1 é possível montar o sistemas de equações original multiplicando as duas primeiras equações por s1 e c1 , respectivamente, e somando, em p s +p c = a c +a c +d c x 1 y 1 2 2 3 23 6 234 p = d + a s +a s +d s . z logo 1 p s +p c −d c x 1 y 1 6 234 pz − d1 − d6 s234 2 2 3 23 6 234 = a2 c2 +a3 c23 = d1 + a2 s2 +a3 s23 +d6 s234 . Estes sistema de equações se resume ao caso dos três eixos paralelos estudados na Seção 2.5.3 e fornece como solução: ! 2 2 (pz − d1 − d6 s234 ) + (px s1 +py c1 −d6 c234 ) − a3 2 − a2 2 θ3 = arccos 2 a2 a3 que cai fora do intervalo de variação da junta 3 que é de [−110◦ , 0] o que força a adoção da segunda solução para θ3 , denominada θ3 , dada por: θ30 = −θ3 . Obtém-se, ainda, uma solução única para θ2 : θ2 = atan2 ((pz − d1 − d6 s234 ) (a2 + a3 c3 ) − (px s1 +py c1 −d6 c234 ) a3 s3 , (px s1 +py c1 −d6 c234 ) (a2 + a3 c3 ) + (pz − d1 − d6 s234 ) a3 s3 ) . As variáveis de junta θ1 , θ2 e θ3 são determinadas principalmente em função da posição desejada, mas orientação da ferramenta contribui para determinação destes ângulos, enquanto que θ4 e θ5 são determinados apenas em função da orientação desejada para a ferramenta. Note que a orientação é especificada de forma parcial, apenas dois graus de liberdade (β e γ), enquanto que a posição é especificada completamente (px , py e pz ). O modelo cinemático usado pelo fabricante necessita que sejam especificados os ângulos θ234 e θ5 . Os comandos que especificam posições/orientações recebem como parâmetros: a posição da ferramenta (px , py e pz ); o ângulo de pitch β que é igual a soma θ234 = θ2 + θ3 + θ4 e é o ângulo que o eixo dos yy da ferramenta (alinhado com o eixo dos zz do último segmento) faz com o plano xy da base; e o ângulo de roll γ que é o próprio θ5 . A seguir é proposto um algoritmo para calcular a cinemática inversa com base nestes parâmetros: 1. ler px , py , pz , β e γ; 2. se px = 0 e py = 0 2.1. se β = 90◦ ou β = −90◦ 2.1.1. atribuir o valor antigo de θ1 para θ1 ; 23 A segunda solução dada por ( θ10 = θ1 − 180◦ se θ1 > 0 θ1 + 180◦ se θ1 ≤ 0 é pouco interessante porque, devido às limitações do mecanismo, se restringe a uma pequena região próxima ao eixo da junta 1 sobre a base do robô onde há pouco interesse de se trabalhar. Ela faz com que o robô fique de costas para a meta. Esta forma de se especificar a posição e orientação permite que duas posições e orientações iguais sejam especificadas de formas diferentes. Eles parecem diferentes mas são exatamente iguais (veja a Figura 2.18, a posição e orientação da ferramenta são as mesmas, mas a especificação dos ângulos são diferentes: θ234 = 80◦ para um caso e 100◦ para outro, θ5 = 90◦ para um caso e −90◦ para o outro.) 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 138 Introdução à Robótica — Universidade Tecnológica Federal do Paraná 2.2. arbitrar (ler, atribuir o valor antigo ou solicitar ao programador) um valor para θ1 ; 3. senão 3.1. calcular θ1 = atan2 (px , py ); 2 2 2 2 4. se (a2 − a3 ) ≤ (pz − d1 − d6 s β) + (px s1 +py c1 −d6 c β) ≤ (a2 + a3 ) (pz −d1 −d6 s β)2 +(px s1 +py c1 −d6 c β)2 −a3 2 −a2 2 4.1. calcular θ3 = − arccos ; 2 a2 a3 4.2. calcular θ2 = atan2 ((pz − d1 − d6 s β) (a2 + a3 c3 ) − (px s1 +py c1 −d6 c β) a3 s3 , (px s1 +py c1 −d6 c β) (a2 + a3 c3 ) + (pz − d1 − d6 s β) a3 s3 ) ; 5. senão 5.1. o ponto almejado não pode ser atingido, desistir; 6. calcular θ4 = β − θ2 − θ3 ; 7. se px = 0 e py = 0 7.1. se β = 90◦ 7.1.1. atribuir θ5 = −γ + θ1 ; 7.2. senão 7.2.1. atribuir θ5 = −γ − θ1 ; 8. senão 8.1. atribuir θ5 = −γ; 9. verificar se são ângulos obtidos estão dentro do intervalo admissível de cada variável de junta, se não estiverem o ponto almejado (posição e orientação) não podem ser atingidos. O último passo do algoritmo pode ser distribuído, ou seja, a cada novo ângulo calculado é realizado um teste, se o ângulo não estiver no intervalo válido o cálculo é abortado. Isso permite detectar uma falha no cálculo do ângulo de forma mais rápida o que geralmente não se traduz em uma vantagem significativa. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 139 3. Robôs Paralelos Robôs paralelos, ou com cadeia cinemática fechada, são robôs que possuem mais de uma cadeia cinemática conectando a base com a ferramenta que, neste caso, geralmente é chamada de plataforma. Note que muitos robôs de cadeia cinemática aberta ou robôs seriais possuem subcadeias fechadas como: punhos esféricos e mecanismos de quatro-barras. Contudo, estes robôs podem ser considerados como sendo de cadeia aberta porque existe uma cadeia cinemática aberta que apresenta o mesmo comportamento do robô serial que possui tais subcadeias fechadas. Se não existir esta cadeia cinemática aberta equivalente o robô é considerado como sendo de cadeia cinemática fachada e as técnicas de modelamento vistos no Capítulo 2 não se aplicam. Alguns autores distinguem robô paralelos de robôs de cadeia cinemática fechada chamando de paralelo apenas os robôs que possuem um certo número de subcadeias serias idênticas conectando a base com a plataforma (ferramenta). Estas subcadeias são chamadas de membros ou pernas. As principais vantagens do robôs paralelos são uma maior capacidade de exercer força e torque e maior rigidez. A principal desvantagem é que eles ocupam um volume físico grande se comparado com o espaço de trabalho. Uma segunda vantagem é que, no geral, a cinemática inversa é relativamente fácil, mas a direta, ao contrário dos robôs seriais, é complicada. 3.1. Plataforma Gough-Stewart A plataforma Gough-Stewart foi inventada originalmente por V. Erik Gough em 1954 e mais tarde publicada independentemente por D. Stewart em 1965. Ela possui seis membros constituídos de duas juntas esféricas passivas ligadas por uma junta cilíndrica (um cilindro hidráulico, por exemplo) ou prismática (um fuso com guiamento para evitar o giro da castanha) como mostrado na Fig. 3.1. Se as forças envolvidas forem grandes, é comum usar juntas universais no lugar das juntas esféricas. Observe na Fig. 3.1 que as juntas esféricas não são igualmente espaçadas, mas formam conjuntos de dois membros. Isso é feito para evitar uma singularidade que permitiria o movimento da plataforma sem que os atuadores fossem movidos o que implicaria na perda de controle sobre a máquina. Controlando o comprimento das juntas cilíndricas (ou prismáticas) controla-se a posição e a orientação da plataforma (ferramenta). A cinemática direta é bastante complicada e resulta em várias soluções possíveis, mas a cinemática inversa, que é usada para controlar a plataforma, é simples. Note que a posição do centro das juntas esféricas (ou universais) na base e na plataforma são conhecidas. As da base são fixas, as da plataforma em relação à base, dependem da posição e orientação desejadas para a plataforma. Basta determinar a distância entre a junta da base e a da plataforma correspondente para se saber o comprimento do atuador (junta cilíndrica ou prismática). Na Fig. 3.2 são mostradas as posições projetadas no plano do centro das juntas da base e da plataforma. Figura 3.1.: Plataforma Gough-Stewart 141 Introdução à Robótica — Universidade Tecnológica Federal do Paraná y y ai 3 3 3 2 4 ei 4 2 2 2 4 bi fi 4 3 5 1 1 5 6 x x 5 1 5 6 1 6 (a) 6 (b) Figura 3.2.: Plataforma Gough-Stewart, posição do centro das juntas esféricas no plano xy: a) base e b) plataforma Para uma plataforma Gough-Stewart simétrica, a posição do centro das juntas esféricas fixadas na base dos dois primeiros membros é dada por: ai b i B Pi = 0 1 para i = 1 e 2 e onde ai é a distância do centro da base até o ponto médio de fixação do par de membros e bi é a metade da distância entre o centro do par de membros. Note que bi é positivo para membros pares e negativo para ímpares. Para calcular a posição das demais juntas, basta girar o ponto Pi em trono do eixo z de um ângulo ϕi . Assim ai ai c ϕi − bi s ϕi b a s ϕ + b c ϕ i i i i i B Pi = RotZ (ϕi ) = 0 0 1 1 para i = 1, 2, . . . 6 e ϕ1 = ϕ2 = 0◦ , ϕ3 = ϕ4 = 120◦ e ϕ5 = ϕ6 = 240◦ . Todos os valores são contantes. Quase a mesma coisa pode ser feita para calcular a posição do centro das juntas esféricas fixadas na plataforma em relação ao sistema de coordenadas {P } da própria plataforma. Assim, para o membro i ei ei c ϕi − fi s ϕi f e s ϕ + f c ϕ i i i i P = i Qi = RotZ (ϕi ) 0 0 1 1 para i = 1, 2, . . . 6 e onde ei é a distância do centro da plataforma até o ponto médio de fixação do par de membros e fi é a metade da distância entre o centro do par de membros. Note que fi é positivo para membros pares e negativo para ímpares. Além disso, é necessário que ai 6= ei ou bi 6= fi para evitar uma singularidade cinemática que permitiria o movimento da plataforma sem que os atuadores fossem movidos o que implicaria na perda de controle sobre a máquina (mesmo motivo pelo qual as os membros não são espaçados igualmente). 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 142 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Para cada instante de tempo é especificada uma posição e orientação para a plataforma. Esta especificação permite calcular uma transformação homogênea que descreve a plataforma em relação à base: B P T . Por exemplo, pode ser usado a posição do centro da plataforma e os ângulos de roll, pitch e yaw para especificar a orientação. Assim, a transformação homogênea que modela (ou descreve) a plataforma em relação à base é dada por: B PT = Transl (x, y, z) RotZ (α) RotY (β) RotX (γ) cα cβ cα sβ sγ − sα cγ cα sβ cγ + sα sγ sα cβ sα sβ sγ + cα cγ sα sβ cγ − cα sγ = −sβ cβ sγ cβ cγ 0 0 0 x y z 1 (3.1) o que permite calcular os pontos Qi em relação à base por: B P Qi =B P T Qi x − (sα cγ − cα sβ sγ ) (ei s ϕi + fi c ϕi ) + cα cβ (ei c ϕi − fi s ϕi ) y + (cα cγ + sα sβ sγ ) (ei s ϕi + fi c ϕi ) + sα cβ (ei c ϕi − fi s ϕi ) = z + cβ sγ (ei s ϕi + fi c ϕi ) − sβ (ei c ϕi − fi s ϕi ) 1 Para cada par de pontos Pi e Qi é calculado um vetor B P B ~vi = B Qi − B Pi =B P T Qi − Pi e o módulo destes vetores é comprimento di da junta prismática do membro i; di = B ~vi . Em outras palavras, sabendo a posição e orientação desejada para a plataforma, especificada pela transformação homogênea B P T , é possível determinar o valor das variáveis de junta di de forma rápida e eficaz (do ponto de vista computacional). A solução é única. Resumindo: 1. calcular e armazenar os valores de B Pi e P Qi ; 2. dada a especificação de posição/orientação desejadas, calcular 3. calcular B Qi por B B PT; P Qi =B P T Qi ; 4. calcular o módulo do vetor B ~vi dado por B ~vi = B Qi − B Pi , este módulo é o valor da variável de junta desejada. A cada nova posição/orientação, repetir os passos 2 a 4 (o passo 1 só executado uma única vez). 3.2. Plataforma Gough-Stewart modificada A plataforma Gough-Stewart modificada é muito usada por hobistas e estudantes. Ela é bastante similar à plataforma Gough-Stewart convencional, a diferença é que cada membro é formado por uma junta S+S (esférica-haste-esférica) conectada excentricamente com uma junta rotativa como mostrado na Figura 3.3. Nos modelos didáticos feitos com servo motores de aeromodelo, os eixo são paralelos dois a dois e espaçados de 120◦ tanto na base como na plataforma como mostrado na Fig. 3.4a. Este detalhe é importante porque define a orientação do eixo de rotação. Para determinar a localização do ponto Pi no centro da junta esférica do membro i que está mais próxima da base, isso é, que é conectada à junta rotativa do membro i, é conveniente atrelar um sistema de coordenadas {S} ao eixo da junta rotativa. Em relação ao sistema de coordenadas {S}, as coordenadas de Pi são dadas por 0 g i S Pi = 0 1 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 143 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Figura 3.3.: Plataforma Gough-Stewart modificada y ŶS ai 3 3 4 2 Qi 2 4 bi X̂S 5 x z 1 Ẑ S 2 1 Qi Ŷ S θi y 1 5 6 6 gi (b) (a) Figura 3.4.: Plataforma Gough-Stewart modificada, posição dos servomotores no plano xy e vista frontal: a) base com os servomotores e b) dois servomotores vistos de frente 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 144 Introdução à Robótica — Universidade Tecnológica Federal do Paraná onde gi é a distância do eixo da junta rotativa até o centro da junta esférica. Para localizar o sistema de coordenadas {S} em relação ao sistema de coordenadas {B} pode-se imaginar que os dois sistemas são inicialmente coincidentes, então {S} sofre uma rotação de um ângulo ϕi em torno de z; depois é feita uma translação de uma distância ai na direção x e bi na direção y; e, por fim, é feita uma rotação em torno de x de um ângulo θi , que é a variável de junta. A transformação homogênea que descreve {S} em relação a {B} é dada por B ST = RotZ (ϕi ) Transl (ai , bi , 0) RotX (θi ) c ϕi − s ϕi c θi s ϕi s θi ai c ϕi − bi s ϕi s ϕi c ϕi c θi − c ϕi s θi ai s ϕi + bi c ϕi = 0 s θi c θi 0 0 0 0 1 onde ai é a distância do centro da base até o ponto médio de fixação do par de membros, bi é a metade da distância entre o centro do par de membros e ϕ1 = ϕ2 = 0◦ , ϕ3 = ϕ4 = 120◦ e ϕ5 = ϕ6 = 240◦ . Todos estes valores são contantes. Note que bi é positivo para membros pares e negativo para ímpares. Portanto, o ponto Pi em relação à base é dado por B Note que B S P i =B S T Pi ai c ϕi − bi s ϕi − gi s ϕi c θi ai s ϕi + bi c ϕi + gi c ϕi c θi = gi s θi 1 Pi depende do membro em questão (i) e da posição angular da junta, θi . A posição do centro das juntas da plataforma em relação ao sistema de coordenadas {P } da própria plataforma. Assim, para o membro i ei ei c ϕi − fi s ϕi fi ei s ϕi + fi c ϕi P Qi = RotZ (ϕi ) = 0 0 1 1 para i = 1, 2, . . . 6 e onde ei é a distância do centro da plataforma até o ponto médio de fixação do par de membros e fi é a metade da distância entre o centro do par de membros. Note que fi é positivo para membros pares e negativo para ímpares. Além disso, é necessário que ai = 6 ei ou bi = 6 fi para evitar uma singularidade cinemática que permitiria o movimento da plataforma sem que os atuadores fossem movidos o que implicaria na perda de controle sobre a máquina (mesmo motivo pelo qual as os membros não são espaçados igualmente). A posição e orientação da plataforma pode ser descrita de várias formas. Por exemplo, usando a posição do centro da plataforma e os ângulos de roll, pitch e yaw para especificar a orientação. Assim, a transformação homogênea que modela (ou descreve) a plataforma em relação à base é dada por: B PT A posição B B = Transl (x, y, z) RotZ (α) RotY (β) RotX (γ) c c cα sβ sγ − cγ sα sα sγ + cα cγ sβ α β cβ sα cα cγ + sα sβ sγ cγ sα sβ − cα sγ = − sβ cβ sγ cβ cγ 0 0 0 x y z 1 Qi do centro da junta esférica montada na plataforma para o membro i pode ser calculada por: P Qi =B P T Qi 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 145 Introdução à Robótica — Universidade Tecnológica Federal do Paraná x − (sα cγ − cα sβ sγ ) (ei s ϕi + fi c ϕi ) + cα cβ (ei c ϕi − fi s ϕi ) y + (cα cγ + sα sβ sγ ) (ei s ϕi + fi c ϕi ) + sα cβ (ei c ϕi − fi s ϕi ) = z + cβ sγ (ei s ϕi + fi c ϕi ) − sβ (ei c ϕi − fi s ϕi ) 1 xi yi = zi 1 Note que B Qi depende do membro em questão (i) e da posição e orientação desejada. Doravante, as coordenadas de B Qi em relação à base serão designadas por xi , yi e zi (não confundir com x, y e z especificados pelo usuário). A posição do centro das duas juntas esféricas de cada membro, B Pi e B Qi , são conhecidas. A distância entre estes dois pontos é fixa e vale di . Esta distância é o módulo do vetor B Pi −B Qi , ou seja, di 2 = B Pi −B Qi 2 = B Pi −B Qi · B Pi −B Qi que leva à equação 2 gi (bi + s ϕi xi − c ϕi yi ) cos θi − 2 gi zi sen θi = di 2 − ai 2 − bi 2 − gi 2 + +2 (ai c ϕi − bi s ϕi ) xi + 2 (ai s ϕi + bi c ϕi ) yi − xi 2 − yi 2 − zi 2 que fornece o resultado desejado para θi usando a equação (B.1) com l1 = di 2 − ai 2 − bi 2 − gi 2 + 2 (ai c ϕi − bi s ϕi ) xi + 2 (ai s ϕi + bi c ϕi ) yi − xi 2 − yi 2 − zi 2 l2 = 2 gi (bi + s ϕi xi − c ϕi yi ) l3 = −2 gi zi E a posição e orientação pretendidas só são atingíveis se l1 2 ≤ l2 2 + l3 2 Assim √ 2 2 2 2 arctan l3 + l2 +l3 −l1 l2 +l1 √ θi = l − l2 2 +l3 2 −l1 2 2 arctan 3 l2 +l1 para i par para i ímpar (3.2) Note que os braços ligados às juntas rotativas e que apoiam as juntas esféricas são geralmente montados invertidos um em relação ao outro como mostrado na Figura 3.3. Por isso a inversão de sinais na equação acima. Em alguns casos, os braços são invertidos: ao invés de apontarem para dentro da base (como na Figura 3.3), eles apontam para fora da base. Neste caso, o sinal do radical deve ser trocado na equação (3.2) ou, o que é equivalente, as palavras par e ímpar devem ser intercambiadas. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 146 Índice Remissivo A atan2, 12, 93 N Notação de Denavit-Hartenberg Modificada, 70 C cinemática direta, 69 inversa, 69 círculo trigonométrico, 7 cosseno, 8 cossenos diretores, 13, 15 cross product, 16 P par inferior, 69 parâmetros de Rodrigues, 29 periódica, 9 período, 9 plano do punho, 102, 108 do robô, 102, 108 ponto, 7 ponto de aplicação, 13 pose, 73 de referência, 74 zero, 74 produto de matrizes, 15 escalar, 13 externo, 16 interno, 13 vetorial, 16 PUMA 560, 85, 87, 120 punho, 78 D Denavit-Hartenberg, 70 dot product, 13 E espaço de trabalho, 91 destro, 91 espelhamento do punho, 124 F fórmula de Rodrigues, 25, 26, 29, 36, 42, 54 frame, 19 free vector, 13 função cosseno, 8 periódica, 9 seno, 7 tangente, 8 G grupo ortogonal (geral), 24 grupo ortogonal especial, 24 J junta, 69 ângulo da, 72 off-set da, 72 prismática, 69 rotativa, 69 L line vector, 13 M matriz de rotação, 22 matrizes produto de, 15 MuPAD, 90, 128 Q quadrantes, 9 quatérnio, 31 conjugado, 32 elemento neutro da adição, 31 elemento neutro da multiplicação, 32 inverso, 33 norma, 32 nulo, 31 puro, 32 unitário, 33 vetorial, 32 R regra da mão direita, 17, 18, 26, 43, 70, 75 restrição holonômica, 13 reta de ação, 13 rotação matriz de, 22 RV-M1, 79, 101 S SCARA, 88, 127 segmento, 69 comprimento do, 72 147 Introdução à Robótica — Universidade Tecnológica Federal do Paraná torção do, 72 seno, 7 sistemas de coordenadas, 18 Software para Processamento Simbólico, 90 T tangente, 8 Tool Center Point, 78 Transformação Homogênea, 40 V variável de junta, 69, 78 valor inicial, 77 vetor, 12, 13 cross product, 16 de Rodrigues, 29 dot product, 13 free vector, 13 line vector, 13 módulo, 13 nulo, 13 ortogonais, 15 ponto de aplicação, 13 produto escalar, 13 produto externo, 16 produto interno, 13 produto vetorial, 16 projeção, 15 reta de ação, 13 versor, 13 versor de um, 13 vetor aplicado, 13 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 148 A. Segunda solução de uma função de arco Quando usamos uma função de arco, isso é, arco-seno, arco-cosseno e arco-tangente, o contra domínio é limitado em uma faixa de apenas 180◦ ou π rad. Normalmente, uma junta rotativa pode girar mais do que 180◦ o que torna necessário procurar uma segunda solução. Todas as infinitas solução para as funções de arco podem ser calculadas por: k θ0 = (−1) arcsen y + π k θ0 = ± arccos y + 2 π k θ0 = arctan y + π k onde y é o argumento da função e k é um número inteiro (incluindo os valores negativos). Para uma variação de −180◦ até +180◦ , incluindo +180◦ mas excluindo −180◦ , podemos calcular uma segunda segunda solução por θ = arcsen y ( −θ + π θ0 = −θ − π se θ ≥ 0 se θ < 0 θ = arccos y θ0 = −θ θ = arctan y ( θ − π se θ > 0 0 θ = θ + π se θ ≤ 0 e para uma variação de 0◦ até +360◦ , é necessário uma atenção especial com o seno e tangente porque os seus arcos podem ser negativos, assim, usando a variável auxiliar ϕ ϕ = arcsen y ( ϕ θ= π−ϕ ( π−ϕ θ0 = 2π + ϕ se ϕ ≥ 0 se ϕ < 0 se ϕ ≥ 0 se ϕ < 0 θ = arccos y θ0 = 2 π − θ ϕ = arctan y ( ϕ se ϕ ≥ 0 θ= ϕ + π se ϕ < 0 ( ϕ+π se ϕ ≥ 0 0 θ = ϕ + 2 π se ϕ < 0 ϕ = atan2 (y, x) ( ϕ se ϕ ≥ 0 θ= ϕ + 2 π se ϕ < 0 149 Introdução à Robótica — Universidade Tecnológica Federal do Paraná onde também foi rebatida a solução única da função atan2. Todas as equações apresentadas estão em radianos porque quase todas as linguagens de programação usam radianos e não graus. Uma notável exceção é o pacote OpenGL disponível em várias linguagens. 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 150 B. Solução de algumas equações e sistemas de equações comuns em cinemática inversa. Puma 560: l1 = l2 cos α + l3 sen α (B.1) resulta em duas soluções de duas formas diferentes: α = atan2 (l3 , l2 ) + arccos p l1 l2 + l3 2 l1 2 α0 = atan2 (l3 , l2 ) − arccos p l2 2 + l3 2 ! p l3 + l2 2 + l3 2 − l1 2 α = 2 arctan l2 + l1 ! p l3 − l2 2 + l3 2 − l1 2 0 α = 2 arctan l2 + l1 ou as duas soluções para α e α0 acima levam quase ao mesmo resultado. O intervalo (imagem) que se obtém os resultados é um pouco diferente e a eficiência computacional depende da constância ou variabilidade de l1 , l2 e l3 . l 1 l 2 = l3 cos β + l4 cos (α + β) + l5 sen (α + β) = l3 sen β + l4 sen (α + β) − l5 cos (α + β) resulta em l1 2 + l2 2 − l3 2 − l4 2 − l5 2 = l4 cos α + l5 sen α 2 l3 que é mesma que a equação (B.1) trocando: l1 2 + l2 2 − l3 2 − l4 2 − l5 2 2 l3 l2 → l4 l1 → l3 → l5 e a solução para β é l2 l3 + (l1 l5 + l2 l4 ) cos α − (l1 l4 − l2 l5 ) sen α l1 l3 + (l1 l4 − l2 l5 ) cos α + (l1 l5 + l2 l4 ) sen α β = atan2 , l3 2 + l4 2 + l5 2 + 2 l3 (l4 cos α + l5 sen α) l3 2 + l4 2 + l5 2 + 2 l3 (l4 cos α + l5 sen α) = atan2 (l2 l3 + (l1 l5 + l2 l4 ) cos α − (l1 l4 − l2 l5 ) sen α, l1 l3 + (l1 l4 − l2 l5 ) cos α + (l1 l5 + l2 l4 ) sen α) Três eixos paralelos: l 1 l 2 = l3 cos β + l4 cos (α + β) = l3 sen β + l4 sen (α + β) 151 Introdução à Robótica — Universidade Tecnológica Federal do Paraná α = arccos l1 2 + l2 2 − l3 2 − l4 2 2 l3 l4 α0 = −α β = atan2 (l2 (l3 + l4 cos α) − l1 l4 sen α, l1 (l3 + l4 cos α) + l2 l4 sen α) = atan2 (l2 l3 + l4 (l2 cos α − l1 sen α) , l1 l3 + l4 (l1 cos α + l2 sen α)) = atan2 (l2 , l1 ) − atan2 (l4 sen α, l3 + l4 cos α) as três soluções para β acima levam ao mesmo resultado, porém, com eficiência computacional variada (dependendo da constância ou variabilidade de l1 e l2 ). A segunda solução para β, β 0 , pode ser obtida trocado o sinal de sen α. Isso faz com a terceira solução fique atraente poque não é necessário recalcular a função atan2; apenas rebater o resultado de 180◦ . Outra coisa: l 1 l 2 = l3 cos β − l4 sen (α + β) = l3 sen β + l4 cos (α + β) sen α = 11 de agosto de 2020 l3 2 + l4 2 − l1 2 − l2 2 2 l3 l4 Prof. Luís Paulo Laus, Dr. Eng. 152 C. Inversa de matriz 3 × 3 Seja A3×3 a 11 = a21 a31 a12 a22 a32 a13 a23 a33 então se det (A) 6= 0, A−1 3×3 onde a a − a23 a32 22 33 1 = a a − a21 a33 det (A) 23 31 a21 a32 − a22 a31 a13 a32 − a12 a33 a11 a33 − a13 a31 a12 a31 − a11 a32 a12 a23 − a13 a22 a13 a21 − a11 a23 a11 a22 − a12 a21 det (A) = a11 a22 a33 + a12 a23 a31 + a13 a21 a32 − a13 a22 a31 − a11 a23 a32 − a12 a21 a33 . 153 D. Todas as possíveis rotações usando ângulos de Euler Para comparar com a cinemática direta de um robô observe que: 1. há um seno ou cosseno de β isolado (sozinho) em cada uma das nove possíveis posições da submatriz de rotação; 2. há sempre duas possibilidades com cosseno de β isolado e apenas uma com seno β; 3. quando há um cosseno de β isolado, na mesma linha há também um produto de seno de β por cosseno e seno de γ (na outra matriz estes produtos aparecem em colunas trocadas) e na mesma coluna há também um produto de seno de β por cosseno e seno de α (na outra matriz estes produtos aparecem em linhas trocadas); 4. quando há um seno de β, na mesma linha há também um produto de cosseno de β por cosseno e seno de γ e na mesma coluna há também um produto de cosseno de β por cosseno e seno de α. Além disso, os cossenos podem ser transformados em senos e vice-versa: π sen ϕ = cos ϕ − 2 π − sen ϕ = cos ϕ + 2 π cos ϕ = sen ϕ + 2 π − cos ϕ = sen ϕ − 2 e isso possibilita que se tenha ou seno ou cosseno de β isolado em qualquer posição da matriz que se queira. O sinal dos senos podem ser trocados somando-se 180◦ ao arco ou trocando o sinal do argumento. O sinal dos cossenos podem ser trocados apenas somando-se 180◦ ao arco. Assim: 1. se apenas os senos tiverem o sinal contrário ao da fórmula, troca-se o sinal do arco; 2. se os senos e cossenos tiverem o sinal contrário, soma-se 180◦ ao arco; e 3. se apenas os cossenos tiverem o sinal contrário, soma-se 180◦ ao arco e troca-se o sinal da variável; A seguinte tabela fornece as possíveis transformações supondo um ângulo genérico ϕ: 155 Introdução à Robótica — Universidade Tecnológica Federal do Paraná Para transformar cϕ → substituir ϕ por −cϕ −ϕ ± π sϕ → sϕ cϕ → cϕ sϕ → −sϕ cϕ → −cϕ sϕ → −sϕ −ϕ ϕ±π cϕ → sϕ −ϕ + sϕ → cϕ cϕ → −sϕ sϕ → cϕ cϕ → sϕ sϕ → −cϕ cϕ → −sϕ sϕ → −cϕ π 2 ϕ+ π 2 ϕ− π 2 −ϕ − π 2 Para determinar quais as transformações que serão necessárias para tornar uma das rotações abaixo equivalente à submatriz de rotação do modelo cinemático de um robô recomenda-se: 1. determinar as variáveis de junta (ou funções delas) respectivas à β, α e γ, sempre determinado β primeiro (seno ou cosseno que aparece isolado) e então α e γ em qualquer ordem; 2. analisar o sinal das expressões e terminar quais transformações devem ser usadas (ver tabela acima), algumas vezes é necessário trocar a função — pode ocorrer mais de uma possibilidade o que transforma este procedimento em um processo de tentativa e erro; 3. usar o Software para Processamento Simbólico (MuPAD, por exemplo) para construir as transformações e compará-las com a cinemática direta (subtrair as matrizes); 4. realizar os ajustes necessários e testar novamente até que seja obtida uma matriz cuja submatriz de rotação é igual à do modelo cinemático direto. D.1. Para eixos móveis (ângulos de Euler) cβ cγ cα sγ + sα cγ sβ RotXY Z (α , β , γ) = sα sγ − cα cγ sβ 0 cβ cγ cα cγ sβ + sα sγ RotXZY (α , β , γ) = sα cγ sβ − cα sγ 0 11 de agosto de 2020 −cβ sγ sβ cα cγ − sα sβ sγ −sα cβ sα cγ + cα sβ sγ cα cβ 0 0 −sβ cβ sγ cα cβ cα sβ sγ − sα cγ sα cβ cα cγ + sα sβ sγ 0 0 Prof. Luís Paulo Laus, Dr. Eng. 0 0 0 0 1 0 0 1 156 Introdução à Robótica — Universidade Tecnológica Federal do Paraná cβ sβ sγ sβ cγ 0 sα sβ cα cγ − cβ sα sγ −cα sγ − cβ sα cγ 0 RotXY X (α , β , γ) = −cα sβ sα cγ + cα cβ sγ cα cβ cγ − sα sγ 0 0 0 0 1 cβ −sβ cγ sβ sγ 0 cα sβ cα cβ cγ − sα sγ −sα cγ − cα cβ sγ 0 RotXZX (α , β , γ) = sα sβ cα sγ + cβ sα cγ cα cγ − cβ sα sγ 0 0 0 0 1 sα sβ sγ + cα cγ sα cγ sβ − cα sγ sα cβ 0 cβ sγ cβ cγ −sβ 0 RotY XZ (α , β , γ) = cα sβ sγ − sα cγ cα cγ sβ + sα sγ cα cβ 0 0 0 0 1 cα cβ sα sγ − cα cγ sβ sα cγ + cα sβ sγ 0 sβ cβ cγ −cβ sγ 0 RotY ZX (α , β , γ) = −cβ sα cα sγ + sα cγ sβ cα cγ − sα sβ sγ 0 0 0 0 1 cα cγ − cβ sα sγ sα sβ cα sγ + cβ sα cγ 0 sβ sγ cβ −cγ sβ 0 RotY XY (α , β , γ) = −sα cγ − cα cβ sγ cα sβ cα cβ cγ − sα sγ 0 0 0 0 1 cα cβ cγ − sα sγ −cα sβ sα cγ + cα cβ sγ 0 cγ sβ cβ sβ sγ 0 RotY ZY (α , β , γ) = −sα cβ cγ − cα sγ sα sβ cα cγ − sα cβ sγ 0 0 0 0 1 cα cγ − sα sβ sγ −cβ sα cα sγ + sα cγ sβ 0 sα cγ + cα sβ sγ cα cβ sα sγ − cα cγ sβ 0 RotZXY (α , β , γ) = −cβ sγ sβ cβ cγ 0 0 0 0 1 cα cβ cα sβ sγ − sα cγ cα cγ sβ + sα sγ 0 sα cβ sα sβ sγ + cα cγ sα cγ sβ − cα sγ 0 RotZY X (α , β , γ) = −sβ cβ sγ cβ cγ 0 0 0 0 1 cα cγ − sα cβ sγ −sα cβ cγ − cα sγ sα sβ 0 sα cγ + cα cβ sγ cα cβ cγ − sα sγ −cα sβ 0 RotZXZ (α , β , γ) = sβ sγ sβ cγ cβ 0 0 0 0 1 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 157 Introdução à Robótica — Universidade Tecnológica Federal do Paraná cα cβ cγ − sα sγ sα cβ cγ + cα sγ RotZY Z (α , β , γ) = −sβ cγ 0 −sα cγ − cα cβ sγ cα sβ 0 cα cγ − sα cβ sγ sα sβ sβ sγ cβ 0 0 0 0 1 D.2. Para eixos fixos cα cβ cα sβ sγ − sα cγ sα sγ + cα cγ sβ 0 cβ sα cα cγ + sα sβ sγ sα cγ sβ − cα sγ 0 0 RotXY Z (α , β , γ) = −sβ cβ sγ cβ cγ 0 0 0 0 1 cα cβ sα sγ − cα cγ sβ sα cγ + cα sβ sγ 0 sβ cβ cγ −cβ sγ 0 0 RotXZY (α , β , γ) = −cβ sα cα sγ + sα cγ sβ cα cγ − sα sβ sγ 0 0 0 0 1 cβ sβ sγ cγ sβ 0 s α s β c α c γ − c β s α s γ − c α s γ − c β s α c γ 0 RotXY X 0 (α , β , γ) = −cα sβ sα cγ + cα cβ sγ cα cβ cγ − sα sγ 0 0 0 0 1 cβ −cγ sβ sβ sγ 0 c α s β c α c β c γ − s α s γ − s α c γ − c α c β s γ 0 RotXZX 0 (α , β , γ) = sα sβ cα sγ + cβ sα cγ cα cγ − cβ sα sγ 0 0 0 0 1 cα cγ − sα sβ sγ −cβ sα cα sγ + sα cγ sβ 0 s α c γ + c α s β s γ c α c β s α s γ − c α c γ s β 0 RotY XZ 0 (α , β , γ) = −cβ sγ sβ cβ cγ 0 0 0 0 1 cβ cγ −sβ cβ sγ 0 s α s γ + c α c γ s β c α c β c α s β s γ − s α c γ 0 RotY ZX 0 (α , β , γ) = sα cγ sβ − cα sγ cβ sα cα cγ + sα sβ sγ 0 0 0 0 1 cα cγ − cβ sα sγ sα sβ cα sγ + cβ sα cγ 0 s β s γ c β − c γ s β 0 RotY XY 0 (α , β , γ) = −sα cγ − cα cβ sγ cα sβ cα cβ cγ − sα sγ 0 0 0 0 1 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 158 Introdução à Robótica — Universidade Tecnológica Federal do Paraná cα cβ cγ − sα sγ −cα sβ sα cγ + cα cβ sγ 0 c γ s β c β s β s γ 0 RotY ZY 0 (α , β , γ) = −cα sγ − cβ sα cγ sα sβ cα cγ − cβ sα sγ 0 0 0 0 1 cα cγ + sα sβ sγ sα cγ sβ − cα sγ cβ sα 0 c β s γ c β c γ − s β 0 RotZXY 0 (α , β , γ) = cα sβ sγ − sα cγ sα sγ + cα cγ sβ cα cβ 0 0 0 0 1 cβ cγ −cβ sγ sβ 0 c α s γ + s α c γ s β c α c γ − s α s β s γ − c β s α 0 RotZY X 0 (α , β , γ) = sα sγ − cα cγ sβ sα cγ + cα sβ sγ cα cβ 0 0 0 0 1 cα cγ − cβ sα sγ −cα sγ − cβ sα cγ sα sβ 0 s α c γ + c α c β s γ c α c β c γ − s α s γ − c α s β 0 0 RotZXZ (α , β , γ) = sβ sγ cγ sβ cβ 0 0 0 0 1 cα cβ cγ − sα sγ −sα cγ − cα cβ sγ cα sβ 0 c α s γ + c β s α c γ c α c γ − c β s α s γ s α s β 0 0 RotZY Z (α , β , γ) = −cγ sβ sβ sγ cβ 0 0 0 0 1 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 159 E. Funções da biblioteca robot.mb do MuPAD atan2: arco-tangente de dois argumentos. Ex.: atan2(y,x);. transl: cria uma transformação homogênea que representa uma translação de um vetor ~v dado ou das distâncias x, y e z dadas. Ex.: transl(x,y,z);. rotx: cria uma transformação homogênea que representa uma rotação em torno do eixo dos xx de um ângulo dado. Ex.: rotx(‘&alpha;‘);. roty: cria uma transformação homogênea que representa uma rotação em torno do eixo dos yy de um ângulo dado. Ex.: roty(‘&beta;‘);. rotz: cria uma transformação homogênea que representa uma rotação em torno do eixo dos zz de um ângulo dado. Ex.: rotz(‘&gamma;‘);. rot: cria uma transformação homogênea que representa uma rotação em torno do eixo dado pelo versor k̂ de um ângulo dado. Ex.: k:=matrix([1,2,1]): k:=k/norm(k,2); Ta:=rot(k,PI/3);. invrot: determina o versor k̂ e o ângulo θ dada a matriz de rotação (submatriz de rotação de uma transformação homogênea). Ex.: [k,tt]:=invrot(Ta); onde Ta foi calculada no exemplo anterior. invRPY: determinar os ângulos de roll, pitch, yaw com base na transformação homogênea. Ex.: invRPY(roty(PI/3)*rotz(PI/2)); mirrorRPY: calcula a segunda solução para os ângulos de roll, pitch, yaw. Ex.: mirrorRPY(invRPY(roty(PI/3)*rotz(PI/2))); invZYZ: determina os ângulos de Euler na ordem z, y e z com base na transformação homogênea. Ex.: invZYZ(roty(PI/3)*rotz(PI/2)); mirrorZYZ: calcula a segunda solução para os ângulos de Euler na ordem z, y e z. Ex.: mirrorZYZ(invZYZ(roty(PI/3)*rotz(PI/2))); subrot: extrai a submatriz de rotação de uma transformação homogênea. Ex.: subrot(transl(x,y,z));. gene: cria uma transformação homogênea genérica. Ex.: gene;. rgene: cria uma transformação homogênea genérica só de rotação. Ex.: rgene;. invth: inversa de uma transformação homogênea. Ex.: invth(Ta); onde Ta foi calculada no exemplo da função rot. dhm: gera uma transformação homogênea baseada nos parâmetros de Denavit-Hartenberg usando a notação adotada pelo Craig. Ex.: dhm(PI/2, a[1], ‘&theta;‘[2],d[2]);. dh: gera uma transformação homogênea baseada nos parâmetros de Denavit-Hartenberg usando a notação adotada por diversos autores, mas não pelo Craig. Ex.: dh(a[1],PI/2, d[2],‘&theta;‘[2]);. pt: gera um ponto com quatro coordenadas homogêneas. Ex.: P1:=pt(2,3,5);. vt: gera um vetor com quatro coordenadas homogêneas. Ex.: v1:=vt(5,1,2);. ·: produto interno de dois vetores, para produzir o simbolo · digite ALT+0183. Ex.: vt(2,3,5) · vt(5,1,2);. ×: produto externo de dois vetores, para produzir o simbolo × digite Alt+0215. Ex.: vt(2,3,5) × vt(5,1,2);. ´: transposta de matrizes (acento agudo). Ex.: vt(2,3,5) ´ * vt(5,1,2); note que o resultado é uma matriz 1 × 1 (é impresso entre parênteses) e não um escalar. skew: cria uma matriz antissimétrica dado um vetor ~v em coordenadas homogêneas. Ex.: skew(vt(v[x],v[y],v[z])); cria um vetor com o comando vt e transforma este vetor em matriz 161 Introdução à Robótica — Universidade Tecnológica Federal do Paraná antissimétrica. Isso equivale à ~v ×. unskew: transforma uma matriz antissimétrica em vetor, mas não testa se a matriz é realmente antissimétrica. Ex.: unskew(skew(vt(v[x],v[y],v[z]))); cria um vetor, transforma em matriz, transforma em vetor novamente. Cayley: transforma uma matriz antissimétrica ou um vetor em matriz de rotação usando a Fórmula de Cayley. Ex.: Cayley(vt(v[x],v[y],v[z]));. dualCayley: transforma uma matriz de rotação em matriz antissimétrica usando o dual da Fórmula de Cayley Ex.: dualCayley ( rotx ( ‘& alpha ; ‘ )); simplify ( rewrite (% , tan )); plot::TH: cria um objeto gráfico 3D que representa uma transformação homogênea passada como parâmetro como um frame, as cores dos eixos estão relacionadas com o padrão RGB, assim X̂ = vermelho, Ŷ = verde, Ẑ = azul; é possível alterar a cor de cada eixo como o parâmetro LineColorX (ou Y ou Z) e usar transparência. Ex.: plot ( plot :: TH ( rotx (0) , // sistema de referência LineColorX = [0.765625 , 0.0078125 , 0.19921875].[0.3] , LineColorY = [0.0 , 0.5078125 , 0.03515625].[0.3] , LineColorZ = [0.0 , 0.40625 , 0.74609375].[0.3]) , plot :: TH ( rotz ( a ) , a = 0 .. 3* PI /2)); // animação de uma rotação // de 270 º em torno de z X: cria uma matriz que representa o versor X̂. Y: cria uma matriz que representa o versor Ŷ . Z: cria uma matriz que representa o versor Ẑ. rbformatmatrix: formata uma matriz para apresentação na tela usando a convenção da robótica (abrevia senos e cossenos). Ex.: T03 : = dhm ( 0, 0 , ‘& theta ; ‘ [1] , 0) * simplify ( dhm ( PI /2 , 0 , ‘& theta ; ‘ [2] , d [2]) * dhm ( 0 , a [2] , ‘& theta ; ‘ [3] , 0) ): rbformatmatrix ( T03 ); rbmatrix2tex: formata uma matriz para gravação em um arquivo do LATEX ou para copiar e colar no LYX. O resultado é uma string. Ex.: print(Unquoted, rbmatrix2tex(T03)); onde T03 foi calculada no exemplo anterior (da função rbformatmatrix). rbopen: abre um arquivo do LATEX para gravar os resultados. Ver o último exemplo. rbclose: fecha um arquivo do LATEX para gravar os resultados. Ver o último exemplo. rbth2tex: formata uma matriz para gravação em um arquivo do LATEX para ou para copiar e colar no LYX incluindo o início da uma equação passada como primeiro parâmetro. Esta função é útil para gerar todas as transformações homogêneas no formato do LATEX. O exemplo a seguir mostra como esta função é usada para gravar um arquivo em LATEX com a matriz T03 que foi calculada no exemplo da função rbformatmatrix. Ex.: // para gerar só a matriz arq : = NOTEBOOKPATH . " teste . tex " : // O ponto (.) concatena as strings fprint ( Unquoted , NoNL , Text , arq , rbth2tex ( " ^0 _3 \\ mat { T } " , T03 )): // ou para gerar um arquivo pronto para ser convertido em PDF arq : = rbopen ( NOTEBOOKPATH . " teste . tex " ): fprint ( Unquoted , arq , rbth2tex ( " ^0 _3 \\ mat { T } " , T03 )); rbclose ( arq ); onde a string ^0_3\\mat{T} é o comando em LATEX para gerar 03 T . 11 de agosto de 2020 Prof. Luís Paulo Laus, Dr. Eng. 162 Referências Bibliográficas [1] Venturi, Jacir J. Álgebra vetorial e geometria analítica, 10a ed. ISBN 85-85 132-48-5, www.geometriaanalitica. com.br, Curitiba, 2015. [2] Craig, John J. Introduction to robotics : mechanics and control, 2nd ed. Reading : Addison-Wesley, 1989. [3] Niku, Saeed B. Introduction to robotics : analysis, systems, applications. Upper Saddle River : Prentice Hall, 2001. [4] Sciavicco, Lorenzo; Siciliano, Bruno. Modeling and control of robot manipulators, New York : McGraw-Hill, 1996. [5] Dam, Erik B.; Koch, Martin; Lillholm, Martin. Quaternions, Interpolation and Animation, Copenhagen : University of Copenhagen, 1998. [6] Featherstone, Roy. Robot Dynamics Algorithms. The Kluwer International Series in Engineering and Computer Science, Boston : Kluwer Academic, 1987. [7] Rodrigues, Benjamin Olinde. Des lois géométriques qui régissent les déplacements d’un système solide dans l’espace, et de la variation des coordonnées provenant de ces déplacement considérées indépendamment des causes qui peuvent les produire, Journal de mathématiques pures et appliquées 5 (1840), 380 – 440. 163