Robotic Toolbox

download Robotic Toolbox

of 71

description

kni

Transcript of Robotic Toolbox

Problema 1

Considere el objeto en forma de cua en el siguiente dibujo.

1. Obtener la transformacin que se debe aplicar tomando desde el origen (izquierda) a su ubicacin final (derecha). Represente esta transformacin como traslacin seguida por una rotacin y vice versa. Compruebe que la solucin es la misma.

%%% problema 1:%%% La rotacin es dada por la matriz de transformacin:TR = [0 -1 0 0; 0 0 1 0; -1 0 0 0; 0 0 0 1];%%% Si nosotros trasladamos con respecto al marco original, La%%% La transformacin es obtenida por pos-multiplicacin sea primero trasladamos y luego rotamos.T1 = transl(1.5, 1, 0)*TR;%%% Si nosotros trasladamos con respecto al marco Local(trasladado) se realiza una pre multiplicacinT2 = TR*transl(0, -1.5, 1);%%% Podemos observar que T1 y T2 son idnticas

TR = 0 -1 0 0 0 0 1 0 -1 0 0 0 0 0 0 1

T1 = 0 -1.0000 0 1.5000 0 0 1.0000 1.0000 -1.0000 0 0 0 0 0 0 1.0000

T2 = 0 -1.0000 0 1.5000 0 0 1.0000 1.0000 -1.0000 0 0 0 0 0 0 1.0000

T1*inv(T2)= 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1

2. Calcular las coordenadas de los vrtices de la cua trasladada y rotada con respecto al marco original

%%% problema 2:%%% Las coordenadas de los 6 vrtices de la cua pueden ser ordenados como las columnas de una matriz:Vertices = [0 0.5 0 0 0.5 0; ...0 0 0 0.25 0.25 0.25; ...0 0 0.5 0 0 0.5; ...1 1 1 1 1 1];%%%Luego, las coordenadas de los 6 puntos de la cua despus de trasladarse y rotarse son:NewVertices = T1*Vertices

Vertices = 0 0.5 0 0 0.5 0 0 0 0 0.25 0.25 0.25 0 0 0.5 0 0 0.5 1 1 1 1 1 1

NewVertices = 1.5000 1.5000 1.5000 1.2500 1.2500 1.2500 1.0000 1.0000 1.5000 1.0000 1.0000 1.5000 0 -0.5000 0 0 -0.5000 0 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000

3. La descomposicin de una rotacin en una secuencia de rotaciones alrededor de los ejes X , Y y Z , corresponde al clculo de los ngulos roll, pitch, y yaw %%% problema 3:%%%La descomposicin de una rotacin en una secuencia de rotaciones alrededor de los ejes X , Y y Z , corresponde al clculo de los ngulos roll, pitch, y yaw, y se calcula mediante la siguiente funcin, donde q es el vector con los ngulos RPY q = tr2rpy(TR)%%% Luego,verificamos que TR es igual a :trotx(q(1))*troty(q(2))*trotz(q(3))

q = -1.5708 0 1.5708trotx(q(1))*troty(q(2))*trotz(q(3))= 0 -1 0 0 0 0 1 0 -1 0 0 0 0 0 0 1

4. Lo mismo que la pregunta anterior pero con rotaciones alrededor de los ejes Z,Y y Z (ngulos de EULER)%%% problema 4:%%% La descomposicin de una rotacin en secuencias de rotaciones sobre los ejes X, Y, y Z, corresponde al clculo de los ngulos de EULER, donde q son los ngulos de EULER (ZYZ)q = tr2eul(TR)%%% Luego, verificamos que TR es igual a:trotz(q(1))*troty(q(2))*trotz(q(3))

q = 1.5708 1.5708 0

trotz(q(1))*troty(q(2))*trotz(q(3))=

0 -1 0 0 0 0 1 0 -1 0 0 0 0 0 0 1

5. Obtener el eje equivalente de rotacin, y el ngulo girado sobre l , para la rotacin obtenido en la pregunta 1 ) %%% problema 5:%%% Convertimos la matriz rotacin a su forma de Angulo y vector.[ang vec] = tr2angvec(TR);

ang = 2.0944

vec = -0.5774 0.5774 0.5774

6. Obtener el eje helicoidal (lnea que es simultneamente el eje derotaciny traslacindel mismo) para la transformacin obtenida en la pregunta 1) y generar la trayectoria seguida por los vrtices de la cua desde su ubicacin inicial a su ubicacin final interpolando simultneamente la rotacin alrededor de este eje y la traslacin a lo largo de ella.

%%% problema 6:%%% Descomponemos la traslacin en traslaciones alineadas con los ejes equivalentes de rotacin y una traslacin perpendicular a ella.trans_align = (vec*transl(TR))*vec';trans_ortho = transl(TR) - trans_align;%%% Obtenemos un punto en el eje helicoidal. Puesto que hay infinitas soluciones, nosotros usaremos la Lsqnonneg functionfoc = lsqnonneg(eye(3)-t2r(TR), trans_ortho);%%% Obtenemos una trayectoria seguida por los vrtices interpolando el ngulo y la traslacinn = 100;for i=1:n+1TRINTP(:,:,i) = transl(foc)*angvec2tr((pi+ang)*(i-1)/n, vec)*...transl(-foc)*transl((i-1)/n*trans_align);new(i,:,:) = TRINTP(:,:,i)*Vertices(:,:);end%%% finalmente graficamos.hold on;grid on;view(45,45);axis([-3 3 -3 3 -3 3]);daspect([1 1 1]);trplot(transl(0,0,0), 'arrow');trplot(TR, 'arrow');plot3(new(:,1,1), new(:,2,1), new(:,3,1), 'k', 'LineWidth', 2);plot3(new(:,1,2), new(:,2,2), new(:,3,2), 'r', 'LineWidth', 2);plot3(new(:,1,3), new(:,2,3), new(:,3,3), 'g', 'LineWidth', 2);plot3(new(:,1,4), new(:,2,4), new(:,3,4), 'c', 'LineWidth', 2);plot3(new(:,1,5), new(:,2,5), new(:,3,5), 'y', 'LineWidth', 2);plot3(new(:,1,6), new(:,2,6), new(:,3,6), 'm', 'LineWidth', 2);

Problema 2Supongamos que queremos hacer una mano robot para seguir la orientacin de un controlador remoto de Wii . El problema es que la orientacin del mando a distancia se da en trminos de roll- pitch- yaw ( RPY ) ngulos , mientras que la orientacin de la mano del robot se ajusta con ngulos ZYZ Euler.

1. Usando la herramienta Robotics Toolbox, escribir una rutina que devuelve los ngulos de Euler que corresponden a un conjunto de ngulos RPY .%%% problema 1:function euler = rpy2eul(rpy)% RPY2EUL Convierte los ngulos RPY a los ngulos de EULER ZYZ% [PHI THETA PSI] = RPY2EUL([ROLL PITCH YAW])% Regresa un vector de 3 ngulos que corresponden a la rotacin de los ejes ZYZ provenientes de las rotaciones sobre los ngulos Roll, Pitch, YawR% RPY2TR (RPY a matriz de transformacin), TR2EUL(matriz de transformacin a los ngulos de EULER ZYZ)euler = tr2eul(rpy2tr([rpy]));end

