Forum Docentis

Buscador

Forum Docentis - Sección AP, Vol. 2023, Núm. 1 (2023)
ISSN: 2952-3052
doi: https://doi.org/10.33732/FD.v2023.n1.17
Recepción: 29/11/2023, Aceptación: 13/02/2024

Cuaternios en Robótica

Guillermo Vera de Salas1*

1Departmento de Matemática Aplicada, Universidad Rey Juan Carlos

*Autor de correspondencia: guillermo.vera@urjc.es

Resumen

En este trabajo introducimos el álgebra de cuaternios ℍ. Desde la teoría del álgebra lineal, construimos las matrices asociadas a ciertos endomorfismos en ℍ que se identificarán con rotaciones en ℝ3, para acabar con un ejemplo práctico de como describir el movimiento de un brazo robótico en términos de cuaternios.

Palabras clave
Cuaternios — Robótica — Rotaciones

© 2023 Los autores. Publicado por URJC. Este es un artículo de acceso abierto con licencia CC BY.
Cómo citar este artículo: Criado, R. Teora de conjuntos, funciones, familias y cardinalidad; Forum Docentis - AP vol. 2023, (1), e17, 2023

Índice

Introducción

1Operaciones en los cuaternios

1.1 Representación matricial

2Rotaciones en ℝ3

2.1 Ángulos de Euler

2.2 Rotación con vector y ángulo de rotación

2.3 Rotación con cuaternios

3Espacio afín ℝ3

3.1 Ecuación de cambio de sistemas de referencias expresada en cuaternios

4Ejemplo práctico

Referencias

Introducción

En el siglo XIX, el matemático, físico y astrónomo irlandés W.R. Hamilton definió unos nuevos elementos

q=s+xi+yj+zk

donde i, j, k representan unidades imaginarias satisfaciendo

i2=j2=k2=1,ij=k,jk=i,ki=j,ji=k,kj=i,ik=j                                                           (1)

con s, x, y, z. Usualmente, para recordar las propiedades (1) se suele hacer alusión al diagrama:

entendiendo además que si un producto va en el sentido horario entonces le acompaña un signo positivo, y si va en sentido antihorario el producto aparecerá con un signo negativo.

Estos elementos reciben el nombre de cuaternios y el conjunto de todos los cuaternios ℍ conforman una estructura de álgebra no conmutativa sobre .

Sin embargo, introduciremos una notación distinta para expresar un cuaternio, basada en [1]:

q=[s,v]=[s,xi+yj+zk],                                                           (2)

donde diremos que s es la parte real del cuaternio y v = xi + yj + zk la parte vectorial del cuaternio. Haciendo un abuso de la notación, denotaremos al cuaternio 1 = [1, 0], i = [0, i], j = [0, j] y k = [0, k].

Diremos que un cuaternio q = [s, v] es un cuaternio puro si s = 0, es decir, q = [0, v] y, diremos que q es un cuaternio real si v = 0, es decir, q = [s, 0].

1. Operaciones en los cuaternios

Durante toda esta sección consideremos los cuaternios

q=[s,v]=[s,xi+yj+zk],qa=[sa,a]=[sa,xai+yaj+zak],qb=[sb,b]=[sb,xbi+ybj+zbk] y un escalar λ ∈ ℝ.

Suma

qa+qb=[sa,a]+[sb,b]:=[sa+sb,a+b]                                                           (3)

Ejemplo.

[2,3i+2k]+[4,i+3j4k]=[6,2i+3j2k].

Producto por un escalar

λq = λ[s, v] := [λs, λv]                                                           (4)

Ejemplo.

3 [1, i  j + 2k] = [3, 3i  3j + 6k].

La suma y producto por un escalar definidos anteriormente dotan a ℍ de estructura de espacio vectorial sobre ℝ. Además, dim ℍ = 4 ya que Bc = {1, i, j, k} constituye una base, que llamaremos base canónica de ℍ.

Producto

qaqb=[sa,a][sb,b]:=[sasbab,sab+sba+a×b]                                                           (5)

donde a · b recuerda al producto escalar usual en ℝ3, es decir,

a · b := xaxb + yayb + zazb,

y a × b también recuerda al producto vectorial en ℝ3, es decir,

a × b := (yazb  zayb)i + (zaxb  xazb)j + (xayb  yaxb)k.

Ejemplo. Sean qa = [2, −3i + 2k] y qb = [−1, i + 3jk]. Entonces

sasb=2(1)=2,ab=(3)1+03+2(1)=5

sab=2(i+3jk)=2i+6j2k,sba=(1)(3i+2k)=3i2k

