Sunteți pe pagina 1din 28

MATLAB

CINEMATICA DIRECTA CON LA MATRIZ DENAVIT HARTENBERG


Programas para controlar el robot PUMA 560

Autor:
Ingeniero Electrnico: Monteza Zevallos Fidel Tomas
Diciembre de 2016 (Primera Edicin)
V. J. M. J. / A. M. M. J.

ndice general

Introduccin
1. Cinemtica Directa con la matriz Denavit Hartenberg (algoritmo del archivo: DENAVIT_MATRIZ)
2. Lneas del algoritmo del archivo: PUMA560_1A
3. Lneas del algoritmo del archivo: PUMA560_1B
4. Lneas del algoritmo del archivo: PUMA560_2A
5. Lneas del algoritmo del archivo: PUMA560_3A
6. Lneas del algoritmo del archivo: PUMA560_4A
7. Lneas del algoritmo del archivo: PUMA560_4B

Introduccin
Denavit-Hartenberg propusieron en 1955 un mtodo matricial que permite establecer de manera sistemtica un sistema de coordenadas (Si) ligado a cada eslabn i de una
cadena articulada, pudindose determinar a continuacin las ecuaciones cinemticas de la cadena completa.
Segn la representacin D-H, escogiendo adecuadamente los sistemas de coordenadas asociados para cada eslabn, ser posible pasar de uno al siguiente mediante 4
transformaciones bsicas que dependen exclusivamente de las caractersticas geomtricas del eslabn.
Estas transformaciones bsicas consisten en una sucesin de rotaciones y traslaciones que permitan relacionar el sistema de referencia del elemento i con el sistema del
elemento i-1. Las transformaciones en cuestin son las siguientes:
Rotacin alrededor del eje Zi-1 un ngulo i.
Traslacin a lo largo de Zi-1 una distancia di; vector di ( 0,0,di ).
Traslacin a lo largo de Xi una distancia ai; vector ai ( 0,0,ai ).
Rotacin alrededor del eje Xi, un ngulo i.
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:
i-1A i =

T( z, i

) T( 0,0,di ) T ( ai,0,0 ) T( x,i )

Y realizando el producto de matrices:

C i
S
i 1
Ai i
0

S i
C i
0
0

0
0
1
0

0 1
0 0
0 0

1 0

C i
S
i
0

0
1
0
0

0 0 1
0 0 0
1 d i 0

0 1 0

C i S i
C i C i
S i
0

0
1
0
0

S i S i
S i C i
C i
0

0 ai 1
0

0 0 0 C i
1 0 0 S i

0 1 0
0

0
S i
C i
0

0
0

a i C i
a i S i
di

Donde i, ai, di, i, son los parmetros D-H del eslabn i, basta con identificarlos para obtener matrices A y relacionar as todos y cada uno de los eslabones del robot.
Como se ha indicado, para que la matriz i-1Ai, 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 definicin de los 4 parmetros de Denavit-Hartenberg, conforman el siguiente algoritmo para la resolucin del problema cinemtico directo:

El robot PUMA (Programmable Universal Machine for Assembly, o Programmable Universal Manipulation Arm) es un brazo robot industrial desarrollado por Victor Scheinman en
la empresa pionera en robtica Unimation. Inicialmente desarrollado para General Motors, el brazo robot PUMA naci de los diseos iniciales inventados por Scheinman
mientras se encontraba en el MIT y en la Stanford University.
Unimation produjo PUMAs durante algunos aos hasta que fue absorbida por Westinghouse, y posteriormente por la empresa suiza Stubli. Nokia Robotics manufactur cerca
1500 brazos robots PUMA durante los aos 1980, siendo el PUMA-560 el modelo ms popular entre los clientes. Nokia vendi su divisin de robtica en 1990.
En 2002 la organizacin General Motors Controls, Robotics and Welding (CRW) don el prototipo original del brazo robot PUMA al Museo Nacional de Historia Americana,
reconocindose as su importancia en el desarrollo de la robtica

1. Cinemtica Directa con la matriz Denavit Hartenberg (algoritmo del archivo: DENAVIT_MATRIZ)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Para la representacion Denavit-hartenberg en Cinematica Directa se requieren 4 parmetros: a(i), alfa(i), teta(i), d(i)
% 2 relativos a la forma y tamao del eslabn: a(i), alfa(i)
% 2 describen posicin relativa del eslabn respecto a su predecesor*: teta(i), d(i)
% Los parmetros de forma y tamao quedan determinados en tiempo de diseo
% Los parmetros de posicin relativa varan
% teta(i) es variable si la rotacin es articular (d(i) Constante)
% d(i) variable si la rotacin es prismtica (teta(i) Constante)
%
% *En notacin Craig es respecto al eslabn sucesivo a(i-1), alfa(i-1), teta(i), d(i)
%
% El archivo DENAVIT_MATRIZ demuestra la funcionalidad de la Matriz de transformacin homognea del metodo DENAVIT-HARTENBERG.
%
% A partir de los parmetros 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 existira entre las lneas normales de la articulacin 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 eslabn) distancia entre ejes i, i+1 de las articulaciones a lo largo de la perpendicular comn
% alfa :(ngulo torsin) ngulo que existira entre ejes i,i+1 si se cortasen en punto de corte de la perpendicular comn
%
% INGENIERO ELECTRONICO MONTEZA ZEVALLOS FIDEL TOMAS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
clc;
close all;

% Limpiamos el Workspace
% Limpiamos el Command Window
% Cerramos todo

teta = pi/2;
alfa = pi/2;
a=1;
d=1;

% Angulo teta a girar (90)


% Angulo alfa a girar (90)
% Longitud del eslabon
% Distancia entre las intersecciones

% Primera matriz de rotacion angular teta