rpy2eul ([-1.5708 0 1.5708]) = [1.5708 1.5708 0.0000]2. Hay dos soluciones para determinar ngulos de Euler de una matriz de rotacin. Robotics Toolbox hace nica la solucin al restringir la segunda rotacin para estar entre 0 y 180 . Modificar la rutina escrita anteriormente para proporcionar ambas soluciones.%%% problema 2:function euler = rpy2eul(rpy, sigma)% RPY2EUL Convierte los ngulos RPY a los ngulos de EULER ZYZ% Si sigma=-1 theta est en el intervalo [-pi, 0]. de lo contrario [0, pi]euler = tr2eul(rpy2tr(rpy));if sigma == -1euler(1) = euler(1) + pi;euler(2) = - euler(2);euler(3) = euler(3) + pi;endend

rpy2eul ([-1.5708 0 1.5708],-1) = [4.7124 -1.5708 3.1416]PROBLEMA 3La soldadura por lser requiere altas precisiones de la posicin del punto focal del lser con respecto a la trayectoria de la costura.Por lo tanto, son requeridos sensores de seguimiento de costura, que miden la trayectoria de la costura cerca del punto focal del lser.Se ilustra a continuacin es una estacin de trabajo de soldadura lser robotizado.

Los siguientes marcos son definidos:

{B}: Marco de la base. Este est unido a la base del robot{E}: Marco de la herramienta efectora. Esta es descrita con respecto al marco de la base por la matriz de transformacin , la cual esta en funcin de los ngulos de las articulaciones del brazo del robot.{L}: Marco de la herramienta Laser. Este marco es localizado en el punto focal del rayo lser. El eje z del marco coincide con el eje del rayo lser. Porque el rayo lser es axi - simtrica, la direccin de la eje y es arbitraria. Sin prdida de generalidad se elige en la direccin de la estructura de la herramienta del sensor. Este marco se describe con respecto al marco de la base por la matriz de transformacin{S}: Marco de la herramienta del sensor. El seguimiento de costura es trabajada a la cabeza de soldadura. La transformacin describe el marco de la herramienta del sensor con respecto a la herramienta efectora.{M}: Marco de estacin. El Marco de la estacin es la base de la mesa de trabajo cuando un producto est conectado. Es posible que el producto este sujeto en un manipulador que se mueve con respecto al marco base. En ese caso, la transformacin describe el Marco de la estacin con respecto al Marco base y depende de los valores conjuntos del manipulador.{H}: Marco Del product. Este marco esta localizado en un producto. La transformacin describe este marco con respecto al marco de estacin. Este marco es til si una serie de productos similares estn soldados en diferentes ubicaciones de una estacin.{G}: Marco de costura. Todos los puntos discretos en la costura pueden ser descritos con diferentes marcos referenciales. La transformacin describe el marco de costura con respecto a al marco del producto.

Preguntas:1) Obtenga como funcin de las otras transformaciones conocidas. )*

2) Obtenga como funcin de las otras transformaciones conocidas cuando {L} coincide con {G}.

Donde la transformacin es igual a una matriz identidad debido a que el punto G y L coinciden

3) El sensor de seguimiento de costura puede medir la localizacin en la trayectoria de costura con respecto al marco S. Obtenga esta localizacin de la costura con respecto al margo genrico {F} como funcin de , una transformacin conocida del marco de la base del robot al marco genrico F

4) Supongamos que el lser es cambiado por otro modelo. Luego cambia. Ahora denota la nueva transformacin. Obtenga como una funcin de las otras transformaciones conocidas cuando {L} coincide con {G}.

Suponiendo que el problema al hablar de la nueva transformacin se refiere a Entonces: )

Donde la transformacin es igual a una matriz identidad debido a que el punto G y L coinciden

Problema # 4

Considere el robot planar de 3 enlaces que se muestra en el siguiente dibujo. El marco de referencia 0 representa el marco de referencia mundial y marco de referencia i, para i = 1, 2, 3, es un marco de referencia al enlace i. Las longitudes de los enlaces son , y , respectivamente.

1) Obtener la matriz de transformaciones entre enlaces vecinos , y en funcin de ,y respectivamente.

2) Obtener la transformacin que une el marco de referencia entre el marco de referencia global y en la mano del robot. Obtener su expresin simblica.

3) Tratar de obtener el conjunto de los valores de ,y que toma la mano del robot a la ubicacin dada por con referencia al marco global. Para simplificar supones == =1

4) Demostrar que hay dos soluciones para la cinemtica inversa de este problema y crear una script en Matlab que las muestre.

Soluciones

Pregunta #1

Se hace una limpieza del entorno de Matlab

clc; clear;

Para responder a la primera pregunta comenzaremos con obtener las matrices de transformaciones para las barras definiremos las a y las l de cada elemento de forma simblica

Para cada elemento mostraremos las matrices de transformacin

Pregunta #2

De las reglas de DH sabemos que si deseamos la matriz del elemento con respecto al marco global debemos hace una multiplicacin de las sucesiones de las matrices.T03 = T01*T12*T23;

Aqu se muestra a pedazos la solucin final de los productos de las matrices de transformacin.

Por otra parte, tambin podramos solucionar la cinemtica directa para este robot utilizando sus parmetros D-H. Entonces, asume a_i = 1

Para verificar que se ha definido de forma correcta el robot podemos imprimirlo para cerciorarnos.

ThreeLink.plot([pi/4 pi/4 pi/4]);

Podemos observar con claridad el robot.

Ahora, la cinemtica directa puede ser resuelta utilizando la funcin fkine. Por ejemplo:

Pregunta #3

El problema consiste en la solucin de la cinemtica inversa de este robot para la siguiente configuracin:

Definimos TL = [-1 0 0 0; 0 -1 0 1; 0 0 1 0; 0 0 0 1]; que es la condicin actual del sistema Para la cual debemos hacer la cinemtica inversa

Una posibilidad consiste en usar el mtodo numrico implementado por ikine. El problema es darle una buena suposicin para que el algoritmo converge a una solucin vlida. Despus de algn ensayo y error un buen punto de partida es theta_1 = 0, theta_2 = pi y theta_3 = pi

Observe como se puede observar la posicin de cada una de las barras.

Nosotros podemos generar una trayectoria en Q0 y QF.

Pregunta #4

De trigonometra bsica, la posicin y orientacin del efector final pueden escribirse en trminos de las coordenadas comunes de la siguiente manera:

Para encontrar las coordenadas comunes para un sistema dado de actuador final (x, y, ), uno tiene que resolver las ecuaciones no lineales para .

Sustituyendo la ltima ecuacin en las dos anteriores podemos reducir las ecuaciones a dos.

Donde las incgnitas han sido agrupadas en el lado derecho. El lado izquierdo depende solamente de las coordenadas cartesianas del efector final y por lo tanto se conoce. Ahora, cambiar el nombre los lados de la mano izquierda, x' = y y=, reagrupando trminos, cuadratura de ambos lados de cada ecuacin y agregarlos, obtenemos una sola ecuacin no lineal en :

Hay dos soluciones para en la siguiente ecuacin:

As, para cada solucin para , hay una (nica) solucin para y .

Las frmulas anteriores pueden implementarse como una funcin de MATLAB como sigue:

IKINE3R resuelve la cinemtica inversa de un robot planar 3R

[THETA1 THETA2 THETA3] = ikine3r ([l1 l2 l3], [X Y PHI], SIGMA)

Devuelve un vector de 3 ngulos correspondientes a las rotaciones sobre los tres empalmes.

Sigma = +-1 es un indicador que nos da una de las dos posibles soluciones.

