Vous êtes sur la page 1sur 6

PRÁCTICA 1: INTRODUCCIÓN A MATLAB.

ANÁLISIS CINEMÁTICO DEL MANIPULADOR RR

1. Introducción a MatLab
MatLab es un lenguaje de programación interpretado en el que las variables pueden contener
vectores y matrices y, por tanto, las operaciones básicas aritméticas y lógicas pueden extenderse
a operaciones matriciales. Esto hace que MatLab sea una herramienta muy adecuada para cálcu-
lo matricial y, en concreto, para simulación de robots. Se utilizará la versión de MatLab situada en
i:\elect\mtlb42\bin\matlab.exe.
A continuación se muestran algunos ejemplos de operaciones con MatLab:
Asignación de valores a vectores y matrices:

A=[1 2 3;
4 3 2;
3 2 1]
x=[2; 1; 3]

Para las columnas se utiliza el espacio en blanco como separador y el punto y coma para
las filas.
Productos matriciales y escalares:

y=A*x
z=x’*y
w=x.*y

El primer producto representa la operación de transformar el vector x con la matriz A. El


segundo es el producto escalar de x por y, donde x’ representa el vector x traspuesto. El
tercer producto tiene como resultado un vector w en el que cada componente se obtiene
multiplicando las componentes las componentes correspondientes de x e y.
Pueden extraerse submatrices o elementos de una matriz:

A(1,1)
A(2:3,1:3)
A(2:3,:)
A(:,1)

La primera lı́nea extrae el elemento de matriz (1,1). Nótese que los vectores (y matrices)
comienzan en las posición 1, y no en el 0 como sucede en C. Ası́ pues, la primera instrucción
extrae el primer elemento de la primera fila. Las lı́neas segunda y tercera obtienen una
submatriz que incluye las dos últimas filas (todas las columnas). El último comando extrae
la primera columna.

1
Funciones y gráficas: las funciones también se pueden manejan vectorialmente. Por ejem-
plo, para generar y dibujar la función sin(t), podemos ejecutar:

t=0:0.01:2*pi;
y=sin(t);
plot(t,y)

La primera instrucción genera un vector con los valores de la variable independiente t desde
0 hasta 2π , incluido éste último, con incrementos de 0,01. Ası́, el vector t se compone de
21 elementos. El segundo comando genera el vector correspondiente con los valores de la
función, y el tercero dibuja la gráfica de y en función de t. Los ”;” evitan que el resultado de
cada instrucción sea mostrado por pantalla (sólo útil en comandos que produzcan resultados
numéricos).

1.1. Problema Cinemático Directo


Como ya se ha indicado, MatLab es una herramienta apropiada para el análisis y simulación
de problemas robóticos. Por ejemplo, para dibujar 21 puntos de la trayectoria que recorre el EF de
un manipulador RR (con enlaces de longitud L1 = L2 = 1) cuando las dos variables rotacionales
θ1 y θ2 varı́an uniformemente de 0 a π /2, habrı́a que ejecutar los siguientes comandos:
Y
(x,y) L1=1
L2=1
L2 θ2 th1=0:(pi/2)/20:pi/2
th2=0:(pi/2)/20:pi/2
px=L1*cos(th1)+L2*cos(th1+th2)
L1 J2 py=L1*sin(th1)+L2*sin(th1+th2)
plot(px,py)
J1
θ1
X

Las dos primeras instrucciones asignan a las longitudes L1 y L2 de los enlaces. Las dos si-
guientes instrucciones generan dos vectores, th1 y th2, que contienen todos los valores de los
ángulos θ1 y θ2 entre 0 y π /2, a intervalos regulares de π20/2
, por lo que se han tomado un total
de 21 puntos de la trayectoria. Posteriormente, se ha hecho uso de las ecuaciones cinemáticas
del manipulador para obtener las 21 posiciones cartesianas (x, y) consecutivas. Las variables px
y py son dos vectores que contienen los 21 valores de las coordenadas X e Y , respectivamente.
El comando plot dibuja el vector de valores de la variable dependiente py en función del vector de
valores de la variable independiente px.
Las instrucciones anteriores pueden ser incluidas en un fichero de texto con extensión .m, por
ejemplo, practica1.m, y ejecutadas en la lı́nea de comando de MatLab con el comando practica1
(sin extensión). Las distintas partes de la práctica pueden separarse mediante comandos pause
que detienen la ejecución (hasta que se pulse una tecla). MatLab incorpora comandos operativos
como dir, cd y path, que tienen el mismo significado que sus correspondientes en MS-DOS. Para
obtener información sobre los comandos y funciones básicas de MatLab existe un manual ”on