a×b=(0(1)23)i+(21(3)(1))j+((3)301)k=6ij9k.

De modo que el producto qaqb es

[2,3i+2k][1,i+3jk]=[2(5),(2i+6j2k)+(3i2k)+(6ij9k)]=[3,i+5j13k].

Aunque este producto así presentado parezca artificial, viene tan sólo de desarrollar

(sa+xai+yaj+zak)(sb+xbi+ybj+zbk)

teniendo en cuenta las propiedades (1):

(sa+xai+yaj+zak)(sb+xbi+ybj+zbk)=sasb+saxbi+saybj+sazbk+xasbi+xaxbi2+xaybij+xazbik+yasbj+yaxbji+yaybj2+yazbjk+zasbk+zaxbki+zaybkj+zazbk2=sasbxaxbyaybzazb+(saxb+xasb+yazbzayb)i+(sayb+yasb+zaxbxazb)j+(sazb+zasb+xaybyaxb)k

Ejercicio 1. Calcular los siguientes productos: ij, kj, ijk.

Ejercicio 2. Calcular qbqa con qa y qb del ejemplo anterior y comprobar que qaqbqbqa.

Conjugación

q* := [s, v]                                                           (6)

Ejemplo.

[2, i + j + k]* = [2, i  j  k].

Ejercicio 3. Comprobar que (qaqb)*=qb*qa*.

Norma

|q|:=s2+|v|2=s2+x2+y2+z2, donde |v|2:=vv=x2+y2+z2                                                           (7)

Diremos que un cuaternio q es unitario si |q| = 1. Una observación inmediata es que |v| ≤ |q| y la igualdad sólo se da si y solo si q es un cuaternio puro, es decir, s = 0.

Ejemplo. Los cuaternios 1, i, j, k son unitarios, es decir,

|1| = |i| = |j| = |k| = 1.

Ejemplo. Sea q = [s, v] = [−1, 2 i + jk]. Entonces

|q|=(1)2+22+12+(1)2=7y|v|=22+12+(1)2=6.

Por otra parte, cualquier v = x i + y j + z k se puede reescribir como |v|v^ donde |v^| = 1.

Ejemplo. Sea q = [s, v] = [-1, 2i + jk]. Ya sabemos por el ejemplo anterior que |v|=6, entonces

v=6(26i+16j16k)=|v|v^,

es decir, v^=26i+16j-16ky podemos expresar

q=[1,6(26i+16j16k)]=[s,|v|v^].

Ejercicio 4. Comprobar que |qaqb| = |qa||qb|.

Ejercicio 5. Calcular |q| donde q = [cos(θ), sin(θ)v] y |v| = m.

Ejercicio 6. Comprobar que qq* = [|q|2,0].

Cuaternios unitarios

Todo cuaternio q = [s, v] unitario satisface s2 + |v|2 = 1 por lo que existe θ ∈ [0, 2π) tal que s = cos(θ) y |v| = sin(θ). Así, podemos reescribir q como

q=[s,v]=[s,|v|v^]=[cos(θ),sin(θ)v^],|v^|=1.

Es más, por motivos que veremos más adelante, resultará más interesante considerar θ2 en lugar de θ, quedando la expresión, para un cuaternio unitario q:

q=[cos(θ2),sin(θ2)v^],|v^|=1.                                                           (8)

Ejemplo. Los cuaternios q=[22,22j]yq=[32,1214i+3214j114k]son unitarios, ya que

|q|2=(22)2+(22)2=12+12=1,

y

|q|2=(32)2+(1214)2+(3214)2+(114)2=34+156+956+114=1.

Entonces, para q sabemos que cos(θ2)=22, es decir, θ=π2, y para q′ sabemos que cos(θ2)=32, es decir, θ=π3.Y por tanto los podemos reescribir como:

q=[cos(π22),sin(π22)j],q=[cos(π32),sin(π32)(114i+314j214k)].

Inverso

q1=1|q|2q=1|q|2[s,v].                                                           (9)

Ejemplo. Si q = [—2, 3 ij + k] entonces

q=[2,3i+jk],

|q|2=(2)2+32+(1)2+12=4+9+1+1=15,

y por tanto

q1=115q=[215,15i+115j115k].

Sabiendo la expresión general del inverso de un cuaternio se puede afirmar que un cuaternio q ∈ ℍ es unitario si y solo si q−1 = q*.

Ejercicio 7. Comprobar que qq−1 = 1.

Ejercicio 8. Comprobar que (qaqb)1=qb1qa1.

1.1 Representación matricial