function theta = ikine3r(l, conf, sigma) xx = conf(1)-l(3)*cos(conf(3)); yy = conf(2)-l(3)*sin(conf(3)); theta(1)= atan2(yy,xx)+... sigma*acos((l(1)*l(1)+xx*xx+yy*yy-l(2)*l(2))/... (2*l(1)*sqrt(xx*xx+yy*yy))); theta(2)=atan2(yy-l(1)*sin(theta(1)),... xx-l(1)*cos(theta(1)))-theta(1); theta(3)=conf(3)-theta(1)-theta(2); end

Solucin 1 view(0,90);ThreeLink.plot(ikine3r([1 1 1],[1 1 pi/4],1));

Solucin 2

view(0,90); ThreeLink.plot(ikine3r([1 1 1],[1 1 pi/4],-1));

Problema #5 Considere la mano de un robot desacoplado. Se compone de tres articulaciones angulares consecutivos cuyos ejes se cortan en un punto, como se muestra a continuacin.

1) Obtener los parmetros DH para esta parte del robot y construirlo utilizando Robotics Toolbox.

2) Resolver su cinemtica directa para el caso en el que los tres ngulos son .

3) Resuelva su cinemtica inversa para la posicin dada por la transformacin homognea.

5) Qu sucede cuando el ngulo de la segunda junta de revolucin es igual a cero?

%%% Limpiamos el espacio de trabajo clc; clear; %%% Pregunta 1: %%% %%% Definimos los enlaces del robotdado por los parmetros DH L(1) = Link([0 0 0 -pi/2]); L(2) = Link([0 0 0 pi/2]); L(3) = Link([0 0 0 0]); SphericalRobot = SerialLink(L); %%% Pregunta 2: %%% %%% Resolvemos la cinemtica directa %%%para los ngulos articulares requeridas tr1 = SphericalRobot.fkine([pi/6 pi/6 pi/6]); %%% Se puede comprobar que la solucin es el mismo %%% si se calcula directamente tr2 = trotz(pi/6)*troty(pi/6)*trotz(pi/6) %%% Pregunta 3: %%% %%% Los cinemtica inversa para la pose dado pueden ser fcilmente %%% resueltos por darse cuenta de que estos ngulos corresponden a los %%% ngulos de Euler . Entonces, T13= [ 0.2549 -0.9513 -0.1736 0; 0.9659 0.2588 0 0; 0.0449 -0.1677 0.9848 0; 0 0 0 1]; q1 = tr2eul(T13); %%% %%% El conjunto de ngulos de Euler para una orientacin dada %%% no es nica. Siempre hay dos soluciones (vase el problema 2).%%% La otra solucin es : q2 = [q1(1)+pi -q1(2) q1(3)+pi]; %%% PREGUNTA 4 :%%%%%% Cuando el ngulo es cero segundos unirse a la primera y la tercera%%% Estn alineados ejes de revolucin . Sus ngulos de rotacin asociados%%% Vuelto dependientes . El robot est en una singularidad porque%%% Sus cinemtica inversa no est definido.%%%%%% NOTA:%%%%%% Si tratamos de trazar este robot , obtendremos un error. Esto es debido%%% Al hecho de que slo implica rotaciones y el programa%%% Es incapaz de asignar rangos de los ejes. Para superar este%%% Problema, podemos introducir una traduccin en el primer enlace. L(1) = Link([0 1 0 -pi/2]); SphericalRobot = SerialLink(L); SphericalRobot.name ='Spherical Robot'; SphericalRobot.plot([pi/4 pi/4 pi/4 ]);

Problema 6Dado el siguiente robot :

Donde

1) Encuentre los parmetros DH y las matrices de transformacin para i = 1,2,3.2) Implemente la cinemtica para .3) Calcule el resultado si se ponen las juntas en los siguientes ngulos: (0,0,0), (0,/2,0) y (0,/2,/6).4) Construya el robot con los parmetros DH encontrados y compare los resultados de la cinemtica con los obtenidos multiplicando las matrices vecinas.

Se asignan los ejes a cada uno de los puntos y a partir de esto construimos nuestra tabla de parmetros DH

Con estos resultados podemos construir nuestras matrices de transformacin en matlab.clear;clc;%%% Se definen las constantes del problemaL1 = 4;L2 = 3;L3 = 2;L4 = 1;%%% Se le asignan nombres a las tres juntas del robota1 = sym('a1');a2 = sym('a2');a3 = sym('a3');%%%Matrizes de transformacionn para ir a cada uno de los puntosT01 = trotz(a1)*transl(0, 0, L1+L2)*trotx(pi/2);T12 = trotz(a2)*transl(L3, 0, 0);T23 = trotz(a3)*transl(L4, 0, 0);%%%Matriza de Transformacion completaT03 = T01*T12*T23;%%%Se colocan las juntas en los angulos especificadosT1 = subs(T03, {a1, a2, a3}, {0, 0, 0});T2 = subs(T03, {a1, a2, a3}, {0, pi/2, 0});T3 = subs(T03, {a1, a2, a3}, {0, pi/2, pi/6});%%% Se construye el robotL(1) = Link([0 L1+L2 0 pi/2]);L(2) = Link([0 0 L3 0]);L(3) = Link([0 0 L4 0]);Robot3R = SerialLink(L);%%% Impresionn del robotRobot3R.name = 'Robot3R';Robot3R.plot([0 0 0]);TT1 = Robot3R.fkine([0 0 0]);TT2 = Robot3R.fkine([0 pi/2 0]);TT3 = Robot3R.fkine([0 pi/2 pi/6]);

7) Considere el robot puma 560 mostrado en la figura.

1) Modelo con robotic toolbox y compare el resultado con el robot PUMA 560 incorporado2) Encontrar los ngulos de las juntas que permiten extremo-effector del robot lograr la pose, dada en coordenadas homogneas, por transl (0.1, 0.25,-0.5)*trotx(pi)*troty(pi) con respecto al marco de referencia del mundo (sugerencia: Utilice la funcin ikine6s).

Puma original

Ahora el puma 560b definido en el pdf

L(1) = Link([0 0 0 -pi/2]);L(2) = Link([0 0.149 .4318 0]);L(3) = Link([0 0 0.0203 pi/2]);L(4) = Link([0 0.433 0 -pi/2]);L(5) = Link([0 0 0 pi/2]);L(6) = Link([0 .0562 0 0]);L(1).offset = pi/2;L(3).offset = pi/2;Puma560b = SerialLink(L);Puma560b.name = 'Puma 560B';Puma560b.plot([0 0 0 0 0 0]);

Con esto representamos el robot que se nos pide

Problema 8Considere el robot PUMA 260 mostrado en la siguiente figura

1) Establesca los parametros DH y encuenntre los productos de las matrices de transformacion 2) Es el robot desacoplable? porque?3) Si d3 es 0 como se resolveria la cinematica inversa?4) Usando el robotic toolbox encuetre el espacio de trabajo

Primero encontramos los parmetros de DH ubicando los ejes en cada uno de los puntos

