Está en la página 1de 17

Universidad Peruana de Ciencias Aplicadas

LABORATORIO CALIFICADO II

Sección: IM72

Profesor: Perea Fabian, Carlos Antonio

Integrantes: Acuña Escobar, José Antonio


Arones Armas, Raúl Arnaldo
Llanos Aguilar, Alan
Mena Muñoz, Rodrigo de Jesus

JUNIO, 2023
1) Desarrollar la simulación de la máquina CNC, para lo cual utilizar el programa
CNC colgada en el Aula Virtual. Desarrollar la estrategia requerida para que
cumpla la trayectoria lo más preciso posible, mostrar las diferentes simulaciones
en el informe cambiando pesos, velocidad, y el tiempo preview para obtener la
mejor respuesta admisible.

Considerando:
Los parámetros para el modelado según cada motor se definen a continuación:
El motor X presenta las siguientes características:
Resistencia interna: 1.8 ohm
Inductancia interna: 0.000159 H
Coeficiente de fuerza contra-electromotriz: 0.05871 volt-sec/rad
Coeficiente de torque/corriente: 0.05567 N-m/Amp
Diámetro tornillo sinfín: 0.032 m
Paso tornillo sinfín: 0.0028 m
Angulo de rosca de tornillo sinfín: 60 grados
Masa X: 0.130 Kg
Masa motor X y tornillo sin fin: 0.218 Kg
Inercia total de eje de motor X y tornillo sin fin: 0.00004534 Kg-m2
Máxima potencia desarrollada: 180 W
Máximo voltaje aplicable: 30 V
Coef. de fza de fricción viscosa equivalente sobre la masa X: 95 N-seg/m

El motor Y presenta las siguientes


características:Resistencia interna: 2
ohm Inductancia interna:
0.0001801 H
Coeficiente de fuerza contra-electromotriz: 0.08925 volt-sec/rad
Coeficiente de torque/corriente: 0.09156 N-m/Amp
Diámetro tornillo sinfín: 0.05 m
Paso tornillo sinfín: 0.0042 m
Angulo de rosca de tornillo sinfín: 60 grados
Masa Y: 0.375 Kg
Masa motor Y y tornillo sin fin: 0.572 Kg
Inercia total de eje de motor Y y tornillo sin fin: 0.000098342 Kg-m2
Máxima potencia desarrollada: 350 W
Máximo voltaje aplicable: 30 V
Coef. de fza de fricción viscosa equivalente sobre la masa Y: 95 N-seg/m
De acuerdo con los códigos, se plantearon las siguientes figuras:

Figura Figura obtenida en Matlab



correspondiente Figura Deseada Figura Real

Command Window:

En la ventana de comandos se observas los siguientes valores para cada uno de los códigos
de las respectivas figuras según fueron asignadas para cada alumno.

Figura 1:
Figura 2:

Figura 3:

Figura 9:

Código general:

clear; r = 0.011; %Reemplaza a Masa motor X y