2
line” accesible con el comando help. Se recomienda revisar la información de dicho manual con
todas las instrucciones nuevas que vayamos usando a lo largo de las prácticas.

1.2. Uso de funciones


Cuando se va a hacer uso repetido de un conjunto de instrucciones, es conveniente escribir
una función que las contenga. Ası́, podemos escribir una función que resuelva de forma genérica
el problema cinemático directo de un robot RR de la siguiente manera:

function p=pcd(L1,L2,th1,th2)

px=L1*cos(th1)+L2*cos(th1+th2);
py=L1*sin(th1)+L2*sin(th1+th2);

p=[px; py];

donde p es la variable que se retorna, y pcd es el nombre de la función seguido de los ar-
gumentos (entre paréntesis). Como vemos, si queremos que una función devuelva más de un
valor, podemos agruparlos en un vector y devolver dicho vector. Ası́, la variable p contiene en la
primera fila la secuencia de coordenadas X, y en la segunda las Y. La función debe escribirse en
un fichero de texto separado cuyo nombre debe ser el de la función seguido de la extensión .m
(pcd.m, en este caso).
Haciendo uso de la función anterior, la trayectoria anterior se trazarı́a mediante:

p=pcd(L1,L2,th1,th2);
plot(p(1,:),p(2,:))

En este caso, el comando plot dibuja la segunda fila de la matriz p en función de la primera.

1.3. Gráfica de la configuración espacial del robot


En los ejemplos anteriores se ha dibujado exclusivamente la trayectoria descrita por el EF, pero
no el robot. Dada una configuración espacial (por ejemplo, θ1 = 300 θ2 = 600 ), puede obtenerse un
gráfico del robot RR mediante:

th1=30*pi/180;
th2=60*pi/180;
p=pcd(L1,L2,th1,th2);
robot(L1,th1,p);

donde robot es la función que dibuja el robot en pantalla. Para desarrollar esta función, debe
tenerse en cuenta que el robot se compone de dos segmentos lineales: el primero entre los pun-
tos (0, 0) y (cos θ1 , sin θ1 ), y el segundo entre este último punto y la posición del EF p = (px , py ).
Para trazar el robot, bastará con realizar un plot en el que las variables independiente y depen-
diente son dos vectores conteniendo las coordenadas X e Y, respectivamente, de los tres puntos
mencionados. Una posible implementación de la función es la siguiente:

3
function robot(L1,th1,p)

x=[0 L1*cos(th1) p(1)];


y=[0 L1*sin(th1) p(2)];

plot(x,y)
axis([-2 2 -2 2]);

El comando axis asegura que en sucesivos plots se conservan los rangos X e Y de la gráfica.
En la figura 1 puede observarse el aspecto del robot resultante (remarcado en negrita). En este
caso, la función no retorna ningún valor (sólo traza el robot).

1.4. Trazado de la trayectoria


En este apartado, se desarrollará un programa .m que simule el movimiento del robot y trace
la trayectoria correspondiente del EF cuando las variables de articulación θ1 y θ2 varı́an unifor-
memente entre 0 y π /2. Para ello, debe calcularse el robot y la posición del EF en una serie de
puntos. Esto puede hacerse con un programa basado en un bucle for, conteniendo la representa-
ción desarrollada en el apartado anterior, con la siguiente estructura:

Npuntos=10;
for n=0:Npuntos
th1=(pi/2)*n/Npuntos;
th2=(pi/2)*n/Npuntos;

... (a completar)

pause
if (n<Npuntos)
clf
end
end

En cada punto debe dibujarse el robot en la posición actual y la trayectoria desarrollada hasta
ese momento (a modo de ”rastro”). Para dibujar la trayectoria pueden ir acumulándose en una
matriz de dos filas los puntos ya recorridos de la trayectoria:
 
px (1) px (2) · · · px (n)
pxy =
py (1) py (2) · · · py (n)

