Edoc - Pub Matlab Robot Puma 560 1ra Edicion
Edoc - Pub Matlab Robot Puma 560 1ra Edicion
Edoc - Pub Matlab Robot Puma 560 1ra Edicion
Autor:
V. J. M. J. / A. M. M. J.
Índice general
Introducción
1. Cinemática Directa con la matriz Denavit Hartenberg (algoritmo del archivo: DENAVIT_MATRIZ)
Según la representación D-H, escogiendo adecuadamente los sistemas de coordenadas asociados para cada eslabón, será posible pasar de uno al siguiente mediante 4
transformaciones básicas que dependen exclusivamente de las características geométricas del eslabón.
Estas transformaciones básicas consisten en una sucesión de rotaciones y traslaciones que permitan relacionar el sistema de referencia del elemento i con el sistema del
elemento i-1. Las transformaciones en cuestión son las siguientes:
Dado que el producto de matrices no es conmutativo, las transformaciones se han de realizar en el orden indicado. De este modo se tiene que:
C i S i 0 0 1 0 0 0 1 0 0 ai 1 0 0 0
S C i 0
0 0 1 0 0
0 1 0
0 0 C i S i 0
i 1
Ai i
0 0 1 0 0 0 1 d i 0 0 1 0 0 S i C i 0
0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1
Como se ha indicado, para que la matriz i-1 Ai, relacione los sistemas (Si) y (Si-1), es necesario que los sistemas se hayan escogido de acuerdo a unas determinadas normas.
Estas, junto con la definición de los 4 parámetros de Denavit-Hartenberg, conforman el siguiente algoritmo para la resolución del problema cinemático directo:
El robot PUMA (P rogrammable
rogrammable U niversal
niversal M achine
achine for Assembly , o P rogrammable
rogrammable U niversal
niversal M anipulation
anipulation Arm)
rm) es un brazo robot industrial desarrollado por Victor Scheinman en
la empresa pionera en robótica Unimation. Inicialmente desarrollado para General Motors, el brazo robot PUMA nació de los diseños iniciales inventados por Scheinman
mientras se encontraba en el MIT y en la Stanford University.
Unimation produjo PUMA’s durante algunos años hasta que fue absorbida por Westinghouse, y posteriormente por la empresa suiza Stäubli. Nokia Robotics manufacturó cerca
1500 brazos robots PUMA durante los años 1980, siendo el PUMA-560 el modelo más popular entre los clientes. Nokia vendió su división de robótica en 1990.
En 2002 la organización General Motors Controls, Robotics and Welding (CRW) donó
(CRW) donó el prototipo original del brazo robot PUMA al Museo Nacional de Historia Americana,
reconociéndose así su importancia en el desarrollo de la robótica
1. Cinemática Directa con la matriz Denavit Hartenberg (algoritmo del archivo: DENAVIT_MATRIZ)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Para la representacion Denavit-hartenberg en Cinematica Directa se requieren 4 parámetros: a(i), alfa(i), teta(i), d(i)
% • 2 relativos a la forma y tamaño del eslabón: a(i), alfa(i)
% • 2 describen posición relativa del eslabón respecto a su predecesor*: teta(i), d(i)
% Los parámetros de forma y tamaño quedan determinados en tiempo de diseño
% Los parámetros de posición relativa varían
% • teta(i) es variable si la rotación es articular (d(i) Constante)
% • d(i) variable si la rotación es prismática (teta(i) Constante)
%
% *En notación Craig es respecto al eslabón sucesivo a(i-1), alfa(i-1), teta(i), d(i)
%
% El archivo DENAVIT_MATRIZ demuestra la funcionalidad de la Matriz de transformación homogénea del metodo DENAVIT-HARTENBERG.
%
% A partir de los parámetros de Denavit-Hartenberg (teta, d, a, alfa) se cuenta con cuatro matrices principales
% De rotacion angular teta (R_teta); de desplazamiento d (D_d); de desplazamiento a (D_a) y de rotacion angular alfa (R_alfa)
% Donde al final la matriz A sera el resultado del producto de estas cuatro matrices demostrando el metodo DENAVIT-HARTENBERG
% Revisar el archivo PDF CINEMATICA DIRECTA (Procedimiento Denavit-Hartenberg) pagina 9
%
% Igualmente se tiene la matriz B que es la representacion directa del metodo DENAVIT-HARTENBERG
%
% teta : ángulo existiría entre las líneas normales de la articulación i si se cortasen en el mismo punto del eje i
% d : distancia entre las intersecciones de las normales comunes al eje i, medida a lo largo de i
% a :(longitud eslabón) distancia entre ejes i, i+1 de las articulaciones a lo largo de la perpendicular común
% alfa :(ángulo torsión) ángulo que existiría entre ejes i,i+1 si se cortasen en punto de corte de la perpendicular común
%
% INGENIERO ELECTRONICO MONTEZA ZEVALLOS FIDEL TOMAS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Matriz principal del metodo DENAVIT-HARTENBERG cuyo resultado sera igual a la matriz A
B=[cos(teta) -cos(alfa)*sin(teta) sin(alfa)*sin(teta) a*cos(teta);
sin(teta) cos(alfa)*cos(teta) -sin(alfa)*cos(teta) a*sin(teta);
0 sin(alfa) cos(alfa) d;
0 0 0 1]
fprintf('\n
fprintf('\n CINEMATICA INVERSA DEL ROBOT PUMA 560 EN MATLAB') % Con (\n) se imprime en la siguiente linea
fprintf('\n
fprintf('\n ')
') % Con (\n) se imprime en la siguiente linea
fprintf('\n
fprintf('\n INGRESE LOS DATOS ESTABLECIDOS PARA GENERAR EL MOVIMIENTO') % Con (\n) se imprime en la siguiente linea
fprintf('\n
fprintf('\n ')
') % Con (\n) se imprime en la siguiente linea
fprintf('\n
fprintf('\n El valor de N1 (Numero de iteraciones del Primer Movimiento podria ser 40)') % (\n) se imprime en la siguiente linea
N1=input('\n
N1=input('\n INGRESE N1 = ');
'); % La variable N1 es el numero de iteraciones para el eje Z
fprintf('\n
fprintf('\n El valor de N2 (Numero de iteraciones del Segundo Movimiento podria ser 70)') % (\n) se imprime en la siguiente linea
N2=input('\n
N2=input('\n INGRESE N2 = ');
'); % La variable N2 es el numero de iteraciones para el eje Y
fprintf('\n
fprintf('\n El valor de N3 (Numero de iteraciones del Tercer Movimiento podria ser 90)') % (\n) se imprime en la siguiente linea
N3=input('\n
N3=input('\n INGRESE N3 = ');
'); % La variable N3 es el numero de iteraciones para el eje X
fprintf('\n
fprintf('\n El valor de N4 (Numero de iteraciones del Cuarto Movimiento podria ser 120)') % (\n) se imprime en la siguiente linea
N4=input('\n
N4=input('\n INGRESE N4 = ');
'); % La variable N4 es el numero de iteraciones para el eje Y
fprintf('\n
fprintf('\n ')
') % Con (\n) se imprime en la siguiente linea
fprintf('\n
fprintf('\n El valor de px (Valor inicial en el eje X del Robot Puma es 0.452)') % Con (\n) se imprime en la siguiente linea
px=input('\n
px=input('\n INGRESE px = ');
'); % La variable px es el Valor inicial en el eje X del Robot Puma
fprintf('\n
fprintf('\n El valor de py (Valor inicial en el eje Y del Robot Puma es -0.150)') % Con (\n) se imprime en la siguiente linea
py=input('\n
py=input('\n INGRESE py = ');
'); % La variable py es el Valor inicial en el eje Y del Robot Puma
fprintf('\n
fprintf('\n El valor de pz (Valor inicial en el eje Z del Robot Puma es 0.432)') % Con (\n) se imprime en la siguiente linea
pz=input('\n
pz=input('\n INGRESE pz = ');
'); % La variable pz es el Valor inicial en el eje Z del Robot Puma
fprintf('\n
fprintf('\n ')
') % Con (\n) se imprime en la siguiente linea
fprintf('\n
fprintf('\n El valor de d1 (Punto inicial del primer movimiento del brazo robotico, puede ser 0.432)')
d1=input('\n
d1=input('\n INGRESE d1 = ');
'); % Punto inicial del primer movimiento
fprintf('\n
fprintf('\n El valor de d2 (Punto final del segundo movimiento del brazo robotico, puede ser 0.512)'
)
d2=input('\n
d2=input('\n INGRESE d2 = ');
'); % Punto final del primer movimiento
fprintf('\n
fprintf('\n El valor de d3 (Punto inicial del segundo movimiento del brazo robotico, puede ser -0.15)')
d3=input('\n
d3=input('\n INGRESE d3 = ');
'); % Punto inicial del segundo movimiento
fprintf('\n
fprintf('\n El valor de d4 (Punto final del segundo movimiento del brazo robotico, puede ser 0.15)'
)
d4=input('\n
d4=input('\n INGRESE d4 = ');
'); % Punto final del segundo movimiento
fprintf('\n
fprintf('\n El valor de d5 (Punto inicial del tercer movimiento del brazo robotico, puede ser 0.452)')
d5=input('\n
d5=input('\n INGRESE d5 = ');
'); % Punto inicial del tercer movimiento
fprintf('\n
fprintf('\n El valor de d6 (Punto final del tercer movimiento del brazo robotico, puede ser 0.502)'
)
d6=input('\n
d6=input('\n INGRESE d6 = ');
'); % Punto final del tercer movimiento
fprintf('\n
fprintf('\n El valor de d7 (Punto inicial del cuarto movimiento del brazo robotico, puede ser 0.15)'
)
d7=input('\n
d7=input('\n INGRESE d7 = ');
'); % Punto inicial del cuarto movimiento
fprintf('\n
fprintf('\n El valor de d8 (Punto final del cuarto movimiento del brazo robotico, puede ser 0.30)'
)
d8=input('\n
d8=input('\n INGRESE d8 = ');
'); % Punto final del cuarto movimiento
Ventana del Command Window en MATLAB en donde se debe seguir los pasos que se indican de acuerdo a las líneas de programacion
7. Líneas del algoritmo del archivo: PUMA560_4B
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Archivo PUMA560_4B que se ejecuta necesariamente con la funcion ikine del Toolbox Robotic de MATLAB
% De acuerdo a la programacion el sistema se movera de la siguiente forma:
% Moverse 150 unidades en el eje X
% Moverse 30 unidades en el eje Y
% Moverse 5 unidades en el eje Z
% Moverse 150 unidades en el eje X
% Moverse 15 unidades en el eje Y
% Los valores iniciales en el eje XYZ del Robot Puma son X=0.452; Y=-0.150; Z=0.432
% Los valores de variacion de cada articulacion esta de la siguiente forma:
%
% Inicio Primer Movimiento Segundo Movimiento Tercer Movimiento Cuarto Movimiento Quinto Movimiento
% X=0.452 -----> 0.602 ------------------------------------------------------------> 0.452
% Y=-0.15 ---------------------------> 0.15 ------------------------------------------------------------> 0.30
% Z=0.432 --------------------------------------------------> 0.482
%
% La variable N sera el numero de iteraciones (Velocidad de movimiento) y cada linea de programacion con el comando:
% linspace(d1,d2,N) sera las unidades de cantidad de movimiento a ser realizado
%
% Escribir en el Command Window las siguientes lineas:
% puma560
% drivebot(p560)
%
% INGENIERO ELECTRONICO MONTEZA ZEVALLOS FIDEL TOMAS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fprintf('\n
fprintf('\n CINEMATICA INVERSA DEL ROBOT PUMA 560 EN MATLAB') % Con (\n) se imprime en la siguiente linea
fprintf('\n
fprintf('\n ')
') % Con (\n) se imprime en la siguiente linea
fprintf('\n
fprintf('\n INGRESE LOS DATOS ESTABLECIDOS PARA GENERAR EL MOVIMIENTO') % Con (\n) se imprime en la siguiente linea
fprintf('\n
fprintf('\n ')
') % Con (\n) se imprime en la siguiente linea
fprintf('\n
fprintf('\n El valor de N1 (Numero de iteraciones del Primer Movimiento podria ser 40)') % (\n) se imprime en la siguiente linea
N1=input('\n
N1=input('\n INGRESE N1 = ');
'); % La variable N1 es el numero de iteraciones para el eje X
fprintf('\n
fprintf('\n El valor de N2 (Numero de iteraciones del Segundo Movimiento podria ser 70)') % (\n) se imprime en la siguiente linea
N2=input('\n
N2=input('\n INGRESE N2 = ');
'); % La variable N2 es el numero de iteraciones para el eje Y
fprintf('\n
fprintf('\n El valor de N3 (Numero de iteraciones del Tercer Movimiento podria ser 90)') % (\n) se imprime en la siguiente linea
N3=input('\n
N3=input('\n INGRESE N3 = ');
'); % La variable N3 es el numero de iteraciones para el eje Z
fprintf('\n
fprintf('\n El valor de N4 (Numero de iteraciones del Cuarto Movimiento podria ser 120)') % (\n) se imprime en la siguiente linea
N4=input('\n
N4=input('\n INGRESE N4 = ');
'); % La variable N4 es el numero de iteraciones para el eje X
fprintf('\n
fprintf('\n El valor de N5 (Numero de iteraciones del Quinto Movimiento podria ser 130)') % (\n) se imprime en la siguiente linea
N5=input('\n
N5=input('\n INGRESE N5 = ');
'); % La variable N5 es el numero de iteraciones para el eje Y
fprintf('\n
fprintf('\n ')
') % Con (\n) se imprime en la siguiente linea
fprintf('\n
fprintf('\n USTED INGRESARA LOS DATOS DE LA POSICION INICIAL DE ROBOT PUMA 560') % Con (\n) se imprime en la siguiente linea
fprintf('\n
fprintf('\n ')
') % Con (\n) se imprime en la siguiente linea
fprintf('\n
fprintf('\n El valor de px (Valor inicial en el eje X del Robot Puma es 0.452)') % Con (\n) se imprime en la siguiente linea
px=input('\n
px=input('\n INGRESE px = ');
'); % La variable px es el Valor inicial en el eje X del Robot Puma
fprintf('\n
fprintf('\n El valor de py (Valor inicial en el eje Y del Robot Puma es -0.150)') % Con (\n) se imprime en la siguiente linea
py=input('\n
py=input('\n INGRESE py = ');
'); % La variable py es el Valor inicial en el eje Y del Robot Puma
fprintf('\n
fprintf('\n El valor de pz (Valor inicial en el eje Z del Robot Puma es 0.432)') % Con (\n) se imprime en la siguiente linea
pz=input('\n
pz=input('\n INGRESE pz = ');
'); % La variable pz es el Valor inicial en el eje Z del Robot Puma
fprintf('\n
fprintf('\n ')
') % Con (\n) se imprime en la siguiente linea
fprintf('\n
fprintf('\n USTED INGRESARA DATOS DE LAS POSICIONES INICIAL Y FINAL DE ROBOT PUMA 560') % Con (\n) se imprime en la siguiente linea
fprintf('\n
fprintf('\n ')
') % (\n) se imprime en la siguiente linea
fprintf('\n
fprintf('\n El valor de d1 (Punto inicial del primer movimiento del brazo robotico, puede ser 0.452)' )
d1=input('\n
d1=input('\n INGRESE d1 = ');
'); % Punto inicial del primer movimiento
fprintf('\n
fprintf('\n El valor de d2 (Punto final del segundo movimiento del brazo robotico, puede ser 0.602)')
d2=input('\n
d2=input('\n INGRESE d2 = ');
'); % Punto final del primer movimiento
fprintf('\n
fprintf('\n El valor de d3 (Punto inicial del segundo movimiento del brazo robotico, puede ser -0.15)' )
d3=input('\n
d3=input('\n INGRESE d3 = ');
'); % Punto inicial del segundo movimiento
fprintf('\n
fprintf('\n El valor de d4 (Punto final del segundo movimiento del brazo robotico, puede ser 0.15)')
d4=input('\n
d4=input('\n INGRESE d4 = ');
'); % Punto final del segundo movimiento
fprintf('\n
fprintf('\n El valor de d5 (Punto inicial del tercer movimiento del brazo robotico, puede ser 0.432)' )
d5=input('\n
d5=input('\n INGRESE d5 = ');
'); % Punto inicial del tercer movimiento
fprintf('\n
fprintf('\n El valor de d6 (Punto final del tercer movimiento del brazo robotico, puede ser 0.482)')
d6=input('\n
d6=input('\n INGRESE d6 = ');
'); % Punto final del tercer movimiento
fprintf('\n
fprintf('\n El valor de d7 (Punto inicial del cuarto movimiento del brazo robotico, puede ser 0.602)' )
d7=input('\n
d7=input('\n INGRESE d7 = ');
'); % Punto inicial del cuarto movimiento
fprintf('\n
fprintf('\n El valor de d8 (Punto final del cuarto movimiento del brazo robotico, puede ser 0.452)')
d8=input('\n
d8=input('\n INGRESE d8 = ');
'); % Punto final del cuarto movimiento
fprintf('\n
fprintf('\n El valor de d9 (Punto inicial del primer movimiento del brazo robotico, puede ser 0.15)')
d9=input('\n
d9=input('\n INGRESE d9 = ');
'); % Punto inicial del primer movimiento
fprintf('\n
fprintf('\n El valor de d10 (Punto final del segundo movimiento del brazo robotico, puede ser 0.30)')
d10=input('\n
d10=input('\n INGRESE d10 = ');
'); % Punto final del primer movimiento
% Lineas de programacion para el primer tramo de movimiento de N1 iteraciones en el eje X
x=linspace(d1,d2,N1); % La variable x se distribuira desde 0.602 hasta 0.452 en N1 partes iguales (d2-d1=0.150 unidades)
y=zeros(1,N1); % La variable y estara comprendida por 1 fila de N1 Ceros
z=x; % La variable z sera igual a lo obtenido en la variable x (1 fila de N1 Ceros)
for j=1:N1
for j=1:N1 % La variable j ira desde 1 hasta N1 en valores de una unidad
y(1,j)=py; % Se formaran matrices y de 1 fila x (1 hasta N1) columnas con el valor inicial -0.15
z(1,j)=pz; % Se formaran matrices z de 1 fila x (1 hasta N1) columnas con el valor inicial 0.432
end
phi=zeros(1,N1); % La variable phi estara comprendida por 1 fila de N1 Ceros
for k=1:length(x)
for k=1:length(x) % La variable k ira desde 1 hasta el maximo valor de la variable x en valores de una unidad
phik=phi(k);
T(:,:,k)=[cos(phik) -sin(phik) 0 x(k); % La matriz T es la matriz homogenea
sin(phik) cos(phik) 0 y(k);
0 0 1 z(k);
0 0 0 1];
end
qxx=ikine(robot,T) % ikine es una funcion de Cinematica Inversa del Toolbox de Robotica
plot(robot,qxx)