Documente Academic
Documente Profesional
Documente Cultură
ESCUELA PROFESIONAL DE
INGENIERIA MECÁNICA, MECÁNICA-ELÉCTRICA Y MECATRÓNICA
“ROBÓTICA I”
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.
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
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:
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
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:
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.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
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.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
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 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
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
D0 = [0;0.5];
distD0 = hypot(D0(1),D0(2));
D1 = [1;0];
distD1 = hypot(D1(1),D1(2));
Pxy = [0;distD0]+R*[distD1;0]
grafico_vector(D0,O1XY,alfa1)
grafico_vector(D1,O2UV,alfa)
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
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:
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;
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;
clc
close all
clear all
vector_x = tiempo;
vector_y = vel_ang;
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;
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.