R_teta=[cos(teta) -sin(teta) 0 0;
sin(teta) cos(teta) 0 0;
0 0 1 0;

0 0 0 1];
% Segunda matriz de desplazamiento d
D_d=[1 0 0 0;
0 1 0 0;
0 0 1 d;
0 0 0 1];
% Tercera matriz de desplazamiento a
D_a=[1 0 0 a;
0 1 0 0;
0 0 1 0;
0 0 0 1];
% Cuarta matriz de rotacion angular alfa
R_alfa=[1 0 0 0;
0 cos(alfa) -sin(alfa) 0;
0 sin(alfa) cos(alfa) 0;
0 0 0 1];
% Producto final de todas las matrices que relacionan el metodo DENAVIT-HARTENBERG
A=R_teta*D_d*D_a*R_alfa
% 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]

Presentacin en el Command Window de MATLAB de la matriz A y la matriz B mostrando idnticos resultados

2. Lneas del algoritmo del archivo: PUMA560_1A


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Archivo PUMA560_1A 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 8 unidades en el eje Z
% Moverse 30 unidades en el eje Y
% Moverse 5 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
% X=0.452 ---------------------------------------------------> 0.502
% Y=-0.15 ---------------------------> 0.15 ---------------------------------------> 0.30
% Z=0.432 -----> 0.512
%
% 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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
clc;
close all;
puma560;
robot=p560
N=40;

% Limpiamos el Workspace
% Limpiamos el Command Window
% Cerramos todo
% Se llama al proyecto Robot Puma creado en MATLAB
% La variable N es el numero de iteraciones

% Lineas de programacion para el primer tramo de movimiento de 5 unidades en el eje Z


z=linspace(0.432,0.512,N);
% La variable z se distribuira desde 0.432 hasta 0.512 en N partes iguales (0.08 unidades)
x=zeros(1,N);
% La variable x estara comprendida por 1 fila de N Ceros
y=x;
% La variable y sera igual a lo obtenido en la variable x (1 fila de N Ceros)
for j=1:N
% La variable j ira desde 1 hasta N en valores de una unidad
y(1,j)=-0.15;
% Se formaran matrices y de 1 fila x (1 hasta N) columnas con los valores -0.15
x(1,j)=0.452;
% Se formaran matrices x de 1 fila x (1 hasta N) columnas con los valores 0.452
end
phi=zeros(1,N);
% La variable phi estara comprendida por 1 fila de N Ceros

for k=1:length(z)
% La variable k ira desde 1 hasta el maximo valor de la variable z 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
qzz=ikine(robot,T)
% ikine es una funcion de Cinematica Inversa del Toolbox de Robotica
plot(robot,qzz)
% Lineas de programacion para el segundo tramo de movimiento de 30 unidades en el eje Y
y=linspace(-0.15,0.15,N);
% La variable y se distribuira desde -0.15 hasta 0.15 en N partes iguales (0.30 unidades)
x=zeros(1,N);
% La variable x estara comprendida por 1 fila de N Ceros
z=x;
% La variable z sera igual a lo obtenido en la variable x (1 fila de N Ceros)
for j=1:N
% La variable j ira desde 1 hasta N en valores de una unidad
x(1,j)=0.452;
% Se formaran matrices x de 1 fila x (1 hasta N) columnas con los valores 0.452
z(1,j)=0.512;
% Se formaran matrices z de 1 fila x (1 hasta N) columnas con los valores 0.512
end
phi=zeros(1,N);
for k=1:length(y)
% La variable k ira desde 1 hasta el maximo valor de la variable y 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
qyy=ikine(robot,T)
% ikine es una funcion de Cinematica Inversa del Toolbox de Robotica
plot(robot,qyy)
% Lineas de programacion para el tercer tramo de movimiento de 5 unidades en el eje X
x=linspace(0.452,0.502,N);
% La variable x se distribuira desde 0.452 hasta 0.502 en N partes iguales (0.05 unidades)
y=zeros(1,N);
% La variable y estara comprendida por 1 fila de N Ceros
z=y;
% La variable z sera igual a lo obtenido en la variable y (1 fila de N Ceros)
for j=1:N
% La variable j ira desde 1 hasta N en valores de una unidad
y(1,j)=0.15;
% Se formaran matrices y de 1 fila x (1 hasta N) columnas con los valores 0.15
z(1,j)=0.512;
% Se formaran matrices z de 1 fila x (1 hasta N) columnas con los valores 0.512
end
phi=zeros(1,N);
% La variable phi estara comprendida por 1 fila de N Ceros
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)
plot(robot,qxx)

% ikine es una funcion de Cinematica Inversa del Toolbox de Robotica

% Lineas de programacion para el cuarto tramo de movimiento de 15 unidades en el eje Y


y=linspace(0.15,0.30,N);
% La variable y se distribuira desde 0.15 hasta 0.30 en N partes iguales (0.15 unidades)
x=zeros(1,N);
% La variable x estara comprendida por 1 fila de N Ceros
z=x;
% La variable z sera igual a lo obtenido en la variable x (1 fila de N Ceros)
for j=1:N
% La variable j ira desde 1 hasta N en valores de una unidad
x(1,j)=0.502;
% Se formaran matrices x de 1 fila x (1 hasta N) columnas con los valores 0.502
z(1,j)=0.512;
% Se formaran matrices z de 1 fila x (1 hasta N) columnas con los valores 0.512
end
phi=zeros(1,N);
% La variable phi estara comprendida por 1 fila de N Ceros
for k=1:length(y)
% La variable k ira desde 1 hasta el maximo valor de la variable y 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
qyy=ikine(robot,T)
% ikine es una funcion de Cinematica Inversa del Toolbox de Robotica
plot(robot,qyy)

3. Lneas del algoritmo del archivo: PUMA560_1B


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Archivo PUMA560_1B 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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
clc;
close all;

% Limpiamos el Workspace
% Limpiamos el Command Window
% Cerramos todo

puma560;
robot=p560
N=40;

% Se llama al proyecto Robot Puma creado en MATLAB


% La variable N es el numero de iteraciones

% Lineas de programacion para el primer tramo de movimiento de 150 unidades en el eje X


x=linspace(0.452,0.602,N);
% La variable x se distribuira desde 0.452 hasta 0.602 en N partes iguales (0.15 unidades)
y=zeros(1,N);
% La variable y estara comprendida por 1 fila de N Ceros
z=y;
% La variable z sera igual a lo obtenido en la variable y (1 fila de N Ceros)
for j=1:N
% La variable j ira desde 1 hasta N en valores de una unidad
z(1,j)=0.432;
% Se formaran matrices z de 1 fila x (1 hasta N) columnas con los valores 0.432
y(1,j)=-0.15;
% Se formaran matrices y de 1 fila x (1 hasta N) columnas con los valores -0.15
end