close all; tornillo
clc; alfa = 60*pi/180; %Reemplaza a Ángulo de
R = 1.8; %Reemplaza a R Resistencia interna rosca de tornillo
L = 0.000159; %Reemplaza a L Inductancia voltmax = 40; %Reemplaza a Voltage máximo
Kt = 0.05871; %Reemplaza a Kt Coef.de fuerza d = m + 2*pi*I*tan(alfa)/(p*r);
Kb = 0.05567; %Reemplaza a Kb Coef.de torque a22 = -c/d;
I = 4.534e-5; %Reemplaza a Inercia total de a23 = Kt*tan(alfa)/(r*d);
ejem de motor X a32 = -2*pi*Kb/(p*L);
p = 0.0028; %Reemplaza a Paso de tornillo a33 = -R/L;
m = 0.218; %Reemplaza a Masa motor X y b31 = 1/L;
tornillo w21 = -1/d;
c = 95; %Reemplaza a Coeficiente de fuerza de A = [ 0 1 0
friccion 0 a22 a23
0 a32 a33 ]; [Aik,Bik] = c2d(Ai,Bi,dt);
B = [ 0 [Aik,Wrik] = c2d(Ai,Wri,dt);
0 q1 = 1.2e5;
b31 ]; q2 = 0;
Wf = [ 0 q3 = 0;
w21 q4 = 1e6;
0 ]; Q = diag([ q1 q2 q3 q4 ]);
Ai = [ 0 1 0 0 RR = [ 1 ];
0 a22 a23 0 P = dare(Aik,Bik,Q);
0 a32 a33 0 Kx = inv(RR + Bik'*P*Bik)*Bik'*P*Aik;
1 0 0 0 ]; Ac = Aik - Bik*Kx;
Bi = [ 0 V = inv(RR + Bik'*P*Bik)*Bik';
0 [Aiky,Biky] = c2d(Aiy,Biy,dt);
b31 [Aiky,Wriky] = c2d(Aiy,Wriy,dt);
0 ]; q1y = 1.2e5;
Wri = [ 0 q2y = 0;
0 q3y = 0;
0 q4y = 1e6;
-1 ]; Qy = diag([ q1y q2y q3y q4y ]); RRy = [ 1 ];
Wfi = [ 0 Py = dare(Aiky,Biky,Qy);
w21 Kxy = inv(RRy + Biky'*Py*Biky)*Biky'*Py*Aiky;
0 Acy = Aiky - Biky*Kxy;
0 ]; Vy = inv(RRy + Biky'*Py*Biky)*Biky';
Ry = 1.92; ti = 0; velocidad = 0.018; tp = 0.02; tpy =
Ly = 0.0001801; 0.02;
Kty = 0.08925; for cc = 1:3
Kby = 0.09156; v = velocidad;
Iy = 9.8342e-5; error=0.55+v*2;
py = 0.0042; t1 = 1/v;
my = 0.79;%masa total de (masax) + t2 = 1/v+t1;
(tornillox) + (masay) t3 = 1/v+t2;
cy = 95; t4 = 1/v+t3;
ry = 0.02; t5 = 1/v+t4;
alfay = 60*pi/180; t6 = 1/v+t5;
voltmaxy = 50; t7 = 1/v+t6;
dy = my + 2*pi*Iy*tan(alfay)/(py*ry) t8 = 1/v+t7;
a22y = -cy/dy; t9 = 1/v+t8;
a23y = Kty*tan(alfay)/(ry*dy); t10 = 1/v+t9;
a32y = -2*pi*Kby/(py*Ly); t11 = 1/v+t10;
a33y = -Ry/Ly; tt1 = ti:dt:t1;tt1 = tt1'; tt2 =
b31y = 1/Ly; (t1+dt):dt:t2; tt2 = tt2';
w21y = -1/dy; tt3 = (t2+dt):dt:t3; tt3 = tt3'; tt4 =
Ay = [ 0 1 0 (t3+dt):dt:t4; tt4 = tt4';
0 a22y a23y tt5 = (t4+dt):dt:t5; tt5 = tt5'; tt6 =
0 a32y a33y ]; (t5+dt):dt:t6; tt6 = tt6';
By = [ 0 tt7 = (t6+dt):dt:t7; tt7 = tt7'; tt8 =
0 (t7+dt):dt:t8; tt8 = tt8';
b31y ]; tt9 = (t8+dt):dt:t9; tt9 = tt9'; tt10 =
Wfy = [ 0 (t9+dt):dt:t10; tt10 = tt10';
w21y tt11 = (t10+dt):dt:t11; tt11 = tt11';
0 ]; tf = t11;
Aiy = [ 0 1 0 0 t=[tt1;tt2;tt3;tt4;tt5;tt6;tt7;tt8;tt9;tt10;t
0 a22y a23y 0 t11];
0 a32y a33y 0 nt = length(t);
1 0 0 0 ]; np = round(tp/dt);
Biy = [ 0 AcT = Ac';
0 qq = P*Wrik;
b31y for n = 1:np
0 ]; qq = [ qq (AcT^n)*P*Wrik ];
Wriy = [ 0 end
0 Kz = V*qq; npy = round(tpy/dt); AcTy = Acy';
0 qqy = Py*Wriky;
-1 ]; for ny = 1:npy
Wfiy = [ 0 qqy = [ qqy (AcTy^ny)*Py*Wriky ];
w21y end
0 Kzy = Vy*qqy;
0 ]; fre=5;
dt = 0.001; ttp = ti:dt:(t1+tp);
ttp = ttp'; ttx= ttx';
ttx=ti:dt:(t1+tp);

Para la figura Nro 1:

r1 = v*5*ttx; %matriz de posiciones


r2 = v*5*ttx+r1(length(r1),1)*ones(length(r1),1);
r3 = v*5*ttx+r2(length(r2),1)*ones(length(r2),1);
r4 = v*-2.5*ttx+r3(length(r3),1)*ones(length(r3),1);
r5 = v*-2.5*ttx+r4(length(r4),1)*ones(length(r4),1);
r6 = v*-5*ttx+r5(length(r5),1)*ones(length(r5),1);
r7 = v*0*ttx+r6(length(r6),1)*ones(length(r6),1);
r8 = v*-5*ttx+r7(length(r7),1)*ones(length(r7),1);
r9 = v*0*ttx+r8(length(r8),1)*ones(length(r8),1);
r10 = v*0*ttx+r9(length(r9),1)*ones(length(r9),1);
% r11= +error*0.01425+v*-(0+error*0*(1.2))*ttx+r10(length(r10),1)*ones(length(r10),1);
r=[r1;r2;r3;r4;r5;r6;r7;r8;r9;r10];
%% ntp = round(nt/8);
%% r(1:ntp,1) = zeros(ntp,1);
frey=5;
ttpy = ti:dt:(t1+tpy);
ttpy = ttpy';
tty=ti:dt:(t1+tpy);
tty= tty';
r1y = v*0*tty; %matriz de posiciones
r2y = v*0*tty+r1y(length(r1y),1)*ones(length(r1y),1);
r3y = v*5*tty+r2y(length(r2y),1)*ones(length(r2y),1);
r4y = v*5*tty+r3y(length(r3y),1)*ones(length(r3y),1);
r5y = v*5*tty+r4y(length(r4y),1)*ones(length(r4y),1);
r6y = v*-5*tty+r5y(length(r5y),1)*ones(length(r5y),1);
r7y = v*-5*tty+r6y(length(r6y),1)*ones(length(r6y),1);
r8y = v*5*tty+r7y(length(r7y),1)*ones(length(r7y),1);
r9y= v*-5*tty+r8y(length(r8y),1)*ones(length(r8y),1);
r10y = v*-5*tty+r9y(length(r9y),1)*ones(length(r9y),1);
% r11y= v*-(1+error*(0.8))*tty+r10y(length(r10y),1)*ones(length(r10y),1);
ry=[r1y;r2y;r3y;r4y;r5y;r6y;r7y;r8y;r9y;r10y];
x(1,1) = 0; x(2,1) = 0; x(3,1) = 0; x(4,1) = 0; k = 1; J = 0;
%for tt = ti:dt:(tf-tp)
y(1,1) = 0; y(2,1) = 0; y(3,1) = 0; y(4,1) = 0; ky = 1; Jy = 0;

Para la figura Nro 2:

r1 = v*5*ttx; %matriz de posiciones


r2 = v*5*ttx+r1(length(r1),1)*ones(length(r1),1);
r3 = v*(5/3)*ttx+r2(length(r2),1)*ones(length(r2),1);
r4 = v*(5/3)*ttx+r3(length(r3),1)*ones(length(r3),1);
r5 = v*(5/3)*ttx+r4(length(r4),1)*ones(length(r4),1);
r6 = v*-5*ttx+r5(length(r5),1)*ones(length(r5),1);
r7 = v*-5*ttx+r6(length(r6),1)*ones(length(r6),1);
r8 = v*5*ttx+r7(length(r7),1)*ones(length(r7),1);
r9 = v*-5*ttx+r8(length(r8),1)*ones(length(r8),1);
r10 = v*-5*ttx+r9(length(r9),1)*ones(length(r9),1);
% r11= +error*0.01425+v*-(0+error*0*(1.2))*ttx+r10(length(r10),1)*ones(length(r10),1);
r=[r1;r2;r3;r4;r5;r6;r7;r8;r9;r10];
%% ntp = round(nt/8);
%% r(1:ntp,1) = zeros(ntp,1);
frey=5;
ttpy = ti:dt:(t1+tpy);
ttpy = ttpy';
tty=ti:dt:(t1+tpy);
tty= tty';
r1y = v*0*tty; %matriz de posiciones
r2y = v*0*tty+r1y(length(r1y),1)*ones(length(r1y),1);
r3y = v*5*tty+r2y(length(r2y),1)*ones(length(r2y),1);
r4y = v*5*tty+r3y(length(r3y),1)*ones(length(r3y),1);
r5y = v*5*tty+r4y(length(r4y),1)*ones(length(r4y),1);
r6y = v*0*tty+r5y(length(r5y),1)*ones(length(r5y),1);
r7y = v*0*tty+r6y(length(r6y),1)*ones(length(r6y),1);
r8y = v*-5*tty+r7y(length(r7y),1)*ones(length(r7y),1);
r9y= v*-5*tty+r8y(length(r8y),1)*ones(length(r8y),1);
r10y = v*-5*tty+r9y(length(r9y),1)*ones(length(r9y),1);
% r11y= v*-(1+error*(0.8))*tty+r10y(length(r10y),1)*ones(length(r10y),1);
ry=[r1y;r2y;r3y;r4y;r5y;r6y;r7y;r8y;r9y;r10y];
x(1,1) = 0; x(2,1) = 0; x(3,1) = 0; x(4,1) = 0; k = 1; J = 0;
%for tt = ti:dt:(tf-tp)
y(1,1) = 0; y(2,1) = 0; y(3,1) = 0; y(4,1) = 0; ky = 1; Jy = 0;
))]);