Como ya hemos visto, los cuaternios ℍ se pueden ver como un espacio vectorial sobre ℝ de dimensión 4 con Bc = {1, i, j, k} una base. Observar que, para cualquier q = [s, v] = [s, xi + yj + zk] ∈ ℍ, las coordenadas de q en Bc son, y denotaremos,

[q]:=[q]Bc=[sxyz]                                                           (10)

Ejemplo. Sea q = [2, 4i + 7j − 2k] un cuaternio cualquiera:

[1]=[1000],[i]=[0100],[j]=[0010],[k]=[0001],[q]=[2472].

Ejercicio 9. Hallar las coordenadas de qaqb en la base canónica Bc. Ayuda: desarrolla la expresión (5).

Sea q ∈ ℍ y consideremos las transformaciones Iq : ℍ → ℍ y Dq : ℍ → ℍ, definidas como

Iq(p):=qp,Dq(p):=pq                                                           (11)

es decir, la multiplicación por la izquierda y por la derecha, respectivamente, por un cuaternio cualquiera q. Así, vamos a identificar estas transformaciones con una matriz tal que reflejen el producto entre cuaternios. Antes de nada, se observa que son transformaciones lineales: Sean q,p,p′ ∈ ℍ y α,β ∈ ℝ

Iq(αp+βp)=q(αp+βp)=αqp+βqp=αIq(p)+βIq(p),Dq(αp+βp)=(αp+βp)q=αpq+βpq=αDq(p)+βDq(p).

De modo que podremos hallar su matriz asociada respecto de la base canonica Bc = {1, i, j, k}. Para ello, para un cuaternio cualquiera q = [s, v] = [s, xi + yj + zk], calculemos

Iq(1)=q1=q,Iq(i)=qi=[x,si+zjyk],Iq(j)=qj=[y,zi+sj+xk],Iq(k)=qk=[z,yixj+sk].

Por tanto, la matriz asociada a Iq respecto de Bc, que representamos por M(Iq) := M(Iq)BcBc, es

M(Iq)=(sxyzxszyyzsxzyxs)                                                           (12)

que satisface

M(Iqa)[qb]=(saxayazaxasazayayazasaxazayaxasa)[sbxbybzb]=[sasbxaxbyaybzazbxasb+saxbzayb+yazbyasb+sayb+zaxbxazbxasb+saxb+zaybyazb]=[qaqb].

Ejercicio 10. Comprobar que M(Iq)−1 = M(Iq−1).

Ejercicio 11. Calcular M(Iq)M(Iq)Deducir que q ∈ ℍ es unitario si y solo si M(Iq) es una matriz ortogonal, es decir, M(Iq) = M(Iq)−1.

Ejercicio 12. Calcular M(Dq):= M(Dq)BcBcy comprobar que M(Dqa)[qb] = [qbqa].

Ejercicio 13. Comprobar que

M(Dq1)=(sxyzxszyyzsxzyxs).                                                           (13)

Ejercicio 14. Si q es unitario comprobar que

M(Dq1)M(Iq)=M(Iq)M(Dq1)=(1000012(y2+z2)2(xysz)2(xz+sy)02(xy+sz)12(x2+z2)2(yzsx)02(xzsy)2(yz+sx)12(x2+y2)).                                                           (14)

Comprobar también que M(Dq1)M(Iq)=M(Dq1Iq)=M(IqDq1).

Por último, también se puede establecer un isomorfismo entre el subespacio vectorial de ℍ generado por los cuaternios puros {i,j,k}, que lo denotaremos por E, y el espacio vectorial ℝ3. Más concretamente,

·:ER3, tal quei=[0,i]i:=[100],j=[0,j]j:=[010],k=[0,k]k:=[001],                                                           (15)

es un isomorfismo lineal.

2. Rotaciones en3

En muchos campos de la ingeniería, y en particular en robótica y aeronáutica, es importante conocer tanto la orientación como la posición espacial de los objetos, ya sea un brazo robótico, un objeto volador, etc. En particular, si la orientación y posición puede expreserase en dos sistemas referencias, es interesante estudiar la relación entre ambas expresiones. Esto es, dada una orientación y posición que describa un objeto respecto a un sistema de referencias, el problema consistirá en describir su orientación y posición respecto a otro sistema de referencias. Vamos a suponer que podemos identificar la relación entre orientaciones mediante una rotación, y la relación entre posiciones se podrá identificar con una concatenación de rotaciones y traslaciones.