phi=zeros(1,N);
% La variable phi estara comprendida por 1 fila de N Ceros
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)
% Lineas de programacion para el segundo tramo de movimiento de 30 unidades en el eje Y
y=linspace(-0.15,0.15,N);
% La variable y se distribuira desde -0.15 hasta 0.15 en N partes iguales (0.30 unidades)
x=zeros(1,N);
% La variable x estara comprendida por 1 fila de N Ceros
z=x;
% La variable z sera igual a lo obtenido en la variable x (1 fila de N Ceros)
for j=1:N
% La variable j ira desde 1 hasta N en valores de una unidad
z(1,j)=0.432;
% Se formaran matrices z de 1 fila x (1 hasta N) columnas con los valores 0.432
x(1,j)=0.602;
% Se formaran matrices x de 1 fila x (1 hasta N) columnas con los valores 0.602
end
phi=zeros(1,N);
for k=1:length(y)
% La variable k ira desde 1 hasta el maximo valor de la variable y 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
qyy=ikine(robot,T)
% ikine es una funcion de Cinematica Inversa del Toolbox de Robotica
plot(robot,qyy)
% Lineas de programacion para el tercer tramo de movimiento de 5 unidades en el eje Z
z=linspace(0.432,0.482,N);
% La variable z se distribuira desde 0.432 hasta 0.482 en N partes iguales (0.05 unidades)
y=zeros(1,N);
% La variable y estara comprendida por 1 fila de N Ceros
x=y;
% La variable x sera igual a lo obtenido en la variable y (1 fila de N Ceros)
for j=1:N
% La variable j ira desde 1 hasta N en valores de una unidad
x(1,j)=0.602;
% Se formaran matrices x de 1 fila x (1 hasta N) columnas con los valores 0.602
y(1,j)=0.15;
% Se formaran matrices y de 1 fila x (1 hasta N) columnas con los valores 0.15
end
phi=zeros(1,N);
% La variable phi estara comprendida por 1 fila de N Ceros
for k=1:length(z)
% La variable k ira desde 1 hasta el maximo valor de la variable z 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
qzz=ikine(robot,T)
plot(robot,qzz)

% ikine es una funcion de Cinematica Inversa del Toolbox de Robotica

% Lineas de programacion para el cuarto tramo de movimiento de 150 unidades en el eje X


x=linspace(0.602,0.452,N);
% La variable x se distribuira desde 0.592 hasta 0.452 en N partes iguales (0.140 unidades)
y=zeros(1,N);
% La variable y estara comprendida por 1 fila de N Ceros
z=x;
% La variable z sera igual a lo obtenido en la variable y (1 fila de N Ceros)
for j=1:N
% La variable j ira desde 1 hasta N en valores de una unidad
z(1,j)=0.482;
% Se formaran matrices x de 1 fila x (1 hasta N) columnas con los valores 0.482
y(1,j)=0.15;
% Se formaran matrices z de 1 fila x (1 hasta N) columnas con los valores 0.15
end
phi=zeros(1,N);
% La variable phi estara comprendida por 1 fila de N Ceros
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)
% Lineas de programacion para el quinto tramo de movimiento de 15 unidades en el eje Y
y=linspace(0.15,0.30,N);
% La variable y se distribuira desde 0.15 hasta 0.30 en N partes iguales (0.15 unidades)
x=zeros(1,N);
% La variable x estara comprendida por 1 fila de N Ceros
z=x;
% La variable z sera igual a lo obtenido en la variable x (1 fila de N Ceros)
for j=1:N
% La variable j ira desde 1 hasta N en valores de una unidad
z(1,j)=0.482;
% Se formaran matrices z de 1 fila x (1 hasta N) columnas con los valores 0.432
x(1,j)=0.452;
% Se formaran matrices x de 1 fila x (1 hasta N) columnas con los valores 0.602
end
phi=zeros(1,N);
for k=1:length(y)
% La variable k ira desde 1 hasta el maximo valor de la variable y 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
qyy=ikine(robot,T)
% ikine es una funcion de Cinematica Inversa del Toolbox de Robotica
plot(robot,qyy)

4. Lneas del algoritmo del archivo: PUMA560_2A


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Archivo PUMA560_2A 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 8 unidades en el eje Z
% Moverse 30 unidades en el eje Y
% Moverse 5 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
% X=0.452 ---------------------------------------------------> 0.502
% Y=-0.15 ---------------------------> 0.15 ---------------------------------------> 0.30
% Z=0.432 -----> 0.512
%
% Las variables N seran el numero de iteraciones (Velocidad de movimiento) y cada linea de programacion con el comando:
% linspace(d1,d2,N) seran 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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
clc;
close all;

% Limpiamos el Workspace
% Limpiamos el Command Window
% Cerramos todo

puma560;
robot=p560
N1=40;
N2=70;
N3=90;
N4=120;

% Se llama al proyecto Robot Puma creado en MATLAB


%
%
%
%

La
La
La
La

variable
variable
variable
variable

N1
N2
N3
N4

es
es
es
es

el
el
el
el

numero
numero
numero
numero

de
de
de
de

iteraciones
iteraciones
iteraciones
iteraciones

para
para
para
para

el
el
el
el

eje
eje
eje
eje

Z
Y
X
Y

% Lineas de programacion para el primer tramo de movimiento de N1 iteraciones en el eje Z


z=linspace(0.432,0.512,N1);
% La variable z se distribuira desde 0.432 hasta 0.512 en N1 partes iguales (0.08 unidades)
x=zeros(1,N1);
% La variable x estara comprendida por 1 fila de N1 Ceros
y=x;
% La variable y sera igual a lo obtenido en la variable x (1 fila de N1 Ceros)
for j=1:N1
% La variable j ira desde 1 hasta N1 en valores de una unidad
y(1,j)=-0.15;
% Se formaran matrices y de 1 fila x (1 hasta N1) columnas con los valores -0.15

