Documente Academic
Documente Profesional
Documente Cultură
RELATRIO AULA 5
1. INTRODUO
Um sistema pode ser definido como um dispositivo abstrato que recebe
entradas e produz sadas como resposta a essas entradas. Em sistemas de
controle em malha aberta, o sinal de sada no exerce ao no sinal do controle,
portanto no h comparao ou realimentao com a sada de referncia e se
houver uma perturbao, o objetivo desejado no ser atingido.
2. CONTROLADOR
Antes da implementao do controlador PID, foi feita a implementao de
um controlador P (Proporcional) clssico que dado pela figura abaixo, onde o
bloco r o objetivo a ser cumprido pelo sistema, o bloco e o erro entre a sada
da planta e a referncia (no nosso caso a diferena entre a posio atual e a
posio objetivo do rob).
%deltat
%deltaS
dx = Xg(1,1) - Xr(1,1);
dy = Xg(2,1) - Xr(2,1);
dth = Xg(3,1) - Xr(3,1);
ro = sqrt(dx^2 + dy^2);
gama = rad2deg(atan2(dy,dx));
alfa = gama - Xr(3,1);
tic
while (abs(ro)>delta1)
posicao = getPosition(handler);
dx = Xg(1,1) - posicao.x;
dy = Xg(2,1) - posicao.y;
dth = Xg(3,1) - posicao.th;
alfa_ant = alfa;
ro = sqrt(dx^2 + dy^2);
gama = rad2deg(atan2(dy,dx));
alfa = gama - posicao.th;
if (((alfa > -180) && (alfa < -90)) || ((alfa > 90) && (alfa <= 180)))
ro = -ro;
alfa = alfa + 180;
%Ajusta angulo alfa
alfa = mod(alfa,360);
%deltaS
%deltat
%Erro
Xr = Xr+dposicao;
%Coeficientes da equacao geral da reta
aa = Xr(2,1) - Xg(2,1);
bb = Xg(1,1) - Xr(1,1);
cc = Xr(1,1)*Xg(2,1) -Xr(2,1)*Xg(1,1);
%Distancia do ponto a reta
d = (abs(aa*Xr(1,1) + bb*Xr(2,1) + cc))/(sqrt(aa^2 + bb^2));
e = e + d;
time = time + dt;
%Condicao de saida do loop
if time > 50
a = 1;
end
end
while (sum(dk)>threshold)
for i=1:3
k(i) = k(i) + dk(i);
e = calcula_erro(k)
if e < best_erro
best_erro = e;
dk(i) = dk(i)*1.01;
else
k(i) = k(i) - 2*dk(i);
e = calcula_erro(k)
if e < best_erro
best_erro = e;
dk(i) = dk(i)*1.01;
else
k(i) = k(i) + dk(i);
dk(i) = dk(i)*0.99;
end
end
end
end
4. RESULTADOS
ANEXO
%% Controlador P
clear all
close all
clc
handler = MoveService('','http://127.0.0.1:4950/');
P.x = 0;
P.y = 0;
P.th = 0;
setPosition(handler,P);
.
.
.
end
stop(handler);