-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 27

Thema: Geradeaus fahren: einfachste Lösung = beste Lösung ?

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.03.2010
    Beiträge
    161

    Geradeaus fahren: einfachste Lösung = beste Lösung ?

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    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?

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    15.03.2010
    Beiträge
    94
    Hi

    Ich würde die Impulse über zwei Interrupts zählen lassen und laufend die PWM Werte anpassen lassen, das geht dann ohne ein Delay und dieses hin und her wackeln sollte dann auch nicht auftreten.

    Zudem solltest du die beiden Encoder genau aufeinander abstimmten, bzw. die Abweichgung mit nem Osziloskop vergleichen und dann gleich von Anfang an nen Korrekturwert mit einrechnen.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.03.2010
    Beiträge
    161
    Meine einfache Regelung produziert definitiv zu viel Schlupf (jedenfalls bei höheren Geschwindigkeiten, wie ich herausgefunden habe).

    Ich denke, daß ein sanfter Anlauf und Stop nötig sein wird, egal mit welcher Methode ich den Geradeaus-Lauf regulieren.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    15.03.2010
    Beiträge
    94
    Denke ich nicht.
    Poste doch mal deinen Code.

  5. #5
    Erfahrener Benutzer Roboter-Spezialist Avatar von erik_wolfram
    Registriert seit
    02.12.2009
    Ort
    Berlin
    Beiträge
    405
    Also ich bin mir da auch nicht ganz sicher, aber wenn man es nüchtern Betrachtet:
    Methode 1 reagiert sofort - es kommt zu keiner Verzögerung, während
    die anderen Methoden langfristiger sind.
    Hinzu kommt, dass Methode zwar sehr abrupt ist, aber 1. durch die hohe Taktung des µC kaum merkbar ist, und 2. besitzen die Motoren eine gewisse Trägheit, welche das ganze "abrundet".
    Höchstens, wenn man das ganze so programmiert, dass es die Trägheit kompensiert wird man es effektiver gestalten können - dazu müsste man aber entweder viel probieren oder Daten zum rechnen haben(?!).

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    27.09.2009
    Alter
    22
    Beiträge
    661
    ich würde dir zur 2.Methode raten den ein bischen ausgebessert kann man
    damit wahrscheinlich dauerhaft gute ergebnisse erreichen.Du must halt wirklich ein bisschen rumprobieren, aber ich glaube das sich das lohnen würde.
    MfG Martinius

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.03.2010
    Beiträge
    161
    Jetzt hab ich's hinbekommen, den Code kann man jetzt auch vorzeigen, siehe http://www.roboternetz.de/phpBB2/viewtopic.php?p=494954.

    Die Motoren beschleunigen beginnend mit 20% PWM langsam bis zum gewünschten Soll. Falls ein Rad weiter gefahren ist, als das andere, wird dessen Geschwindigkeit (schlagatig) solange auf die Hälfte (verglichen mit dem anderen Rad) reduziert, bis der Odometer-Stand wieder stimmt.

    Beim Bremsen wird die PWM Spannung langsam reduziert, bis auf 20%, dann ganz abgeschaltet.

    So klappt der geradeaus-Lauf stabil bei jeder Geschwindigkeit.

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    Les Dir in RN Wissen einmal den Artikel über Regelkreise
    b.z.w. PID Regler durch. Damit lässt sich das noch verfeinern.

    Gruß Richard

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    12.01.2010
    Beiträge
    53

    Re: Geradeaus fahren: einfachste Lösung = beste Lösung ?

    Hallo,

    Zitat Zitat von s.frings
    ich habe unterschiedliche Methode ausprobiert, die Fahrt genau geradeaus mit Hilfe der Odometrie zu regeln.
    ich kann Dir nur empfehlen, die beiden Räder unabhängig voneinander zu regeln. Diese Methode führt auch bei mir zum Erfolg. Ein echter PID-Regler ist am stabilsten, ich habe zunächst einen eigenen Regler dafür gebastelt. Ich vermute, dass es sich eigentlich um einen PI-Regler handelt, allerdings nicht nach den klassischen Formeln. Ich werde meine Regelung nochmal mit dem Stellungsalgorithmus vergleichen, dass scheint meiner Umsetzung zu entsprechen.

    Ciao bantyy

  10. #10
    Erfahrener Benutzer Roboter Genie Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    49
    Beiträge
    1.241
    Passt irgendwie gerade: hattet ihr auch schon das Problem, dass der NiboBee über vorgegebene Entfernungen hinausfährt?

    Regelung soll bei mir als nächstes kommen, aber derzeit läuft er immer 1-3 Odoimpulse über die vorgegebene Strecke hinaus.
    Praktisch läuft es so ab, dass ich über ein Menü eine gewünschte Entfernung einstellen kann (in 10cm-Schritten), anschliessend den Roboter in Ruhe hinstellen kann und dann einfach Start drücke. Er berechnet, anhand der vorgegebenen Entfernung, wieviele Impulse der Odometrie nötig sind und legt los. Muss dort wirklich ein sehr schlanker Code benutzt werden, damit das hinhaut? An den Drehzahlen kanns nicht liegen, denke ich (ist derzeit nur so schnell, dass er gerade fährt).

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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