Hallo,
ich bin momentan dabei, den Geschwindigkeitsregler meines RP6(V2) einzustellen, da der ursprünglich verwendete I-Regler keine allzu befriedigenden Ergebnisse liefert:
Durch das zu große Überschwingen haben beim Anfahren und Drehen die Räder durchgedreht (Parkett...) und die Streckenabweichungen waren jenseits von Gut und Böse.
Hat das schon einmal jemand mit seinem RP6 probiert? Welchen Reglertyp habt ihr verwendet, was waren eure Parameter und wie habt ihr den Regler implementiert?
Nun zu meinem Regler:
Ich arbeite momentan mit folgendem (PI-)Regler:
Code:
static int eneu = 0;static int ealt = 0;
ealt = eneu;
eneu = mleft_des_speed - mleft_speed;
mleft_power = mleft_power+eneu/4 + ealt/20 ;
if(mleft_power > 210) mleft_power = 210;
if(mleft_power < 0) mleft_power = 0;
static int eneur = 0;
static int ealtr = 0;
ealtr = eneur;
eneur = mright_des_speed - mright_speed;
mright_power = mright_power+eneur/4+ ealt/20 ;
if(mright_power > 210) mright_power = 210;
if(mright_power < 0) mright_power = 0;
Die Sprungantwort habe ich mit dem RP6Loader aufgezeichnet, leider stimmt dort die Achsenskalierung nicht, daher sind die Printouts eher qualitativ...:
Daher zur Erklärung: 1. Sprung: 100 FWD, frei drehend, 2. Sprung: 100 fwd auf dem Boden, 3. Sprung: 210 rückwärts, 4. Sprung: 80 FWD
Die Anstiegszeiten sind absichtlich begrenzt, da ich die Hilfsfunktionen zur langsamen Anpassung der Geschwindigkeit entfernt habe und bei schnelleren Anstiegen auf meinem Boden die Räder durchdrehen.
Im Gegensatz zum originalen Regler sind die Ergebnisse genauer und haben ein geringeres Überschwingen, bessere Einstellungen habe ich noch nicht hinbekommen...
Störungen (Aktenordner im Weg) sind damit auch bei kleinen Geschwindigkeiten (10) kein Problem mehr.
Hauptsache ist: Der Roboter fährt nun mit einer sehr geringen Abweichung kerzengeradeaus!
Also, zeigt her eure Regler Über Kritik/Vorschläge wäre ich aber auch froh!
- Max
Lesezeichen