Primeramente, una orientación respecto a un primer sistema lo describiremos mediante una base ortonormal B={b1 ,b2,b3}, y respecto a un segundo sistema mediante otra base ortonormal C={c1 ,c2,c3}. Entonces, estudiar la relación existente entre sistemas para conocer la orientación de un objeto es equivalente a conocer las coordenadas de C en términos de B, es decir, la matriz de cambio de base P de C a B (véase, por ejemplo, [2]):

P=([c1]B|[c2]B|[c3]B).

Además, por ser B y C bases ortonormales, sabemos que P es una matriz ortogonal, esto es, PT = P−1 y por tanto P se puede identificar con la matriz de una rotación en ℝ3 o una reflexión. Esto dependerá del determinante de la matriz. De aquí en adelante asumiremos siempre que la relación entre orientaciones ha sido mediante una rotación y por tanto det(P) = 1.

Esto motiva la siguiente pregunta: ¿cómo podemos describir una rotación en ℝ3? Vamos a estudiar cuatro formas:

1. Matriz de cambio de base,

2. ángulos de Euler,

3. vector de rotación y ángulo de rotación y,

4. cuaternios.

La matriz de cambio de base que hemos visto anteriormente, cuenta con varios problemas prácticos. El más relevante es que para definir dicha matriz necesitamos 9 parámetros (redundantes) con su respectivo coste computacional. Además, estos parámetros no esán descritos en términos de una rotación, es decir, no están expresados en términos del vector de rotación y/o en términos de ángulos, por lo que no resulta intuitivo manipular las rotaciones con esta descripción.

Entonces, de cara a realizar el estudio ya mencionado, consideraremos Rot una rotación arbitraria en ℝ3 y la caracterizaremos en distintos términos. La primera, como ya hemos visto, dada dos bases ortonormales B y C, se puede definir la rotación RotB,C : ℝ3 → ℝ3 (que rota la base B en la base C) tal que su matriz asociada M(RotB,C)B ← B coincida con la matriz de cambio de base P de B a C con determinante 1.

B, C   bases ortonormales ↦ M(RotB,C)B←B ≡ P matriz de cambio de base de B a C con det (P) = 1

A partir de ahora consideraremos ℝ3 y una base ortornormal B como nuestra base del sistema de referencias inicial, que expresaremos sus vectores como

B={x,y,z}.

Nos referiremos a los elementos de B como ejes cartesianos. En términos generales, denotaremos por Rot : ℝ3 → ℝ3 a una rotación en ℝ3 y R = M(Rot)B←B a su matriz asociada en la base B.

2.1 Ángulos de Euler

Para introducir los ángulos de Euler, primero necesitamos describir las rotaciones respecto a cada uno de los vectores de B de ángulo α, β y γ, respectivamente, mediante las siguientes matrices

Rx,α=(1000cos(α)sin(α)0sin(α)cos(α)),Ry,β=(cos(β)0sin(β)010sin(β)0cos(β)),Rz,γ=(cos(γ)sin(γ)0sin(γ)cos(γ)0001).                                                           (16)

Ejemplo. Consideremos un vector vde3con coordenadas en B

[v]B=vxvyvz.

Entonces las coordenadas del vector vrotado un ángulo α respecto del vector xsería

(1000cos(α)sin(α)0sin(α)cos(α))[vxvyvz]=[vxvycos(α)vzsin(α)vysin(α)+vzcos(α)].                                                           (17)

Un problema nada trivial es tratar de descomponer una rotación cualquiera en términos de tres rotaciones para unos vectores ya preestablecidos, pudiendo ser o no ortogonales. En nuestro caso, sólo nos preocuparemos cuando los vectores preestablecidos son ortogonales. Dicho en otras palabras, dada una rotación arbitraria Rot queremos hallar α, β y γ tales que

R=Rx,αRy,βRz,γ.

Esta terna (α, β, γ) es la que se conoce como ángulos de Euler de una rotación para el sistema XYZ. Sin embargo, podemos tratar de describir la rotación implicando un número menor de vectores. Por ejemplo, los ángulos de Euler (α, β, γ) para el sistema ZY Z son aquellos que verifican

R=Rz,αRy,βRz,γ.

Esto a su vez puede complicarse si entendemos que el sistema de vectores es intrínseco o extrínseco, es decir, si el sistema se entiende móvil o fijo respecto a las rotaciones anteriores respectivamente. Ya podemos encontrar una de las primeras dificultades de trabajar con ángulos de Euler, y es que no existe un convenio unificado para denotar los ángulos de Euler para sistemas intrínsecos, extrínsecos, ortogonales o no.

Sistema XYZ y la terna (α,β,γ)R=Rx,αRy,βRz,γ

