Escolar Documentos
Profissional Documentos
Cultura Documentos
Questão 1
Tendo em vista satisfazer as tarefas definidas para o trabalho, as Rotinas foram implementadas em MATLAB
e desenvolvidas de modo a obter um cenário satisfatório a partir de um ajuste inteligente dos valores do
controlador PID.
0.1 Simulação
Dois cenários foram simulados: sem permissão de locomoção em ambos os sentidos e com permissão
de locomoção em ambos os sentidos. Para o primeiro cenário, depois de 864 iterações, os valores ob-
tidos são: Kp = 2, 5922, Ki = 1, 5152 s−1 , Kd = −0, 9909 s, Tempo Total de Simulação = 66, 30 s e
Erro Médio Final = 33, 980 mm. E o resultado da simulação e o erro estão nas imagens.
Para o segundo cenário, depois de 848 iterações, os valores obtidos são: Kp = 18, 9575, Ki = −0, 0076 s−1 ,
Kd = 0, 3872 s, Tempo Total de Simulação = 60, 40 s e Erro Médio Final = 7, 310 mm. E o resultado da
Camila de Oliveira Cunha - 201965120AI
Giovanni Tomasco Andrade - 201869015B
Robótica Móvel - ENE122
ajustaAngulo.m
Rz2D.m
1 % Rotacao :
2 function M2 = Rz2D(M1,th)
3 Rz = [cos(th) −sin(th) 0
4 sin(th) cos(th) 0
5 0 0 1 ];
6 M2 = Rz*M1;
7 end
Camila de Oliveira Cunha - 201965120AI
Giovanni Tomasco Andrade - 201869015B
Robótica Móvel - ENE122
T2D.m
1 % Translacao :
2 function M2 = T2D(M1,DeltaX,DeltaY)
3 T = [1 0 DeltaX
4 0 1 DeltaY
5 0 0 1 ];
6 M2 = T*M1;
7 end
Simulacao.m
Twiddle.m
11 % Limiar de finalizacao
12 ∆ = 0.001;
13
14 %Obtem o p rim ei r o e r r o
15 Ebest = Simulacao(K, permissao, 0);
16
17 %Historico de erros ao longo da simulacao principal
18 historicoErros= [];
19
20 %% LOOP DE OTIMIZACAO
21 k = 0;
22 while sum(dK)>∆
23 k = k+1; %Contador de iteracoes
24 for i = 1:length(K)
25 K(i) = K(i)+dK(i); %Procura pelos melhores parametros
26 Erro = Simulacao (K , permissao, 0); %Calcula o erro
27 if Erro < Ebest
28 Ebest = Erro;
29 dK(i) = dK(i) * ( 1 + ksi);
30 else
31 K(i) = K(i) − 2 * dK(i); %Procura pelos melhores parametros na direcao ...
contrario
32 Erro = Simulacao (K , permissao, 0); %Calcula o erro
33 if Erro < Ebest
34 Ebest = Erro ;
35 dK(i) = dK(i) * ( 1 + ksi);
36 else
37 K(i)=K(i)+dK(i); %Caso nenhum dos sentidos funcionar
38 dK(i) = dK(i)*(1−ksi);
39 end
40 end
41 end
42 fprintf('Iteracao %i : Melhor Erro = %.5f m, soma(dK) = %.5f \n ',k,Ebest,sum(dK))
43 end
44 fprintf( 'Parametros PID: P = %.4f, I = %.4f, D = %.4f\n',K(1),K(2),K(3))
45
46
47 %% PLOT DA Simulacao
48 figure(1)
49 hold on ; grid on;
50 xlabel('X [m]');
51 ylabel ('Y [m]');
52 axis ([ −5 5 −5 5])
53
54 [historicoErros,dt]=Simulacao(K,permissao,1);
55
56
57 %% GRAFICO DE ERRO x TEMPO
58 %Conversao para milimetros[mm]
59 historicoErros= historicoErros*10^3;
60 %Erro medio final [mm]
61 erroMedioFinal= mean(historicoErros);
62 %Calculo do tempo total de simulacao
63 tempoTotal = length(historicoErros)*dt;
64 %Tempo discretizado
65 tempo = dt:dt:tempoTotal;
66 fprintf( 'Tempo total de Simulacao: %.2f s , Erro medio final: %.3f mm. \n', ...
tempoTotal, erroMedioFinal);
67 figure(2)
68 grid on; hold on;
69 %Ajuste de limite dos eixos
70 axis([0 tempoTotal 0 max(historicoErros)*1.1]);
Camila de Oliveira Cunha - 201965120AI
Giovanni Tomasco Andrade - 201869015B
Robótica Móvel - ENE122
71
72 %ajuste de legenda dos eixos e titulo
73 ylabel('Erro [mm]') ; xlabel( 'Tempo [ s ]') ; title(sprintf('Erro x Tempo(Erro medio ...
final: %.3f mm)' , erroMedioFinal))
74 plot(tempo, historicoErros, 'k ', 'linewidth',1);