PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zusammenfassung Erkenntnisse der Motorsteuerung



s.frings
14.04.2010, 16:03
Da ich an dem Fahr-Programm nicht mehr weiter arbeite, beschreibe ich nun wie versprochen meine Erkenntnisse zusammengefasst:

Mein Roboter hat einen Motor für das linke Rad und einen für das rechte Rad. Als drittes Standbein dient ein Gleitfuß in der Mitte. Folgende Erkenntnisse beziehen sich auf diese Bauart:

Beide Motoren beginnen die Rotation erst bei etwa 20% PWM. Wenn sie sich erstmal drehen, kann man wieder viel langsamer werden, ohne daß die Motoren ungewollt blockieren.

Startet man mit zu gringem PWM Wert, neigen die Motoren sporadisch dazu, fest zu stecken und erst bei stark erhöhten Werten (z.B. 500) plötzlioch los zu schießen.

Die Motoren drehen sich links/rechts herum unterschieldich performant. Da sie entgegen gerichtet eingebaut sind, fährt der Roboter also zwangsläufig eine deutliche Kurve, wenn man mit gleichen PWM Werten vorwärts oder rückwärts fährt. Die Abweichung lag bei mir im Bereich von +/-1%.

Weiterhin sind linker und rechter Motor auch bei gleicher Laufrichtung nicht gleich performant. Wenn das dritte Bein nicht exakt zentriert ist, führt auch dies zu unsymmetrischem Verhalten. Die Abweichung lag bei mir ebenfalls im Bereich von +/-1%.

Der Motor darf nicht zu schnell beschleunigen, sonst rutschen die Räder durch. Gleiches gilt für das Bremsen. Ich habe herausgefunden, daß ein I-Regler für diesen Faktor am besten geeignet ist.

Man braucht also folgende Konstanten für die Berechnung der PWM Ansteuerung:

- Minimaler PWM Wert beim Start
- Performance-Verhältnis zwischen links- und rechts-Lauf
- Performance-Verhältnis zwischen linkem und rechtem Motor
- Maximale Beschleunigung bzw. Bremsung (I-Regler).

Für eine ordentliche Regelung ist ein Regel-Intervall im Bereich 100-200ms gut geeignet.

Der Odometrie Sensor liefert nur 20 Impulse pro Radumdrehung. Bei niedrigen Drehzahlen sind das pro Regel-Intervall 0-2 Impulse! Aufgrund dessen ist es keine gute Idee, den Regler wie in der Wiki beschrieben zu programmieren (Fehler pro Intervall ermitteln und diese Fehler über längere Zeit addieren). Wenn wir z.B. nur 5cm pro Sekunde fahren, was der Roboter durchaus präzise kann, dann haben wir manchmal einen Impuls pro Intervall und manchmal 0 Impulse. Beide Werte sind völlig falsch.

Besser ist es, die insgesamt gefahrene Strecke durch die insgesamt gefahrene Zeit zu teilen, das Ergbnis mit einem konstanten Faktor zu multiplizieren und dann zum aktuellen PWM-Wert zu addieren. Letztendlich ist das vom Prinzip her immer noch ein integraler Regler, aber mit etwas anderer Charakteristik, als die Formel im Wiki.

Wer vorhat, einen P-Anteil hinzuzufügen, sollte entsprechend nicht nur die Abweichung im aktuellen Intervall berücksichtigen, sondern die Abweichung aus mehreren Intervallen (z.B der letzten 1000ms) verwenden und Odometrie Werte < 4 überhaupt nicht zur Regelung heran ziehen.

Nun zur Lenkung:

Nach einigem herum probieren bin ich zu dem Schluß gekommen, daß das Lenkrad-Modell am besten geeignet ist. Denn wenn ich jeden Motor für sich regele und dann kurven fahren will, wirds insbesondere beim Wechseln von einer Rechtskurve in eine Linkskurve ohne Zwischenstopp problematisch. Der Roboter fährt solche Manöver am besten, wenn sich seine mittlere Fahrgeschwindigkeit bei einem solchen Kurvenwechsel nicht verändert, sondern nur die Fahrtrichtung. Dies lässt sich am einfachsten durch ein Lenkrad-Modell auf eine Geschwindigkeits-Steuerung drauf bauen.

Zum Geradeausfahren steht das Lenkrad in der Mitte (Wert 1.00). Ich kann nun das Lenkrad (also den Soll-Wert) nach links oder nach rechts drehen. 0,5 bedeutet, das linke Rad dreht sich halb so schnell, wie das rechte. 2.0 bedeutet, das rechte Rad dreht sich halb so schnell, wie das linke.

Ein Arbeitskollege war so nett, die Formel zu erarbeiten, die mir sagt, um wie viel die PWM für links und rechts verändert werden müssen, um einem bestimmten Lenker-Einschlag zu entsprechen:

PWM_Offset=PWM * (-1-Lenkrad)/(1-Lenkrad)
PWM_Links=PWM+PWM_Offset
PWM_Rechts=PWM-PWM_Offset

Dabei ist PWM der PWM Wert aus der Geschwindigkeitsregelung (für Geradeausfahrt), PWM_Links und PWM_Rechts sind die Werte, mit denen die Motoren angesteuert werden müssen.