Los ángulos de Euler cuentan con la ventaja de que para describir una rotación tan sólo necesitamos conocer 3 parámetros. Sin embargo, el problema de hallar los ángulos de Euler para un sistema de una rotación Rot puede tener infinitas soluciones, provocando un problema de modelado llamado “Gimbal lock” o “bloqueo del cardán”. Este problema surge en la práctica cuando se quiere descomponer una rotación Rot respecto de un sistema donde el primer y tercer vector coinciden tras la primera rotación. Por ejemplo, si el sistema es del tipo XY Z y los ángulos de Euler son del tipo (α, π2, γ), entonces

R=(1000cos(α)sin(α)0sin(α)cos(α))(001010100)(cos(γ)sin(γ)0sin(γ)cos(γ)0001)=(1000cos(α)sin(α)0sin(α)cos(α))(001sin(γ)cos(γ)0cos(γ)sin(γ)0)=(001sin(α+γ)cos(α+γ)0cos(α+γ)sin(α+γ)0).

Entonces cualquier otra terna (φ, π2, ψ) tal que α + γ = φ + ψ son también ángulos de Euler para la misma rotación haciendo que el problema pierda un grado de libertad. Este hecho es muy importante, pues sucede que la aplicación de ángulos de Euler a las rotaciones no define un homeomorfismo local en todos sus puntos y, resulta que los ángulos de Euler donde existe esta pérdida de grado de libertad, coincide cuando la continuidad falla. Esta discontinuidad puede llegar a tener consecuencias graves, tal y como ocurrió, aunque por otras razones, en la misión Apollo 11 [3]. En robótica puede provocar el problema conocido como “wrist flip”, cuando un brazo robótico trata de hacer un giro de manera inmediata, debida a la discontinuidad, de 180 grados.

Esta problemática es naturaleza propia de los ángulos de Euler, por lo que es conveniente encontrar otra forma de interpretar una rotación.

2.2 Rotación con vector y ángulo de rotación

Una forma más intuitiva de interpretar una rotación es construyéndola a partir de su vector de rotación e (que lo consideraremos normalizado) y su ángulo de rotación θ ∈ [0, 2π), que denotaremos por Rote,θ. Así, podemos construir la base ortonormal D={e,e1,e2} donde e1 y e2 forman una base ortonormal del plano ortogonal al vector de rotación tal que e=e1×e2, y entonces su matriz asociada en esta base es de la forma:

M(Rote,θ)DD=(1000cos(θ)sin(θ)0sin(θ)cos(θ)).

Esta matriz hace referencia a una rotación respecto del vector e, de ángulo θ que gira en sentido positivo (véase la Figura 1).

Figura 1. Rotación respecto al vector e  de ángulo θ en sentido positivo. Los vectores e1, e2 hacen referencia a los vectores ortonormales e1,e2.

Observaciones importantes:

det(M(Rote,θ)DD)=cos2(θ)+sin2(θ)=1 y M(Rote,θ)DD1=M(Rote,θ)DD.

■ Toda matriz de una rotación es semejante a la matriz

(1000cos(θ)sin(θ)0sin(θ)cos(θ)).

■ Como el polinomio característico entre matrices semejantes coincide, entonces una rotación arbitraria Rot siempre tendrá a 1 como autovalor y dos autovalores complejos conjugados cos(θ) ± i sin(θ) = α ± iβ.

Así, se observa que e es un autovector asociado al autovalor 1 y, por otro lado, se puede hallar el ángulo de rotación:

θ=arccotan(αβ), si β0 o θ=arctan(βα), si α0.

■ Para determinar si una rotación gira en sentido positivo se sigue la llamada “regla de la mano derecha”. Esta regla consiste en alinear el pulgar de la mano derecha con el vector de rotación apuntando en la misma dirección y, si el cierre de la mano acompaña al giro, entonces se dirá que gira en sentido positivo, y negativo en caso contrario. La rotación de la Figura 1 es una rotación que gira en sentido positivo.

■ La rotación en ℝ3 se reduce a una rotación en un plano, el plano ortogonal al vector de rotación. Como hemos construido la base D con el plano ortogonal ocupando la segunda y tercera posición, esto se refleja en la submatriz de segunda y tercera filas/columnas de la matriz de la rotación.

Un problema reside cuando queremos concatenar más de una rotación, que necesitaremos expresarlas todas en una base comun para poder operar. Así, podemos reescribir estas matrices respecto de la misma base: Si Q es la matriz de cambio de base de D a B entonces

R=QM(Rote,θ)DDQ1.