Con estos pasamos a encontrar la cinemtica directa utilizando maltab.clc;clear;%%%Se colocan simbolosa1 = sym('a1');a2 = sym('a2');a3 = sym('a3');a4 = sym('a4');a5 = sym('a5');a6 = sym('a6');T01 = trotz(a1)*transl(0,0,13)*trotx(-pi/2);T12 = trotz(a2)*transl(8,0,0);T23 = trotz(a3+pi/2)*transl(0,0,-2)*trotx(pi/2);T34 = trotz(a4)*transl(0,0,8)*trotx(-pi/2);T45 = trotz(a5-pi/2)*trotx(pi/2);T56 = trotz(a6);%%% CiNEMATICA DIRECTAT06 = T01*T12*T23*T34*T45*T56%%% Se remplazan los simbolos por valores numericos para posicionar el robotsubs(T06, {a1, a2, a3, a4, a5, a5}, {0, 0, 0, 0, 0, 0})L(1) = Link([0 13 0 -pi/2]);L(2) = Link([0 0 8 0]);L(3) = Link([0 -2 0 pi/2]);L(4) = Link([0 8 0 -pi/2]);L(5) = Link([0 0 0 pi/2]);L(6) = Link([0 0 0 0]);L(3).offset = pi/2;L(5).offset = -pi/2;Puma260 = SerialLink(L);Puma260.name = 'Puma 260';Puma260.plot([0 0 0 0 0 0]);%%%Puma260.fkine([a1 a2 a3 a3 a4 a5]);

Se puede considerar el robot como desacoplable ya que los ejes de las ultimas 3 revolutas se interceptan en un punto. Estas juntas implementan una mueca esfrica.En el caso de que d3 fuese igual a cero se debe rescribir los parametros DH en el programaPara obtener el espacio de trabajo del PUMA, se debe fijar la junta a3 y se debe variar a 1 y a2 para poder calcular la posicin del punto extremo. Luego para imprimir se debe utilizar la funcin surf para representar el movimiento.

Pregunta 3

Redefinimos nuevamente nuestro robot L(1) = Link([0 13 0 -pi/2]);L(2) = Link([0 0 8 0]);L(3) = Link([0 0 0 pi/2]);L(4) = Link([0 8 0 -pi/2]);L(5) = Link([0 0 0 pi/2]);L(6) = Link([0 0 0 0]);L(3).offset = pi/2;L(5).offset = -pi/2;Puma260 = SerialLink(L);Puma260.name = 'Puma 260';Puma260.plot([0 0 0 0 0 0]);

Ahora demostrare como buscar la cinemtica inversa mediante el uso de la funcin ikin6sEjemplo hacienda un par de giro sobre x y yBuscamos el resultado de T.T=trotx(pi)*troty(pi)

T =

-1.0000 0 0.0000 0 0.0000 -1.0000 0.0000 0 0.0000 0.0000 1.0000 0 0 0 0 1.0000Y resolvemos para la funcin ikine6s y obtenemos la posicin angular de cada junta Puma260.ikine6s(T)

ans =

0 -4.7124 -0.0000 -3.1416 -0.0000 0.0000

Problema 9Considere el robot industrial IRB7600 que se muestra a continuacin

Obtenga los parmetros DH, el modelo cinemtica usando matlab y la cinemtica directa.Igual que en los problemas anteriores, se deben colocar ejes de referencia en cada una de las juntas y proceder a encontrar los parametros DH a partir de estos.

Usando estos parmetros procedemos a resolver con la ayuda de matlab.%%% First we clean the workspaceclear;clc;%%% Se crean los enlacesL(1) = Link([0 0.78 0.41 -pi/2]);L(2) = Link([0 0 1.075 0]);L(3) = Link([0 0 0.165 -pi/2]);L(4) = Link([0 1.056 0 pi/2]);L(5) = Link([0 0 0 -pi/2]);L(6) = Link([0 0.25 0 0]);L(2).offset = -pi/2;L(6).offset = pi;%%% Limites de las juntasL(1).qlim = pi/180*[-180 180];L(2).qlim = pi/180*[-60 85];L(3).qlim = pi/180*[-180 60];L(4).qlim = pi/180*[-300 300];L(5).qlim = pi/180*[-100 100];L(6).qlim = pi/180*[-300 300];%%% Se imprime el robotIRB7600 = SerialLink(L);IRB7600.name = 'IRB7600';IRB7600.plot([0 0 0 0 0 0]);a1 = sym('a1');a2 = sym('a2');a3 = sym('a3');a4 = sym('a4');a5 = sym('a5');a6 = sym('a6');IRB7600.fkine([a1 a2 a3 a4 a5 a6])

Problema N 10

Considere el siguiente robot

1- Obtenga los parmetros DH y constryalo utilizando Robotics Toolbox.2- Genere una trayectoria de articulacin interpolada para el efector final de la pose inicial definida por transl ( 0,200,0 ) a la pose final definida por transl ( 50,50,200 ) * rotz (pi / 2 ) y simular usando el Robotics Toolbox . Para ello, utilice la funcin implementada en el Problema 4 ( 4 ) . Cuntas existen de tales trayectorias?3- Genere una trayectoria en lnea recta para la misma pose inicial y final del punto anterior y simlelo. Cuantas existen de tales trayectorias?

Cuando los ejes consecutivos son paralelos, hay infinitas soluciones para los parmetros DH . Para estos casos, es recomendable elegir los ejes de modo que como muchos parmetros DH posibles sean cero. Por lo tanto, un conjunto vlido de estos parmetros siguiendo ese criterio es

Junta(rad)d(mm)a(mm)(rad)

1/2d-601000

201000

301000

4000

El control cinematico establece cuales son las trayectorias que debe seguir cada articulacin del robot a lo largo del tiempo para lograr los objetivos fijados por el usuario. Estas trayectorias se seleccionaran atendiendo a las restricciones fsicas propias de los accionamientos y a ciertos criterios de calidad de trayectoria, como suavidad o precisin de la misma

%%% Limpiamos la pantalla y borramos todas las variables del espacioclearclc%%% Pregunta 1%%% Generamos los eslabonesL(1) = Link([pi/2, 0, 100, 0, 1]);L(2) = Link([ 0, 0, 100, 0]);L(3) = Link([ 0, 0, 100, 0]);L(4) = Link([ 0, 0, 0, 0]);L(1).offset = -60;%%% Generamos el robotPRRR = SerialLink(L);PRRR.name = 'PRRR';%%% Graficamos el robot para ver si lo generamos correctamentePRRR.plot([0 0 0 0]) %%% Pregunta 2:%%% Definimos la posicion final e inicial del gripperTINI = transl(0,200,0);TEND = transl(50,50,200)*trotz(pi/2); %%% transl es una transformacion un homognea ( 4 4 ) que representa una%%% traslacion pura de x, y y z. %%% trotz es una transformacin homognea ( 4 4 ) que representa una rotacin de%%% theta radianes alrededor del eje z %%% Antes de generar la trayectoria , podemos tratar de obtener los angulos%%% de articulacion la configuracin inicial utilizando la funcin ikine%%% La funcion ikine hace la cinematica inversa usando metodos numericos%%% iterativos q0 = PRRR.ikine(TINI, [0 0 0 0], [1 1 1 0 0 1]); %%% Tenemos que cambiar la estimacin inicial ya que no converge a la%%% solucion. Despus de un poco de ensayo y error , se observa que es%%% difcil obtener una buena estimacin inicial. Por lo tanto, para%%% superar este%%% problema podemos utilizar la funcin implementada en el problema 4 ( 4 )T01INI = trotz(pi/2)*transl(100,0,0);T01END = trotz(pi/2)*transl(100,0,200);T14INI = inv(T01INI)*TINI;T14END = inv(T01END)*TEND;samples=100; %%%Trayectoria 1%%% Se utiliza la funcion implementada en el problema 4 ikine3rfunction theta = ikine3r(l, conf, sigma)xx = conf(1)-l(3)*cos(conf(3));yy = conf(2)-l(3)*sin(conf(3));theta(1)= atan2(yy,xx)+... sigma*acos((l(1)*l(1)+xx*xx+yy*yy-l(2)*l(2))/... (2*l(1)*sqrt(xx*xx+yy*yy)));theta(2)=atan2(yy-l(1)*sin(theta(1)),... xx-l(1)*cos(theta(1)))-theta(1);theta(3)=conf(3)-theta(1)-theta(2); end

