- LiFePO4 Speicher Test         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 12 von 12

Thema: Asurolympics

  1. #11
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    Anzeige

    Powerstation Test
    du wirst hier keine quellcodes bekommen. dafür ist das forum auch nicht da.

    mach dir gedanken, wie man die probleme angehen könnte, schreibe einen quelltext und teste ihn. wenn es geht - herzlichen glückwunsch, wenn nicht, dann poste ihn hier, und die fehlermeldung bzw das was nicht funktioniert.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  2. #12
    Neuer Benutzer Öfters hier
    Registriert seit
    16.06.2008
    Beiträge
    6
    1 PID Regler
    Bei meinem Asuro brauchen die Motoren unterschiedlich Power für den Gleichlauf bzw. Geradeauslauf. Es ist dann relativ mühsam die richtigen Werte der
    MotorSpeed(left_speed, right_speed)
    Funktion für den Geradeauslauf zu finden. Darüber hinaus ändert sich dieses Verhalten mit schwächer werdender Batterie.

    Das motivierte mich, hierzu einen PID Regler zu programmieren.
    1.1 Konstantes Zeitintervall

    Zuerst habe ich einen PID Regler implementiert für ein konstantes Zeitintervall Ta=150ms (Stellungsalgorithmus Quelle: https://www.roboternetz.de/wissen/in...nik#PID-Regler).
    //Stellungsalgorithmus für links: e = leftSpeed - l_ticks; //Vergleich l_speed = l_yalt + q0*e + q1*l_ealt + q2*l_ealt2; //Reglergleichung l_ealt2 = l_ealt; l_ealt = e; l_yalt = l_speed;
    Dabei habe ich die vierer Odometriescheibe verwendet.
    1.1.1 Automatisch Finden der Konstanten q0, q1 und q2

    Es war mir zu mühsam die Werte für q0, q1 und q2 per Hand aus zu pingeln. Deshalb habe ich ein Programm für Asuro geschrieben, welches ihn die besten Konstanten selbst heraus finden läßt (trial and error). Als leftSpeed und rightSpeed habe ich 20 Ticks pro Sekunde vorgegeben (das ist langsam). Ich habe keinen Unterschied zwischen links und rechts gemacht. D.h. für beide Seiten habe ich erst mal die gleichen q0, q1 und q2 Werte genutzt. Jeder Fehler vom Vorgabewert (20 Ticks pro Sekunde) wurde registriert, quadriert und über die Zeit summiert. Das Programm ist damit auf der Suche nach q0, q1 und q2 mit dem kleinsten Fehlerquadrat.

    Um hier (16Bit integer statt double) klar zu kommen habe ich die Werte für q0, q1 und q2 mit 100 multipliziert. Das mußte ich bei der Anwendung im Code korrigieren:
    //Stellungsalgorithmus für links: e = leftSpeed - l_ticks; //Vergleich l_speed = l_yalt + (q0*e + q1*l_ealt + q2*l_ealt2)/100; //Reglergleichung l_ealt2 = l_ealt; l_ealt = e; l_yalt = l_speed;

    Nach ca. 20 Minuten rumprobieren wurden schließlich folgende Werte von und für meinen Asuro gefunden:
    q0=171
    q1=-20
    q2=-10

    1.2 Variables Zeitintervall

    Durch einfaches Umrechnen aus
    q0=Kp+Ki*Ta+Kd/Ta
    q1=-Kp-2*Kd/Ta
    q2=Kd/Ta
    ergibt sich dann ein PID Regler für ein variables Zeitintervall Ta.
    Kp=-(q1+2*q2) Ki=(q0+q1+q2)/Ta Kd=q2*Ta
    Für die q0, q1 und q2 Werte aus 1.1 ergibt sich bei Ta=150ms:
    Kp=40
    Ki=1 (eigentlich Ki=0.94)
    Kd=-1500

    Und hier die Zuweisungen von (Kp, Ki, Kd, Ta) -> (q0, q1, q2):
    q0=Kp+Ki*Ta+Kd/Ta; q1=-Kp-2*Kd/Ta; q2=Kd/Ta;
    Stimmts? Quelle: https://www.roboternetz.de/wissen/in...nik#PID-Regler

    Hier ist das Programm asuroAutoPID1.zip.

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

12V Akku bauen