Hallo alle,

ich habe unterschiedliche Methode ausprobiert, die Fahrt genau geradeaus mit Hilfe der Odometrie zu regeln. Seltsamerweise funktioniert bei mir die primitivste Regelung am Besten, und das finde ich etwas seltsam. Ich hatte es genau umgekehrt erwartet.

Nun bin ich unsicher, ob meine Lösung wirklich die beste ist, oder ob ich einfach noch eine wichtige Alternative ausprobieren sollte.

Für diejenigen, die den NiboBee nicht kennen: Er hat links und rechts separate Motoren, deren Drehzahl durch PWM geregelt wird und mit IR-Lichtschranken gemessen wird. Die Odometrie zählt für links und rechts jeweils einen Counter hoch, und zwar 20 Impulse pro Rad-Umdrehung. Ich schätze mal, das ist so bei fast allen Roboter-Bausätzen. Also spiegeln die Odometrie Counter die gefahrene Strecke wieder.

Folgende Ansätze habe ich versucht:

Ansatz 1
Wenn counter_links > counter_rechts, dann stoppt der linke Motor.
Wenn counter_links < counter_rechts, dann stoppt der rechte Motor.
Wenn beide counter gleich sind, dann werden beide Motoren auf ungefähr gleiche Drehzahl eingestellt (gleiche PWM Werte), Geschwindigkeit je nach Belieben.
Diese drei Bedingungen werden in der Hauptschleife ständig überprüft.

Das war die einfachste Variante, und die hat prima funktioniert. Nun dachte ich mir, daß durch das abrupte Anlaufen und stoppen der Motoren eventuell viel Schlupf entsteht, was die Meßergebnisse der Odometrie verfälscht. Also wollte ich diese Regelung sanfter gestalten:

Ansatz 2
Wenn counter_links > counter_rechts, dann wird der linke Motor etwas langsamer.
Ansonsten wird der Motor wieder etwas schneller (maximal bis zur gewünschten Fahrgeschwindigkeit).

Wenn counter_links < counter_rechts, dann wird der rechte Motor etwas langsamer.
Ansonsten wird der Motor wieder etwas schneller (maximal bis zur gewünschten Fahrgeschwindigkeit).

Diese beiden Bedingungen werden in der Hauptschleife wiederholt abgefragt, wobei ich das Ganze mit und ohne Delay probiert habe.

Diese Variante führt aber leider dazu, dass der Roboter ständig deutlich sichtbar hin und her schwenkt. Je nach Delay Zeit schaukelt sich diese Regelschleife sogar zu einer Schwingung auf, so dass der Roboter nun eher hin und her eiert, anstatt geradeaus zu fahren.

Ansatz 3
In der Hauptschleife wird die Differenz der beiden Odometrie Counter berechnet (kann positiv oder negativ ausfallen). Der Wert der Differenz wird von der gewünschten Fahrgeschwindigkeit für den linken Motors subtrahiert und für den rechten Motor addiert.
Also je mehr der Wagen nach links abweicht, umso stärker lenkt er nach rechts (und umgekehrt).

Das hat ganz schlecht funktioniert. Auch hier eierte mein Fahrzeug mehr herum, als geradeaus zu fahren.

Jetzt frage ich Dich: Welche Methode könnte ich noch ausprobieren? Oder ist meine erste simple Methode schon die ideale?