Jetzt muß noch jemand das Lenkrad drehen. Ich habe dies mit einem PI Regler am besten hinbekommen. Wie oben beschrieben, habe ich auch hier einen etwas anderen Algorithmus angewendet.

Ich messe die Differenz der beiden Odometrie-Sensoren (seit Beginn der Kurve), vergleiche sie mit dem Soll (per Division!) und multipliziere die Differenz mit einem I-Faktor. Das ist dann mein Lenk-Einschlag, der im Idealfall 1 beträgt und im Fehlerfall etwas mehr oder weniger als 1.

Ein P-Faktor kann hinzugefügt werden, um den Wechsel von einer Rechtskurve in eine Linkskurve erheblich zu beschleunigen. Für die Berechnung des P-Faktor verwende ich nur die Abweichung vom Soll aus dem aktuellen Zeitintervall, und das auch nur, wenn die Odometrie Sensoren beide mindestens 4 Takte geliefert haben. Bei sehr niedrigen Geschwindigkeiten habe ich daher keinen P-Anteil.

Das Ergebnis dieser Logik kann man hier begutachten: http://www.youtube.com/watch?v=9EFK7XmfD08

Man beachte, daß der Roboter mehrfach (beinahe exakt) zum Ausgangspunkt zurück kehrt, also sowohl Strecke als auch Fahrtrichtung recht gut einhält.

workwind
14.04.2010, 18:15
Prima! :cheesy:

Da hab ich direkt 'ne Idee für ein Kalibrierprogramm:
* PWM langsam erhöhen bis Signal von der Odometrie kommt (1. Faktor)
* PWM auf 70% setzen und Performance (ticks/s) bestimmen (2. Faktor)
Das ganze fürs linke und rechte Rad jeweils vorwärts und rückwärts...
Der Roboter dreht sich dabei auf der Stelle, sollte also nicht vom Tisch hüpfen!

PICture
14.04.2010, 20:53
Hallo!

@ s.frings

Vielen Dank für deinen Beitrag ! :)

Ich baue momentan meinen ersten ernsten Bot ohne PWM, habe aber als Elektroniker mit Mechanikschwäche, keine praktische Erfahrung, wie sich die Bots beim Fahren verhalten. Deswegen finde ich dein Beitrag auch für meine zukunftige "Konstruktionen", wahrscheinlich mit PWM, wirklich sehr nutzlich.

MfG

s.frings
15.04.2010, 16:43
Ich habe noch etwas herausgefunden:
Beim Beschleunigen und abbremsen hat sich ja der I-Regler aus Vorteilhaft herausgestellt. Noch besser ist es, den PWM Wert pro Intervall lediglich um einen konstanten Wert zu erhöhen oder zu erniedrigen, also auf die Multiplikation mit der Abweichung zu verzichten. Ansonsten fährt der Roboter nämlich im Fall hoher Ziel-Geschwindigkeit viel rabiater an, als wenn die Ziel-Geschwindigkeit nur Gering ist. Zu rabiates Anfahren führt zu seitlichem Ausbrechen, also einer erheblichen Abweichung von der vorgesehenen Fahrtrichtung, die man mittels Odometrie nicht mehr erfassen kann.

Es empfiehlt sich auch, nicht bis zur maximalen PWM Spannung zu beschleunigen, da man dann nur noch halb so gut lenken kann, als wenn man sich dafür ein bisschen Reserve (z.B. 10%) reserviert.

PICture
17.04.2010, 18:49
Hallo!

Wegen fehlender Erfahrung, bevor ich meinen Raumpfleger ( https://www.roboternetz.de/phpBB2/viewtopic.php?t=49716 ) zusammenbaue, möchte ich fragen, ob ein nicht runder Gleiter (Saugdüse, wie auf dem Foto) mit grösserer Kontaktfläche zu Boden Schwerigkeiten bei sich langsam bewegendem Bot mit quasi PWM bereiten könnte ?

MfG

robo.fr
17.04.2010, 19:07
Hallo Zusammen,

was das Anlaufverhalten der NiboBee-Motoren betrifft, müsste es meiner Meinung nach dem Asuro ziemlich ähnlich sein.

Eine genauer Untersuchung zu den Asuro Motoren findet sich hier:
http://roboterclub-freiburg.de/projekte/asuro/index.php#drehzahl

Eine Untersuchung nach dem selben Schema könnte für die NiboBee evetuell auch nützlich sein.

Gruß,
robo

s.frings
17.04.2010, 19:52
Wenn Du saugst, wird die Reibung wohl entsprechend hoch sein. Aber Du hast ja wohl auch entsprechend Leistungsstarke Motoren vorgesehen. Pass auf, daß die Räder nicht durchrutschen.

Wenn Du die tatsächliche Fahrgeschwindigkeit misst und die Motor-Leistung dementsprechend regelst, ist ja eigentlich ganz egal, wie hoch die Reibung ist und wie sie verteilt ist (vorausgesetzt, Du überforderst die Motoren nicht).

PICture
17.04.2010, 20:25
@ s.frings

Vielen Dank für deine positive Beurteilung die mich berühigt hat. :)

Mir ist klar, dass immer kleinere Probleme auftauchen könnten, sonst wäre das Leben zu langweilig...

Mich freut aber, dass es grundsätzlich funktionieren sollte und mein Vorhaben keine grobe Denkfehler enthält.

MfG