Para la figura Nro 3:

r1 = v*5*ttx; %matriz de posiciones


r2 = v*5*ttx+r1(length(r1),1)*ones(length(r1),1);
r3 = v*5*ttx+r2(length(r2),1)*ones(length(r2),1);
r4 = v*0*ttx+r3(length(r3),1)*ones(length(r3),1);
r5 = v*-5*ttx+r4(length(r4),1)*ones(length(r4),1);
r6 = v*-5*ttx+r5(length(r5),1)*ones(length(r5),1);
r7 = v*-5*ttx+r6(length(r6),1)*ones(length(r6),1);
r8 = v*2.5*ttx+r7(length(r7),1)*ones(length(r7),1);
r9 = v*2.5*ttx+r8(length(r8),1)*ones(length(r8),1);
r10 = v*-5*ttx+r9(length(r9),1)*ones(length(r9),1);
% r11= +error*0.01425+v*-(0+error*0*(1.2))*ttx+r10(length(r10),1)*ones(length(r10),1);
r=[r1;r2;r3;r4;r5;r6;r7;r8;r9;r10];
%% ntp = round(nt/8);
%% r(1:ntp,1) = zeros(ntp,1);
frey=5;
ttpy = ti:dt:(t1+tpy);
ttpy = ttpy';
tty=ti:dt:(t1+tpy);
tty= tty';
r1y = v*0*tty; %matriz de posiciones
r2y = v*0*tty+r1y(length(r1y),1)*ones(length(r1y),1);
r3y = v*5*tty+r2y(length(r2y),1)*ones(length(r2y),1);
r4y = v*5*tty+r3y(length(r3y),1)*ones(length(r3y),1);
r5y = v*(5/3)*tty+r4y(length(r4y),1)*ones(length(r4y),1);
r6y = v*(5/3)*tty+r5y(length(r5y),1)*ones(length(r5y),1);
r7y = v*(5/3)*tty+r6y(length(r6y),1)*ones(length(r6y),1);
r8y = v*-5*tty+r7y(length(r7y),1)*ones(length(r7y),1);
r9y= v*-5*tty+r8y(length(r8y),1)*ones(length(r8y),1);
r10y = v*-5*tty+r9y(length(r9y),1)*ones(length(r9y),1);
% r11y= v*-(1+error*(0.8))*tty+r10y(length(r10y),1)*ones(length(r10y),1);
ry=[r1y;r2y;r3y;r4y;r5y;r6y;r7y;r8y;r9y;r10y];
x(1,1) = 0; x(2,1) = 0; x(3,1) = 0; x(4,1) = 0; k = 1; J = 0;
%for tt = ti:dt:(tf-tp)
y(1,1) = 0; y(2,1) = 0; y(3,1) = 0; y(4,1) = 0; ky = 1; Jy = 0;