%%% para resolver la cinematica inversa.Devuelve un vector de 3 ngulos%%% correspondientes a las rotaciones alrededor de las tres articulaciones.

qini1 = [T01INI(3,4) ikine3r([100 100 0],...[T14INI(1,4) T14INI(2,4) atan2(T14INI(1,2),T14INI(1,1))],-1)];qend1 = [T01END(3,4) ikine3r([100 100 0],...[T14END(1,4) T14END(2,4) atan2(T14END(1,2),T14END(1,1))],-1)];Q1 = jtraj(qini1, qend1, samples);TRAJ1 = PRRR.fkine(Q1); for i=1:samplesxx1(i) = TRAJ1(1,4,i);yy1(i) = TRAJ1(2,4,i);zz1(i) = TRAJ1(3,4,i);end %%% Trayectoria 2qini2 = [T01INI(3,4) ikine3r([100 100 0],...[T14INI(1,4) T14INI(2,4) atan2(T14INI(1,2),T14INI(1,1))],1)];qend2 = [T01END(3,4) ikine3r([100 100 0],...[T14END(1,4) T14END(2,4) atan2(T14END(1,2),T14END(1,1))],1)];Q2 = jtraj(qini2, qend2, samples);TRAJ2 = PRRR.fkine(Q2);for i=1:samplesxx2(i) = TRAJ2(1,4,i);yy2(i) = TRAJ2(2,4,i);zz2(i) = TRAJ2(3,4,i);end %%% Trayectoria 3qini3 = [T01INI(3,4) ikine3r([100 100 0],...[T14INI(1,4) T14INI(2,4) atan2(T14INI(1,2),T14INI(1,1))],1)];qend3 = [T01END(3,4) ikine3r([100 100 0],...[T14END(1,4) T14END(2,4) atan2(T14END(1,2),T14END(1,1))],-1)];Q3 = jtraj(qini3, qend3, samples);TRAJ3 = PRRR.fkine(Q3);for i=1:samplesxx3(i) = TRAJ3(1,4,i);yy3(i) = TRAJ3(2,4,i);zz3(i) = TRAJ3(3,4,i);end%%% Trayectoria 4qini4 = [T01INI(3,4) ikine3r([100 100 0],...[T14INI(1,4) T14INI(2,4) atan2(T14INI(1,2),T14INI(1,1))],-1)];qend4 = [T01END(3,4) ikine3r([100 100 0],...[T14END(1,4) T14END(2,4) atan2(T14END(1,2),T14END(1,1))],1)];Q4 = jtraj(qini4, qend4, samples);TRAJ4 = PRRR.fkine(Q4); for i=1:samplesxx4(i) = TRAJ4(1,4,i);yy4(i) = TRAJ4(2,4,i);zz4(i) = TRAJ4(3,4,i);endhold on;plot3(xx1, yy1, zz1, 'Color', [1 0 0], 'LineWidth',2);plot3(xx2, yy2, zz2, 'Color', [0 1 0], 'LineWidth',2);plot3(xx3, yy3, zz3, 'Color', [0 0 1], 'LineWidth',2);plot3(xx4, yy4, zz4, 'Color', [1 1 0], 'LineWidth',2); PRRR.plot(Q1);PRRR.plot(Q2);PRRR.plot(Q3);PRRR.plot(Q4); %%% Pregunta3:TC = ctraj(TINI, TEND, samples);for i=1:samplesT01(:,:,i) = trotz(pi/2)*transl(100,0,TC(3,4,i));T14(:,:,i) = inv(T01(:,:,i))*TC(:,:,i);QTRAJ1(i,:) = [T01(3,4,i) ...ikine3r([100 100 0], ...[T14(1,4,i) T14(2,4,i) atan2(T14(1,2,i),T14(1,1,i))],-1)];QTRAJ2(i,:) = [T01(3,4,i) ...ikine3r([100 100 0], ...[T14(1,4,i) T14(2,4,i) atan2(T14(1,2,i),T14(1,1,i))],1)];endTRAJ5 = PRRR.fkine(QTRAJ1);TRAJ6 = PRRR.fkine(QTRAJ2); for i=1:samplesxx5(i) = TRAJ5(1,4,i);yy5(i) = TRAJ5(2,4,i);zz5(i) = TRAJ5(3,4,i);xx6(i) = TRAJ6(1,4,i);yy6(i) = TRAJ6(2,4,i);zz6(i) = TRAJ6(3,4,i);endhold on;plot3(xx5, yy5, zz5, 'Color', [0 1 1], 'LineWidth',2);plot3(xx6, yy6, zz6, 'Color', [1 0 1], 'LineWidth',2);PRRR.plot(QTRAJ1);PRRR.plot(QTRAJ2);

Problema 11Un grupo de investigacin est inscrito en la implementacin de un robot humanoide . El diseo conceptual aparece a continuacin. Se compone de 35 juntas de revolucin , pero observamos que 30 de ellos sonorganizada en grupos de tres , cuyos ejes estn interseccin en un solo punto para reproducirmovimientos esfricos ( en la forma que para las tres articulaciones ltima de revolucin de un robot desacoplado ) . Como se muestra abajo.

Los cuatro miembros de la robot tienen la misma estructura cinemtica que puede ser esquemticamenterepresentado como sigue:

1- Encuentre los parametos DH para cada miembro2- Construir el modelo geomtrico de un brazo utilizando la robtica Toolbox y simular un movimiento interpolado arbitraria conjunta entre dos configuraciones arbitrarias .

3- Cuntas soluciones a la cinemtica inversa tiene la cadena cinemtica simulada ? Dar una respuesta razonada .

4- Montar dos piernas y dos brazos de modo que el resultado corresponde a la robot diseado en el caso en el que se bloquean las articulaciones del tronco del robot.

Segn el marco asignado que aparece en el dibujo anterior , la norma DH parmetros son los siguientes

Junta(rad)d(mm)a(mm)(rad)

100/2

200/2

30L10

40L20

500

600

7000

%%% Limpiamos la pantalla y borramos todas las variables del espacioclear;clc;L1 = 0.45;L2 = 0.475;L(1) = Link([0, 0, 0, pi/2]);L(2) = Link([0, 0, 0, pi/2]);L(3) = Link([0, 0, L1, 0]);L(4) = Link([0, 0, L2, 0]);L(5) = Link([0, 0, 0, -pi/2]);L(6) = Link([0, 0, 0, -pi/2]);L(7) = Link([0, 0, 0, 0]);L(2).offset = pi/2;L(6).offset = -pi/2;LeftLeg = SerialLink(L);LeftLeg.name = 'LeftLeg';RightLeg = SerialLink(L);RightLeg.name = 'RightLeg';

%%% Se le aade un offset a theta 2 y a theta6 para cuando trazamos %%% la cadena cinemtica para todos los ngulos%%% accionadas establecidos en 0, el resultado se corresponde con el dibujo.

