Hi!
Habe RoboSim jetzt mal umgeschrieben.
Dass das an der einen Stelle nicht linear regelt habe ich noch nicht behoben, aber der Rest müsste laufen.
Das meiste kann man in der RoboSim.ini einstellen
Und der angepasste QuelltextCode:[Konstanten] vmax=1 -> Maximalgeschwindigkeit; zur manuellen Steuerung (Curser in weißes Feld, dann über Pfeiltasten) höhere Werte (z.B. 3) sinnvoll pause=1 -> Pause in ms, zum beobachten z.B: auf 100 setzen robox=175 -> Startwerte Robo roboy=386 roboalpha=45 radstand=100 -> Dimensionierung radradiuslr=15 radbreitelr=10 achsdicke=7 abstand=50 radradiusm=15 radbreitem=7 nachlauf=10 sensorx=75 -> Abstand Sensoren von Achse sensorymitte=10 -> Abstand der zwei mittleren Sensoren (alle außenliegend) sensoranzahl=8 sensoryabstand=6 -> Abstand zw. allen anderen Sensoren vdiff=0,1 -> wird nicht mehr benötigt kp=5 -> PID (alles /100, also kp=5 entspricht 0,05) ki=0 kd=0 tast=100 reg=100 (verzögerte Reaktion)
(Button6 ist nur zum debuggen mit drin)Code:procedure TForm1.followtrack; /////////////////////////////////Spurverfolgung var m: integer; sensor1, sensor2, sensor, regel, yp, yi, yd: real; begin sensor1:=0; sensor2:=0; for m:=1 to sensoranzahl do begin if chk(m) and (sensor1=0) then begin if m<=sensoranzahl/2 then sensor1:=-sensoranzahl/2-1+m else sensor1:=m-sensoranzahl/2; if m<>sensoranzahl then begin if chk(m+1) then begin if m+1<=sensoranzahl/2 then sensor2:=-sensoranzahl/2+m else sensor2:=m+1-sensoranzahl/2; end; end; end; end; if sensor2<>0 then sensor:=(sensor1+sensor2)/2 else sensor:=sensor1; sensor:=sensor/(sensoranzahl/2); yp:=(kp/100)*sensor; yi:=yialt+(ki/100)*(tast/100)*sensor; yd:=(kd/100)*(sensor-sensoralt)/(tast/100); yialt:=yi; sensoralt:=sensor; regel:=yp+yi+yd; button6.caption:=floattostr(regel); vralt:=vr; vlalt:=vl; regel:=(reg/100)*regel; if regel<0 then begin vr:=vralt+abs(regel); if vr>=vmax then begin vr:=vmax; vl:=vlalt-abs(regel); if vl<0 then vl:=0; end; end; if regel>0 then begin vl:=vlalt+abs(regel); if vl>=vmax then begin vl:=vmax; vr:=vralt-abs(regel); if vr<0 then vr:=0; end; end; end;
Wenn man in der Oberfläche z.B. den Haken bei Umrisse und Löschen rausnimmt, kann man sehr schöne Ergebnisse erzielen.
Zum Ändern der PID-Werte in INI ändern, speichern, in Robosim auf Zurücksetzen klicken!
Unter Testreihe kann man eine, wen wunderts, Testreihe mit versch. Werten ausprobieren (gestoppt wird eine Runde). Das Ergebniss wird dann in der logfile.txt gespeichert und kann z.B. in Excel importiert und nach Bestzeiten geordnet werden. Um das zu beschleunigen am besten die ganzen Haken bei Umrisse, Sensoren, Löschen, Hintergrund usw. rausnehmen!
Noch Fragen/Verbesserungsvorschläge?
Grüße, ähM_Key
Bild hier







Zitieren

Lesezeichen