- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 144

Thema: Asuro: Linienfolger mit PD-Regler

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.06.2005
    Ort
    DD
    Beiträge
    519
    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
    Code:
    [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)
    Und der angepasste Quelltext
    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;
    (Button6 ist nur zum debuggen mit drin)

    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  
    Angehängte Dateien Angehängte Dateien

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test