También si [e]B=[exeyez], la fórmula de Euler (o más conocida como fórmula de Rodrigues [4]) nos asegura que

R=(cos(θ)+ex2(1cos(θ))exey(1cos(θ))ezsin(θ)exez(1cos(θ))+eysin(θ)eyex(1cos(θ))+ezsin(θ)cos(θ)+ey2(1cos(θ))eyez(1cos(θ))exsin(θ)ezex(1cos(θ))eysin(θ)ezey(1cos(θ))+exsin(θ)cos(θ)+ez2(1cos(θ))).

Así,

(e,θ)R=(cos(θ)+ex2(1cos(θ))exey(1cos(θ))ezsin(θ)exez(1cos(θ))+eysin(θ)eyex(1cos(θ))+ezsin(θ)cos(θ)+ey2(1cos(θ))eyez(1cos(θ))exsin(θ)ezex(1cos(θ))eysin(θ)ezey(1cos(θ))+exsin(θ)cos(θ)+ez2(1cos(θ)))

2.3 Rotación con cuaternios

Consideremos un cuaternio puro p = [0, p] = [0, pxi + pyj + pzk] y un cuaternio unitario

q=[s,v]=[s,xi+yj+zk]=[cos(θ2),sin(θ2)v^].

Ya sabemos, por ser unitario, que q1=q=[cos(θ2),sin(θ2)v^]. Vamos a estudiar el producto qpq* y puesto a que vamos a trabajar únicamente sobre cuaternios puros, reduciremos la matriz (14) a la matriz

(12(y2+z2)2(xysz)2(xz+sy)2(xy+sz)12(x2+z2)2(yzsx)2(xzsy)2(yz+sx)12(x2+y2))                                                           (18)

Ejemplo. Supongamos que q = i = [0, i] entonces θ = π, x =1 y s = y = z = 0. Calculemos el producto qpq* matricialmente utilizando (18)

(100010001)[pxpypz]=[pxpypz].

Observando que, desde el punto de vista vectorial, hemos obtenido una rotación respecto del vector xde un ángulo π.

Ejemplo. Supongamos que q=[22,22i]entonces θ=π2,s=22,x=22 e y=z=0. Calculemos el product qpq* matricialmente utilizando (18)

(100001010)[pxpypz]=[pxpzpy].

Observando que, desde el punto de vista vectorial, hemos obtenido una rotación respecto del vector x de un ángulo π2.

Ejemplo. Supongamos que q=[cos(θ2),sin(θ2)i]entonces s=cos(θ2),x=sin(θ2) e y=z=0. Calculemos el producto qpq* matricialmente producto qpq* matricialmente utilizando (18)

(100012sin2(θ2)cos(θ2)sin(θ2)0cos(θ2)sin(θ2)12sin2(θ2))[pxpypz]=(1000cos(θ)sin(θ)0sin(θ)cos(θ))[pxpypz]=[pxpycos(θ)pzsin(θ)pysin(θ)+pzcos(θ)]                                                           (19)

recordando las identidades trigonométricas 12sin2(θ2)=cos(θ) y cos(θ2)sin(θ2)=sin(θ). Observando que, desde el punto de vista vectorial, hemos obtenido una rotación respecto del vector xde un ángulo θ.

Estos ejemplos hacen intuir que, si q=[s,v]=[cos(θ2),sin(θ2)v^] unitario y p = [0, p] cuaternio puro, realizar el producto qpq* es equivalente a rotar el vector [p]B=[pxpypz] respecto del vector [qv]B=1|v|[xyz], donde q=qs+qv=[s,0]+[0,v], un ángulo θ.

Ejemplo. Si queremos hallar una rotación de ángulo θ=π3respecto del vector [v]B=[132]entonces tendremos que considerar el cuaternio

q=[cos(π6),sin(π6)(114i+314j214k)].

Y así, para un cuaternio puro p, la operación qpq* equivale a rotar la parte vectorial de p un ángulo θ respecto del vector v.

Ejemplo. Si la parte vectorial unitaria de dos cuaternios unitarios coinciden, entonces la concatenación de rotaciones es especialmente sencilla. Sean q1=[cos(θ12), sin(θ12)v^] y q2=[cos(θ22), sin(θ22)v^]entonces

q1q2=[cos(θ12), sin(θ12)v^][cos(θ22), sin(θ22)v^]=[cos(θ12)cos(θ22)sin(θ12)sin(θ22)|v^|2, cos(θ12)sin(θ22)v^+cos(θ22)sin(θ12)v^+sin(θ12)sin(θ22)v^×v^]=[cos(θ12)cos(θ22)sin(θ12)sin(θ22), (cos(θ12)sin(θ22)+cos(θ22)sin(θ12))v^]=[cos(θ1+θ22), sin(θ1+θ22)v^]