Para la figura Nro 9:

r1 = v*5*ttx; %matriz de posiciones


r2 = v*5*ttx+r1(length(r1),1)*ones(length(r1),1);
r3 = v*5*ttx+r2(length(r2),1)*ones(length(r2),1);
r4 = v*0*ttx+r3(length(r3),1)*ones(length(r3),1);
r5 = v*-5*ttx+r4(length(r4),1)*ones(length(r4),1);
r6 = v*-5*ttx+r5(length(r5),1)*ones(length(r5),1);
r7 = v*-5*ttx+r6(length(r6),1)*ones(length(r6),1);
r8 = v*5*ttx+r7(length(r7),1)*ones(length(r7),1);
r9 = v*0*ttx+r8(length(r8),1)*ones(length(r8),1);
r10 = v*-5*ttx+r9(length(r9),1)*ones(length(r9),1);
% r11= +error*0.01425+v*-(0+error*0*(1.2))*ttx+r10(length(r10),1)*ones(length(r10),1);
r=[r1;r2;r3;r4;r5;r6;r7;r8;r9;r10];
%% ntp = round(nt/8);
%% r(1:ntp,1) = zeros(ntp,1);
frey=5;
ttpy = ti:dt:(t1+tpy);
ttpy = ttpy';
tty=ti:dt:(t1+tpy);
tty= tty';
r1y = v*0*tty; %matriz de posiciones
r2y = v*0*tty+r1y(length(r1y),1)*ones(length(r1y),1);
r3y = v*5*tty+r2y(length(r2y),1)*ones(length(r2y),1);
r4y = v*5*tty+r3y(length(r3y),1)*ones(length(r3y),1);
r5y = v*5*tty+r4y(length(r4y),1)*ones(length(r4y),1);
r6y = v*0*tty+r5y(length(r5y),1)*ones(length(r5y),1);
r7y = v*0*tty+r6y(length(r6y),1)*ones(length(r6y),1);
r8y = v*-5*tty+r7y(length(r7y),1)*ones(length(r7y),1);
r9y= v*-5*tty+r8y(length(r8y),1)*ones(length(r8y),1);
r10y = v*-5*tty+r9y(length(r9y),1)*ones(length(r9y),1);
% r11y= v*-(1+error*(0.8))*tty+r10y(length(r10y),1)*ones(length(r10y),1);
ry=[r1y;r2y;r3y;r4y;r5y;r6y;r7y;r8y;r9y;r10y];
x(1,1) = 0; x(2,1) = 0; x(3,1) = 0; x(4,1) = 0; k = 1; J = 0;
%for tt = ti:dt:(tf-tp)
y(1,1) = 0; y(2,1) = 0; y(3,1) = 0; y(4,1) = 0; ky = 1; Jy = 0;
2) Para el caso del Brazo Robot generar un programa que realice la siguiente
trayectoria:
- Definir las coordenadas en forma grupal, asumir las consideraciones que
considere necesario.

