Sunteți pe pagina 1din 23

“UNIVERSIDAD CATÓLICA DE SANTA MARÍA”

FACULTAD DE CIENCIAS E INGENIERIAS FÍSICAS Y FORMALES

ESCUELA PROFESIONAL DE
INGENIERIA MECÁNICA, MECÁNICA-ELÉCTRICA Y MECATRÓNICA

“ROBÓTICA I”

LABORATORIO N°2: MATRICES DE ROTACIÓN

DOCENTE:
Ing. JUAN CARLOS CUADROS MACHUCA

ALUMNOS:
• FLORES MAMANI, CHRISTIAN ADOLFO
• ROMERO BEJARANO, SANDRO FABRIZZIO

GRUPO: 03

AREQUIPA-PERÚ
2019
UNIVERSIDAD CATOLICA DE SANTA MARIA Página:1/4
FACULTAD DE CIENCIAS E INGENIERÍAS FISICAS Y FORMALES
ESCUELA PROFESIONAL
Jefe de Prácticas:
INGENIERIA MECÁNICA, MECÁNICA-ELECTRÍCA Y MECATRÓNICA Ing. Juan Carlos Cuadros
Laboratorio de Robótica I
Código: 4E09081
Tema: Matrices de Rotación Semestre: IX
Grupo: 1 2 3 4
FECHA:
Apellidos y Nombres: Lab. Nº 02 25/MAR/19

I. OBJETIVO
I.1. Aplicar programación en MATLAB en el cálculo y manipulación de matrices de rotación, gráficos de funciones y
tendencias, y en la implementación de programas sencillos de posición y orientación de robots.
I.2. Analizar, navegar y manipular el programa MATLAB para incentivar en el alumno el interés por esta herramienta
y pueda reconocer su importancia en el contexto de la robótica y la ingeniería.

II. MARCO TEORICO

II.1. MATRICES DE ROTACIÓN

En esta práctica vamos a trabajar con uno de los robots más elementales que existen: un robot de único motor
(paralelo al suelo). Unido al motor se sitúa un brazo de una longitud D1, de forma que el extremo de este brazo
va a realizar siempre una trayectoria circular. En todo robot es necesario saber cuál es la posición de su extremo
final. Para ello, habremos de saber primero el ángulo que ha girado el motor. Para calcular de una forma general
la posición del extremo final hay que utilizar matrices de rotación.

Una matriz de rotación relaciona las coordenadas de un sistema de referencia que rota respecto a otro fijo.

Sea OXY el sistema de referencia fijo y OUV un sistema de referencia rotado en un ángulo α sobre el origen de
OXY. La posición pxy respecto de OXY de un punto puv que está referenciado en el sistema OUV viene dada por
la siguiente ecuación:

 px   pu  cos − sen 
 p  = R   donde R es la matriz de rotación; R = 
 y  pv   sen cos 
Laboratorio de Robótica I Página: 2/4

Tema: Matrices de Rotación LAB N° 2 JP: Ing. JCC

En el robot de esta práctica, la posición del actuador final respecto del sistema de referencia rotatorio sería puv,
y la posición con respecto al sistema de referencia fijo sería pxy. Además las coordenadas de pxy pueden también
transformarse a otro sistema, por ejemplo, que este desplazado cierta distancia D0. El último de los sistemas de
referencia, el realmente fijo, es el OXY. Por lo tanto, si queremos añadir el desplazamiento con longitud D0 para
hallar la posición absoluta respecto del eje fijo OXY lo haríamos de acuerdo a la expresión:

0  0   D  
p xy =   + (R * puv ) =   +  R *  1  
 D0   D0   0  

Siendo R la matriz de rotación y D0 y D1 las distancias de los brazos, como se ve en la figura siguiente:

III. MATERIAL Y EQUIPO

III.1. Una PC con SO Windows XP y MATLAB

IV. PROCEDIMIENTO