que es lo esperable ya que se están realizando dos rotaciones consecutivas respecto al mismo vector de rotación.

De esta forma:

q=[s,xi+yj+zk] unitario M(Iq)M(Dq)=(12(y2+z2)2(xysz)2(xz+sy)2(xy+sz)12(x2+z2)2(yzsx)2(xzsy)2(yz+sx)12(x2+y2))

3. Espacio afín3

De cara a presentar un ejemplo donde utilizar los cuaternios, vamos a introducir brevemente el espacio afín ℝ3 para poder tener una base matemática donde trabajar.

Nos referiremos a ℝ3 como espacio afín y llamaremos puntos a sus elementos en lugar de vectores. A partir de dos puntos A, B ∈ ℝ3 siempre podremos definir un vector que denotaremos por

AB:=BA

Además se verifica que:

1. Dados tres puntos A, B, C ∈3AC=AB+BC,

2. Dado A3 y vR3 entonces existe B ∈ ℝ3 tal que AB=v.

Al igual que en un espacio vectorial podemos utilizar las coordenadas respecto de una base para describir un vector, en un espacio afín utilizaremos un sistema de referencias para describir un punto del espacio. Este está compuesto por un punto O ∈3 actuando como origen y una base ortonormal B={OX,OY,OZ}={x,y,z} actuando como ejes cartesianos. Así, llamaremos sistema de referencias a la expressión

R={O;B}.

donde O es un punto de ℝ3 y B es una base de ℝ3. Nosotros asumiremos siempre que B es una base ortonormal. Entonces, dado un sistema de referencias R, las referencias de un punto A ∈ ℝ3 las definimos como las coordenadas del vector OA respecto de la base B, es decir,

[A]R=[OA]B.

3.1 Ecuación de cambio de sistemas de referencias expresada en cuaternios

Consideremos un punto cualquiera A ∈ ℝ3 y supongamos que tenemos dos sistemas de referencias rectangulares, es decir, las bases son ortonormales, R={O;B} y R={O;B} con P la matriz de cambio de base de B′ a B. Del hecho de que OA=OO+OA, si pensamos en sus coordenadas:

[A]R=[OA]B=[OO]B+[OA]B=[O]R+P[OA]B=[O]R+P[A]R,                                                           (20)

que se puede escribir de manera matricial y compacta como:

(1[A]R)=(10[O]RP)(1[A]R).

En nuestro caso particular, donde asumiremos que la matriz de cambio de base la podremos identificar con la matriz asociada a una rotación, ya que las bases son ortonormales, la ecuación (20) se puede reescribir en términos de cuaternios puros:

[0,OA]=[0,OO]+q[0,OA]q,

con tan solo identificar [OA]B,[OO]B,[OA]B, con [0,OA],[0,OO],[0,OA] respectivamente, mediante la inversa de la transformación definida en (15), es decir, [xyz]R3 con [0,xi+yj+zk]E.

Cuando varios sistemas de referencias entran en juego, es interesante tener una indexación para poder generalizar la expresión anterior mejor:

[0,OnA]=[0,OnOn+1]+qn[0,On+1A]qn.

Y por último, para simplificar la notación, denotaremos OnA por An:

[0,An]=[0,OnOn+1]+qn[0,An+1]qn,                                                           (21)

donde

An se identifica con las referencias de un punto A respecto del sistema Rn,

OnOn+1 se identifica con las referencias del origen del sistema Rn+1 respecto del sistema Rn y,

qn es un cuaternio unitario que se identifica con la rotación que transforma los ejes del sistema Rn+1 en los ejes del sistema Rn.

4. Ejemplo práctico

Para ejemplificar el uso de los cuaternios estudiaremos una situación de un brazo robótico tal y como se describe en la Figura 2. Este ejemplo también se encuentra en [5, págs. 103-107].

Figura 2. Brazo robótico

En el espacio afín ℝ3, queremos describir la relación entre el sistema de referencias de la base del robot, descrita por R0={O0;{x0,y0,z0}}, y la posición del extremo final de la mano robótica, R4={O4;{x4,y4,z4}}. Para analizar esta relación, vamos a construir la matriz de cambio de sistemas de referencias que deberemos descomponer en distintas etapas. Esta relación dependerá de las constantes: l1,l2 y l3, que indican la longitud de los distintos segmentos del brazo; y de las variables: θ1, θ2, α3 y θ4, que hacen referencia a las partes móviles del brazo.

