Académique Documents
Professionnel Documents
Culture Documents
1 de Octubre
2011
Educational Robots Cybernetic Applications
El presente proyecto se enfoca al control de un robot manipulador por medio de una computadora. Sin disponer de la informacin de software ni de hardware del fabricante se proceder a disear y elaborar los circuitos, interfaz y programas que conformaran el sistema de control del robot manipulador, as como la integracin del mismo.
Se adjunta CD-Rom con simulacin en Matlab y Proteus.
PROYECTO FINAL
CATEDRA: SISTEMA DE CONTROL PROYECTO: MODELADO CINEMATICO Y SISTEMA DE CONTROL DE POSICION BRAZO ROBOTICO ALUMNO: GONZALO BERARDO
- LEGAJO: 26499 Mail: Gonzalo_b@msn.com
Desarrollado por Gonzalo Berardo en dependencia al grupo de investigacin LARMA (Laboratorio de Robots Mvil Autnomos), para la ctedra Sistemas de Control.
OBJETIVOS Objetivo General Objetivo de Ctedra DETALLE GENERAL DEL BRAZO ROBOTICO Estructura Mecnica Elementos Terminales Sistema Sensorial SISTEMA DE CONTROL Trminos Bsicos Planteamiento del problema Elementos Controlador PID Reglas de sintonizacin de Ziegler-Nichols Desarrollo Prctico Sintonizacin Fina Diseo del controlador PID Discreto Implementacin del controlador CINEMATICA Y DINAMICA DE UN SISTEMA Trminos Bsicos Dinmica Inversa Definicin de Parmetros Modelo Dinmico Ecuacin de Lagrange Friccin Dinmica Directa Simulacin en Matlab DOCUMENTOS DE REFERENCIA
Pg. 3 Pg. 5 Pg. 6 Pg. 6 Pg. 6 Pg. 6 Pg. 7 Pg. 7 Pg. 8 Pg. 9 Pg. 9 Pg. 10 Pg. 12 Pg. 16 Pg. 18 Pg. 19 Pg. 21 Pg. 21 Pg. 21 Pg. 22 Pg. 22 Pg. 25 Pg. 26 Pg. 29 Pg. 30 Pg. 42
Ref 1
PID DSCRETO
POTENCIA
MOTOR CINTURA
POTE
ADC
MICROCONTROLADOR 1
Ref 2
PID DSCRETO
POTENCIA
MOTOR HOMBRO
POTE
ADC
MICROCONTROLADOR 2
CINEMATICA DIRECTA/INVERSA
Ref 3
PID DSCRETO
POTENCIA
MOTOR CODO
POTE
ADC
MICROCONTROLADOR 3
Ref 4
PID DSCRETO
POTENCIA
MOTOR MUECA
POTE
(Giro y elevacin)
ADC
MICROCONTROLADOR 4
Ref 5
PID DSCRETO
POTENCIA
MOTOR MUECA
POTE
(Giro y elevacin)
ADC
PC MICROCONTROLADOR 5
La seal de salida, y, corresponde a la salida del terminal mvil del potencimetro. La seal de referencia, r, corresponde a la posicin deseada. La seal de error, e, corresponde a la diferencia entre la seal de referencia y la seal de salida. La seal de control, u, corresponde al voltaje producido por el controlador para disminuir o anular el error.
Partiendo del deconocimiento del modelo matematico de la planta, se sintonizara los parametros del controlador PID, por medio de la primer regla de sintonizacion de Ziegler Nichols. Se evaluaran las distintas contribucones proporcional, derivatica e integral para luego hacer un refinamiento del mismo.
Sistema Sensorial Sensores Internos: Encoders Analgicos. Localizados en la propia estructura del robot.
Planteamiento del problema Se requiere disear y construir un controlador PID para regular la posicin de un motor de corriente continua (CC). La figura 2 muestra el diagrama de bloques del sistema controlado, en donde: La seal de salida, y, corresponde a la salida del terminal mvil del potencimetro. Si ste se alimenta con 5 voltios en sus terminales fijos (a y b), producir un voltaje en su terminal mvil (c) equivalente a su posicin. Podemos decir entonces que cuando produce 0 voltios esta en la posicin equivalente a 0 grados, 1.25 voltios corresponder a 90 grados, 2.5 voltios a 180 grados, etc. La seal de referencia, r, corresponde a la posicin deseada. Es decir, si queremos que el motor alcance la posicin 180 grados debemos colocar una referencia de 2.5 voltios, si queremos 270 grados colocamos referencia de 3.75 voltios, etc. Esta seal de referencia ser determinada a partir de la cinemtica y de la dinmica del sistema. La seal de error, e, corresponde a la diferencia entre la seal de referencia y la seal de salida. Por ejemplo, si queremos que el motor alcance la posicin de 90 grados colocamos una seal de referencia de 1.25 voltios y esperamos dnde se ubica exactamente. Si se posiciona en 67.5 grados el potencimetro entregar una seal de salida de 0.9375 voltios y la seal de error, e, ser de 0.3125 voltios (22.5 grados). La seal de control, u, corresponde al voltaje producido por el controlador para disminuir o anular el error. Si la seal de error es positiva indica que la referencia es mayor que la salida real, entonces el controlador coloca un voltaje positivo al motor para que contine girando hasta minimizar o anular el error. Si por el contrario la seal de error resulta negativa indica que la salida sobrepas la referencia entonces el controlador debe poner un voltaje negativo para que el motor gire en sentido contrario hasta minimizar o anular el error.
Controlador PID Los controladores PID son ampliamente usados en los sistemas de control industrial , cuyas siglas corresponden; P: proporcional, I: integral, D: derivativo, se refieren a los tres trminos que operan sobre la seal de error para producir la seal a la salida del controlador. Se aplican a la mayora de los sistemas de control, pero se aprecia ms su utilidad cuando el modelo de la planta a controlar no se conoce y los mtodos analticos no pueden ser empleados. En este caso se debe recurrir a procedimientos experimentales para la sintona de los controladores PID.
Donde e(t) es el error de la seal, u(t) es la entrada de control del proceso, es la ganancia proporcional, es la constante de tiempo integral y es la constante de tiempo derivativa. El primer sumando aplica una seal proporcional al error. El segundo evala la evolucin del error y se vuelve ms significativo cuando el error es pequeo pero constante. El tercer trmino considera la tendencia en el error y se nota ms cuando el error se produce por instantes.
Planta
Reglas de Ziegler Nichols El proceso de seleccionar los parmetros del controlador que cumplan con las especificaciones de comportamiento dadas se conoce sintona del controlador. Ziegler y Nichols sugirieron reglas para sintonizar los controladores PID (es decir, dar valores para , y ) basndose en las respuestas escaln experimentales (1er mtodo) o en el valor de (2do mtodo) que produce estabilidad marginal cuando solo se usa la accin de control proporcional.
El tiempo de retardo y la constante de tiempo se determinan dibujando una recta tangente en el punto de inflexin de la curva con forma de S y determinando las intersecciones de esta tangente con el eje de tiempo y con la lnea C(t)=K, tal como se muestra en la figura 6.
C(t)=K
0 0
Por lo tanto:
El controlador PID sintonizado mediante el primer mtodo de las reglas de Ziegler y Nichols presentara un polo en el origen y un cero doble en . Desarrollo Prctico: Aplicamos una seal escaln de 5V de amplitud a una de las articulaciones del manipulador, ms precisamente a la articulacin del hombro. Por medio de una placa de adquisicin de datos, obtenemos la seal de respuesta al escaln. Esta seal es proveda por el cursor mvil del potencimetro a medida que la articulacin se desplaza rotacionalmente.
Con la ayuda de la herramienta Matlab obtenemos la ubicacin del puno de inflexin de la curva S y graficamos una recta tangente a este, como se observa en la siguiente grafica.
Las intersecciones de la recta tangente con el eje de tiempo y con la lnea C(t)=5V obtenemos el tiempo de retardo L y la constante de tiempo T. Se adjunta el cdigo utilizado en Matlab para graficar la recta tangente sobre la respuesta al escaln (en la) y los correspondientes clculos de L y de T.
% SITONIZACION DE UN PID BASADO EN LA REGLA DE ZIEGLER NICHOLS %------------------------------------------------------------H; pp=pole(H); dt=0.05; t=0:dt:8; y=step(H,t)'; dy=diff(y)/dt; [m,p]=max(dy); d2y=diff(dy)/dt; yi=y(p); ti=t(p); L=ti-yi/m; Tau=(y(end)-yi)/m+ti-L; % Planta % Polos de lazo abierto % % % % Respuesta al escaln Derivada Punto de inflexin Segunda derivada
figure(1) plot(t,y,'b',[0 L L+Tau t(end)],[0 0 y(end) y(end)],'k') title('Respuesta al escaln') ylabel('Amplitud') xlabel('tiempo (s)') legend('Exacta','Aproximacion Lineal') Figura 9. Respuesta al escaln
conforme a la tabla 1.
% Control PID con primer metodo de ZIEGLER NICHOLS Kp=1.2*Tau/L; Ti=2*L; Td=0.5*L; Ki=Kp/Ti; Kd=Kp*Td; G=tf([Kd Kp Ki],[1 0]) % Controlador % Lazo cerrado HLC=feedback(G*H,1) figure(2) step(HLC) figure(3) pzmap(HLC) grid Figura 10. Calculo de parmetros y Funcin de Transferencia del controlador PID en LA y LC
El controlador PID sintonizado mediante el primer mtodo de las reglas de Ziegler y Nichols presentara un polo en el origen y un cero doble en .
Al final de cdigo de la figura 10, se representa la funcin de transferencia en lazo cerrado y se grafica la respuesta escaln y la constelacin de polos y ceros.
Funcin de Transferencia en lazo cerrado
De la grafica 12, podemos observar que existe un sobre paso del 24% y un tiempo de establecimiento de 1.16 seg. Como se menciono anteriormente la sintonizacin de Ziegler Nichols es un procedimiento de punto de partida al momento de sintonizar un PID. Ahora en ms, solo basta con realizar un ajuste fino para disminuir el tiempo de establecimiento, el sobre paso, y otros aspectos de inters. Sintonizacin Fina A continuacin se grafica (figura 13) la variacin de la respuesta al escaln del PID (en LC) por medio de un refinamiento de los parmetros calculados. Cdigo:
% Refinamiento Opcin 1 Kp1=1.5*Kp; Kd1=3*Kd; Ki1=1.0*Ki; G1=tf([Kd1 Kp1 Ki1],[1 0]); HLC1=feedback(G1*H,1); % Refinamiento Opcin 2 Kp2=1.5*Kp; Kd2=5*Kd; Ki2=1.0*Ki; G2=tf([Kd2 Kp2 Ki2],[1 0]); HLC3=feedback(G2*H,1); figure(4) step(HLC,HLC1,HLC3)
P R O P O R C I O N A L
Cuando en el sistema se emplea un controlador proporcional, la seal a la salida del controlador es mltiplo (ganancia KP) del porcentaje de cambio en la seal medida. Existe un valor lmite de la ganancia del controlador proporcional. Ms all de este lmite el sistema alcanza valores superiores a los deseados, fenmeno conocido como sobreoscilacin. Por razones de seguridad, la sobreoscilacin no debe superar el 30%. El controlador proporcional no considera el tiempo. Por esta razn, para solucionar el error permanente y lograr que el sistema contenga alguna componente que considere la variacin respecto al tiempo, se incluyen las acciones integral y derivativa. El modo de control integral tiene como propsito disminuir y eliminar el error en estado estacionario, provocado por el modo proporcional. El control integral acta cuando hay una desviacin entre la variable y el punto de consigna, integrando esta desviacin en el tiempo y sumndola a la accin proporcional. El error es integrado, es decir es promediado o sumado por un perodo determinado, para posteriormente ser multiplicado por una constante KI. Cuando la respuesta integral es adicionada al modo proporcional para formar el control P + I, se obtiene una respuesta estable del sistema sin error estacionario. La accin derivativa se manifiesta cuando hay un cambio en el valor absoluto del error. La funcin de la accin derivativa es mantener el error al mnimo corrigindolo proporcionalmente con la misma velocidad que se produce; de esta manera evita que el error se incremente, y reducir el sobrepico. El error se deriva con respecto al tiempo y se multiplica por una constante KD. El control derivativo se caracteriza por el tiempo de accin derivada. Cuando el tiempo de accin derivada es grande, hay inestabilidad en el proceso. Cuando el tiempo de accin derivada es pequeo, la variable oscila demasiado con relacin al punto de consigna. El tiempo ptimo de accin derivativa es el que retorna la variable al punto de consigna con las mnimas oscilaciones Suele ser poco utilizada debido a la sensibilidad al ruido que manifiesta y a las complicaciones que ello conlleva.
LARMA Laboratorio de Robots Mviles Autnomos Gonzalo Berardo
I N T E G R A L
D E R I V A T I V O
Siendo:
Existen distintas posibilidades de la realizacin prctica de un controlador PID. Este proyecto utiliza un diseo paralelo debido a facilidad que presenta a la hora de programar el algoritmo.
+ + proporcional integral
Ki
T
+ + u(kT)
e(kT)
Kp
Kd
derivativa
+ -
T
Fi gura 14. Diseo pa ralelo del controlador PID
El muestreo debe ser mucho menor que el tiempo de establecimiento del sistema en lazo abierto. En el modelo de Ziegler Nichols se toma un valor (tambin puede utilizarse
Sintonizacin
Kp=900; Ki=0; Kd=400; T=300; pwm_min=0.0; pwm_max=950.0; pote_min=0; pote_max=4.9; // Constante Proporcional // Constante Integral // Constante Derivativa // Tiempo de Muestreo // Valor PWM Mnimo // Valor PWM Mximo // Valor POTE Mnimo // Valor POTE Mximo
REFINAMIENTO
Kp=1.5*Kp; Ki=1.0*Ki; Kd=3.0*Kd;
NO
NO
Llave en ON?
if(input(pin_B2)==1)
NO
Conversin 1023 a 5V
yT=(float)valor*5.0/1023.0;
ADC
valor=read_adc();
Cargamos PWM
set_pwm1_duty(control);
Clculo error
eT=rT-yT;
Conversin 1023 a 5V
yT=(float)valor*5.0/1023.0;
Guardar variables
iT0=iT; eT0=eT;
Error es negativo?
If(eT<0)
NO
Pone bandera en 0
sentido=0;
Bandera = 1?
if(sentido==1)
NO
Reinicio de variables
eT=0; iT0=0; eT0=0;
Tiempo de muestreo
delay_ms(T);
CINEMATICA DIRECTA/INVERSA
Ref
Error
Actuante
PWM
POTENCIA Puente H
MOTOR Articulacin
POTE
Salida Digital
ADC
PC Figura 16
MICROCONTRO LADOR
W = Carga aplicada mi = Masa del i-simo eslabn g = Constante de gravedad l = Radio de giro para la masa de la base a = Longitud del primer eslabn b = Longitud del segundo eslabn Ii = Inercia i-sima del eslabn Vi = Velocidad lineal del i-simo eslabn Ki = Energa cintica del i-simo eslabn Pi = Energa potencial del i-simo eslabn
FIGURA 12. DINAMICA INVERSA
Modelo Dinmico A continuacin se muestra el desarrollo del modelo dinmico inverso [1] [2] [3] [4] [5].
Derivando y elevando al cuadrado las ecuaciones (9) y (10) para sustituir en (8) y aplicando identidades trigonomtricas tenemos:
Derivando y elevando al cuadrado las ecuaciones (18) y (19 ) para sustituir en (17 ) y aplicando identidades trigonomtricas tenemos:
Ecuacin de Lagrange La ecuacin de movimiento de Lagrange se obtiene con la sumatoria de las energas cinticas y potenciales en el manipulador [2].
Friccin Se sabe que la formulacin de movimiento de Lagrange slo hace referencia a sistemas conservativos, sin embargo, a travs de la funcin de disipacin de Rayleigh se pueden incluir prdidas como la friccin en un sistema conservativo. Un modelo en el que se incluyen estos efectos de friccin quedara de la siguiente manera:
Tomando en cuenta los cofactores nulos finalmente se puede rescribir la ecuacin 29 finalmente como:
Por lo que la ecuacin 40 representa el modelo dinmico inverso del robot manipulador articulado.
Sustituyendo los pares en las ecuaciones 47, 48 y 49, sufren la siguiente modificacin:
Resultando:
Por lo que las ecuaciones 53, 54 y 55 representan el modelo dinmico directo del robot manipulador articulado. Simulacin en Matlab Cinemtica Directa:
%La cinemtica directa obtiene como resultado la posicin en que se encuentra el efector %final en coordenadas cartesianas (xyz), por lo que es necesario introducir como valores %iniciales los ngulos que tiene cada elemento del robot de acuerdo a su respectiva referencia. clear,clf,clc%Limpieza de las variables en memoria, de grficas y de pantalla hold on %Activa grficos %PRESENTACIN fprintf ('\n SIMULACIN DE LA CINEMTICA DIRECTA\n'); fprintf ('----------------------------------------------------------------\n\n\n'); %Se piden valores de los ngulos TETAS %Se consideran los lmites REALES del SCORBOT-ER V plus teta1 = input ('Valor del ngulo de la cintura en grados: '); while (teta1<0 || teta1>310) fprintf('\n Valor incorrecto\n'); teta1 = input ('Valor del ngulo de la cintura en grados: '); end teta2 = input ('Valor del ngulo del hombro en grados: '); while (teta2<-35 || teta2>130) fprintf('\n Valor incorrecto\n'); teta2 = input ('Valor del ngulo del hombro en grados: '); end teta3 = input ('Valor del ngulo del codo en grados: '); while (teta3<-130 || teta3>140) fprintf('\n Valor incorrecto\n'); teta3 = input ('Valor del ngulo del codo en grados: '); end teta4 = input ('Valor del ngulo de elevacin (pitch) en grados: '); while (teta4<-130 || teta4>130) fprintf('\n Valor incorrecto\n'); teta4 = input ('Valor del ngulo de elevacin (pitch ) en grados: '); end teta5 = input ('Valor del ngulo de giro (roll) en grados: '); while (teta5<-570 || teta5>570) fprintf('\n Valor incorrecto\n'); teta5 = input ('Valor del ngulo de giro (roll) en grados: '); end %Se dan las longitudes de los eslabones %pidindoselas al usuario link1 = input ('\n Longitud del primer eslabn en cm: '); link2 = input (' Longitud del segundo eslabn en cm: '); link3 = input (' Longitud de la garra (gripper) en cm: ');
%tomando de origen el vector S verde %lnea gris (Dedo 1) line ([x4-sx,x4+ax-sx],[y4-sy,y4+ay-sy],[z4sz,z4+az+sz],'LineWidth',6,'Color',[0.5 0.5 0.5]) %tomando de origen el vector S verde %lnea gris (Dedo 2) line([x4+sx,x4+ax+sx],[y4+sy,y4+ay+sy],[z4+sz,z4+az+sz],'LineWidth',6,'Colo r',[0.5 0.5 0.5]) hold off %Desactiva grficos
Resultado:
rad5=teta5; x4=x; y4=y; z4=z; %Vector N fen=2;%Factor de escalamiento nxa= cos(rad1)*cos(rad2)*cos(rad3)*cos(rad4)*cos(rad5); nxb= -cos(rad1)*sin(rad2)*sin(rad3)*cos(rad4)*cos(rad5); nxc= -cos(rad1)*cos(rad2)*sin(rad3)*sin(rad4)*cos(rad5); nxd= -cos(rad1)*sin(rad2)*cos(rad3)*sin(rad4)*cos(rad5); nxe= -sin(rad1)*sin(rad5); nx= (nxa+nxb+nxc+nxd+nxe)*fen; nya= sin(rad1)*cos(rad2)*cos(rad3)*cos(rad4)*cos(rad5); nyb= -sin(rad1)*sin(rad2)*sin(rad3)*cos(rad4)*cos(rad5); nyc= -sin(rad1)*cos(rad2)*sin(rad3)*sin(rad4)*cos(rad5); nyd= -sin(rad1)*sin(rad2)*cos(rad3)*sin(rad4)*cos(rad5); nye= -cos(rad1)*sin(rad5); ny= (nya+nyb+nyc+nyd+nye)*fen; nza= -sin(rad2)*cos(rad3)*cos(rad4)*cos(rad5); nzb= -cos(rad2)*sin(rad3)*cos(rad4)*cos(rad5); nzc= sin(rad2)*sin(rad3)*sin(rad4)*cos(rad5); nzd= -cos(rad2)*cos(rad3)*sin(rad4)*cos(rad5); nz= (nza+nzb+nzc+nzd)*-fen; %negra line ([x4,x4+nx],[y4,y4+ny],[z4,z4+nz],'LineWidth',2.5,'Color',[0 0 0]) %Vector S fes=1.5;%Factor de escalamiento sxa= -cos(rad1)*cos(rad2)*cos(rad3)*cos(rad4)*sin(rad5); sxb= cos(rad1)*sin(rad2)*sin(rad3)*cos(rad4)*sin(rad5); sxc= cos(rad1)*cos(rad2)*sin(rad3)*sin(rad4)*sin(rad5); sxd= cos(rad1)*sin(rad2)*cos(rad3)*sin(rad4)*sin(rad5); sxe= -sin(rad1)*cos(rad5); sx= (sxa+sxb+sxc+sxd+sxe)*fes; sya= -sin(rad1)*cos(rad2)*cos(rad3)*cos(rad4)*sin(rad5); syb= sin(rad1)*sin(rad2)*sin(rad3)*cos(rad4)*sin(rad5); syc= sin(rad1)*cos(rad2)*sin(rad3)*sin(rad4)*sin(rad5); syd= sin(rad1)*sin(rad2)*cos(rad3)*sin(rad4)*sin(rad5); sye= cos(rad1)*cos(rad5); sy= (sya+syb+syc+syd+sye)*fes; sza= sin(rad2)*cos(rad3)*cos(rad4)*sin(rad5); szb= cos(rad2)*sin(rad3)*cos(rad4)*sin(rad5); szc= -sin(rad2)*sin(rad3)*sin(rad4)*sin(rad5); szd= cos(rad2)*cos(rad3)*sin(rad4)*sin(rad5); sz= (sza+szb+szc+szd)*-fes; %verde line ([x4,x4-sx*2],[y4,y4-sy*2],[z4,z4-sz*2],'LineWidth',2.5,'Color',[0 1 0]) %gris line ([x4,x4+sx],[y4,y4+sy],[z4,z4+sz],'LineWidth',6,'Color',[0.5 0.5 0.5]) %gris line ([x4,x4-sx],[y4,y4-sy],[z4,z4-sz],'LineWidth',6,'Color',[0.5 0.5 0.5]) %Vector A fea=3.5;%Factor de escalamiento axa= cos(rad1)*cos(rad2)*cos(rad3)*sin(rad4); axb= -cos(rad1)*sin(rad2)*sin(rad3)*sin(rad4); axc= cos(rad1)*cos(rad2)*sin(rad3)*cos(rad4); axd= cos(rad1)*sin(rad2)*cos(rad3)*cos(rad4); Laboratorio de Robots Mviles Autnomos LARMA ax= (axa+axb+axc+axd)*fea; Gonzalo Berardo aya= sin(rad1)*cos(rad2)*cos(rad3)*sin(rad4);
axc= cos(rad1)*cos(rad2)*sin(rad3)*cos(rad4); axd= cos(rad1)*sin(rad2)*cos(rad3)*cos(rad4); ax= (axa+axb+axc+axd)*fea; aya= sin(rad1)*cos(rad2)*cos(rad3)*sin(rad4); ayb= -sin(rad1)*sin(rad2)*sin(rad3)*sin(rad4); ayc= sin(rad1)*cos(rad2)*sin(rad3)*cos(rad4); ayd= sin(rad1)*sin(rad2)*cos(rad3)*cos(rad4); ay= (aya+ayb+ayc+ayd)*fea; aza= -sin(rad2)*cos(rad3)*sin(rad4); azb= -cos(rad2)*sin(rad3)*sin(rad4); azc= -sin(rad2)*sin(rad3)*cos(rad4); azd= cos(rad2)*cos(rad3)*cos(rad4); az= (aza+azb+azc+azd)*-fea; %amarillo line([x4,x4+ax*1.2],[y4,y4+ay*1.2],[z4,z4+az*1.2],'LineWidth',2.5,'Color', [1 1 0]) %tomando de origen el vector S verde %lnea gris (Dedo 1) line ([x4-sx,x4+ax-sx],[y4-sy,y4+ay-sy],[z4sz,z4+az+sz],'LineWidth',6,'Color',[0.5 0.5 0.5]) %tomando de origen el vector S verde %lnea gris (Dedo 2) line([x4+sx,x4+ax+sx],[y4+sy,y4+ay+sy],[z4+sz,z4+az+sz],'LineWidth',6,'Col or',[0.5 0.5 0.5]) %Conversiones de radianes a grados tetac1=(teta1*180)/pi; tetah1=(teta2*180)/pi; tetaco1=(teta3*180)/pi; %Cuando los ngulos son mayores a 360 while tetac1>360 tetac1=tetac1-360; end while tetah1>360 tetah1=tetah1-360; end while tetaco1>360 tetaco1=tetaco1-360; end %Cuando los ngulos son mayores a -360 while tetac1<-360 tetac1=tetac1+360; end while tetah1<-360 tetah1=tetah1+360; end while tetaco1<-360 tetaco1=tetaco1+360; end fprintf('\n Cuando los ngulos calculados se encuentran en el segundo '); fprintf('\n cuadrante, el ngulo mostrado es el complementario\n'); fprintf('\n Los valores de los ngulos en codo arriba son:\n'); fprintf('\tCintura =%12.2f\n',tetac1); fprintf('\tHombro =%12.2f\n',tetah1); fprintf('\tCodo =%12.2f\n',tetaco1); fprintf('\n Recuerde que los lmites fsicos (en grados) en el robot son:'); fprintf('\n\t Cintura de 0 a 310'); fprintf('\n\t Hombro de -35 a 130'); LARMA Laboratorio de Robots Mviles Autnomos fprintf('\n\t Codo de -130 a 130'); Gonzalo Berardo hold off %Desactiva grficos
%negra line ([x4,x4+nx],[y4,y4+ny],[z4,z4+nz],'LineWidth',2.5,'Color',[0 0 0]) %Vector S fes=1.5;%Factor de escalamiento sxa= -cos(rad1)*cos(rad2)*cos(rad3)*cos(rad4)*sin(rad5); sxb= cos(rad1)*sin(rad2)*sin(rad3)*cos(rad4)*sin(rad5); sxc= cos(rad1)*cos(rad2)*sin(rad3)*sin(rad4)*sin(rad5); sxd= cos(rad1)*sin(rad2)*cos(rad3)*sin(rad4)*sin(rad5); sxe= -sin(rad1)*cos(rad5); sx= (sxa+sxb+sxc+sxd+sxe)*fes; sya= -sin(rad1)*cos(rad2)*cos(rad3)*cos(rad4)*sin(rad5); syb= sin(rad1)*sin(rad2)*sin(rad3)*cos(rad4)*sin(rad5); syc= sin(rad1)*cos(rad2)*sin(rad3)*sin(rad4)*sin(rad5); syd= sin(rad1)*sin(rad2)*cos(rad3)*sin(rad4)*sin(rad5); sye= cos(rad1)*cos(rad5); sy= (sya+syb+syc+syd+sye)*fes; sza= sin(rad2)*cos(rad3)*cos(rad4)*sin(rad5); szb= cos(rad2)*sin(rad3)*cos(rad4)*sin(rad5); szc= -sin(rad2)*sin(rad3)*sin(rad4)*sin(rad5); szd= cos(rad2)*cos(rad3)*sin(rad4)*sin(rad5); sz= (sza+szb+szc+szd)*-fes; %verde line ([x4,x4-sx*2],[y4,y4-sy*2],[z4,z4-sz*2],'LineWidth',2.5,'Color',[0 1 0]) %gris line ([x4,x4+sx],[y4,y4+sy],[z4,z4+sz],'LineWidth',6,'Color',[0.5 0.5 0.5]) %gris line ([x4,x4-sx],[y4,y4-sy],[z4,z4-sz],'LineWidth',6,'Color',[0.5 0.5 0.5]) %Vector A fea=3.5;%Factor de escalamiento axa= cos(rad1)*cos(rad2)*cos(rad3)*sin(rad4); axb= -cos(rad1)*sin(rad2)*sin(rad3)*sin(rad4); axc= cos(rad1)*cos(rad2)*sin(rad3)*cos(rad4); axd= cos(rad1)*sin(rad2)*cos(rad3)*cos(rad4); ax= (axa+axb+axc+axd)*fea; aya= sin(rad1)*cos(rad2)*cos(rad3)*sin(rad4); ayb= -sin(rad1)*sin(rad2)*sin(rad3)*sin(rad4); ayc= sin(rad1)*cos(rad2)*sin(rad3)*cos(rad4); ayd= sin(rad1)*sin(rad2)*cos(rad3)*cos(rad4); ay= (aya+ayb+ayc+ayd)*fea; aza= -sin(rad2)*cos(rad3)*sin(rad4); azb= -cos(rad2)*sin(rad3)*sin(rad4); azc= -sin(rad2)*sin(rad3)*cos(rad4); azd= cos(rad2)*cos(rad3)*cos(rad4); az= (aza+azb+azc+azd)*-fea; %amarillo line([x4,x4+ax*1.2],[y4,y4+ay*1.2],[z4,z4+az*1.2],'LineWidth',2.5,'Color', [1 1 0]) %tomando de origen el vector S verde %lnea gris (Dedo 1) line ([x4-sx,x4+ax-sx],[y4-sy,y4+ay-sy],[z4sz,z4+az+sz],'LineWidth',6,'Color',[0.5 0.5 0.5]) %tomando de origen el vector S verde %lnea gris (Dedo 2) line([x4+sx,x4+ax+sx],[y4+sy,y4+ay+sy],[z4+sz,z4+az+sz],'LineWidth',6,'Col or',[0.5 0.5 0.5]) %Conversiones de radianes a grados tetac=(teta1*180)/pi; LARMA Laboratorio de Robots Mviles Autnomos tetah=(teta2*180)/pi; Gonzalo Berardo tetaco=(teta3*180)/pi;