figure(1)LeftLeg.plot([0 0 0 0 0 0 0]);

%%% We can also generate the arms. We only need to change L1 and L2.L1 = 0.275;L2 = 0.25;L(3) = Link([0, 0, L1, 0]);L(4) = Link([0, 0, L2, 0]);LeftArm = SerialLink(L);LeftArm.name = 'LeftArm';RightArm = SerialLink(L);RightArm.name = 'RightArm'; %%% Pregunta 2:%%% Elegimos un perido de tiempo de 2 segundos en 5 ms%%% para una configuracion inicial y final arbitrariat = [0:0.005:2];q_inicial= [0 0 0 0 0 0 0]';q_final= [pi pi pi pi pi pi pi]';Q = jtraj(q_inicial, q_final, t);figure(2)LeftArm.plot(Q);

%%% Pregunta 3:%%% Seis articulaciones son tericamente suficiente para lograr cualquier%%% pose deseada en el espacio cartesiano. %%% La cadena cinemtica analizada tiene siete. Por lo tanto ,%%% tiene infinitas soluciones al problema de cinemtica inversa . %%% Pregunta 4:LeftLeg.base = transl([0.06 0 0]);RightLeg.base = transl([-0.06 0 0]);LeftArm.base = transl([0.06 0 0.55]);RightArm.base = transl([-0.06 0 0.55]); %%% Se le asignan angulos a los actuadores de manera que parezca que el%%% robot estuviese sentado figure(3)axis([-0.6 0.6 -0.6 0.6 -1 1]);grid on;hold on;LeftLeg.plot([0 0 pi/2 pi/2 0 0 0])RightLeg.plot([0 0 pi/2 pi/2 0 0 0])LeftArm.plot([0 -pi/2 0 pi/2 0 0 0])RightArm.plot([0 pi/2 0 pi/2 0 0 0])title('Humanoid robot')ylabel('Y in meters')xlabel('X in meters')

Problema 13.Una fbrica usa un lser para imprimir diferentes marcas sobre cilindros. Con la necesidad de incrementar la flexibilidad, esta compaa decide robotizar su proceso usando un robot PUMA 560.El radio mximo de los cilindros fabricados es 0.10m y un alimentador se usa para ubicarlos en paralelo al marco-xy de referencia del robot y centrado a (-0.25, 0.25, -0.5)m, como se muestra en la figura.Para realizar correctamente la tarea de marcado, el lser se usa como el efecto final del robot de tal manera que su eje Z es ortogonal a la superficie cilndrica y su eje Y est apuntando en la direccin contraria del eje Z del marco de referencia base del robot.Para simular la tarea descrita, usando Robotics Toolbox, se genera una trayectoria para el efecto final del robot PUMA que ejecuta movimiento circular de radio 0.2m alrededor del cilindro manufacturado.

Cdigo:%%% Primero limpiamos el rea de trabajoclc;clear;%%% Definimos algunas variables: radio del cilindro, numero de ejemplos%%% para la trayectoria, y ubicacin del centro del cilindro.radius=0.20;n=200;INI = transl(-0.25, 0.25, -0.5);%%% Generamos la trayectoria.for i=1:nTRAJ(:,:,i)= INI*trotx(-pi/2)*troty(2*pi*i/n)*transl(0, 0, -radius);end%%% Inicializando el robotmdl_puma560;%%% Calculando los ngulos de las juntas a lo largo de la trayectoria%%% usando cinemtica inversa.Q1= p560.ikine6s(TRAJ, 'run');%%% Representacin del robot en la posicin inicial.p560.plot(Q1(1,:));%%% Para verificar si la trayectoria es correcta, podemos dibujar algunos%%% elementos de referencia.hold on;circle1 = circle([-0.25 0.25 -0.5], radius)circle2 = circle([-0.25 0.25 -0.5], 0.5*radius)plot3(circle1(1,:), circle1(2,:), circle1(3,:),...'g', 'LineWidth',1);patch(circle2(1,:), circle2(2,:), circle2(3,:), 'r');p560.plot(Q1);

Problema 14.Vamos a suponer que queremos generar un recorrido en lnea recta entre dos posiciones para el efecto final del robot PUMA 560. Estas dos poses estn dadas en coordenadas homogeneizadas, por:transl(0.1, 0.25, -0.5)*trotx(pi)*troty(pi)ytransl(0.25, 0.1, 0.5)*trotx(pi/2)*troty(pi/2)*trotz(pi/2)Asumiendo que el patrn es aproximadamente por 200 muestras:1. Obtener el recorrido interpolando el ngulo resultante de la representacin del vector-angulo.2. Obtener el recorrido interpolando los angulos de Euler ZYZ.3. Obtener el recorrido usando Cuaternios (uno implementado en Robotic Toolbox).4. Comparar resultados obtenidos en (1) y (3).5. Simular el movimiento del efecto final. Repetir esto para diferentes soluciones de cinemtica inversa.6. Supongamos que el robot sostiene una vara de 0.6m de longitud alineada con el eje Z de la mano. Grafique la trayectoria seguida por el extremo de la vara para la trayectoria encontrada en (1) y (3).

Cdigo:%%% Primero, limpiamos el espacion de trabajoclc;clear;%%% Pregunta 1: Definimos las posturas inicial y final y la transformacin que se interpolar.TA = transl(0.1, 0.25, -0.5)*trotx(pi)*troty(pi);TB = transl(0.25, 0.1, 0.5)*trotx(pi/2)*troty(pi/2)*trotz(pi/2);TAB = inv(TA)*TB;%%% Orientacin interpoladaR = t2r(TAB);%%% Representacin Vector-Angulo.[alpha,vector] = tr2angvec(R);%%% Interpolacin basada en la representacin Vector-Angulo.n=200;for i=1:n+1TRAJ1(:,:,i) = TA*transl((i-1)/n*transl(TAB))*angvec2tr(alpha*(i-1)/n, vector);end%%% Pregunta 2: Interpolacin basada en los angulos de Euler.angles = tr2eul(R);for i=1:n+1TRAJ2(:,:,i) = TA*transl((i-1)/n*transl(TAB))*eul2tr(angles(1)*(i-1)/n, angles(2)*(i-1)/n, angles(3)*(i-1)/n);end%%% Pregunta 3: Interpolacin usando Interpolacin de Cuaternios esfrica.TRAJ3 = ctraj(TA, TB, (0:1/n:1));%%% Pregunta 4: Puede observarse que TRAJ1 y TRAJ3 son identicos.%%% Pregunta 5: Podemos crear el robot y obtener los angulos de junta para las tres trayectorias.mdl_puma560;Q1 = p560.ikine6s(TRAJ1, 'run');Q2 = p560.ikine6s(TRAJ2, 'run');Q3 = p560.ikine6s(TRAJ3, 'run');p560.plot(Q1);p560.plot(Q2);p560.plot(Q3);%%% Pregunta 6: Graficamos la trayectoria seguida por el extremo de la vara.length = 0.6;for i=1:n+1xx1(i) = TRAJ1(1,4,i)+ length*TRAJ1(1,3,i);yy1(i) = TRAJ1(2,4,i)+ length*TRAJ1(2,3,i);zz1(i) = TRAJ1(3,4,i)+ length*TRAJ1(3,3,i);xx2(i) = TRAJ2(1,4,i)+ length*TRAJ2(1,3,i);yy2(i) = TRAJ2(2,4,i)+ length*TRAJ2(2,3,i);zz2(i) = TRAJ2(3,4,i)+ length*TRAJ2(3,3,i);endfigure;p560.plot([0 0 0 0 0 0]);hold on;plot3(xx1, yy1, zz1, 'g', 'LineWidth',2);plot3(xx2, yy2, zz2, 'r', 'LineWidth',2);p560.plot(Q1);p560.plot(Q2);