IV.1. Tome como valores D0=[0, 0.5] (en metros) y D1=[1, 0] (en metros y expresado en su sistema de referencia
OUV). Tenga en cuenta que hay que cambiar las coordenadas del punto D1 desde el sistema de referencia OXY
al O’UV. Tenga en cuenta que para no dificultar la interpretación de la figura, no se ha indicado el origen O’, que
coincide en el espacio con D0.
Laboratorio de Robótica I Página: 3/4

Tema: Matrices de Rotación LAB N° 2 JP: Ing. JCC

Utilice MATLAB para realizar las siguientes tareas:

IV.2. Defina dos vectores en el plano p, q y una variable escalar alfa con el valor 45º. Defina la matriz de rotación
R para el ángulo alfa. Realice los productos q=R*p, con diversos alfa y compruebe que la rotación funciona
correctamente. Recuerde que MATLAB trabaja por defecto con radianes.

IV.3. Defina los vectores VD0, VD1 (que contienen las coordenadas de los puntos D0 y D1 según sus respectivos
ejes) y calcule la posición del punto D1, según el sistema de referencia OXY, probando con los ángulos α=0º,
45º, 90º.

IV.4. Movimiento uniforme. Suponga que el eje que mueve el único segmento articulado del robot tiene una
velocidad angular constante de 1º por segundo. Genere una variable llamada vel_ang con tal valor. Cree un
vector fila llamado tiempo, que contenga el valor de tiempo para un periodo de 45 segundos, tomadas cada 0,5
segundos (su contenido será [0 0.5 1 1.5 2 .... 44.5 45]). Genere otro vector ang que contenga los ángulos
en el mismo intervalo, multiplicando vel_ang por el vector tiempo. Utilice ahora un bucle for para calcular todos
los puntos de la trayectoria del actuador final del robot en los 45 segundos. Dicho bucle realizará la siguiente
multiplicación:

posiciones=VD0 + Rang(i)*VD1

donde Rang(i) es la matriz de rotación calculada para el ángulo dado por ang(i). Todos los puntos se
almacenarán en una matriz de dimensión 2×n llamada posiciones, donde n es la dimensión del vector tiempo.
Genere la gráfica (usando plot) de todas las coordenadas x frente a las y, que sería el movimiento del actuador
del robot.

IV.5. Movimiento uniforme integrando con MATLAB. Averigüe ahora el ángulo de rotación para cada instante
integrando la velocidad para obtener los ángulos, utilizando la función de MATLAB:

vector_integral = cumtrapz (vector_x, vector_y)

que calcula la integral acumulativa por el método del trapecio, de vector_y respecto de vector_x.(es decir, se
pueden usar los vectores del apartado anterior tiempo, y un vector con todos sus elementos iguales a vel_ang).
Tenga en cuenta que ambos vectores han de tener el mismo número de componentes. Suponga que el ángulo
inicial es cero. Genere una gráfica del ángulo de la articulación respecto del tiempo.

IV.6. Partiendo del vector de ángulos generado en el paso anterior, y del método de transformación de
coordenadas, mencionado anteriormente, calcule la posición respecto del sistema OXY del extremo final del
segmento del robot para cada uno de los valores angulares previamente calculados. Genere una gráfica (plot)
en la que se muestre la trayectoria del extremo final del robot. La gráfica debe ser igual a la del paso IV.4.

IV.7. Varíe la velocidad angular y experimente con los resultados obtenidos.

IV.8. EJERCICIOS ADICIONALES: Cree una función que calcule el movimiento del robot, de forma que reciba
como parámetros un vector columna de ángulos y devuelva una matriz con las posiciones x,y correspondientes
a tales ángulos. La matriz tendrá 2 filas y tantas columnas como ángulos componentes del vector ang hayan. El
prototipo (declaración) de la función será:
function pxy = robot1 (ang). (Recuerde el operador size)
Laboratorio de Robótica I Página: 4/4

