Manipuladores Robóticos

Aula 2: Descrição Espacial


Vinicius Mariano Gonçalves

Descrição Espacial

Um manipulador (ou um robô, no geral) pode ser visto como um conjunto de corpos rígidos (seus elos) que se movem (transladam e giram) à medida que os motores do robô são atuados.

É importante saber descrever como estará cada um dos elos – sua posição e orientação – à medida que o tempo varia. Isso é especialmente verdade para o efetuador.

Para isso temos que saber descrever esses corpos no espaço.

Começaremos a aprender como descrever rotações.



Rotações


Rotações

Matriz de Rotação

Temos a seguinte definição:

Definição: Uma matriz de rotação é uma matriz \(Q \in \mathbb{R}^{3 \times 3}\) com duas propriedades:

  • \(Q^TQ = QQ^T = I_{3 \times 3}\);
  • \(\det(Q) = +1\)

em que \(I_{3 \times 3}\) é a matriz identidade de ordem 3.

Rotações

Matriz de Rotação

A primeira condição (\(Q^TQ=I_{3 \times 3}\)) tem uma interpretação geométrica. Suponha que ela seja escrita como:
$$ Q = \LARGE{\Big(}\normalsize{}\begin{array}{ccc} Q_{xx} & Q_{xy} & Q_{xz} \\ Q_{yx} & Q_{yy} & Q_{yz} \\ Q_{zx} & Q_{zy} & Q_{zz} \end{array}\LARGE{\Big)}\normalsize{} = \left(\begin{array}{ccc} Q_{x} & Q_y & Q_z \end{array}\right)$$

em que \(Q_x, Q_y\) e \(Q_z\) são os vetores colunas que formam a matriz.

Então, lendo a primeira condição em termos das colunas, deduzimos que elas são ortonormais, ou seja, descrevem vetores ortogonais entre si e de tamanho unitário:

$$\begin{eqnarray} && Q_x^TQ_y = Q_x^TQ_z = Q_y^TQ_z = 0 \nonumber \\ && Q_x^TQ_x = Q_y^TQ_y = Q_z^TQ_z = 1. \nonumber \end{eqnarray}$$

Rotações

Matriz de Rotação

Ou seja, se escolhermos um referencial (conjunto de três vetores unitários ortogonais entre si) \(\mathcal{F}_0\) e considerarmos cada coluna de \(Q\) como um vetor escrito nesse referencial, teremos, ao terminar de desenhar os três vetores respectivos as três colunas, um outro conjunto de vetores ortogonais entre si e unitários, ou seja, outro referencial, \(\mathcal{F}_1\).

Rotações

Matriz de Rotação

A segunda condição, (\(\det(Q)=+1\)) implica que esse novo referencial \(\mathcal{F}_1\) é positivamente orientado de acordo com a regra da mão direita.

Isso significa que se você colocar, com a mão direita, o dedo polegar no eixo \(x\) e o dedo indicador no eixo \(y\), então o eixo \(z\) estará na palma de sua mão.

Rotações

Matriz de Rotação

Esse procedimento (interpretar as colunas de uma matriz de rotação \(Q\) como vetores em um referencial \(\mathcal{F}_0\), desenhá-los e obter um outro referencial \(\mathcal{F}_1\)) é muito relevante e será abordado em breve.

Temos então a primeira interpretação para uma matriz de rotação \(Q\):

Uma matriz de rotação \(Q\) representa um referencial \(\mathcal{F}_1\) escrito com relação a um outro referencial \(\mathcal{F}_0\).

Note que os dois referenciais têm o mesmo centro!

Rotações

Matriz de Rotação

Vamos agora para a segunda interpretação de uma matriz de rotação \(Q\):

Uma matriz de rotação \(Q\) implementa a rotação, em torno de um eixo específico escrito em um referencial \(\mathcal{F}_0\) - seguindo a regra da mão direita- e de um ângulo específico, de um ponto!

Rotações

Matriz de Rotação