En cada punto de la trayectoria hay que actualizar esta matriz, añadiéndole una nueva colum-
na con el nuevo punto de la trayectoria. Esto puede hacerse con una instrucción del tipo pxy=[pxy pact];,
donde pxy contiene los puntos ya recorridos, y pact el punto actual. La variable pxy debe iniciarse
como matriz vacı́a (pxy=[];).
Para su realización, debe tenerse en cuenta que MatLab tiene disponibles instrucciones de
control de flujo similares a las del lenguaje C (if-else-end y while-end). Además, para simular el
movimiento pueden usarse los comandos pause (detiene la ejecución hasta que se pulsa una
tecla), clf (borra el contenido de un gráfico sin eliminar la ventana correspondiente), y hold on
y hold off, que permiten añadir una curva en un gráfico ya creado anteriormente (esto permite

4
2

1
ROBOT
RR
0

-1

-2
-2 -1 0 1 2

Figura 1: Robot y trayectoria seguida.

superponer la gráfica de la trayectoria a la del robot). Al final de la trayectoria, la ventana de


simulación deberı́a presentar el gráfico indicado en la figura 1.
Para hacer una simulación más realista, puede proporcionarse al comando pause un argu-
mento T . De esta forma, la ejecución continua automáticamente tras un retardo de T segundos.
Si se desprecia el tiempo de ejecución de los comandos, T serı́a el tiempo requerido por el robot
para desplazarse entre cada uno de los puntos que componen la trayectoria. Se denomina pe-
riodo de muestreo. El tiempo (Ttot ) total vendrı́a dado por el numero de puntos de la trayectoria
que hemos definido por el tiempo que tarda en pasar de un punto a otro (Ttot = T · (N puntos + 1)).
Conociendo esto, se modificará el programa anterior para que, a partir de un tiempo total y el
periodo de muestreo, calcule automáticamente el número de puntos necesarios.

2. Problema Cinemático Inverso


Normalmente las trayectorias se expresan en coordenadas cartesianas que deben ser tradu-
cidas a variables de articulación. Esto es lo que se conoce como problema cinemático inverso.
Las ecuaciones correspondiente para el robot RR son:
x2 + y2 − L12 − L22
cos θ2 =
2L1 L2
y(L1 + L2 cos θ2 ) − xL2 sin θ2
tan θ1 = (1)
x(L1 + L2 cos θ2 ) + yL2 sin θ2
Por ejemplo, una trayectoria rectilı́nea entre dos puntos cualesquiera (x1 , y1 ) y (x2 , y2 ) puede
expresarse en forma paramétrica mediante:
x2 − x1 y2 − y1
x = x1 + n y = y1 + n
N N
donde n = 0, 1, . . . , N. El parámetro n representa el número de punto en una trayectoria de N +
1 puntos. Equivalentemente, podemos decir que tenemos una trayectoria que va pasando por
dichos puntos en los instantes t = 0, T, 2T, . . . , NT , siendo T el periodo de muestreo.

5
Escribir un programa que simule el movimiento del robot y dibuje la trayectoria (similar al
realizado en el apartado anterior) para un movimiento rectilı́neo entre dos puntos cualesquiera.
Para ello, se utilizará la función robot de los apartados anteriores y se construirá una nueva
función pci que implemente las ecuaciones (1). Debe tenerse en cuenta que las funciones acos
(arco coseno) y atan (arco tangente) de MatLab toman valores en los intervalos [0, π ] y [−π /2, π /2],
respectivamente.
Con este programa se probarán las siguientes trayectorias:

1. (x1 , y1 ) = (2, 0), (x2 , y2 ) = (0, 2).

2. (x1 , y1 ) = (1, 1), (x2 , y2 ) = (−1, 0). Diagnosticar los posibles problemas de continuidad y corre-
gir la función pci para solventarlos. Para ello, debe tenerse en cuenta que la función atan no
determina correctamente el cuadrante del ángulo solución, por lo que debe sustituirse por
la función atan2.

3. (x1 , y1 ) = (1, 0), (x2 , y2 ) = (−1, 0). Diagnosticar los posibles problemas de continuidad y corre-
gir la función pci para solventarlos. Para ello, debe tenerse en cuenta que la función acos
tiene, en realidad, dos soluciones para θ2 : el ángulo positivo que devuelve MatLab, y el
mismo valor, pero negativo. Para escoger una solución u otra, puede tomarse el siguiente
criterio: dado que θ1 se obtiene a partir de θ2 , es lógico seleccionar la solución de acos(θ2 )
que hace que el incremento en θ1 desde el punto anterior de la trayectoria al actual sea el
menor posible.

Finalmente, se dibujarán las funciones temporales de las variables de articulación θ1 = θ1 (t) y


θ2 = θ2 (t) (t = 0, T, 2T, . . . , NT ) para las tres trayectorias anteriores. Comentar las curvas resultan-
tes.

Vous aimerez peut-être aussi