Tema: Matrices de Rotación LAB N° 2 JP: Ing. JCC

V. CUESTIONARIO FINAL

V.1. Realice todo el procedimiento anteriormente descrito y presente en un informe detallado el desarrollo de
todos los pasos indicados.

VI. CONCLUSIONES y OBSERVACIONES

VI.1. Haga sus observaciones y emita al menos cinco conclusiones en torno al trabajo realizado

• _____________________________________________________________________________________
• _____________________________________________________________________________________
• _____________________________________________________________________________________
• _____________________________________________________________________________________
• _____________________________________________________________________________________
PROCEDIMIENTO
IV.1. Tome como valores D0=[0, 0.5] (en metros) y D1=[1, 0] (en metros y expresado en su sistema de referencia OUV). Tenga
en cuenta que hay que cambiar las coordenadas del punto D1 desde el sistema de referencia OXY al O’UV. Tenga en cuenta
que, para no dificultar la interpretación de la figura, no se ha indicado el origen O’, que coincide en el espacio con D0.

clc
close all
clear all

O1XY = [0;0]; % Origen del sistema OXY


D0 = [0;0.5];
alfa1 = 0; % Ángulo de rotación del sistema OXY

O2UV = [0;0.5]; % Origen del sistema O'UV


D1 = [1;0];
alfa2 = 30; % Ángulo de rotación del sistema O'UV

grafico_vector(D0,O1XY,alfa1)
grafico_vector(D1,O2UV,alfa2)

Para una correcta visualización de éste y posteriores ejercicios se ha desarrollado una función que permitirá graficar el
eje de coordenadas, así como el vector contenido en este. Esta función solicita un vector, el origen del sistema (sea
[0;0] o cualquier otro), y un ángulo de rotación.

function grafico_vector(D0,OXY,rotacion)
ncoordenadas = inputname(2); % Nombre de coordenadas

% Graficar Eje X(U)


longejeX = D0(1)+((1/4)*D0(1)); % Longitud eje x
extraerxu = ncoordenadas(3);
if longejeX == 0
ptofinalejeX = [(longejeX+D0(2))*cosd(rotacion);(longejeX+D0(2))*sind(rotacion)];
quiver(OXY(1),OXY(2),ptofinalejeX(1),ptofinalejeX(2),'k','LineWidth',4)
text(ptofinalejeX(1)+OXY(1),ptofinalejeX(2)+OXY(2),extraerxu)
hold on
else
ptofinalejeX = [longejeX*cosd(rotacion);longejeX*sind(rotacion)];
quiver(OXY(1),OXY(2),ptofinalejeX(1),ptofinalejeX(2),'k','LineWidth',4)
text(ptofinalejeX(1)+OXY(1),ptofinalejeX(2)+OXY(2),extraerxu)
hold on
end

% Graficar Eje Y(V)


longejeY = D0(2)+((1/4)*D0(2)); % Longitud eje y
extraeryv = ncoordenadas(4);
if longejeY == 0
ptofinalejeY =
[(longejeY+D0(1))*cosd(90+rotacion);(longejeY+D0(1))*sind(90+rotacion)];
quiver(OXY(1),OXY(2),ptofinalejeY(1),ptofinalejeY(2),'k','LineWidth',4)
text(ptofinalejeY(1)+OXY(1),ptofinalejeY(2)+OXY(2),extraeryv)
hold on
else
ptofinalejeY = [longejeY*cosd(90+rotacion);longejeY*sind(90+rotacion)];
quiver(OXY(1),OXY(2),ptofinalejeY(1),ptofinalejeY(2),'k','LineWidth',4)
text(ptofinalejeY(1)+OXY(1),ptofinalejeY(2)+OXY(2),extraeryv)
hold on
end

