Académique Documents
Professionnel Documents
Culture Documents
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
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).
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.
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.
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)
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).
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
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:
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.