Está en la página 1de 5

UNIVERSIDAD NACIONAL DE SAN AGUSTIN

FACULTAD DE INGENIERIAS DE PRODUCCION Y SERVICIOS

ESCUELA PROFESIONAL DE INGENIERIA ELECTRONICA

LABORATORIO DE ROBOTICA

PRACTICA 1: “TRANSFORMACIONES ESPECIALES Y MATRIZ


DE ROTACION”

INTEGRANTE:
VALDIVIA PARICAHUA GIAN PIERRE 20140214

DOCENTE:
PARI PINTO LIZARDO

2020
1. Implementar una función (archivo m) que convierta de la matriz de rotación R a
representación ángulo y eje:
Código de la función para implementar la conversión de la matriz de rotación R (3x3) a
su equivalente par de rotación en MATLAB:

function[]=rot2axis_ang(R11,R12,R13,R21,R22,R23,R31,R32,R33)
R=[R11 R12 R13;R21 R22 R23;R31 R32 R33];
[theta,k]=tr2angvec(R);
fprintf('\nEl vector unitario "k" del eje de rotacion es:\n\n')
disp(k)
fprintf('El angulo de rotacion "theta"(en °) es:\n\n')
disp(theta*180/pi)
end

Para ingresar los elementos de la matriz es importante ver que los 9 números están
ordenados en orden de fila y columna respectivamente en los parámetros de entrada de
la función, además que la matriz R debe tener determinante 1 puesto que es ortonormal.
Para demostrar el funcionamiento de la función ingresaremos la matriz con rotación de
90° alrededor del eje X:

1 0 0 
rot ( x,90)  R  0 0 1
0 1 0 

>> rot2axis_ang(1,0,0,0,0,-1,0,1,0)

El vector unitario "k" del eje de rotacion es:

1 0 0

El angulo de rotacion "theta"(en °) es:

90

Como se observa, la respuesta en la ventana de comandos nos da un vector unitario del


eje como [1 0 0] que corresponde al vector unitario del eje X y un ángulo de giro de
90°, los resultados anteriores son corrector puesto que la matriz R inicialmente era la
que describe la rotación de 90° sobre el eje X.

2. Implementar una función (archivo m) que convierta la rotación en


representación de Rodríguez a la forma convencional R:
Código de la función para implementar la conversión de la representación de Rodríguez
a su equivalente matriz de rotación R (3x3) en MATLAB:
function[]=rodr2rot(r1,r2,r3)
r=[r1 r2 r3];
theta=norm(r);
k=r/theta;
R=angvec2r(theta,k);
fprintf('\nLa matriz de rotacion R es:\n\n')
disp(R)
end

En este caso debemos ingresar en orden las componentes del vector “r”, el cual engloba
el ángulo de rotación y el vector eje del par de rotación.
Para demostrar el funcionamiento de la función ingresaremos el resultado del ejemplo 9
para llegar al valor de R de su enunciado, entonces tenemos que:

 0.2506  0.4104 
r    k  1.6378   0.6846   1.1212 
 0.6846  1.1212 

>> rodr2rot(0.4104,1.1212,1.1212)

La matriz de rotacion R es:

-0.0000 -0.5000 0.8660

0.8660 0.4330 0.2500

-0.5000 0.7500 0.4330

El resultado anterior equivale a la matriz de rotación R con rotación de 90° sobre el eje
Z, luego una rotación de 30° sobre el eje Y y luego una rotación de 60° sobre el eje X:

 0 0.5 0.866 
R  rot ( z ,90)  rot ( y,30)  rot ( x, 60)  0.866 0.433 0.25 

 0.5 0.75 0.433 

3. Implementar una función que multiplique dos cuaternios q1 y q2:


Código de la función para implementar el producto de 2 cuaternios en MATLAB:

function[]=prod_quat(qs,qv1,qv2,qv3,ts,tv1,tv2,tv3)
theta_q=2*acos(qs);
theta_t=2*acos(ts);
k_q=(1/sin(theta_q/2)).*[qv1 qv2 qv3];
k_t=(1/sin(theta_t/2)).*[tv1 tv2 tv3]
q=Quaternion(theta_q,k_q);
t=Quaternion(theta_t,k_t)
disp(q*t)
end
En este caso ingresamos las 4 componentes del primer cuaternio y luego del segundo
con el orden de ingresar la parte escalar primero seguida de la parte vectorial, es
importante tener en cuenta que para que el cuaternio represente una rotación este debe
tener norma unitaria.
Para demostrar el funcionamiento de la función ingresaremos las componentes de dos
cuaternios “q” y “t” de norma unitaria:
q = 0.5 < 0.5, 0.5, 0.5 >

t = 0.707 < 0, 0.70721, 0 >

>> prod_quat(0.5,0.5,0.5,0.5,0.707,0,0.707,0)

Quaternion with properties:

s: -1.0677e-04

v: [-1.0677e-04 0.7071 0.7071]

Así entonces el producto nos da un nuevo cuaternio el cual posee su primera


componente escalar “s” y sus últimas 3 componentes conforman la parte vectorial “v”.

4. Implementar una función que transforme de la matriz de rotación convencional a


un cuaternio:
Código de la función para implementar la conversión de una matriz de rotación R (3x3)
a su equivalente en forma de cuaternio en MATLAB:

function[]=rot2quat(R11,R12,R13,R21,R22,R23,R31,R32,R33)
R=[R11 R12 R13 0;R21 R22 R23 0;R31 R32 R33 0;0 0 0 1];
q=Quaternion(R);
disp(q)
end

Parecido al problema 1, la forma de ingresar los elementos de la matriz se da de la


misma manera, para poder hacer la transformación a cuaternio debemos convertir
internamente la matriz de rotación R a su forma homogénea.
Para demostrar el funcionamiento de la función ingresaremos la matriz con rotación de
90° alrededor del eje X:

1 0 0 
rot ( x,90)  R  0 0 1
0 1 0 

>> rot2quat(1,0,0,0,0,-1,0,1,0)
Quaternion with properties:

s: 0.7071

v: [0.7071 0 0]

Entonces como vemos este cuaternio resultante es similar al cuaternio “t” usado en el
problema anterior y del cual sabemos que posee norma unitaria, como este caso el
cuaternio representa una rotación se debe cumplir que posea norma unitaria.

5. Implementar una función que transforme de cuaternio a la forma convencional


R:
Código de la función para implementar la conversión de un cuaternio unitario a su
equivalente matriz de rotación R (3x3) en MATLAB:

function[]=quat2rot(qs,qv1,qv2,qv3)
theta_q=2*acos(qs);
k_q=(1/sin(theta_q/2)).*[qv1 qv2 qv3];
q=Quaternion(theta_q,k_q);
fprintf('\nLa matriz de rotacion R es:\n\n')
disp(q.R)
end

De nuevo, como tratamos de representar una rotación con un cuaternio, entonces debe
poseer norma unitaria, para ello utilizaremos el cuaternio “q” del problema 3:
q = 0.5 < 0.5, 0.5, 0.5 >

>> quat2rot(0.5,0.5,0.5,0.5)

La matriz de rotacion R es:

-0.0000 0.0000 1.0000

1.0000 -0.0000 0.0000

0.0000 1.0000 -0.0000

Y como el resultado de R representa una rotación esta debe tener determinante unitario
puesto que debe ser ortonormal:
>> det([0 0 1;1 0 0;0 1 0])

ans =

También podría gustarte