% Graficar Vector
nvector = inputname(1); % Nombre de vector
hipotenusa = hypot(D0(1),D0(2));
vectorinicio = [OXY(1);(hipotenusa*cosd(rotacion+atand(D0(2)/D0(1))))+OXY(1)]; % Puntos x
del vector
vectorfinal = [OXY(2);(hipotenusa*sind(rotacion+atand(D0(2)/D0(1))))+OXY(2)]; % Puntos y
del vector
plot(vectorinicio,vectorfinal,'-r','LineWidth',2) % Grafica la linea del vector
hold on
plot(vectorinicio(2),vectorfinal(2),'r.','markersize',25) % Grafica el punto (cabeza) del
vector
extraernvector = [' ',nvector(1:2)]; % Extraer nombre de vector
text(vectorinicio(2),vectorfinal(2),extraernvector) %,'fontsize',15
grid on
axis('equal')
hold on
IV.2. Defina dos vectores en el plano p, q y una variable escalar alfa con el valor 45º. Defina la matriz de rotación R para el
ángulo alfa. Realice los productos q=R*p, con diversos alfa y compruebe que la rotación funciona correctamente. Recuerde
que MATLAB trabaja por defecto con radianes.

clc
close all
clear all

vp = input('Ingresar vector p: ');


alfa = input('Ingresar ángulo de rotación: ');
R = [cosd(alfa) -sind(alfa);sind(alfa) cosd(alfa)];

O1XY = [0;0]; % Origen del sistema OXY


O2UV = [0;0]; % Origen del sistema O'UV

vp % Muestra el vector p en el Command Window


q = R*vp % Muestra el vector p rotado en el Command Window

grafico_vector(vp,O1XY,0)
grafico_vector(vp,O2UV,alfa)

𝜶 = 𝟓𝟑°
𝜶 = 𝟐𝟐. 𝟓°

𝜶 = 𝟒𝟓°
𝜶 = 𝟔𝟕. 𝟓°