Problema #16Modelar un robot SCARA como con una mueca esfrica utilizando los parmetros DH dados a continuacin.

Supongamos que este robot se utiliza para la inspeccin. Para este fin, una cmara se utiliza como efector final. Para una determinada tarea, es importante para reorientar la cmara de manera que es siempre sealando a un punto fijo en el espacio de trabajo. Entonces, supongamos que el robot realiza un movimiento en lnea recta entre los puntos (0,4, -0,4 , 0,3 ) y ( 0,2 , 0,3 , 0,0 ) . Encuentra cmo el mueca debe reorientarse a lo largo de la trayectoria de modo que la cmara siempre est apuntando a (0 , 0 , 0 ) .

SOLUCION

L(1) = Link([0, 0.35, 0.46, 0, 0]);L(2) = Link([0, 0.25, 0.25, pi, 0]);L(3) = Link([0, 0, 0, 0, 0.5]);%%aqui reescale las medidas del robot para evitar problemas con el espacio de trabajo L(4) = Link([0, 0, 0, pi/2, 0]);L(5) = Link([0, 0, 0,-pi/2, 0]);L(6) = Link([0, 0, 0, 0, 0]);Scara = SerialLink(L);Scara.name = 'Scara';TRini = transl(0.4, -0.4, 0.3);TRend = transl(0.2, 0.3, 0.0); axis equal;Scara.plot([0 0 1 0 0 0]);hold on;trplot(TRini, 'color', 'r', 'arrow');hold on;trplot(TRend, 'color', 'g', 'arrow');hold on

samples = 100;TRint = inv(TRini)*TRend;for i=1:samples+1TRinter = TRini*transl((i-1)/samples*transl(TRint));ax = -TRinter(1,4);ay = -TRinter(2,4);az = -TRinter(3,4);

a = [ax ay az]/norm([ax ay az]);o = [-a(2) a(1) 0];TRAJ(:,:,i) = TRinter*oa2tr(o,a);endQ = Scara.ikine(TRAJ);Scara.plot(Q);

Recorrido

Posicin final Para evitar toda la demora de tiempo de proceso guardamos los vectores TRAJ y Q por si se desea ejecutar nuevamente la simulacin.

17) T12Considere el brazo robtico LYNX 6T23T34EsteT45 robot tiene 5 grados de libertad. As, la garra no puede alcaT56nzar cualquier orientacin arbitraria.1) A pesar de es un robot de 5R, cmo podemos todava utilizar el construir-en la funcin ikine6s para resolver la cinemtica inversa?2) Calcular la cinemtica directa para todos los ngulos comunes a cero y obtener todo otro conjunto de ngulos de las juntas que la mano del robot para el mismo lugar hasta rotaciones sobre el eje que falta.Comenzaremos con definir los parmetros de DH

Ahora definiremos cada uno de los elementos del robot barra a barraL(1) = Link([0, 0, 0, pi/2]); L(2) = Link([0, 0, 12, 0]); L(3) = Link([0, 0, 12, 0]); L(4) = Link([0, 0, 0, pi/2]); L(5) = Link([0, 14, 0, 0]);

Ahora crearemos las uniones del robot acopladas

Lynx = SerialLink(L);Lynx.name = 'Lynx';

Y para comprobar que est bien definido imprimiremos el robot

Lynx.plot([0 0 0 0 0]);

Est bien definido y podemos ver las 5 juntas ya que estn 2 1 2 las mismas

Ahora, introducimos un grado de libertad adicional para transformar este robot en un robot de 6R con una mueca esfrica. Con este fin, la traslacin de 14 cm a lo largo del eje de la herramienta tiene tambin que ser incorporados a la transformacin de la herramienta.

Para ellos definiremos nuevamente L pero con el agregado de una L ms para agregar un sexto grado de libertad. L(1) = Link([0, 0, 0, pi/2]); L(2) = Link([0, 0, 12, 0]); L(3) = Link([0, 0, 12, 0]); L(4) = Link([0, 0, 0, pi/2]); L(5) = Link([0, 0, 0, -pi/2]); L(6) = Link([0, 0, 0, 0]); ModifiedLynx = SerialLink(L); ModifiedLynx.name = 'Modified Lynx'; ModifiedLynx.tool = trotx(pi/2)*transl(0, 0, 14);

En este caso tenemos una sexta junta la cual os da el grado de libertad nmero 6 no se apareca debido a que esta junta est alineada sobre la junta 5 pero ahora ya podemos aplicar la funcin ikine6s .

Observaciones q1 = ModifiedLynx.ikine6s(T, 'run'); q2 = ModifiedLynx.ikine6s(T, 'rdn'); ModifiedLynx.plot(q1); ModifiedLynx.plot(q2);

Al Trata de implementar la funcin ikine6s no se puede ya que esta no soporta el robot aparnteme por una mala definicin pero se sigui los pasos del mismo, en la documentacin el autor tampoco presenta los resultados de esta parte creemos que presento el mismo inconveniente.

Problema #18

A continuacin se muestra el robot Canadarm-2 (tiene 7 grados de libertad), montado en la estacin espacial internacional, a la izquierda. La cadena cinemtica de este robot es simtrica respecto al eje medio del revolute. Esta simetra permite la base y el efector final del robot para el intercambio de roles, una caracterstica que permite al robot a moverse a lo largo de la estacin espacial. La cadena cinemtica del Canadarm-2 y sus parmetros DH tambin se muestran a continuacin.

1) Crear el modelo cinemtico del robot anterior simtrico con respecto al eje medio de la revoluta.2) Generar un paseo aleatorio del robot en el que el robot se mueve a una posicin arbitraria, entonces se fija la mano y la base es liberada para que la base se mueve a otra posicin arbitraria, y se repite el proceso.

Para la primer parte fue necesario reescalar las dimensiones del robot ya que si no el programa se quedaba sin memoria

L(1)= Link([0 3.80 0 -pi/2]);L(2)= Link([0 6.35 0 pi/2]);L(3)= Link([0 5.04 68.50 0]);L(4)= Link([0 0 68.50 0]);L(5)= Link([0 5.04 0 -pi/2]);L(6)= Link([0 6.35 0 pi/2]);L(7)= Link([0 3.80 0 0]);

R(1)= Link([0 -3.80 0 -pi/2]);R(2)= Link([0 -6.35 0 pi/2]);R(3)= Link([0 -5.04 -68.50 0]);R(4)= Link([0 0 -6.850 0]);R(5)= Link([0 -5.04 0 -pi/2]);R(6)= Link([0 -6.35 0 pi/2]);R(7)= Link([0 -3.80 0 0]);

RobotD = SerialLink(L);RobotD.name= 'D';RobotI = SerialLink(R);RobotI.name= 'I';n =10;samples= 50;angR = [0 0 0 0 0 0 0];

Aqu una vista del robot en ngulo 0 todas las juntas

Ahora simularemos un recorrido aleatorio para esto se realzo una modificacin en comandos donde se elimin todo lo que est dado como opciones.