x(1,j)=0.452;
% Se formaran matrices x de 1 fila x (1 hasta N1) columnas con los valores 0.452
end
phi=zeros(1,N1);
% La variable phi estara comprendida por 1 fila de N1 Ceros
for k=1:length(z)
% La variable k ira desde 1 hasta el maximo valor de la variable z 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
qzz=ikine(robot,T)
% ikine es una funcion de Cinematica Inversa del Toolbox de Robotica
plot(robot,qzz)
% Lineas de programacion para el segundo tramo de movimiento de N2 iteraciones en el eje Y
y=linspace(-0.15,0.15,N2);
% La variable y se distribuira desde -0.15 hasta 0.15 en N2 partes iguales (0.30 unidades)
x=zeros(1,N2);
% La variable x estara comprendida por 1 fila de N2 Ceros
z=x;
% La variable z sera igual a lo obtenido en la variable x (1 fila de N2 Ceros)
for j=1:N2
% La variable j ira desde 1 hasta N2 en valores de una unidad
x(1,j)=0.452;
% Se formaran matrices x de 1 fila x (1 hasta N2) columnas con los valores 0.452
z(1,j)=0.512;
% Se formaran matrices z de 1 fila x (1 hasta N2) columnas con los valores 0.512
end
phi=zeros(1,N2);
for k=1:length(y)
% La variable k ira desde 1 hasta el maximo valor de la variable y 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
qyy=ikine(robot,T)
% ikine es una funcion de Cinematica Inversa del Toolbox de Robotica
plot(robot,qyy)
% Lineas de programacion para el tercer tramo de movimiento de N3 iteraciones en el eje X
x=linspace(0.452,0.502,N3);
% La variable x se distribuira desde 0.452 hasta 0.502 en N3 partes iguales (0.05 unidades)
y=zeros(1,N3);
% La variable y estara comprendida por 1 fila de N3 Ceros
z=y;
% La variable z sera igual a lo obtenido en la variable y (1 fila de N3 Ceros)
for j=1:N3
% La variable j ira desde 1 hasta N3 en valores de una unidad
y(1,j)=0.15;
% Se formaran matrices y de 1 fila x (1 hasta N3) columnas con los valores 0.15
z(1,j)=0.512;
% Se formaran matrices z de 1 fila x (1 hasta N3) columnas con los valores 0.512
end
phi=zeros(1,N3);
% La variable phi estara comprendida por 1 fila de N3 Ceros
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)
plot(robot,qxx)

% ikine es una funcion de Cinematica Inversa del Toolbox de Robotica

% Lineas de programacion para el cuarto tramo de movimiento de N4 iteraciones en el eje Y


y=linspace(0.15,0.30,N4);
% La variable y se distribuira desde 0.15 hasta 0.30 en N4 partes iguales (0.30 unidades)
x=zeros(1,N4);
% La variable x estara comprendida por 1 fila de N4 Ceros
z=x;
% La variable z sera igual a lo obtenido en la variable x (1 fila de N Ceros)
for j=1:N4
% La variable j ira desde 1 hasta N4 en valores de una unidad
x(1,j)=0.502;
% Se formaran matrices x de 1 fila x (1 hasta N4) columnas con los valores 0.502
z(1,j)=0.512;
% Se formaran matrices z de 1 fila x (1 hasta N4) columnas con los valores 0.512
end
phi=zeros(1,N4);
% La variable phi estara comprendida por 1 fila de N4 Ceros
for k=1:length(y)
% La variable k ira desde 1 hasta el maximo valor de la variable y 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
qyy=ikine(robot,T)
% ikine es una funcion de Cinematica Inversa del Toolbox de Robotica
plot(robot,qyy)

5. Lneas del algoritmo del archivo: PUMA560_3A


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Archivo PUMA560_3A 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 8 unidades en el eje Z
% Moverse 30 unidades en el eje Y
% Moverse 5 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
% X=0.452 ---------------------------------------------------> 0.502
% Y=-0.15 ---------------------------> 0.15 ---------------------------------------> 0.30
% Z=0.432 -----> 0.512
%
% Las variables N seran el numero de iteraciones (Velocidad de movimiento) y cada linea de programacion con el comando:
% linspace(d1,d2,N) seran las unidades de cantidad de movimiento a ser realizado
% Las variables d seran los puntos iniciales y finales de cada movimiento a ser realizado
%
% Escribir en el Command Window las siguientes lineas:
% puma560
% drivebot(p560)
%
% INGENIERO ELECTRONICO MONTEZA ZEVALLOS FIDEL TOMAS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
clc;
close all;

% Limpiamos el Workspace
% Limpiamos el Command Window
% Cerramos todo

puma560;
robot=p560
N1=40;
N2=70;
N3=90;
N4=120;

% Se llama al proyecto Robot Puma creado en MATLAB

px=0.452;
py=-0.150;
pz=0.432;

%
%
%
%

La
La
La
La

variable
variable
variable
variable

N1
N2
N3
N4

es
es
es
es

el
el
el
el

numero
numero
numero
numero

de
de
de
de

iteraciones
iteraciones
iteraciones
iteraciones

% Valor inicial en el eje X del Robot Puma


% Valor inicial en el eje Y del Robot Puma
% Valor inicial en el eje Z del Robot Puma

para
para
para
para

el
el
el
el

eje
eje
eje
eje

Z
Y
X
Y

d1=0.432;
d2=0.512;
d3=-0.15;
d4=0.15;
d5=0.452;
d6=0.502;
d7=0.15;
d8=0.30;

%
%
%
%
%
%
%
%

Punto
Punto
Punto
Punto
Punto
Punto
Punto
Punto

inicial del primer movimiento del brazo robotico, puede ser 0.432
final del primer movimiento del brazo robotico, puede ser 0.512
inicial del segundo movimiento del brazo robotico, puede ser -0.15
final del segundo movimiento del brazo robotico, puede ser 0.15
inicial del tercer movimiento del brazo robotico, puede ser 0.452
final del tercer movimiento del brazo robotico, puede ser 0.502
inicial del cuarto movimiento del brazo robotico, puede ser 0.15
final del cuarto movimiento del brazo robotico, puede ser 0.30

