Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Carrot Chasing Alg Feedback v5 3timer

Descargar como txt, pdf o txt
Descargar como txt, pdf o txt
Está en la página 1de 2

clc

clear
close all

%% Parametros iniciales
phi_f = 90
phi_a = 0
theta_f = phi_f*(pi/180); % orientacion final en rads
theta_a = phi_a*(pi/180); % orientacion actual en rads
theta_A = 0
d_theta = theta_f - theta_a; % diferencia de orientacion en grados
Udtheta = (d_theta)/(abs(d_theta)) %direccion de rotacion

Vmi_i = 5; % Velocidad de motor izquierdo inicial


Vmd_i = 5; % Velocidad de motor derecho inicial
Vmi_a = Vmi_i; % Velocidad de motor izquierdo actual
Vmd_a = Vmd_i; % Velocidad de motor derecho actual
r = 1;
t_muestreo = 2; % tiempo de muestreo
w_limit = 1; % limitador de Velocidad angular
%%---------------------------------------------------------------

%% Sistema lazo cerrado


y = 0 % actual value
d = 0.5 % decay value
b = 1 - d % Gain
Y = ([0])
Yd = ([Vmd_i])
Yi = ([Vmi_i])
T = ([0])
Z = ([theta_A])
k = 0
p = 0

tstart = tic % Timer 1


tend = toc(tstart)

tstart1 = tic % Timer 2


tend1 = toc(tstart1)

tstart2 = tic % Timer 3


tend2 = toc(tstart2)

while (tend < 21)

d_theta = theta_f - theta_a; % diferencia de orientacion


Udtheta = (d_theta)/(abs(d_theta));
w = d_theta/t_muestreo; % velocidad angular
if w > w_limit
w = w_limit;
end
velocity = abs(w*r); % Velocidad tangencial

if Udtheta == 1
Vmi_a = Vmi_i;
Vmd_a = Vmd_i + velocity;
elseif Udtheta == -1
Vmd_a = Vmd_i;
Vmi_a = Vmi_i + velocity;
end
d_velocity = abs(Vmi_a-Vmd_a); % diferencia de velocidad

x = d_velocity; % input value

if p==0

Err = x - y; % Error
y = y + b*Err; % New output value (velocity)

theta_A = (y/r); % Distancia recorrida en ese instante

p = p + 1;
end

if (tend1 > 2)

Err = x - y; % Error
y = y + b*Err; % New output value (velocity)

theta_A = (y/r); % Distancia recorrida en ese instante

tstart1 = tic % Timer 2 reset


end

if (tend2 > 1)

k = k + 1;

if Udtheta == 1
theta_a = theta_a + theta_A; % Distancia recorrida totalmente
elseif Udtheta == -1
theta_a = theta_a - theta_A;
end

Y(k+1) = y;
Yd(k+1) = Vmd_a;
Yi(k+1) = Vmi_a;
T(k+1) = tend;
Z(k+1) = theta_a;

tstart2 = tic
end

tend2 = toc(tstart2);
tend1 = toc(tstart1);
tend = toc(tstart);

end

tend = toc(tstart)

Zd = Z*(180/pi);

plot(T,Y)
%plot(T,Yd)
%plot(T,Yi)
%plot(T,Zd)

También podría gustarte