Clase 03
Localización Espacial¶
¿Por qué es importante conocer la localización espacial de un robot?¶
- Para que el robot pueda manipular con precisión objetos y herramientas.
Representación de la Posición¶
Coordenadas homogenes¶
$$ M = \begin{bmatrix}x\\ y\\ z\\ k\end{bmatrix} = \begin{bmatrix}a\,k\\ b\,k\\ c\,k\\ k\end{bmatrix} = \begin{bmatrix}a\\ b\\ c\\ 1\end{bmatrix} $$
Matrices de Transformación Homogénea¶
Está formada por cuatro submatrices
- una matriz de rotación ($R$)
- un vector de translación ($P$)
- una transformación de perspectiva ($F$)
- un escalado global ($W$)
$$ T = \begin{bmatrix}R_{3x3}&& P_{3x1}\\ F_{1x3}&& W_{1x1}\end{bmatrix} $$
¿Qué podemos hacer con matriz de transformación homogénea?¶
- Conocer la orientación y posición de un sistema respecto a otro de referencia.
- Conocer la rotación y traslación de un vector respecto a un sistema de referencia fijo.
Traslación¶
- La traslación es el movimiento de un sistema de coordenadas $O'ABC$ con respecto a otro $O'XYZ$.
- La matriz homogénea de traslación se calcula con los vectores de traslación $(vx, vy, vz)$.
x,y,z = sp.symbols('x,y,z')
display(sp.Matrix(translation(x,y,z)))
Rotación¶
- La rotación es el movimiento angular de un sistema $O'ABC$ con respecto a otro $O'XYZ$.
- Hay matrices de rotación con respecto a los ejes $OX$, $OY$ y $OZ$.
Rotación con respecto a X¶
$$ T_x(\alpha) = \begin{bmatrix} 1&0&0&0 \\ 0&\cos(\alpha)&-\sin(\alpha)&0 \\ 0&\sin(\alpha)&\cos(\alpha)&0 \\ 0&0&0&1 \end{bmatrix} $$
Rotación con respecto a Y¶
$$ T_y(\phi) = \begin{bmatrix} \cos(\phi)&0&\sin(\phi)&0 \\ 0&1&0&0 \\ -\sin(\phi)&0&\cos(\phi)&0 \\ 0&0&0&1 \end{bmatrix} $$
Rotación con respecto a Z¶
$$ T_z(\theta) = \begin{bmatrix} \cos(\theta)&-\sin(\theta)&0&0 \\ \sin(\theta)&\cos(\theta)&0&0 \\ 0&0&1&0 \\ 0&0&0&1 \end{bmatrix} $$
Rotación y Traslación Combinadas¶
- El orden de aplicación de la rotación y traslación es importante.
R = rotation_z(np.deg2rad(45))
T = translation(10,0,0)
origin1 = R@T@origin
origin2 = T@R@origin
ax = plt.figure().add_subplot()
plot_origin2D(ax,origin)
plot_origin2D(ax,origin1)
plot_origin2D(ax,origin2)
ax.axis('equal');
Cuaternios¶
Los cuaternios son una extensión de los números reales, con cuatro coordenadas. Son útiles para representar la orientación, tienen una composición simple y son eficientes.
$$ Q= q_0 e + q_1\hat{i} + q_2\hat{j} + q_3\hat{k} $$
Se usan en la composición de solo rotaciones. También se puede definir por el vector de rotación y el angulo de rotación.
Propiedades de los Cuaternios¶
- Conjugación: Invierte el signo de la parte vectorial.
- Producto: Operación importante para las transformaciones.
- Suma: Suma de las partes escalares y vectoriales.
- Producto Escalar: Multiplicación por un escalar.
- Norma: Se calcula con la parte real del producto del cuaternio por su conjugado.
- Inverso: Se calcula con el conjugado del cuaternio dividido por su norma.
Representación y Composición de Rotaciones con Cuaternios¶
Representar un giro sobre un eje. La rotación de un vector $p$ se hace con la fórmula
$$ p' = Q \cdot (0,p) \cdot Q^{-1} $$
La composición de rotaciones se logra multiplicando cuaternios
Ejemplo de la rotación de un vector¶
Tomemos por ejemplo el punto/vector $p = 10\hat{i}$ y rotemoslo sobre el eje $(0,0,1)$, 45 grados. El resultado será:
Q = rotation_quaternion(np.deg2rad(45),[0,0,1])
Qinv = Q.inverse()
P = np.quaternion(0,10,0,0)
PL2G = Q*P*Qinv
display(PL2G)
quaternion(0, 7.07106781186548, 7.07106781186548, 0)
Comparación de Métodos de Localización¶
| Característica | Matrices de Transformación Homogénea | Cuaternios |
|---|---|---|
| Representación | Posición y orientación (traslación y rotación) | Orientación relativa (rotación) |
| Componentes | 12 (matriz de 4x4) | 4 |
| Composición | Complicada (multiplicación de matrices) | Eficiente (multiplicación de cuaternios) |
| Uso Principal | Transformaciones en el espacio 3D, robótica, gráficos por computadora | Rotaciones, interpolación de rotaciones (SLERP) |
Relación entre Métodos¶
Es posible pasar de un método a otro mediante la representación auxiliar intermedia del eje y el ángulo de rotación.
- Relación Directa: Expresa la matriz de transformación en función de un cuaternio.
- Relación Inversa: Permite calcular un cuaternio a partir de una matriz de transformación.
Relación Directa (Matriz desde Cuaternio)¶
A partir de un cuaternio $q = w + xi + yj + zk$, la matriz de rotación $R$ correspondiente se calcula como:
$$ R = \begin{bmatrix} 1-2(y^2+z^2) & 2(xy-zw) & 2(xz+yw) \\ 2(xy+zw) & 1-2(x^2+z^2) & 2(yz-xw) \\ 2(xz-yw) & 2(yz+xw) & 1-2(x^2+y^2) \end{bmatrix} $$
Relación Inversa (Cuaternio desde Matriz)¶
Para obtener un cuaternio a partir de una matriz de rotación, se pueden usar fórmulas que evitan la ambigüedad, como el método de la traza de la matriz:
$$ \begin{align*} w &= \frac{1}{2}\sqrt{1+R_{11}+R_{22}+R_{33}} \\ x &= \frac{R_{32}-R_{23}}{4w} \\ y &= \frac{R_{13}-R_{31}}{4w} \\ z &= \frac{R_{21}-R_{12}}{4w} \end{align*} $$