Appendice C
Funzione obbiettivo
1 function [voto]=opt(Vett_pos)
2 % Calcolo del voto assegnato alla configurazione del fowler (il minimo 3 % voto e il migliore voto possibile)
4 %ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ 5 % function [voto]=opt(Vett_pos)
6 %ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ 7 % Input:
8 %
9 % Vett_pos β Vettore delle posizioni delle cerniere 10 % provieniente dall'ottimizzatore genetico
11 %ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ 12 % Output:
13 % Voto β Voto della configurazione da minimizzare
14 %ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ 15
16
17 options = simset('SrcWorkspace','current'); %Permette a simulink di prelevare le
18 i parametri di simulazione direttamente
19 dal workspace della function e non
20 dal workspace generale.
21 22
23 %Si smonta il vettore Vett_pos e si assegna le coordinate di ogni cerniera in 24 %un vettore dedicato
25 A_O=[Vett_pos(1) Vett_pos(2) 0]; 26 27 B_O=[Vett_pos(3) Vett_pos(4) 0]; 28 29 C_O=[Vett_pos(5) Vett_pos(6) 0]; 30 31 D_O=[Vett_pos(7) Vett_pos(8) 0]; 32 33
34 %Si caricano i vettori con le Posizioni del Fowler appianate 35 F_00_BA=[0 0 0]; 36 37 F_00_BU=[305.603 2.75 0]; 38 39 F_20_BA=[221.806 10.138 0]; 40 41 F_20_BU=[510.064 β91.44 0];
145
42
43 F_30_BA=[221.992 10.481 0]; 44
45 F_30_BU=[488.299 β139.473 0]; 46
47 5Si crea i vettori Fow_Set_20 Fow_Set_30 per la funzione distanza minima 48 49 Fow_Set_20=zeros(2,3); 50 Fow_Set_30=zeros(2,3); 51 52 Fow_Set_20(1,:)=F_20_BA; 53 Fow_Set_20(2,:)=F_20_BU; 54 Fow_Set_30(1,:)=F_30_BA; 55 Fow_Set_30(2,:)=F_30_BU; 56
57 % Si lancia la simulazione di Simulink 58 try
59 [xout zout yout]=sim( 'quadrilatero_articolato',[],options); 60
61 catch
62 disp('Errore di Cinematismo non rispettato'); 63 disp('Errore ignorato, esecuzione continuata'); 64 end
65
66 %Si calcola il voto mediante la funzione distanza minima. 67
68 [dist20 ind20 ba20 bu20 dist30 ind30 ba30 bu30 voto]= ... 69 distanza_minima(realout,Fow_Set_20,Fow_Set_30,1,3); 70 end