Basándonos en el código provisto en clase del brazo robot, se adquirieron


los siguientes gráficos:

Siendo la presente figura obtenida, lo más cerca que se logró a la figura


solicitada:
A continuación, se muestra la figura de la simulación del brazo robótico:
Código de Matlab:

clear; M22 = I2 + m2 * l2 * l2;


close all;
clc; M = [M11 M12; M21 M22];
S = [1 -1; 0 1];
% Definición de parámetros del brazo robótico ceros = zeros(2, 2);
m1 = 0.15; % Masa de la 1ra articulación iden = eye(2);
L1 = 0.35; % Longitud total de la 1ra
articulación % Matriz de estado "A"
l1 = 0.16; % Longitud A = [ceros iden; ceros ceros];
I1 = 4.1e-3; % Inercia 1
m2 = 0.12; % Masa de la 2da articulación % Matriz de entrada "B"
L2 = 0.30; % Longitud total de la 2da B = [ceros; inv(M) * S];
articulación
l2 = 0.12; % Longitud % Definición de los pesos q1, q2, q3 y q4
I2 = 3.2e-3; % Inercia 2 para la ecuación de Riccati
q1 = 1000; % Peso q1
% Cálculo de las matrices utilizando q2 = 1000; % Peso q2
ecuaciones del modelo matemático q3 = 5; % Peso q3
M11 = I1 + m1 * l1 * l1 + m2 * L1 * L1 + m2 * q4 = 5; % Peso q4
L1 * l2; Q = diag([ q1 q2 q3 q4 ]); % Matriz
M12 = m2 * L1 * l2; de peso Q
M21 = I2 + m2 * l2 * l2 + m2 * L1 * l2;
RR = [ 1 ]; % Matriz %% Ecuación general para determinal angulos
de peso R BRAZO
P = are(A,B*inv(RR)*B',Q); % Cálculo
de la ecuación de Riccati x2y2 = xr.*xr + yr.*yr;
K = inv(RR)*B'*P; % Cálculo j=sqrt(x2y2);
del valor K usando la ecuación de Riccati
AA = xr./sqrt(x2y2);
% Definición de parámetros para la BB = (x2y2+L1*L1-L2*L2)./(2*L1*j);
trayectoria triangular r1A = acos(AA);
v = 0.1*0.5; % Velocidad de r1B = acos(BB);
desplazamiento en X
ti = 0; % Tiempo inicial for k=1:((ntotal-1)/2)
dt = 0.001; % Paso de tiempo r1A(k,1)=-1*r1A(k,1);
dt2 = 0.01; % Paso de tiempo
adicional end
w = 10*0.1; % Velocidad angular w for k=ntotal+1:ntotal+ncirculo
ro = 0.078; % Valor de radio r1A(k,1)=-1*r1A(k,1);
end
%% Valores de tiempo r1 = r1A - r1B;
t1 = 0.1/v; ZZ = (x2y2-(L1*L1+L2*L2))./(2*L1*L2);
t2 = 0.2/v; r2 = acos(ZZ);
t3 = 0.3/v; r1 = real(r1);
t4 = 0.4/v; r2 = real(r2);
t5 = (0.4/v)*pi ; nr12 = length(r1);
t6 = (0.6/v)*pi ;
xx = L1*cos(r1) + L2*cos(r1+r2); yy =
tt1 = ti:dt:t1; tt1 = tt1'; L1*sin(r1) + L2*sin(r1+r2);
tt2 = (t1+dt):dt:t2; tt2 = tt2';
tt3 = (t2+dt):dt:t3; tt3 = tt3'; fi1 = 0; fi2 = 0;
tt4 = (t3+dt):dt:t4; tt4 = tt4'; fi1p = 0; fi2p = 0;
ang = [ fi1 fi2 ]';
%% Cuenta la cantidad de tc vel = [ fi1p fi2p ]';
ntotal=length(tc); k = 1;
for tt = ti:dt:tf-dt
tt5 = (t4+dt):dt:t5; tt5 = tt5'; ang1(k,1) = fi1+ 0.2*0.01*randn(1,1);
tt6 = (t5+dt):dt:t6; tt6 = tt6'; ang2(k,1) = fi2+ 0.2*0.01*randn(1,1);
t(k,1) = tt;
%% Valor final es la suma de ncirculo ntotal x = [fi1-r1(k,1); fi2-r2(k,1); fi1p; fi2p
ncirculo=length(tt6); ];
tc=[tt1;tt2;tt3;tt4]; T = -K*x;
tf = t6; %cantidad de tiempos totales M11a = I1 + m1*l1*l1 + m2*L1*L1 + m2*L1*l2
* cos(fi2);
%% valor de 1/4 para pendientes M12a = m2*L1*l2*cos(fi2);
x1 = -0.125./t1*tt1 + 0.65; % para M21a = I2 + m2*l2*l2 + m2*L1*l2*cos(fi2);
hallar la posición usamos la pendiente y el M22a = I2 + m2*l2*l2;
valor incial M = [ M11a M12a
x2 = 0.125./(t1-t2)*(tt2-t2)+0.40 ; % M21a M22a ];
mx+b C1 = m2*L1*l2*(fi1p+fi2p)^2*sin(fi2);
x3 = -(0.125./(t2-t3)*(tt3-t3) - 0.525); C2 = -m2*L1*l2*fi1p*fi1p*sin(fi2);
x4 = 0.125./(t4-t3)*(tt4-t4)+ 0.65; C = [ C1 C2 ];
x5 = ro*sin(w*tt5)+0.525; accel = inv(M)*(C + S*T);
x6 = ro*cos(w*tt6)+0.525; ang = ang + vel*dt;
vel = vel + accel*dt;
y1 = 0.10./t1*tt1; fi1 = ang(1,1);
y2 = -0.10./(t1-t2)*(tt2-t2); fi2 = ang(2,1);
y3= 0.10./(t3-t2)*(tt3-t2); fi1p = vel(1,1);
y4 = 0.10./(t3-t4)*(tt4-t4); fi2p = vel(2,1);
y5 = -ro*cos(w*tt5); k = k + 1;
y6 = ro*sin(w*tt6); end

xr = [ x1; x2; x3; x4; x5; x6]; %cantidad xra = L1*cos(ang1) + L2*cos(ang1+ang2);
almacenda en matriz xr yra = L1*sin(ang1) + L2*sin(ang1+ang2);
yr = [ y1; y2; y3; y4; y5; y6]; %cantidad
almacenda en matriz yr figure(1); plot(t,ang1*180/pi,t,r1*180/pi);
t = [ tt1; tt2; tt3; tt4; tt5; tt6]; grid on;
%cantidad almacenda en matriz t figure(2); plot(t,ang2*180/pi,t,r2*180/pi);
grid on;
figure(3);
plot(xra,yra,xx,yy); x2A = x1B;
grid on; y2A = y1B;
disp('Pause'); ang12 = ang1(k,1) + ang2(k,1);
pause; x2B = x2A + L2*cos(ang12);
figure(4); y2B = y2A + L2*sin(ang12);
grid; xxx = [ x1A x2A x2B ];
axis([ -0.5 1 -0.5 0.5]); yyy = [ y1A y2A y2B ];
hold on; plot(xxx,yyy,'-b','Linewidth',2);
nk = length(ang1); pause(0.001);
dk = 15; % Saltos para la animación plot(xxx,yyy,'-w','Linewidth',2);
xra = [ xra xxx1 = xra(k,1);
xra(nr12,1)*ones(dk,1) ]; xxx2 = xra(k+dk-1,1);
yra = [ yra yyy1 = yra(k,1);
yra(nr12,1)*ones(dk,1) ]; yyy2 = yra(k+dk-1,1);
xxra = [ xxx1 xxx2 ];
for k = 1:dk:nk yyra = [ yyy1 yyy2];
x1A = 0; plot(xxra,yyra,'-r','Linewidth',2);
y1A = 0;
x1B = x1A + L1*cos(ang1(k,1)); end
y1B = y1A + L1*sin(ang1(k,1)); figure(4); plot(xx,yy,'-b'); grid;
3) Ex Utilizando el programa carrito 1 y carrito 2 cambiar la programación por una
trayectoria compuesta de 3 trayectorias de la siguiente forma.