Sea A ∈ ℝ3 un punto cualquiera. Teniendo en cuenta (21), podemos ir escribiendo la ecuación de cambio de sistemas de referencias de un sistema Rn en el siguiente Rn+1:

[0,A0]=[0,O0O1]+q0[0,A1]q0,O0O1=l1k,q0=[cos(θ12), sin(θ12)k].

[0,A1]=[0,O1O2]+q1[0,A2]q1,O1O2=l2i,q1=[cos(θ22), sin(θ22)k].

[0,A2]=[0,O2O3]+q2[0,A3]q2,O2O3=l3i,q2=1.

[0,A3]=[0,O3O4]+q3[0,A4]q3,O3O4=α3k,q3=[cos(θ42), sin(θ42)k].

Así, sustituyendo de manera consecutiva en las expresiones anteriores, se obtiene:

[0,A2]=[0,O2O3]+q2([0,O3O4]+q3[0,A4]q3)q2=[0,l3iα3k]+q3[0,A4]q3[0,A1]=[0,O1O2]+q1([0,l3iα3k]+q3[0,A4]q3)q1=[0,l2i]+q1[0,l3iα3k]q1+q1q3[0,A4]q3q1[0,A0]=[0,O0O1]+q0([0,l2i]+q1[0,l3iα3k]q1+q1q3[0,A4]q3q1)q0=[0,l1k]+q0[0,l2i]q0+q0q1[0,l3iα3k]q1q0+q0q1q3[0,A4]q3q1q0

donde

q0q1=[cos(θ1+θ22), sin(θ1+θ22)k],q0q1q3=[cos(θ1+θ2+θ42), sin(θ1+θ2+θ42)k].

que si realizamos los productos, sumas y rescatamos la parte vectorial obtenemos

{a0,x=a4,xcos(θ1+θ2+θ42)a4,ysin(θ1+θ2+θ42)+l3cos(θ1+θ22)+l2cos(θ12)a0,y=a4,xsin(θ1+θ2+θ42)+a4,ycos(θ1+θ2+θ42)+l3sin(θ1+θ22)+l2sin(θ12)a0,z=a4,z+l1α3,

donde An=an,xi+an,yj+an,zk. Que expresada matricialmente sería

[a0,xa0,ya0,z]=(cos(θ1+θ2+θ42)sin(θ1+θ2+θ42)0sin(θ1+θ2+θ42)cos(θ1+θ2+θ42)0001)[a4,xa4,ya4,z]+[l3cos(θ1+θ22)+l2cos(θ12)l3sin(θ1+θ22)+l2sin(θ12)l1α3],

y en forma compacta:

[1a0,xa0,ya0,z]=(1000l3cos(θ1+θ22)+l2cos(θ12)cos(θ1+θ2+θ42)sin(θ1+θ2+θ42)0l3sin(θ1+θ22)+l2sin(θ12)sin(θ1+θ2+θ42)cos(θ1+θ2+θ42)0l1α3001)[1a4,xa4,ya4,z]

En particular, si hacemos coincidir A con O4, que es el origen del sistema de referencias R4 y coincide con el extremo del brazo, se tiene que a4,x=a4,y=a4,z=0 y por tanto, las referencias de A = O4 respecto de la base del brazo robótico, el sistema R0, son

[a0,xa0,ya0,z]=[l3cos(θ1+θ22)+l2cos(θ12)l3sin(θ1+θ22)+l2sin(θ12)l1α3].

Además, la orientación del brazo robótico vendrá dada por la rotación asociada al cuaternio q0q1q3.

Agradecimientos

Quiero agradecer al revisor o revisora los comentarios realizados, que mejoraron y ayudaron a simplificar y clarificar varios puntos del artículo.

Referencias

1 J. Vince, Quaternions for Computer Graphics (Springer, 2011).

2 L. M. Merino González y E. Santos Aláez, Algebra lineal: con métodos elementales, spa, [1a ed., 4a reimp.] (Thomson, Madrid, 2010 - 2006).

3Apollo and Gimbal Lock, https://apollo11space.com/apollo-and-gimbal-lock/#Apollo_11_Gimbal_Lock_Event, [Online; accessed 5-March-2023], 2023.

4 H. Cheng y K. C. Gupta, “An Historical Note on Finite Rotations”, Journal of Applied Mechanics 56, 139–145 (1989).

5 A. Barrientos, L. Penin, C. Balaguer y R. Aracil, Fundamentos de Robótica (McGraw-Hill, 2007).