-         

Ergebnis 1 bis 7 von 7

Thema: RoboSim; Software zur Simulation eines linienfolgenden Robos

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.06.2005
    Ort
    DD
    Beiträge
    519

    RoboSim; Software zur Simulation eines linienfolgenden Robos

    Anzeige

    Hi!

    Dieser Thread war ausschalggebend für die Veröffentlichung der von mir programmierten Software, zur Simulation eines linienfolgenden Roboters.

    In der Readme steht eigentlich alles wichtige drinn (leider hier etwas schlecht formatiert), wesshalb ich mir hier die vielen Worte ersparen will (ich programmiere lieber noch ein bissschen ):
    Code:
    Hallo!
    
    Bei RoboSim handelt es sich um ein Programm, das die Linienverfolgung
    eines differential angetriebenen Roboters (2 Motoren, links/rechts) simulieren soll.
    In der aktuellen Version mittels eines PID-Reglers.
    Das ganze wurde in Delphi 7 geschrieben, die Grafikdarstellung läuft über OpenGL.
    Noch etwas vorne weg: Die Auflösung sollte mindestens 1024*768 betragen!
    
    So nun zu den einzelnen Elementen:
    
    Wenn man die RoboSim.exe startet sieht man erstmal im linken Teil die Bahn (grau) und den Roboter,
    im rechten Teil die Bedienelemente.
    
    Lauf: egal in welcher Situation, wenn hier der Haken rausgenommen wird, bleibt das Programm stehen
    Spur folgen: startet und beendet die Spurverfolgung
    Testreihe: öffnet neues Fenster zum starten einer Testreihe; mehr dazu weiter unten
    Stopuhr: wenn ausgewählt hält der Roboter an, wenn er wieder im Umkreis der Stelle ankommt,
    	wo die Stopuhr gestartet wurde, also nach einer Runde; es werden die benötigten
    	Rechenschritte angezeigt
    Regler: für die Geschwindigkeit der Motoren links und rechts, danneben wird der aktuelle Wert angezeigt
    die folgenden Elemente beeinflussen die Darstellung
    Umrisse: die Umrisse der Achse und der 'Halterung' vom Stützrad
    Füllung: füllt die Umrisse aus
    Hilfslinie: Linie zwischen den Drehpunkten an den Rädern
    Stützrad: selbsterklärend
    Löschen: löscht die dargestellten Teile vor dem nächsten Zeichenschritt
    Sensoren: selbsterklärend
    Hintergrund: die Strecke
    ...einfach mal probieren, was bei versch. Kombinationen passiert!
    Laden: damit kann ein neuer Hintergrund geladen werden; standardmäßig wird beim starten des Programms
    	erstmal Background.bmp geladen
    weißes Feld: wenn dort der Curser drin ist, kann man dern Roboter über die Pfeiltasten steuern;
    	(vmax=3 sinnvoll)
    Reglerwert:
     der Button ist nur zum debuggen drinn und zeigt den aktuellen Wert des Reglers an, hat aber
    	keine Funktion
    Zurücksetzen: entspricht Neustarten; setzt alles auf seine Standardwerte zurück, ließt die Ini neu ein,
    	sinnvoll nach dem Laden eines neuen Hintergrunds
    
    Nun zur RoboSim.ini, der Datei in der man die meisten Voreinstellungen vornehmen kann
    vmax=1		->Maximalgeschwindigkeit der Motoren; wenn 1 dann 1 Pixel pro Rechenschritt
    pause=0		->Wartezeit in ms zwischen jedem Rechenschritt, zum besseren beobachten
    robox=175	->Startwerte für den Roboter
    roboy=386
    roboalpha=45
    radstand=100	->Dimensionierung des Roboters
    radradiuslr=15
    radbreitelr=10
    achsdicke=7
    abstand=50
    radradiusm=15
    radbreitem=7
    nachlauf=10
    sensorx=75	->Abstand der Sensoren von der Achse
    sensorymitte=10	->Abstand der beiden mittleren Sensoren (da alle außenliegend) 
    sensoranzahl=8	->Anzahl der Sensoren
    sensoryabstand=6->Abstand der restlichen Sensoren voneinander
    kp=50		->P-Anteil für den PID-Regler (alles /1000, also wenn kp=50 dann ist der P-Anteil 0,05)
    ki=0		->I-Anteil
    kd=0		->D-Anteil	
    tast=1000	->Abtastzeit	
    reg=1000	->Verzögerung der Reaktion
    
    Die Funktionsweise des PID-Reglers und den Einfluss der einzelnen Komponenten kann man am besten
    an einem Stück Quelltext erkennen (sensor nimmt Werte von -1 bis +1 an):
    
      yp:=(kp/1000)*sensor;
      yi:=yialt+(ki/1000)*(tast/1000)*sensor;
      yd:=(kd/1000)*(sensor-sensoralt)/(tast/1000);
    
      yialt:=yi;
      sensoralt:=sensor;
    
      regel:=yp+yi+yd;
    
      button6.caption:=floattostr(regel);
    
      vralt:=vr;
      vlalt:=vl;
    
      regel:=(reg/1000)*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;     
    
    
    Jetzt nochmal kurz zu der Testreihe:
    Damit lassen sich versch. kp, ki, kd und tast Werte testen. Gestoppt wird immer ein Runde
    und das ganze dann in der logfile.txt gespeichert. Es geht also darum, mit welchen Einstellungen man
    die schnellste Runde fahren kann. Wenn der Haken bei 'nur Bestzeit' gesetzt wird bricht die Simulation 
    die Runde ab, wenn eine weniger schnelle Runde als die bissher beste gefahren wird. Bei Max schreibt man
    den Wert rein, bei dem die Simulation abgebrochen (und mit den nächsten Testwerten fortgefahren)
    werden soll. Ansonsten würde der Robo ja ewig umherirren, wenn er z.B. die Linie mal verloren hat.
    (Es ist aber auch schon vorgekommen, dass er abgekürzt hat, wessshalb es nicht immer günstig ist
    'nur Bestzeit' anzuklicken)
    Man sollte im allgemeinen nicht allzuviele Versuche starten (je nach Rechner ca. >250), da es dann
    (vielleicht auch wegen meiner schlechten Programmierung) zu Speicherproblemen kommen kann.
    Wenn man die Testreihe so schnell wie möglich abgeschlossen haben will, sollte man erst mal 'pause'
    in der Ini auf 0 setzen und dann sämtliche Haken bei der Darstellung rausnehmen.
    
    Wer will kann natülich auch eigenen Bahnen zeichen. Also Vorlage kann Background_leer.bmp dienen;
    (600*600, 24bit)
    
    Achso, und falls doch jemand Geld damit verdienen möchte, was ich nicht glaube,
    dann soll er sich vorher bei mir melden, damit ich auch was davon bekomme ;-)
    
    Bei Fragen/Beschwerden/Verbesserungsvorschlägen/Anmerkungen/Quelltext/... oder wenn euch das Programm 
    gefallen hat, freue ich mich immer über eine Mail an:
    aehM_Key [at] web.de !
    
    Viel Spass!
    
    Grüße; ähM_Key
    Screenshot:


    Und -->HIER<-- könnt ihr das ganze runterladen!

    Natürlich kann auch hier im Thread darüber diskutiert werden!

    Grüße; ähM_Key

    PS: Man könnte es ja mal als Wettbewerb ausschreiben: Wer findet für diese Strecke die besten Einstellungen für den PID-Regler?

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.06.2005
    Ort
    DD
    Beiträge
    519
    Hi!

    Kleines Update.

    Im oberen Teil wird der aktuelle Sensorwert angezeigt und im unteren die Regelgröße vom PID-Regler. Der untere Balken ist mit einer, ich nenn's jetzt mal übertrieben, 'Auto-Zoom-Funktion' ausgestattet, also immer angepasst an den Maximalwert des Reglers, wesshalb das am Anfang etwas komisch aussehen kann.

    Download

    Grüße, ähM_Key

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    16.05.2005
    Beiträge
    734
    Hallo ähM_Key,

    ich hab mal getestet, dabei ist mir folgendes aufgefallen:
    Der Robo fährt in dem angehängten Bild geradeaus weiter, obwohl die Regelgrösse voll auf links steht. Stimmt das Verhalten? Es ist nämlich sehr träge. Die Einstellungen der .ini sind hier:
    Code:
    [Konstanten]
    vmax=2
    pause=100
    robox=175
    roboy=386
    roboalpha=45
    radstand=100
    radradiuslr=15
    radbreitelr=10
    achsdicke=7
    abstand=50
    radradiusm=15
    radbreitem=7
    nachlauf=10
    sensorx=75
    sensorymitte=10
    sensoranzahl=8
    sensoryabstand=6
    kp=100
    ki=0
    kd=0
    tast=1000
    reg=1000
    Übrigens die Einstellung bei der der Robo springt habe ich wieder gefunden. Es ist eigentlich nur kd zusätzlich auf 100 gestellt. Teste mal, ob das bei dir auch ist. Hier die ini:
    Code:
    [Konstanten]
    vmax=2
    pause=0
    robox=175
    roboy=386
    roboalpha=45
    radstand=100
    radradiuslr=15
    radbreitelr=10
    achsdicke=7
    abstand=50
    radradiusm=15
    radbreitem=7
    nachlauf=10
    sensorx=75
    sensorymitte=10
    sensoranzahl=8
    sensoryabstand=6
    kp=100
    ki=0
    kd=100
    tast=1000
    reg=1000
    Gruss Waste
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken test1.gif  

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    16.05.2005
    Beiträge
    734
    Ach, ich sehe es jetzt erst, in deiner Geschwindigkeitseinstellung ist ein I-Verhalten von Haus aus drin mit vr:=vr+abs(regel); da hat sich durch meine Änderung auf vr:=vralt+abs(regel); eigentlich gar nichts geändert, da in dem Moment vralt sowieso noch vr ist. Das hatte ich glatt übersehen.
    Du hattest schon immer eine Trägheit im System.
    Ich denke du solltest von einen Soll-v oder gleich von vmax aus die neue Geschwindigkeit berechnen, dann müsstest die Trägheit folgendermassen einbinden:
    v = valt + c*(vsoll + regel -valt)
    Ich hoffe das stimmt so, ist schon spät für so komplizierte Berechnungen.

    Gruss Waste

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.06.2005
    Ort
    DD
    Beiträge
    519
    Hi!

    Nur kurz, hab nicht viel Zeit.

    Vmax=2 ist grundsätzlich nicht zu empfehlen, da der Roboter sich dann unter Umständen 2 Pixel pro Rechenschritt bewegt, und er folglich schlechter auf die Spur reagieren kann. In Wirklichkeit wäre die Auflösung ja noch wesentlich höher.

    In deinem Beispiel hat der Roboter die Linie Verloren (auch wenn es im Bild nicht so aussieht, aber das können Rundungsfehler sein), wesshalb das dann alles nicht mehr stimmt; diesen Grenzfall müsste ich mir nochmal genauer ansehen.

    Bei der Einstellung mit kd=100 springt bei mir nix, der Robo dreht nur aber noch eine kleine Ehrenrunde
    Hier sieht man auch sehr gut, dass nur aller 2 Pixel getestet und dann auch dargestellt wird.



    Grüße; ähM_Key
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken t2.jpg  

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.04.2005
    Ort
    Hamburg <-> Bremen
    Alter
    37
    Beiträge
    112
    Hallo,
    hab mir das mal angeschaut. Sieht ja sehr gut aus
    Wollte mal fragen ob jemand schon mal mit den so ermittelten Werten seinen Robbi gefuettert hat und ob Sim/Praxsis so in etwas uebereinstimmen. (Hab selber leider noch keinen, plane gerade...)

  7. #7
    Gast
    iiippppppppppppppppppppppppppppppppppppppppppppppp ppppppppppppppppppppppp

Berechtigungen

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