𝜶 = 𝟗𝟎°
IV.3. Defina los vectores VD0, VD1 (que contienen las coordenadas de los puntos D0 y D1 (según sus respectivos ejes) y calcule
la posición del punto D1, según el sistema de referencia OXY, probando con los ángulos α=0º, 45º, 90º.

clc
close all
clear all

alfa = input('Ingresar ángulo de rotación: ');

D0 = [0;0.5];
distD0 = hypot(D0(1),D0(2));

D1 = [1;0];
distD1 = hypot(D1(1),D1(2));

R = [cosd(alfa) -sind(alfa);sind(alfa) cosd(alfa)];

Pxy = [0;distD0]+R*[distD1;0]

O1XY = [0;0]; % Origen del sistema OXY


alfa1 = 0; % Ángulo de rotación del sistema OXY

O2UV = [0;0.5]; % Origen del sistema O'UV

grafico_vector(D0,O1XY,alfa1)
grafico_vector(D1,O2UV,alfa)

Variando el ángulo α (0°, 45°, 90°) como se indica en el enunciado, obtenemos:


IV.4. Movimiento uniforme. Suponga que el eje que mueve el único segmento articulado del robot tiene una velocidad
angular constante de 1º por segundo. Genere una variable llamada vel_ang con tal valor. Cree un vector fila llamado
tiempo, que contenga el valor de tiempo para un periodo de 45 segundos, tomadas cada 0,5 segundos (su contenido será [0
0.5 1 1.5 2 .... 44.5 45]). Genere otro vector ang que contenga los ángulos en el mismo intervalo, multiplicando vel_ang por
el vector tiempo. Utilice ahora un bucle for para calcular todos los puntos de la trayectoria del actuador final del robot en
los 45 segundos. Dicho bucle realizará la siguiente multiplicación:

posiciones=VD0 + Rang(i)*VD1
donde Rang(i) es la matriz de rotación calculada para el ángulo dado por ang(i). Todos los puntos se almacenarán en una
matriz de dimensión 2×n llamada posiciones, donde n es la dimensión del vector tiempo. Genere la gráfica (usando plot) de
todas las coordenadas x frente a las y, que sería el movimiento del actuador del robot.

clc
close all
clear all

vel_ang = 1;
tiempo = [0:0.5:45];
ang = vel_ang*tiempo;

VD0 = [0;0.5];
VD1 = [1;0];

posiciones = zeros(2,length(tiempo));
for i=1:length(tiempo)
Rang = [cosd(ang(i)) -sind(ang(i));sind(ang(i)) cosd(ang(i))];
posiciones(:,i) = VD0+Rang*VD1;
end
posiciones % Muestra el último y solicitado vector de dimension 2x91

x = posiciones(1,:); % Obtenemos la fila 1


y = posiciones(2,:); % Obtenemos la fila 2
plot(x,y); % Graficamos
axis('equal')
xlim([0 1])
ylim([0.5 1.5])
grid on
Haciendo uso de la función creada (function grafico_vector) también podemos obtener el gráfico que se pide.
El aspecto es un tanto rudimentario, pero completamente funcional.

for i=1:length(tiempo)
O1XY = [0;0]; % Origen del sistema OXY
O2UV = [0;0.5]; % Origen del sistema O'UV

D1 = [x(i);y(i)-0.5];
O2UV = [0;0.5];
grafico_vector(D1,O2UV,0)
hold(gca,'on')
grafico_vector(VD0,O1XY,0)
hold on
end
IV.5. Movimiento uniforme integrando con MATLAB. Averigüe ahora el ángulo de rotación para cada instante integrando la
velocidad para obtener los ángulos, utilizando la función de MATLAB:

vector_integral = cumtrapz (vector_x, vector_y)


que calcula la integral acumulativa por el método del trapecio, de vector_y respecto de vector_x.(es decir, se pueden usar
los vectores del apartado anterior tiempo, y un vector con todos sus elementos iguales a vel_ang). Tenga en cuenta que
ambos vectores han de tener el mismo número de componentes. Suponga que el ángulo inicial es cero. Genere una gráfica
del ángulo de la articulación respecto del tiempo.

clc
close all
clear all

tiempo = [0:0.5:45];
vel_ang = ones(1,length(tiempo));

vector_x = tiempo;
vector_y = vel_ang;

vector_integral = cumtrapz(vector_x,vector_y);

plot(tiempo,vector_integral);
xlabel('Tiempo')
ylabel('Ángulo')
IV.6. Partiendo del vector de ángulos generado en el paso anterior, y del método de transformación de coordenadas,
mencionado anteriormente, calcule la posición respecto del sistema OXY del extremo final del segmento del robot para
cada uno de los valores angulares previamente calculados. Genere una gráfica (plot) en la que se muestre la trayectoria del
extremo final del robot. La gráfica debe ser igual a la del paso IV.4.

clc
close all
clear all

tiempo = [0:0.5:45];
vel_ang = ones(1,length(tiempo));

vector_x = tiempo;
vector_y = vel_ang;

vector_integral = cumtrapz(vector_x,vector_y); % Vector generado en el problema 5

VD0 = [0;0.5];
VD1 = [1;0];

posiciones = zeros(2,length(tiempo));
for i=1:length(tiempo)
Rang = [cosd(vector_integral(i)) -sind(vector_integral(i));sind(vector_integral(i))
cosd(vector_integral(i))];
posiciones(:,i) = VD0+Rang*VD1; % Método de transformación de coordenadas solicitado
end
posiciones;

x = posiciones(1,:); % Obtenemos la fila 1


y = posiciones(2,:); % Obtenemos la fila 2
plot(x,y); % Graficamos
axis('equal')
xlim([0 1])
ylim([0.5 1.5])
grid on
IV.7. Varíe la velocidad angular y experimente con los resultados obtenidos.

clc
close all
clear all

va = input('Ingresar velocidad angular (grados/segundo): ');


tiempo = [0:0.5:45];
vel_ang = repmat(va,1,length(tiempo));

vector_x = tiempo;
vector_y = vel_ang;

vector_integral = cumtrapz(vector_x,vector_y); % Vector generado en el problema 5

VD0 = [0;0.5];
VD1 = [1;0];

posiciones = zeros(2,length(tiempo));
for i=1:length(tiempo)
Rang = [cosd(vector_integral(i)) -sind(vector_integral(i));sind(vector_integral(i))
cosd(vector_integral(i))];
posiciones(:,i) = VD0+Rang*VD1; % Método de transformación de coordenadas
solicitado
end
posiciones;

x = posiciones(1,:); % Obtenemos la fila 1


y = posiciones(2,:); % Obtenemos la fila 2
plot(x,y); % Graficamos
axis('equal')
ax = gca;
ax.XAxisLocation = 'origin';
ax.YAxisLocation = 'origin';
grid on
IV.8. EJERCICIOS ADICIONALES: Cree una función que calcule el movimiento del robot, de forma que reciba como
parámetros un vector columna de ángulos y devuelva una matriz con las posiciones x,y correspondientes a tales ángulos. La
matriz tendrá 2 filas y tantas columnas como ángulos componentes del vector ang hayan. El prototipo (declaración) de la
función será:

function pxy = robot1 (ang). (Recuerde el operador size)

function pxy = robot1(ang)


mxn = size(ang);

ubicacion = zeros(1,length(ang));
for i=1:mxn(1)
ubicacion(:,i) = (ang(i)*2)+1;
end

tiempo = 0:0.5:45;
vel_ang = repmat(1,1,length(tiempo));

vector_x = tiempo;
vector_y = vel_ang;
vector_integral = cumtrapz(vector_x,vector_y);

VD0 = [0;0.5];
VD1 = [1;0];

posiciones = zeros(2,length(tiempo));
for i=1:length(tiempo)
Rang = [cosd(vector_integral(i)) -sind(vector_integral(i));sind(vector_integral(i))
cosd(vector_integral(i))];
posiciones(:,i) = VD0+Rang*VD1;
end
ang
posiciones(:,ubicacion)
Comprobamos el correcto trabajo de la función. Probamos con valores conocidos como los del problema IV.3.
El enunciado especifica que solo debemos ingresar el ángulo, así que asumiremos trabajar con el vector D1 de problemas
anteriores.

clc
close all
clear all

robot1([0;15;30;45])

OBSERVACIONES Y CONCLUSIONES

Haga sus observaciones y emita al menos cinco conclusiones en torno al trabajo realizado.

• Matlab es un sistema interactivo destinado al cálculo en ingeniería. Posee un potente lenguaje de programación
especialmente diseñado para el tratamiento de matrices como unidad fundamental de información, puesto que
como es de conocimiento general, Matlab es la abreviatura de MATrix LABoratory (laboratorio de matrices).
• Ampliando lo descrito anteriormente, podemos concluir que, aunque otros lenguajes de programación
mayormente procesan números de uno en uno, Matlab está diseñado para funcionar principalmente con
matrices y arreglos completos. Todas las variables de Matlab son arreglos multidimensionales, sin importar el
tipo de datos.
• Matlab, además, integra herramientas de visualización de gráficos, útiles en nuestro caso, para entender mejor
el movimiento y la relación de variables presentes en mecanismos y específicamente en un brazo robótico.
• Cuando se trabaja con robots, además de especificar la posición de su extremo, también es necesario indicar su
orientación. Generalmente, esta viene definida en un espacio tridimensional (bidimensional en nuestro caso).
• Para describir de manera rápida la orientación del extremo respecto al sistema de referencia, generalmente se
asigna un nuevo sistema al extremo y después se estudia la relación existente entre ambos sistemas.
• Las matrices de rotación son uno de los métodos mas usados cuando se pretende describir orientaciones y es
debido a que se basan en algebra de matrices para la realización de los cálculos.

S-ar putea să vă placă și