Para la presente experiencia, se graficó de color azul la figura deseada del


recorrido del carrito. El código pide los pesos q1, q2, el valor del y deseado y las
coordenadas de x y y de donde partirá el carrito, trazando una ruta de color rojo.

Figura obtenida en Matlab:

Command Window:
Se realizó otra simulación, con diferentes valor de x y y. Se obtuvieron los
siguientes resultados.

Figura obtenida:

Command Window:

Y finalmente, se realizó una tercera prueba, donde se obtuvieron los resultados:

Figura obtenida:
Command Window:

Código de Matlab:

clear; x = input('Ingrese el valor de x inicial


clc; trayectoria: ');
close all; y = input('Ingrese el valor de y inicial
trayectoria: ');
v = 2.5; fi = input('Ingrese el angulo inicial de
L = 3; trayectoria: ');
A = [0 1; 0 0]; ydes = input('y deseado: ');
B = [0; 1];
q1 = input('Peso q1[100]: '); fides = 0;
q2 = input('Peso q2[100]: '); fi = fi * pi / 180;
Q = diag([q1 q2]); dt = 0.0001;
P = are(A, B * B', Q); k = 1;
K = B' * P;
k1 = K(1, 1); % Tramo 1
k2 = K(1, 2); while ((x > 0) && (x < 10))
xx(k, 1) = x;
yy(k, 1) = y;
ffi(k, 1) = fi; % Almacenar coordenadas de la trayectoria
existente
tandel = L * (k1 * (y - ydes) + k2 * v * xx_existente = xx;
(sin(fi) - sin(fides))) / (v * v * cos(fi)); yy_existente = yy;
if (tandel > 1)
tandel = 1; % Ingresar coordenadas de inicio de la
elseif (tandel < -1) trayectoria nueva
tandel = -1; x_inicio_nueva = input('Ingrese la coordenada
end x de inicio de la trayectoria nueva: ');
xp = v * cos(fi); y_inicio_nueva = input('Ingrese la coordenada
yp = v * sin(fi); y de inicio de la trayectoria nueva: ');
fip = -v / L * tandel;
x = x + xp * dt; % Encontrar el punto más cercano de la
y = y + yp * dt; trayectoria existente al inicio de la
fi = fi + fip * dt; trayectoria nueva
k = k + 1; distancias = sqrt((xx_existente -
end x_inicio_nueva).^2 + (yy_existente -
y_inicio_nueva).^2);
% Tramo 2 indice_punto_cercano = find(distancias ==
while ((x > 10) && (x < 20)) min(distancias), 1);
xx(k, 1) = x;
yy(k, 1) = y; % Ajustar los puntos de la nueva trayectoria
x = x + 0.0001; para conectarse con el punto más cercano de
y = y; la trayectoria existente
k = k + 1; xx_nueva = [x_inicio_nueva;
end xx_existente(indice_punto_cercano:end)];
yy_nueva = [y_inicio_nueva;
% Tramo 3 yy_existente(indice_punto_cercano:end)];
while ((x > 20) && (x < 30))
xx(k, 1) = x; % Graficar trayectoria existente en azul y
yy(k, 1) = y; trayectoria nueva en rojo
x = x + 0.0001; figure(1);
y = y - 0.0001; plot(xx_existente, yy_existente, 'b');
k = k + 1; hold on;
end plot(xx_nueva, yy_nueva, 'r');
grid on;
axis([ -5 35 -5 35 ]);

También podría gustarte