for i=1:nangD = random('unif',-pi,pi,1,7);RobotD.plot(jtraj(angR, angD, samples));angR = -1*fliplr(angD);RobotI.base = RobotD.fkine(angD);angD = random('unif',-pi,pi,1,7);RobotI.plot(jtraj(angR, angD, samples));angR = -1*fliplr(angD);RobotD.base = RobotI.fkine(angD);End

Las imgenes que se observan son de la implementacin de los recorridos aleatorios del robot.

Problema19Considere lo siguiente cuatro dedos. Cada dedo tiene 4 articulaciones con accionadores angulares como se muestra abajo a la derecha.

Los parmetros de DH para cada dedo son:Articulacin i[mm]Rango [rad]

100-/2[0, /2]

20550[-/6, /6]

30250[0, /2]

40250[0 ,/2]

Suponiendo que los dedos estn anclados en los vrtices de un cuadrado de longitud de lado de mm,1) Construir un modelo cinemtico de la mano.2) Simular un movimiento coordinado en el que la mano est sosteniendo un cuadrado de longitud lateral de 10 mm, que gira al azar, de modo que cada dedo falanges distales son perpendiculares y coplanar con uno de los bordes de cuadrado.

clear;clc;%Pregunta 1 %Construir un modelo cinematico de la mano%Primero creamos los enlaces segun los paramotros DH

L(1)= Link([0 0 0 -pi/2]);L(2)= Link([0 0 55 0]);L(3)= Link([0 0 25 0]);L(4)= Link([0 0 25 0]); %Creamos los cuatro dedos y los localizamos en la base. %SerialLink es un robot objeto definido por un vector objetos de clase%enlace que pueden ser casos de enlace, giro, prismtico, RevoluteMDH o PrismaticMDH %El trotz es una tranformacion homogenea (4x4) representando los radianes%tetha del eje Z%La funcion transl es una transformada homogenea (4x4) representando%una traslacion pura de X, Y y Z. Dedo1 = SerialLink(L);Dedo1.name = 'Dedo 1';Dedo1.base= trotz(0)*transl(20, 0, 0);Dedo2 = SerialLink(L);Dedo2.name = 'Dedo 2';Dedo2.base= trotz(pi/2)*transl(20, 0, 0);Dedo3 = SerialLink(L);Dedo3.name = 'Dedo 3';Dedo3.base= trotz(pi)*transl(20, 0, 0);Dedo4 = SerialLink(L);Dedo4.name = 'Dedo 4';Dedo4.base= trotz(3*pi/2)*transl(20, 0, 0); %Trazamos los cuatro dedos para ver si fueron bien definidos figure;axis([-100 100 -100 100 -100 100]);grid on;hold on;Dedo1.plot([0 -pi/4 -pi/4 -pi/4]);Dedo2.plot([0 -pi/4 -pi/4 -pi/4]);Dedo3.plot([0 -pi/4 -pi/4 -pi/4]);Dedo4.plot([0 -pi/4 -pi/4 -pi/4]);

posicin inicial del robot L(1)= Link([0 0 0 -pi/2]);L(2)= Link([0 0 55 0]);L(3)= Link([0 0 25 0]);L(4)= Link([0 0 25 0]);%%% We create the four fingers and locate them in the base frameFinger1 = SerialLink(L);Finger1.name = 'Finger 1';Finger1.base= trotz(0)*transl(1.41, 0, 0);Finger2 = SerialLink(L);Finger2.name = 'Finger 2';Finger2.base= trotz(pi/2)*transl(1.41, 0, 0);Finger3 = SerialLink(L);Finger3.name = 'Finger 3';Finger3.base= trotz(pi)*transl(1.41, 0, 0);Finger4 = SerialLink(L);Finger4.name = 'Finger 4';Finger4.base= trotz(3*pi/2)*transl(1.41, 0, 0);%%% We plot the four fingers to check if they have been correctly%%% definedfigure;axis([-100 100 -100 100 -100 100]);grid on;hold on;Finger1.plot([pi/4 -pi/4 -pi/4 -pi/4]);Finger2.plot([pi/4 -pi/4 -pi/4 -pi/4]);Finger3.plot([pi/4 -pi/4 -pi/4 -pi/4]);Finger4.plot([pi/4 -pi/4 -pi/4 -pi/4]);

Sosteniendo el cuadrado 10x10figure;axis([-100 100 -100 100 -100 100]);grid on;hold on;Finger1.plot([0 -1.2 -.3721 0]);Finger2.plot([0 -1.2 -.3721 0]);Finger3.plot([0 -1.2 -.3721 0]);Finger4.plot([0 -1.2 -.3721 0]);

Para la animacion t = [0:.05:2]';qz1=[pi/4 -pi/4 -pi/4 -pi/4];qr1=[0 -1.2 -.3721 0];q1 = jtraj(qz1,qr1,t); qz2=[0 -1.2 -.3721 0];qr2=[pi/2 -1.2 -.3721 0];q2=jtraj(qz2,qr2,t);

figure(3);axis([-100 100 -100 100 -100 100]);grid on;hold on;Finger1.plot(q1);Finger2.plot(q1);Finger3.plot(q1);Finger4.plot(q1);

figure(4);axis([-100 100 -100 100 -100 100]);grid on;hold on;Finger1.plot(q2);hold on;

Finger2.plot(q2);hold on;

Finger3.plot(q2);hold on;

Finger4.plot(q2);

20) La siguiente figura muestra un modelo de la molcula de octano. Hay una cadena lineal de 8 tomos de carbono, y existe un enlace entre cada par consecutivo de carbonos de la cadena. Tambin hay numerosos tomos de hidrgeno, pero se ignoran. Cada enlace entre un par de tomos de carbono es capaz de torcer. Se supone que hay siete grados de libertad, cada uno de los cuales surge de torcer una junta.

Expresar la distancia entre los electrodos de carbono en los extremos de la molcula en funcin de los siete grados de libertad.

SOLUCINCada enlace de conexin de dos carbonos puede ser interpretado como un enlace de longitud di que est alineado con el eje zi.

Para definir el robot L(1)= Link([0 0 0 -pi/2]);L(2)= Link([0 1 0 pi/2]);L(3)= Link([0 1 0 -pi/2]);L(4)= Link([0 1 0 pi/2]);L(5)= Link([0 1 0 -pi/2]);L(6)= Link([0 1 0 pi/2]);L(7)= Link([0 1 0 -pi/2]);rb= SerialLink(L);rb.name='molecula';figure(1);rb.plot([0 0 0 0 0 0 0]);

Aqu se observa la configuracin de la molcula impresa con ngulos de partida 0 en todas sus juntas.

Esta es la representacin si se da un giro de 90 grado en la primera articulacin.

Fcilmente se puede obtener las matrices de trasformacin del sistema mediante el siguiente cdigo

a1 = sym('a1'); a2 = sym('a2'); a3 = sym('a3'); a4 = sym('a4'); a5 = sym('a5'); a6 = sym('a6');a7 = sym('a7');

T01 = trotz(a1)*transl(0,0,1)*trotx(-pi/2);T12 = trotz(a2)*transl(0,0,1)*trotx(pi/2);T23 = trotz(a3)*transl(0,0,1)*trotx(-pi/2);T34 = trotz(a4)*transl(0,0,1)*trotx(pi/2);T45 = trotz(a5)*transl(0,0,1)*trotx(-pi/2);T56 = trotz(a6)*transl(0,0,1)*trotx(pi/2);T67 = trotz(a7)*transl(0,0,1)*trotx(-pi/2);T07=T01*T12* T23*T34* T45*T67* T67;