Uploaded by Rodrigo Barbosa Silva

Introdução à Robótica

advertisement
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(‘α‘);.
roty:
cria uma transformação homogênea que representa uma rotação em torno do eixo dos yy de um
ângulo dado. Ex.: roty(‘β‘);.
rotz:
cria uma transformação homogênea que representa uma rotação em torno do eixo dos zz de um
ângulo dado. Ex.: rotz(‘γ‘);.
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], ‘θ‘[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],‘θ‘[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
Download