MICHAEL YESID LOMBANA DIAZ ROBOTICA CUATERNIOS
Son una extensión de los números reales, similar a la de los números complejos, generada de manera análoga añadiendo las unidades imaginarias: i, j y k a los números reales y tal que i2 = j2 = k2 = ijk = − 1. Esto se puede resumir en esta tabla de multiplicación: la Tabla de Cayley (inglés). 1
i
j
k
1
1
i
j
K
I
i
-1
k
-j
J
j
-k
-1
i
k
k
j
-i
-1
1, i , j , k , son entonces las "bases" de las componentes de un cuaternión. EL ALGEBRA DE LOS CUATERNIOS
Así, un cuaternio es un elemento (α; x; y; z) € , pero considerando a este espacio no solamente como un espacio vectorial sino con una estructura algebraica que lo hace ser una algebra de división, como explicamos a continuación.
Dados dos elementos
, la suma p + q será la suma usual
es decir, si
Entonces:
Asimismo, definimos el producto de dos elementos
Es fácil verificar que
por:
es un anillo asociativo con 1, donde 1=(1,0,0,0).
Más aun, la base usual para el espacio vectorial
Es de particular importancia ya que bajo el producto (3.1) se tiene:
Por otra parte, si se introducen los símbolos
Se tiene que el conjunto es una base para y un c_alculo directo nos muestra que ij = k, mientras que ji = -k. Asimismo, jk = i, kj = -i. Finalmente, ki = j, mientras que ik = -j. De esta manera, representaremos un cuaternio por medio de una expresi_on de la Forma
Donde, x,y y z son numeros reales. Los ‘’simbolos" o ‘’unidades imaginarias" i, j, k satisfacen las propiedades:
FORMAS ALTERNATIVAS DE REPRESENTAR A LOS CUATERNIOS
Abordaremos ahora otras maneras de representar los cuaternios, las cuales nos permiten ver de forma mucho mas natural al conjunto realizables.
y así, estar seguros de que estos ‘’números" realmente son
Los cuaternios como matrices reales. Consideremos ahora el conjunto de las matrices de la forma:
Es claro que si p; q
, su suma, p + q
también esta en . En efecto, si p; q
. Lo que no resulta evidente es que el producto ,
De esta manera, pq
. Con cada cuaternio
α
+ xi + yj + zk
, asociamos una matriz en
de la siguiente manera:
Esta correspondencia nos define una función
tal que:
Giro de un punto arbitrario del espacio alrededor de un eje arbitrario del espacio mediante cuaternios Representar un punto (o un vector, o un eje que pasa por el origen) del espacio en forma de cuaternio es muy fácil, dado el vector: v = (x, y, z) El cuaternio que le corresponde es: q = (0, x, y, z) Es decir, un cuaternio que contiene al vector, pero cuya magnitud w es igual a 0. Un cuaternio construido como veremos a continuación, de alguna manera, representa la rotación de un punto cualquiera alrededor de un eje del espacio arbitrario. ¿Por qué? Consideremos un eje del espacio que pasa por el origen (o lo que es lo mismo, un vector):
v = (x, y, z) Consideremos también un punto arbitrario del espacio P que queremos girar "theta" radianes alrededor de ese eje: P = (x0, y0, z0) Ahora generemos un cuaternio unitario a partir del eje y del ángulo de esta manera: q = qw + qx*i + qy*j + qz*k Donde: qw = cos(theta/2) qx = +-sin(theta/2)*x/|v| qy = +-sin(theta/2)*y/|v| qz = +-sin(theta/2)*z/|v| Es decir: q = (cos(theta/2), +-sin(theta/2)*v/|v|) Pues bien, dado este cuaternio generado a partir del eje (o vector) v y del ángulo theta, obtenemos el siguiente sorprendente resultado: P' = q*(0, P)*q-1 Es decir, que el punto P una vez rotado, esto es P', viene dado por este simple producto de cuaternios (Esto se podría hacer también con cuaternios q no unitarios pero, puesto que hay que elegir, y puesto que es muy fácil calcular la inversa de un cuaternio unitario, es mejor hacerlo con unitarios.) Es factible pensar que Hamilton tuviera en cuenta y buscase éstas y otras sorprendentes propiedades de los cuaternios cuando los descubrió en 1843, a la edad de 38 años. El producto citado representa la rotación de P alrededor de un eje que pasa por el origen. Como antes, si lo que queremos es girar el punto "P" "theta" radianes alrededor de un eje "AB" y no respecto a un eje paralelo a "AB" que pase por el origen, la fórmula es: P' = A +f(P - A),donde: f(P) = q*(0, P)*q-1 P' = A + q*(0, P - A)*q-1 Esta fórmula es más general que la 3 porque sirve para girar cualquier punto alrededor de cualquier eje del espacio, incluso alrededor de uno que no pase por el origen.
MATLAB 15
15
10
10 Z Y X
Z e j E
5
Z e j E
Z Y X
Y
Z YX 5
0
Z
X
ZZ YX Y X
10
10
0
0 -10
0 -15
-10
Eje Y
-10
-5
Eje X
Z Z Y YX 0 X Eje X
5
10
15
15 15
Z YX
10
Z YX
5
10 Y e j E
Y X Z YZX
0
Z e j E
Y
-5
Y 5
Z
Z
X
X
-10
-15 -15
Z
-10
-5
0 Eje X
5
10
15
0 -15
-10
-5
Z YY X 0X Eje Y
5
10
15
CONCLUSIONES
El método de Hamilton solo rota un punto alrededor de un eje, pero este permanece en su posición inicial, dificultando la cinemática para 2 o más puntos. Se recomienda utilizar cinemática de cuaternios para puntos móvil, en donde se crean matrices de referencia para nuevos movimientos con respecto al anterior Se recomienda graficar 2 o mas métodos superpuestos en el plot, para verificar el correcto funcionamiento del método a estudiar, en este caso se comparo el método de Hamilton con el método de matrices de trasformación homogénea.
BIBLIOGRAFIA
[1]Cipri Santiago Zaragoza, ’’ Los Cuaternios De Hamilton’’ Departamento de Matemáticas, 2002 [2] Carlos Alberto Edo Soler’’ Rotaciones en MatLab mediante Matrices de Rotación y Cuaterniones´´
ANEXO clear all close all clc l1=8; l2=5; q1=90; q2=45; q3=30; %Transformación Homogénea P0=[0 0 0 1]'; A0=eye(4); A01=eye(4); A01=A01*Rz(q1); A01=A01*Ry(q2); A02=eye(4); A02(3,4)=l1; A02=A02*Ry(q3); A03=eye(4); A03(3,4)=l2; A04=eye(4); R3=A01*A02*A03*P0; view(3); grid on;hold on; axis([-15 15 -15 15 0 15]) axis square frame(A0,'b',1'); frame(A01,'r',1'); frame(A01*A02,'r',1'); frame(A01*A02*A03,'r',1'); % CUATERNIOS P01=[cosd(q1/2),0,0,sind(q1/2)]; P12=[cosd(q2/2),0,sind(q2/2),0]; P23=[cosd(q3/2),0,sind(q3/2),0]; P01c=[cosd(q1/2),0,0,-sind(q1/2)]; P12c=[cosd(q2/2),0,-sind(q2/2),0]; P23c=[cosd(q3/2),0,-sind(q3/2),0]; p2=[0,0,l1]; p3=[0,0,l2]; r=[0,0,0]; r2=QT(QT(P12,[0,r+p2]),P12c); r2=[r2(2),r2(3),r2(4)]; r2=QT(QT(P01,[0,r2]),P01c);r2=[r2(2),r2(3),r2(4)]; r3= QT(QT(P23,[0,p3]),P23c); r3=[R3(1),R3(2),R3(3)]; plot3([r(1),r2(1)],[r(2),r2(2)],[r(3),r2(3)],'b','linewidth',3.0) plot3([r2(1),r3(1)],[r2(2),r3(2)],[r2(3),r3(3)],'b','linewidth',3.0)