Exemplo: Considere a matriz de rotação \(Q\): $$Q = \Large{\Bigg(}\normalsize{}\begin{array}{ccc} \frac{\sqrt{2}}{2} & -\frac{\sqrt{2}}{2} & 0 \\ \frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2} & 0 \\ 0 & 0 & 1 \end{array}\Large{\Bigg)}\normalsize{}.$$

Considere um referencial \(\mathcal{F}_0\), e um ponto que é escrito como um vetor coluna \(p\) em \(\mathcal{F}_0\). Então, o vetor \(p'=Qp\) representa, também escrito em \(\mathcal{F}_0\), o ponto \(p\) rodado de 45 graus no eixo \(z_0\).

Rotações

Matriz de Rotação

Então, se: $$p = \Large{\Bigg(}\normalsize{}\begin{array}{c} \frac{\sqrt{2}}{2} \\ \frac{\sqrt{2}}{2} \\ \frac{1}{2} \end{array}\Large{\Bigg)}\normalsize{} \ \ \ , \ \ \ p' = Qp = \Large{\Bigg(}\normalsize{}\begin{array}{c} 0 \\ 1 \\ \frac{1}{2} \end{array}\Large{\Bigg)}.$$

O ponto \(p'\) é o ponto \(p\) rodado de 45 graus no eixo \(z_0\).

Rotações

Matriz de Rotação

No UAIBot é possível calcular o eixo e o ângulo (em radianos) de uma matriz de rotação usando a função Utils.axis_angle:


import numpy as np
import uaibot as ub

Q = np.array([[0,-1,0],[1,0,0],[0,0,1]])
axis, angle = ub.Utils.axis_angle(Q)

print(axis) #Imprime [0. 0. 1.]
print(angle) #Imprime 1.570 rad
                        

Note que o eixo está escrito em um referencial \(\mathcal{F}_0\) genérico. O eixo é contextualizado quando aplicamos a matriz de rotação em um ponto \(p\) escrito em um referencial específico.

Rotações

Composição de Matrizes de Rotação

Duas rotações seguidas representadas por matrizes \(Q_1\) e \(Q_2\) (nessa ordem!) em um referencial \(\mathcal{F}_0\) formam uma outra rotação no referencial \(\mathcal{F}_0\) representada por uma matriz de rotação \(Q_3=Q_2Q_1\) (o produto das matrizes).

Note a ordem! A segunda rotação vem primeiro no produto! Rotações mais recentes vêm à esquerda!

Note também que os eixos de rotação sempre estão escritos no referencial \(\mathcal{F}_0\), que é fixo ao longo das rotações.

Atenção! rotações não comutam, no geral: $$Q_2Q_1 \not= Q_1Q_2.$$

Rotações

Composição de Matrizes de Rotação

Exemplo:

$$Q_1 = \large{\Bigg(}\normalsize{}\begin{array}{ccc} 1 & 0 & 0 \\ 0 & 0 & -1 \\ 0 & 1 & 0 \end{array}\large{\Bigg)}\normalsize{} \ \ , \ \ Q_2 = \large{\Bigg(}\normalsize{}\begin{array}{ccc} 0 & 0 & 1 \\ 0 & 1 & 0 \\ -1 & 0 & 0 \end{array}\large{\Bigg)}\normalsize{}.$$

A primeira matriz representa uma rotação de 90 graus em x, e a segunda 90 graus de y.

Rotações

Composição de Matrizes de Rotação

Então:

$$Q_1Q_2 = \large{\Bigg(}\normalsize{}\begin{array}{ccc} 0 & 0 & 1 \\ 1 & 0 & 0 \\ 0 & 1 & 0 \end{array} \large{\Bigg)}\normalsize{}\ \ , \ \ Q_2Q_1 = \large{\Bigg(}\normalsize{}\begin{array}{ccc} 0 & 1 & 0 \\ 0 & 0 & -1 \\ -1 & 0 & 0 \end{array} \large{\Bigg)}\normalsize{}.$$

A primeira matriz é uma rotação no eixo \(r=( \frac{\sqrt{3}}{3} \ \frac{\sqrt{3}}{3} \ \frac{\sqrt{3}}{3} )^T\) de um ângulo de 2,09 radianos.

A segunda matriz é uma rotação no eixo \(r=( \frac{\sqrt{3}}{3} \ \frac{\sqrt{3}}{3} \ -\frac{\sqrt{3}}{3} )^T\) de um ângulo de 2,09 radianos.

Rotações

Rotações Elementares

Temos as rotações elementares, rotações em x, y e z:

$$R_x(\theta) = \Large{\Bigg(}\normalsize{}\begin{array}{ccc} 1 & 0 & 0 \\ 0 & \cos(\theta) & -\sin(\theta) \\ 0 & \sin(\theta) & \ \ \cos(\theta) \end{array}\Large{\Bigg)}\normalsize{}.$$

$$R_y(\theta) = \Large{\Bigg(}\normalsize{}\begin{array}{ccc} \ \cos(\theta) & 0 & \sin(\theta) \\ 0 & 1 & 0 \\ -\sin(\theta) & 0 & \cos(\theta) \end{array}\Large{\Bigg)}\normalsize{}.$$

$$R_z(\theta) = \Large{\Bigg(}\normalsize{}\begin{array}{ccc} \cos(\theta) & -\sin(\theta) & 0 \\ \sin(\theta) & \ \ \cos(\theta) & 0 \\ 0 & 0 & 1 \end{array}\Large{\Bigg)}\normalsize{}.$$

Rotações

Rotações no UAIBot

No UAIBot, as rotações elementares estão implementadas:


import uaibot as ub

theta=3.14/2
Rx = ub.Utils.rotx(theta)
Ry = ub.Utils.roty(theta)
Rz = ub.Utils.rotz(theta)
                        

Nesse caso, as matrizes serão 4x4 em vez de 3x3, mas você pode recuperar as matrizes de rotação descartando a última linha e a última coluna. O porquê dessas matrizes estarem embutidas na matriz 4x4 ficará claro em breve.

Rotações

Rotações no UAIBot

Rotações em um eixo arbitrário \(r\) e um ângulo \(\theta\) também estão implementadas


import uaibot as ub

theta=3.14/2
r = [1,2,3]

R = ub.Utils.rot(r, theta)
                        

O eixo \(r\), se não estiver normalizado, é normalizado internamente na função. O tamanho do vetor \(r\) não importa.

Assim como antes, as matrizes serão 4x4 em vez de 3x3, mas, novamente, você pode recuperar as matrizes de rotação descartando a última linha e a última coluna.

Rotações

Decomposição de Matrizes de Rotação

Teorema: toda matriz de rotação \(Q\) pode ser decomposta em:

$$Q = R_z(\alpha)R_y(\beta)R_x(\gamma).$$

Os ângulos \(\alpha, \beta, \gamma\) são chamados de ângulos de Euler da rotação.

Há outras convenções de ângulo de Euler (ex: \(R_x(\alpha)R_y(\beta)R_x(\gamma)\)).

Os ângulos \( \gamma, \beta, \alpha \) também são chamados de roll (rolagem), pitch (arfagem) e yaw (guinada). , respectivamente.

Rotações

Ângulos de Euler no UAIBot

No UAIBot, os ângulos de Euler podem ser calculados usando a função Utils.euler_angles


import uaibot as ub
import numpy as np

Q = np.array([[0,0,1],[1,0,0],[0,1,0]])
alpha, beta, gamma = ub.Utils.euler_angles(Q)
print([alpha, beta, gamma])
                        

Rotações

Representações

Note que uma matriz de rotação tem 9 números.

Entretanto, esses 9 números não podem ser escolhidos arbitrariamente! Ou seja, nem toda matriz 3x3 é uma matriz de rotação.

Pode se mostrar que a restrição \(Q^TQ = I_{3 \times 3}\) impõe que há apenas 3 graus de liberdade para escolher os números.

Então 9 números parece ser uma representação pouco econômica de uma rotação. Há outras?

Rotações

Representações

Sim! Por exemplo, os Ângulos de Euler podem ser usados para representar uma rotação com apenas 3 números (a quantidade mínima de informação).

Essa representação tem problemas, entretanto. Por exemplo: como compor duas rotações representadas por ângulos de Euler? Em matrizes de rotação, basta multiplicá-las.

A representação não é única! Por exemplo, as triplas \(\alpha = t, \beta = \frac{\pi}{2}, \gamma = t\) representam a mesma rotação para todo \(t\) .

É descontínua! Rotações que são próximas podem ter ângulos de Euler radicalmente diferentes. Isso atrapalha na hora de derivar.

Rotações

Representações

Há outras. Por exemplo, os Quaternions representam uma rotação com 4 números.

Ela é quase única (apenas dois quatérnions para cada rotação), e é uma representação contínua.

Usaremos matrizes de transformação neste curso, entretanto, pois são mais comuns na literatura de robótica.

Rotações

Conexão entre duas interpretações

Vimos que temos duas interpretações para uma matriz de rotação:

(A): Ela representa uma referencial \(\mathcal{F}_1\) escrito em um referencial \(\mathcal{F}_0\)...

(B): Ela representa uma operação de rotação de um determinado eixo e ângulo escritos em um referencial \(\mathcal{F}_0\)...

O que conecta as duas?

Rotações

Conexão entre duas interpretações

Considere um referencial \(\mathcal{F}_0\). Nesse referencial, os eixos \(x_0\), \(y_0\) e \(z_0\) são escritos como os vetores \(x_0=(1 \ 0 \ 0)^T, y_0 = (0 \ 1 \ 0)^T\) e \(z_0 = (0 \ 0 \ 1)^T\).

Se aplicarmos a rotação especificada por \(Q\) (interpretação (B)) em cada um desses vetores, obteremos novos vetores \(x_1=Qx_0, y_1=Qy_0, z_1=Qz_0\)...

Esses três vetores, quando consideramos como escritos em \(\mathcal{F}_0\), formam um novo referencial positivamente orientado \(\mathcal{F}_1\), que é exatamente o mesmo que obteríamos usando a interpretação (A)!

Corpos Rígidos


Corpo Rígido

Definição

Do ponto de vista da Física, corpo rígido é um objeto idealizado que não pode sofrer deformações, contrações, expansões ou quebras devido às forças que nele agem.

Obviamente é uma aproximação, e se o objeto é um corpo rígido ou não depende das forças que estamos considerando.

Para forças razoáveis, podemos dizer que um cilindro de aço é um corpo rígido, enquanto uma bola de praia não.

Corpo Rígido

Definição

Do ponto de vista da Matemática, corpo rígido é um conjunto em que, para duas partículas quaisquer \(P_1\) e \(P_2\) dele, a distância entre elas permanece constante ao longo do movimento.

Ou seja, se \(p_1(t)\) e \(p_2(t)\) são as posições de duas partículas \(P_1\) e \(P_2\) ao longo do tempo, escritas com relação a um referêncial \(\mathcal{F}_0\), então para todos tempos \(t_A\) e \(t_B\) temos: $$\|p_1(t_A)-p_2(t_A)\| = \|p_1(t_B)-p_2(t_B)\|$$

em que \(\| \cdot \|\) é a norma Euclidiana do vetor.

Corpo Rígido

Descrevendo o movimento

Queremos agora fazer a descrição matemática do movimento de um corpo rígido.

Por isso, entenda-se descrever a trajetória de todas as partículas que formam um corpo rígido.

Corpo Rígido

Descrevendo o movimento

Note que isso seria extremamente difícil para um objeto genérico, como uma bola de praia. Afinal, a bola de praia pode transladar, rodar, contrair, distorcer, etc... de infinitas maneiras, extremamente complexas.

Felizmente, para um corpo rígido a movimentação das partículas está severamente limitada, o que nos permite uma descrição concisa do movimento.

Antes de entender como podemos fazer isso, precisamos entender o que é uma transformação rígida.

Corpo Rígido

Transformação Rígida

Definição: Uma transformação rígida é uma função \(T: \mathbb{R}^3 \mapsto \mathbb{R}^3\) com a seguinte propriedade: para dois pontos \(p_1\) e \(p_2\) quaisquer: $$\|T(p_1)-T(p_2)\|=\|p_1-p_2\|.$$

Em outras palavras, uma transformação rígida preserva a distância entre pontos!

Corpo Rígido

Transformação Rígida

Temos o seguinte teorema:

Teorema: para toda transformação rígida \(T\), existe uma matriz de rotação \(Q\) e um vetor \(s \in \mathbb{R}^3\) tal que \(T(p) = \pm(Qp+s)\), em que \(\pm\) representa uma troca de sinal arbitrária em cada elemento do vetor \(p'=Qp+s\).

Corpo Rígido

Transformação Rígida

A interpretação desse teorema é que toda transformação rígida é composta por três sub-operações:

  • Uma rotação por uma matriz \(Q\)...
  • ... seguido por uma translação por um vetor \(s\)...
  • ... seguido por uma reflexão em torno dos eixos principais.

Note que, em tudo isso, está subentendido um referencial \(\mathcal{F}_0\).

Corpo Rígido

Transformação Rígida

Trabalharemos aqui com transformações rígidas próprias, sem reflexão:

$$T(p) = Qp+s$$

ou seja, uma rotação e uma translação.

Corpo Rígido

Transformação Rígida e Movimento de Corpos Rígidos

Obviamente, há uma conexão entre o movimento de corpos rígidos e uma transformação rígida.

Sejam \(\mathcal{P}(t_A), \mathcal{P}(t_B) \subseteq \mathbb{R}^3\) conjuntos que representem as posições das partículas de um mesmo corpo rígido \(\mathcal{P}\) em dois tempos diferentes, \(t=t_A\) e \(t=t_B\).

Então existe uma única transformação rígida \(T_{AB}\) tal que todo ponto de \(\mathcal{P}(t_B)\) pode ser obtido a partir de um ponto de \(\mathcal{P}(t_A)\) através da aplicação de \(T_{AB}\). Matematicamente, existe uma transformação \(T_{AB}\) tal que: $$\forall p_B \in \mathcal{P}(t_B), \exists p_A \in \mathcal{P}(t_A) \ \mbox{tal que} \ p_B = T_{AB}(p_A).$$

Corpo Rígido

Transformação Rígida e Movimento de Corpos Rígidos

Em outras palavras, o conjunto em um tempo \(t_B\) pode ser obtido a partir do conjunto no tempo \(t_A\) pela aplicação em todos os pontos de uma transformação rígida \(T_{AB}\).

No desenho ao lado, por exemplo, o conjunto no tempo \(t_B\) é o conjunto no tempo \(t_A\) aplicando a transformação rígida \(T_{AB}\) que representa o deslocamento de uma unidade no eixo \(y_0\).

Note que, novamente, temos a figura implícita de um referencial \(\mathcal{F}_0\).

Corpo Rígido

Transformação Rígida e Movimento de Corpos Rígidos

Poderíamos então descrever o movimento do objeto fornecendo a todo instante de tempo a transformação rígida entre o tempo \(t=0\) e o tempo atual!

Há uma maneira mais conveniente...

Corpo Rígido

Transformação Rígida e Movimento de Corpos Rígidos

Vamos grudar um referencial \(\mathcal{F}_{obj}\) no objeto!

Por grudar entenda-se que toda transformação rígida que o objeto sofrer, o referencial também irá.

Note que um referencial, se considerarmos como formado por três "setas" ortogonais rígidas, também é um corpo rígido. Então podemos pensar, sem problemas, em aplicar uma transformação rígida em um referencial.

Note também que se soubermos como o referencial grudado está em um instante \(t\), sabemos como o objeto inteiro estará nesse mesmo tempo \(t\).

Corpo Rígido

Transformação Rígida e Movimento de Corpos Rígidos

Então, em vez de especificar a transformação do objeto no tempo \(t=0\) até um tempo \(t\) genérico, especificamos a transformação \(T_t\) entre o referencial base, \(\mathcal{F}_0\), e o do objeto, \(\mathcal{F}_{obj}\) naquele tempo \(t\)!

Isso é mais simples pois (i) não mais precisamos saber explicitamente como o objeto estava em \(t=0\) e (ii) é mais fácil especificar transformações rígidas entre objetos simples como referenciais do que entre objetos complexos, como um corpo rígido arbitrário.

Corpo Rígido

Transformação Rígida e Movimento de Corpos Rígidos

Exemplo:

No tempo \(t\) mostrado ao lado a transformação \(T_t\) seria a de rotação de -30 graus no eixo \(x_0\) (note que ele está rodado 30 graus no sentido negativo), o deslocamento de 2 unidades em \(y_0\) e 1 unidade em \(z_0\).

Como o objeto estava em \(t=0\)? Não há como saber...

Corpo Rígido

Transformação Rígida e Movimento de Corpos Rígidos

Para descrever o movimento de um corpo rígido, precisamos fornecer a todo tempo \(t\) a transformação \(T_t\).

Já que \(T_t(p) = Q(t)p+s(t)\), isso equivale a fornecer, a todo instante de tempo \(t\), a matriz de rotação \(Q(t)\) e o vetor de deslocamento \(s(t)\).

Podemos fornecer essas duas informações usando apenas uma matriz.

Matriz de Transformação Homogênea


Matriz de transformação Homogênea

Definição

Definição: Uma matriz de transformação homogênea (MTH) é uma matriz \(H \in \mathbb{R}^{4 \times 4}\) montada da seguinte forma:

$$H = \left(\begin{array}{cc} Q & s \\ 0_{1 \times 3} & 1 \end{array}\right)$$

em que \(Q \in \mathbb{R}^{3 \times 3}\) é uma matriz de rotação, \(s \in \mathbb{R}^{3 \times 1}\) é um vetor coluna, e \(0_{1 \times 3}\) é um vetor linha nulo de três elementos.

Uma matriz de transformação homogênea representa uma transformação rígida, e vice-e-versa.

Matriz de transformação Homogênea

Composição de transformações rígidas

MTHs têm várias utilidades ao representar transformações rígidas.

Por exemplo, a composição de transformações rígidas também é uma transformação rígida. Se \(T_1(p) = Q_1p+s_1\) e \(T_2(p) = Q_2p+s_2\). Então: $$T_2(T_1(p)) = (Q_2Q_1)p + (Q_2s_1+s_2).$$

Note que, assim como no caso de rotações, as transformações não necessariamente comutam: (\(T_2T_1 \not= T_1T_2\))

Matriz de transformação Homogênea

Composição de transformações rígidas

Sejam as respectivas MTH das transformações \(T_1\), \(T_2\) e \(T_3 = T_2T_1\):

$$H_1 = \left(\begin{array}{cc} Q_1 & s_1 \\ 0_{1 \times 3} & 1 \end{array}\right) \ , \ H_2 = \left(\begin{array}{cc} Q_2 & s_2 \\ 0_{1 \times 3} & 1 \end{array}\right),$$

$$H_3 = \left(\begin{array}{cc} Q_2Q_1 & Q_2s_1+s_2 \\ 0_{1 \times 3} & 1 \end{array}\right).$$

Não é difícil ver que \(H_3 = H_2H_1\), ou seja, se representarmos transformações rígidas por MTH, a composição de duas transformações é o produto matricial (na ordem correta) das respectivas MTHs!

Matriz de transformação Homogênea

MTH Básicas

Temos 4 MTHs básicas, representando rotações em \(x, y\) e \(z\) e uma translação de um vetor \(s \in \mathbb{R}^{3 \times 1}\)

$$\tilde{R}_x(\theta) = \left(\begin{array}{cc} R_x(\theta) & 0_{3 \times 1} \\ 0_{1 \times 3} & 1 \end{array}\right) \ , \ \tilde{R}_y(\theta) = \left(\begin{array}{cc} R_y(\theta) & 0_{3 \times 1} \\ 0_{1 \times 3} & 1 \end{array}\right), $$

$$\tilde{R}_z(\theta) = \left(\begin{array}{cc} R_z(\theta) & 0_{3 \times 1} \\ 0_{1 \times 3} & 1 \end{array}\right) \ , \ \tilde{D}(s) = \left(\begin{array}{cc} I_{3 \times 3} & s \\ 0_{1 \times 3} & 1 \end{array}\right). $$

Em que \(R_x(\theta), R_y(\theta)\) e \(R_z(\theta)\) são as matrizes de rotação 3x3.

Matriz de transformação Homogênea

No UAIBot

No UAIBot, essas quatro matrizes são implementadas com as funções Utils.rotx, Utils.roty, Utils.rotz, Utils.trn


import numpy as np
import uaibot as ub

theta=3.14/2
s = [1,2,3]

Rx = ub.Utils.rotx(theta)
Ry = ub.Utils.roty(theta)
Rz = ub.Utils.rotz(theta)
D = ub.Utils.trn(s)
                        

Agora está explicado o porquê das matrizes de rotação serem 4x4 (e não 3x3): elas estão na sua forma de MTH.

Matriz de transformação Homogênea

Duas Interpretações

Vimos que uma matriz de rotação \(Q\) tem duas intepretações (como referencial e como operador).

Uma MTH também tem duas, analogamente. Já vimos uma:

Uma MTH representa uma operação de transformação rígida, dado um referencial \(\mathcal{F}_0\), pois a partir dela podemos extrair os elementos \(Q\) e \(s\) e criar a transformação \(T(p)=Qp+s\).

Uma matriz de rotação representa uma operação de rotação, que é um caso especial de transformação rígida. Uma MTH representa uma transformação rígida mais geral.

Matriz de transformação Homogênea

Duas Interpretações

Podemos imaginar qual é a segunda interpretação:

Uma MTH representa um referencial \(\mathcal{F}_1\) escrito em outro referencial \(\mathcal{F}_0\).

A diferença é que, enquanto uma matriz de rotação representa um referencial \(\mathcal{F}_1\) que tem o mesmo centro que \(\mathcal{F}_0\), uma MTH representa um referencial genérico cujos centros não necessariamente coincidem.

Matriz de transformação Homogênea

Duas Interpretações

É muito simples ler o referencial.

  • Primeiro desenhamos o referencial considerando só a matriz de rotação, \(Q\), conforme visto anteriormente.
  • Depois, usamos o vetor \(s\) para deslocar o centro.

Matriz de transformação Homogênea

Duas Interpretações

Assim como no caso das matrizes de rotação, há uma conexão entre as duas interpretações.

Se aplicarmos a transformação descrita por \(H\) nos três vetores do referencial \(\mathcal{F}_0\), obtemos um referencial \(\mathcal{F}_1\) que é o mesmo que obteríamos pela interpretação que \(H\) representa um referencial.

Matriz de transformação Homogênea

Exemplo

Considere um corpo rígido em que, em um determinado de instante tempo \(t=10s\), tenha sua pose descrita pela MTH \(H\) no referencial \(\mathcal{F}_0\). Desenhe como o objeto estará no tempo \(t=10s\).


Matriz de transformação Homogênea

Exemplo

Muito importante: a informação dada nos permite apenas saber como está o corpo rígido no tempo \(t=10s\)! Sem mais informações, não é possível inferir mais nada. Por exemplo, não sabemos nada como ele estava no tempo \(t=0\) nem como ele se moveu de lá para o tempo \(t=10s\).

Matriz de transformação Homogênea

Descrição Contínua do Movimento

Para sabermos o movimento completo, precisaríamos saber, a todo instante de tempo \(t\), a matriz de transformação homogênea \(H(t)\).

Na animação ao lado, é fornecido, a todo instante de tempo, a matriz \(H(t)\). Desta forma, é possível fazer um rastreamento contínuo do movimento do objeto.

Composição de MTHs


Composição de MTHs

Para terminar, temos que falar um pouco mais sobre a composição de transformações rígidas, descritas como MTHs.

A partir de agora, vamos usar os símbolos \(R_x(\theta), R_y(\theta), R_z(\theta), D_x(d), D_y(d), D_z(d)\) para as MTHs de rotações e deslocamentos, respectivamente, em que \(\theta, d \in \mathbb{R}\).



Composição de MTHs

Considere um referencial \(\mathcal{F}_0\). Aplicamos as transformações representadas pelas MTHs \(H_1, H_2, H_3\) e \(H_4\), nessa ordem.

Teremos então uma MTH final \(H_{F} = H_4 H_3 H_2 H_1\), em que as transformações mais recentes vêm à esquerda, multiplicando a matriz.

Note que todas as transformações são interpretadas em \(\mathcal{F}_0\). Portanto, se \(H_2\) é um deslocamento em \(z\) de 5 unidades, aplicaremos um deslocamento em \(z_0\) de 5 unidades.



Composição de MTHs

Considere a sequência de transformações a seguir:

$$H = R_x(\pi/4) D_y(-0.25) R_z(\pi/2) D_x(1).$$

Note a ordem (\(D_x(1)\) primeiro, \(R_z(\pi/2)\) depois, etc...).

Lemos da direita para a esquerda!

Veja o vídeo ao lado com a sequência de transformações.

Note que todas as transformações são feitas com relação ao referencial \(\mathcal{F}_0\).


Composição de MTHs

Há outra maneira de interpretar a mesma transformação!

Chegaremos no mesmo referencial final \(H\) se lermos da esquerda para direita, mas considerando que as transformações são interpretadas no referencial atual em vez de \(\mathcal{F}_0\)!

Veja o vídeo ao lado com a sequência de transformações.

Note que o referencial final é o mesmo! Só os referenciais intermediários mudam.


Composição de MTHs

Assim, ao fazer uma composição de transformações, podemos multiplicar a matriz à esquerda ou a direita:

  • À esquerda: fazemos a transformação usando o referencial inicial, \(\mathcal{F}_0\)!
  • À direita: fazemos a transformação usando o referencial atual!

As duas aplicações são úteis. Em robótica, entretanto, é mais comum fazermos aplicações à direita (no referencial atual).



Composição de MTHs

Cadeia de transformações

A ideia de multiplicações à direita (escritas no referencial atual) é frequentemente usada para fazer uma cadeia de transformações!

Considere três referenciais \(\mathcal{F}_A\), \(\mathcal{F}_B\) e \(\mathcal{F}_C\). Considere que temos a transformacão rígida \(T_A^B\) entre \(\mathcal{F}_A\) e \(\mathcal{F}_B\), e a transformacão rigida \(T_B^C\) entre \(\mathcal{F}_B\) e \(\mathcal{F}_C\). Como obter a transformacão entre \(\mathcal{F}_A\) e \(\mathcal{F}_C\)?

Composição de MTHs

Cadeia de transformações

Primeiro transformamos do referêncial \(\mathcal{F}_A\) para \(\mathcal{F}_B\), que é a matriz \(T_A^B\). Depois, como a transformação \(T_B^C\) está escrita em \(\mathcal{F}_B\), multiplicamos à direita para obter \(T_A^C = T_A^B T_B^C\).

A mesma lógica seria válida se tivéssemos, por exemplo, um quarto referencial \(\mathcal{F}_D\) e a transformação \(T_C^D\). Teríamos \(T_A^D = T_A^B T_B^C T_C^D\)...

Vamos, de agora em diante, usar a notação \(T_A^B\) para representar a transformação de \(\mathcal{F}_A\) para \(\mathcal{F}_B\). Pela outra interpretação de MTHs, essa matriz também dá o referencial \(\mathcal{F}_B\) escrito em em \(\mathcal{F}_A\).

Conclusão

Podemos descrever o movimento de um corpo rígido se (1) escolhermos um referencial base \(\mathcal{F}_0\) e (2) grudarmos um referencial \(\mathcal{F}_{obj}\) nele.

A partir disso, basta fornecer a todo instante de tempo \(t\) a MTH que representa a transformação rígida entre o referencial \(\mathcal{F}_0\) (fixo) e o do objeto \(\mathcal{F}_{obj}\) (móvel) naquele instante de tempo \(t\).

Tendo como está o referencial \(\mathcal{F}_{obj}\) naquele tempo, conseguimos dizer exatamente como estão todas as partículas do corpo rígido naquele instante de tempo, cumprindo nosso objetivo de fazer a descrição de movimento do objeto.