% Lineas de programacion para el primer tramo de movimiento de N1 iteraciones en el eje Z


z=linspace(d1,d2,N1);
% La variable z se distribuira desde 0.432 hasta 0.512 en N1 partes iguales (d2-d1=0.08 unidades)
x=zeros(1,N1);
% La variable x estara comprendida por 1 fila de N1 Ceros
y=x;
% La variable y sera igual a lo obtenido en la variable x (1 fila de N1 Ceros)
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
x(1,j)=px;
% Se formaran matrices x de 1 fila x (1 hasta N1) columnas con el valor inicial 0.452
end
phi=zeros(1,N1);
% La variable phi estara comprendida por 1 fila de N1 Ceros
for k=1:length(z)
% La variable k ira desde 1 hasta el maximo valor de la variable z 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
qzz=ikine(robot,T)
% ikine es una funcion de Cinematica Inversa del Toolbox de Robotica
plot(robot,qzz)
% Lineas de programacion para el segundo tramo de movimiento de N2 iteraciones en el eje Y
y=linspace(d3,d4,N2);
% La variable y se distribuira desde -0.15 hasta 0.15 en N2 partes iguales (d4-d3=0.30 unidades)
x=zeros(1,N2);
% La variable x estara comprendida por 1 fila de N2 Ceros
z=x;
% La variable z sera igual a lo obtenido en la variable x (1 fila de N2 Ceros)
for j=1:N2
% La variable j ira desde 1 hasta N2 en valores de una unidad
x(1,j)=px;
% Se formaran matrices x de 1 fila x (1 hasta N2) columnas con los valores 0.452 (X no ha sufrido cambios)
z(1,j)=pz+(d2-d1);% Se formara matrices z de 1 fila x (1 hasta N2) columnas con valores 0.512 (Punto final movimiento anterior)
end
phi=zeros(1,N2);
for k=1:length(y)
% La variable k ira desde 1 hasta el maximo valor de la variable y 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
qyy=ikine(robot,T)
% ikine es una funcion de Cinematica Inversa del Toolbox de Robotica

plot(robot,qyy)
% Lineas de programacion para el tercer tramo de movimiento de N3 iteraciones en el eje X
x=linspace(d5,d6,N3);
% La variable x se distribuira desde 0.452 hasta 0.502 en N3 partes iguales (d6-d5=0.05 unidades)
y=zeros(1,N3);
% La variable y estara comprendida por 1 fila de N3 Ceros
z=y;
% La variable z sera igual a lo obtenido en la variable y (1 fila de N3 Ceros)
for j=1:N3
% La variable j ira desde 1 hasta N3 en valores de una unidad
y(1,j)=py+(d4-d3); % Se formara matrices y de 1 fila x (1 hasta N3) columnas con valores 0.15 (Y=py+(d4-d3)=-0.15+0.30=0.15)
z(1,j)=pz+(d2-d1); % Se formaran matrices z de 1 fila x (1 hasta N3) columnas con los valores 0.482 (Z no ha sufrido cambios)
end
phi=zeros(1,N3);
% La variable phi estara comprendida por 1 fila de N3 Ceros
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)
% Lineas de programacion para el cuarto tramo de movimiento de N4 iteraciones en el eje Y
y=linspace(d7,d8,N4);
% La variable y se distribuira desde 0.05 hasta -0.05 en N4 partes iguales (d8-d7=0.10 unidades)
x=zeros(1,N4);
% La variable x estara comprendida por 1 fila de N4 Ceros
z=x;
% La variable z sera igual a lo obtenido en la variable x (1 fila de N Ceros)
for j=1:N4
% La variable j ira desde 1 hasta N4 en valores de una unidad
x(1,j)=px+(d6-d5);% Se formara matrices x de 1 fila x (1 hasta N4) columnas con valores 0.702 (X=px+(d6-d5)=0.452+0.25=0.702)
z(1,j)=pz+(d2-d1);% Se formaran matrices z de 1 fila x (1 hasta N4) columnas con los valores 0.482 (Z no ha sufrido cambios)
end
phi=zeros(1,N4);
% La variable phi estara comprendida por 1 fila de N4 Ceros
for k=1:length(y)
% La variable k ira desde 1 hasta el maximo valor de la variable y 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
qyy=ikine(robot,T)
% ikine es una funcion de Cinematica Inversa del Toolbox de Robotica
plot(robot,qyy)

6. Lneas del algoritmo del archivo: PUMA560_4A


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Archivo PUMA560_4 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 8 unidades en el eje Z
% Moverse 30 unidades en el eje Y
% Moverse 5 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
% X=0.452 ---------------------------------------------------> 0.502
% Y=-0.15 ---------------------------> 0.15 ---------------------------------------> 0.30
% Z=0.432 -----> 0.512
%
% Las variables N seran el numero de iteraciones (Velocidad de movimiento) y cada linea de programacion con el comando:
% linspace(d1,d2,N) seran las unidades de cantidad de movimiento a ser realizado
% Las variables d seran los puntos iniciales y finales de cada movimiento a ser realizado
% Las variables N y las variables d podran ser ingresadas individualmente desde el Command Window
%
% Escribir en el Command Window las siguientes lineas:
% puma560
% drivebot(p560)
%
% INGENIERO ELECTRONICO MONTEZA ZEVALLOS FIDEL TOMAS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
clc;
close all;
puma560;
robot=p560
fprintf('\n
fprintf('\n
fprintf('\n
fprintf('\n

% Limpiamos el Workspace
% Limpiamos el Command Window
% Cerramos todo
% Se llama al proyecto Robot Puma creado en MATLAB

CINEMATICA INVERSA DEL ROBOT PUMA 560 EN MATLAB')


% Con (\n)
')
% Con (\n)
INGRESE LOS DATOS ESTABLECIDOS PARA GENERAR EL MOVIMIENTO') % Con
')
% Con (\n)

se imprime en la siguiente linea


se imprime en la siguiente linea
(\n) se imprime en la siguiente linea
se imprime en la siguiente linea

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 INGRESE N1 = ');
% La variable N1 es el numero de iteraciones para el eje Z

fprintf('\n El valor
N2=input('\n INGRESE
fprintf('\n El valor
N3=input('\n INGRESE
fprintf('\n El valor
N4=input('\n INGRESE
fprintf('\n ')

de
N2
de
N3
de
N4

N2 (Numero de iteraciones del Segundo Movimiento podria ser 70)') % (\n) se imprime en
= ');
% La variable N2 es el numero de iteraciones
N3 (Numero de iteraciones del Tercer Movimiento podria ser 90)') % (\n) se imprime en
= ');
% La variable N3 es el numero de iteraciones
N4 (Numero de iteraciones del Cuarto Movimiento podria ser 120)') % (\n) se imprime en
= ');
% La variable N4 es el numero de iteraciones
% Con (\n) se imprime en la siguiente linea

la siguiente linea
para el eje Y
la siguiente linea
para el eje X
la siguiente linea
para el eje Y

fprintf('\n El valor
px=input('\n INGRESE
fprintf('\n El valor
py=input('\n INGRESE
fprintf('\n El valor
pz=input('\n INGRESE
fprintf('\n ')

de
px
de
py
de
pz

px (Valor inicial en el eje X del Robot Puma es 0.452)')


% Con (\n) se imprime en la siguiente linea
= ');
% La variable px es el Valor inicial en el eje X del Robot Puma
py (Valor inicial en el eje Y del Robot Puma es -0.150)')
% Con (\n) se imprime en la siguiente linea
= ');
% La variable py es el Valor inicial en el eje Y del Robot Puma
pz (Valor inicial en el eje Z del Robot Puma es 0.432)')
% Con (\n) se imprime en la siguiente linea
= ');
% La variable pz es el Valor inicial en el eje Z del Robot Puma
% Con (\n) se imprime en la siguiente linea

fprintf('\n El valor
d1=input('\n INGRESE
fprintf('\n El valor
d2=input('\n INGRESE
fprintf('\n El valor
d3=input('\n INGRESE
fprintf('\n El valor
d4=input('\n INGRESE
fprintf('\n El valor
d5=input('\n INGRESE
fprintf('\n El valor
d6=input('\n INGRESE
fprintf('\n El valor
d7=input('\n INGRESE
fprintf('\n El valor
d8=input('\n INGRESE

de
d1
de
d2
de
d3
de
d4
de
d5
de
d6
de
d7
de
d8

d1 (Punto
= ');
d2 (Punto
= ');
d3 (Punto
= ');
d4 (Punto
= ');
d5 (Punto
= ');
d6 (Punto
= ');
d7 (Punto
= ');
d8 (Punto
= ');

inicial del primer movimiento del brazo robotico, puede ser 0.432)')
% Punto inicial del primer movimiento
final del segundo movimiento del brazo robotico, puede ser 0.512)')
% Punto final del primer movimiento
inicial del segundo movimiento del brazo robotico, puede ser -0.15)')
% Punto inicial del segundo movimiento
final del segundo movimiento del brazo robotico, puede ser 0.15)')
% Punto final del segundo movimiento
inicial del tercer movimiento del brazo robotico, puede ser 0.452)')
% Punto inicial del tercer movimiento
final del tercer movimiento del brazo robotico, puede ser 0.502)')
% Punto final del tercer movimiento
inicial del cuarto movimiento del brazo robotico, puede ser 0.15)')
% Punto inicial del cuarto movimiento
final del cuarto movimiento del brazo robotico, puede ser 0.30)')
% Punto final del cuarto movimiento

% Lineas de programacion para el primer tramo de movimiento de N1 iteraciones en el eje Z


z=linspace(d1,d2,N1);
% La variable z se distribuira desde 0.432 hasta 0.502 en N1 partes iguales (d2-d1=0.08 unidades)
x=zeros(1,N1);
% La variable x estara comprendida por 1 fila de N1 Ceros
y=x;
% La variable y sera igual a lo obtenido en la variable x (1 fila de N1 Ceros)
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
x(1,j)=px;
% Se formaran matrices x de 1 fila x (1 hasta N1) columnas con el valor inicial 0.452
end
phi=zeros(1,N1);
% La variable phi estara comprendida por 1 fila de N1 Ceros
for k=1:length(z)
% La variable k ira desde 1 hasta el maximo valor de la variable z en valores de una unidad

phik=phi(k);
T(:,:,k)=[cos(phik) -sin(phik) 0 x(k);
sin(phik) cos(phik) 0 y(k);
0 0 1 z(k);
0 0 0 1];
end
qzz=ikine(robot,T)
plot(robot,qzz)

% La matriz T es la matriz homogenea

% ikine es una funcion de Cinematica Inversa del Toolbox de Robotica

% Lineas de programacion para el segundo tramo de movimiento de N2 iteraciones en el eje Y


y=linspace(d3,d4,N2);
% La variable y se distribuira desde -0.15 hasta 0.15 en N2 partes iguales (d4-d3=0.30 unidades)
x=zeros(1,N2);
% La variable x estara comprendida por 1 fila de N2 Ceros
z=x;
% La variable z sera igual a lo obtenido en la variable x (1 fila de N2 Ceros)
for j=1:N2
% La variable j ira desde 1 hasta N2 en valores de una unidad
x(1,j)=px;
% Se formaran matrices x de 1 fila x (1 hasta N2) columnas con los valores 0.452 (X no ha sufrido cambios)
z(1,j)=pz+(d2-d1);% Se formara matrices z de 1 fila x (1 hasta N2) columnas con valores 0.512 (Punto final movimiento anterior)
end
phi=zeros(1,N2);
for k=1:length(y)
% La variable k ira desde 1 hasta el maximo valor de la variable y 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
qyy=ikine(robot,T)
% ikine es una funcion de Cinematica Inversa del Toolbox de Robotica
plot(robot,qyy)
% Lineas de programacion para el tercer tramo de movimiento de N3 iteraciones en el eje X
x=linspace(d5,d6,N3);
% La variable x se distribuira desde 0.452 hasta 0.502 en N3 partes iguales (d6-d5=0.05 unidades)
y=zeros(1,N3);
% La variable y estara comprendida por 1 fila de N3 Ceros
z=y;
% La variable z sera igual a lo obtenido en la variable y (1 fila de N3 Ceros)
for j=1:N3
% La variable j ira desde 1 hasta N3 en valores de una unidad
y(1,j)=py+(d4-d3);% Se formara matrices y de 1 fila x (1 hasta N3) columnas con los valores 0.05 (Y=py+(d4-d3)=-0.15+0.20=0.05)
z(1,j)=pz+(d2-d1);% Se formaran matrices z de 1 fila x (1 hasta N3) columnas con los valores 0.482 (Z no ha sufrido cambios)
end
phi=zeros(1,N3);
% La variable phi estara comprendida por 1 fila de N3 Ceros
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)
% Lineas de programacion para el cuarto tramo de movimiento de N4 iteraciones en el eje Y
y=linspace(d7,d8,N4);
% La variable y se distribuira desde 0.05 hasta 0.30 en N4 partes iguales (d8-d7=0.15 unidades)
x=zeros(1,N4);
% La variable x estara comprendida por 1 fila de N4 Ceros
z=x;
% La variable z sera igual a lo obtenido en la variable x (1 fila de N Ceros)
for j=1:N4
% La variable j ira desde 1 hasta N4 en valores de una unidad
x(1,j)=px+(d6-d5);% Se formara matrices x de 1 fila x (1 hasta N4) columnas con valores 0.502 (X=px+(d6-d5)=0.452+0.25=0.502)
z(1,j)=pz+(d2-d1);% Se formaran matrices z de 1 fila x (1 hasta N4) columnas con los valores 0.512 (Z no ha sufrido cambios)
end
phi=zeros(1,N4);
% La variable phi estara comprendida por 1 fila de N4 Ceros
for k=1:length(y)
% La variable k ira desde 1 hasta el maximo valor de la variable y 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
qyy=ikine(robot,T)
% ikine es una funcion de Cinematica Inversa del Toolbox de Robotica
plot(robot,qyy)

Ventana del Command Window en MATLAB en donde se debe seguir los pasos que se indican de acuerdo a las lneas de programacion

7. Lneas 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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
clc;
close all;

% Limpiamos el Workspace
% Limpiamos el Command Window
% Cerramos todo

puma560;
robot=p560
fprintf('\n
fprintf('\n
fprintf('\n
fprintf('\n

% Se llama al proyecto Robot Puma creado en MATLAB

CINEMATICA INVERSA DEL ROBOT PUMA 560 EN MATLAB')


% Con (\n)
')
% Con (\n)
INGRESE LOS DATOS ESTABLECIDOS PARA GENERAR EL MOVIMIENTO') % Con
')
% Con (\n)

fprintf('\n El valor
N1=input('\n INGRESE
fprintf('\n El valor
N2=input('\n INGRESE

de
N1
de
N2

se imprime en la siguiente linea


se imprime en la siguiente linea
(\n) se imprime en la siguiente linea
se imprime en la siguiente linea

N1 (Numero de iteraciones del Primer Movimiento podria ser 40)') % (\n) se imprime en la siguiente linea
= ');
% La variable N1 es el numero de iteraciones para el eje X
N2 (Numero de iteraciones del Segundo Movimiento podria ser 70)') % (\n) se imprime en la siguiente linea
= ');
% La variable N2 es el numero de iteraciones para el eje Y

fprintf('\n El valor
N3=input('\n INGRESE
fprintf('\n El valor
N4=input('\n INGRESE
fprintf('\n El valor
N5=input('\n INGRESE
fprintf('\n ')

de
N3
de
N4
de
N5

N3 (Numero de iteraciones del Tercer Movimiento podria ser 90)') % (\n) se imprime en la siguiente linea
= ');
% La variable N3 es el numero de iteraciones para el eje Z
N4 (Numero de iteraciones del Cuarto Movimiento podria ser 120)') % (\n) se imprime en la siguiente linea
= ');
% La variable N4 es el numero de iteraciones para el eje X
N5 (Numero de iteraciones del Quinto Movimiento podria ser 130)') % (\n) se imprime en la siguiente linea
= ');
% La variable N5 es el numero de iteraciones para el eje Y
% Con (\n) se imprime en la siguiente linea

fprintf('\n USTED INGRESARA LOS DATOS DE LA POSICION INICIAL DE


fprintf('\n ')
fprintf('\n El valor de px (Valor inicial en el eje X del Robot
px=input('\n INGRESE px = ');
fprintf('\n El valor de py (Valor inicial en el eje Y del Robot
py=input('\n INGRESE py = ');
fprintf('\n El valor de pz (Valor inicial en el eje Z del Robot
pz=input('\n INGRESE pz = ');
fprintf('\n ')

ROBOT PUMA 560')


% Con (\n) se imprime en la siguiente linea
% Con (\n) se imprime en la siguiente linea
Puma es 0.452)')
% Con (\n) se imprime en la siguiente linea
% La variable px es el Valor inicial en el eje X del Robot Puma
Puma es -0.150)')
% Con (\n) se imprime en la siguiente linea
% La variable py es el Valor inicial en el eje Y del Robot Puma
Puma es 0.432)')
% Con (\n) se imprime en la siguiente linea
% La variable pz es el Valor inicial en el eje Z del Robot Puma
% Con (\n) se imprime en la siguiente linea

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 ')
% (\n) se imprime en la siguiente linea
fprintf('\n El valor de d1 (Punto inicial del primer movimiento del brazo robotico, puede ser 0.452)')
d1=input('\n INGRESE d1 = ');
% Punto inicial del primer movimiento
fprintf('\n El valor de d2 (Punto final del segundo movimiento del brazo robotico, puede ser 0.602)')
d2=input('\n INGRESE d2 = ');
% Punto final del primer movimiento
fprintf('\n El valor de d3 (Punto inicial del segundo movimiento del brazo robotico, puede ser -0.15)')
d3=input('\n INGRESE d3 = ');
% Punto inicial del segundo movimiento
fprintf('\n El valor de d4 (Punto final del segundo movimiento del brazo robotico, puede ser 0.15)')
d4=input('\n INGRESE d4 = ');
% Punto final del segundo movimiento
fprintf('\n El valor de d5 (Punto inicial del tercer movimiento del brazo robotico, puede ser 0.432)')
d5=input('\n INGRESE d5 = ');
% Punto inicial del tercer movimiento
fprintf('\n El valor de d6 (Punto final del tercer movimiento del brazo robotico, puede ser 0.482)')
d6=input('\n INGRESE d6 = ');
% Punto final del tercer movimiento
fprintf('\n El valor de d7 (Punto inicial del cuarto movimiento del brazo robotico, puede ser 0.602)')
d7=input('\n INGRESE d7 = ');
% Punto inicial del cuarto movimiento
fprintf('\n El valor de d8 (Punto final del cuarto movimiento del brazo robotico, puede ser 0.452)')
d8=input('\n INGRESE d8 = ');
% Punto final del cuarto movimiento
fprintf('\n El valor de d9 (Punto inicial del primer movimiento del brazo robotico, puede ser 0.15)')
d9=input('\n INGRESE d9 = ');
% Punto inicial del primer movimiento
fprintf('\n El valor de d10 (Punto final del segundo movimiento del brazo robotico, puede ser 0.30)')
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
% 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)
% 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)
% Lineas de programacion para el segundo tramo de movimiento de N2 iteraciones en el eje Y
y=linspace(d3,d4,N2);
% La variable y se distribuira desde -0.15 hasta 0.55 en N2 partes iguales (d4-d3=0.30 unidades)
x=zeros(1,N2);
% La variable x estara comprendida por 1 fila de N2 Ceros
z=x;
% La variable z sera igual a lo obtenido en la variable x (1 fila de N2 Ceros)
for j=1:N2
% La variable j ira desde 1 hasta N2 en valores de una unidad
x(1,j)=px+(d2-d1);
% Se formaran matrices x de 1 fila x (1 hasta N2) columnas con los valores 0.602 (X no ha sufrido cambios)
z(1,j)=pz;
% Se formaran matrices z de 1 fila x (1 hasta N2) columnas con los valores 0.432 (Punto final movimiento anterior)
end
phi=zeros(1,N2);
for k=1:length(y)
% La variable k ira desde 1 hasta el maximo valor de la variable y 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
qyy=ikine(robot,T)
% ikine es una funcion de Cinematica Inversa del Toolbox de Robotica
plot(robot,qyy)
% Lineas de programacion para el tercer tramo de movimiento de N3 iteraciones en el eje Z
z=linspace(d5,d6,N3);
% La variable z se distribuira desde 0.432 hasta 0.482 en N3 partes iguales (d6-d5=0.05 unidades)
y=zeros(1,N3);
% La variable y estara comprendida por 1 fila de N3 Ceros
x=y;
% La variable x sera igual a lo obtenido en la variable y (1 fila de N3 Ceros)
for j=1:N3
% La variable j ira desde 1 hasta N3 en valores de una unidad
y(1,j)=py+(d4-d3);% Se formara matrices y de 1 fila x (1 hasta N3) columnas con valores 0.05 (Y=py+(d4-d3)=-0.15+0.20=0.05)
x(1,j)=px+(d2-d1);% Se formaran matrices z de 1 fila x (1 hasta N3) columnas con los valores 0.482 (Z no ha sufrido cambios)

end
phi=zeros(1,N3);
% La variable phi estara comprendida por 1 fila de N3 Ceros
for k=1:length(z)
% 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
qzz=ikine(robot,T)
% ikine es una funcion de Cinematica Inversa del Toolbox de Robotica
plot(robot,qzz)
% Lineas de programacion para el cuarto tramo de movimiento de N4 iteraciones en el eje X
x=linspace(d7,d8,N4);
% La variable x se distribuira desde 0.05 hasta -0.05 en N4 partes iguales (d8-d7=0.10 unidades)
y=zeros(1,N4);
% La variable y estara comprendida por 1 fila de N4 Ceros
z=x;
% La variable z sera igual a lo obtenido en la variable x (1 fila de N4 Ceros)
for j=1:N4
% La variable j ira desde 1 hasta N4 en valores de una unidad
y(1,j)=py+(d4-d3);% Se formara matrices x de 1 fila x (1 hasta N4) columnas con valores 0.702 (X=px+(d6-d5)=0.452+0.25=0.702)
z(1,j)=pz+(d6-d5);% Se formaran matrices z de 1 fila x (1 hasta N4) columnas con los valores 0.482 (Z no ha sufrido cambios)
end
phi=zeros(1,N4);
% La variable phi estara comprendida por 1 fila de N4 Ceros
for k=1:length(x)
% La variable k ira desde 1 hasta el maximo valor de la variable y 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)

% Lineas de programacion para el quinto tramo de movimiento de N5 iteraciones en el eje Y


y=linspace(d9,d10,N5);
% La variable x se distribuira desde 0.05 hasta -0.05 en N5 partes iguales (d8-d7=0.10 unidades)
x=zeros(1,N5);
% La variable y estara comprendida por 1 fila de N5 Ceros
z=x;
% La variable z sera igual a lo obtenido en la variable x (1 fila de N5 Ceros)
for j=1:N5
% La variable j ira desde 1 hasta N5 en valores de una unidad
x(1,j)=px+(d2-d1)+(d8-d7); % Se formara matrices x de 1 fila x (1 hasta N4) columnas con valores 0.702 (X=px+(d6d5)=0.452+0.25=0.702)
z(1,j)=pz+(d6-d5);% Se formaran matrices z de 1 fila x (1 hasta N4) columnas con los valores 0.482 (Z no ha sufrido cambios)
end
phi=zeros(1,N4);
% La variable phi estara comprendida por 1 fila de N5 Ceros
for k=1:length(y)
% La variable k ira desde 1 hasta el maximo valor de la variable y 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
qyy=ikine(robot,T)
plot(robot,qyy)

% ikine es una funcion de Cinematica Inversa del Toolbox de Robotica

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