Zum Hauptinhalt springen

Einfacher Linienfolger - So folgt ein Roboter einer Linie

Der einfachste Linienfolger ist, wenn man es genau nimmt, gar kein Linienfolger, sondern ein Kantenfolger. Besitzt der Roboter einen Bodensensor zum Unterscheiden von hellen und dunklen Untergründen, so ist es möglich den Roboter an der Kante entlang der Linie folgen zu lassen.

Linienfolger Roboter

Das Grundprinzip des Kantenfolgers (Linienfolger mit nur einem Sensor) ist in der Abbildung dargestellt. Der IR-Sensor detektiert das vom Untergrund reflektierte Licht und gibt dies in Form eines Messwertes zurück. In der Abbildung sind die Messwerte des Sensors auf dem Roboter rot angegeben. In diesem Beispiel gilt, je heller der Untergrund, desto größer der Messwert. Mithilfe der Messwerte muss der Roboter entscheiden, wo sich die Linienkante befindet und welche Richtung er fahren muss. Hierfür gibt es verschiedene Algorithmen.

Linienfolger Roboter

3-Stufen-Algorithmus

Für eine einfache Motorregelung zum Folgen der Linie können für den Roboter, bzw. den Messwert, drei verschiedene Fälle unterschieden werden:

  • Fall A Der Sensor ist im Wesentlichen neben der Linie und detektiert viel IR-Licht (z.B. Messwert: 900). Der Roboter sollte mehr nach links zur Linie fahren.
  • Fall B Der Sensor ist hauptsächlich über der Linie und detektiert wenig IR-Licht (z.B. Messwert: 180). Der Roboter sollte mehr nach rechts zur Linienkante fahren.
  • Fall C Der Sensor befindet sich zur Hälfte über der Linie und ist somit ungefähr über der Kante (z.B. Messwert: 550). Der Roboter kann einfach geradeaus fahren.

Ein Algorithmus zur Steuerung des Roboters (ohne Fall C) könnte folgendermaßen aussehen:

// Pseudocode für einen 2-Stufen-Kantenfolger

wertKante = 600 // Wert muss angepasst werden

wiederhole dauerhaft
wertIr = messenIrSensor()
wenn (wertIr > wertKante) // Fall A
fahrenLinks()

sonst wenn (wertIr <= wertKante) // Fall B
fahrenRechts()

Kalibrierung

Bleibt die Frage, wie der Schwellert für die Linienkante ermittelt wird, der Roboter also kalibriert werden kann. Der einfachste, wenn auch nicht genaueste Weg wäre mit Hilfe der seriellen Schnittstelle den Maximalwert und den Minimalwert des reflektieren IR Lichts für die Linie bzw. die Fläche daneben zu bestimmen. Der Mittelwert aus beiden Werten sollte der Linienkante entsprechen und kann dann als Konstante in das Programm eingefügt werden.

Pseudocode zum Kalibrieren

Ein besserer Ansatz ist das automatische Kalibrieren des Bodensensors. Hierfür dreht sich der Roboter auf der Stelle über der Linie und ermittelt automatisch den maximalen und den minimalen Messwert.

// Psedocode zum Kalibrieren des Bodensensors

minWert = 1023 // Initialisieren der minimalen und maximalen Werte
maxWert = 0 // des Bodensensors. Werden später überschrieben.

dreheLinks() // Motoren zum Linksdrehen aktivieren
wiederhole 100 mal
wertIr = messenIrSensor() // reflektiertes IR Licht messen
wenn (wertIr < minWert) // aktueller IR-Wert kleiner, als `minWert`
minWert = wertIr // `minWert` mit aktuellem IR Wert überschreiben
wenn (wertIr > maxWert) // aktueller IR-Wert größer, als `maxWert``
maxWert = wertIr // `maxWert` mit aktuellem IR Wert überschreiben

dreheRechts() // zurückdrehen und weiter messen
wiederhole 200 mal
wertIr = messenIrSensor()
wenn (wertIr < minWert)
minWert = wertIr
wenn (wertIr > maxWert)
maxWert = wertIr
caution

Der Kanten-Algorithmus funktioniert am besten, wenn der Roboter langsam fährt!

Der vorgestellte 3-Stufen-Regler führt in der Regel zu einem sehr unruhigen, wackligen Fahrverhalten. Damit der Roboter geschmeidiger, mit weniger Zick-Zack-Bewegungen der Linie folgt, lohnt es sich den P-Regler zum Linenfolgen zu verstehen.

Aufgaben
  1. Programmieren Sie den einfachen Kanten-Algorithmus. Passen Sie die Werte der Linienkante an und schreiben Sie geeignete Methoden fahreLinks() und fahreRechts(). Welchen Einfluss hat der minimale Kurvenradius der zu folgenden Linie auf die Funktionen fahreLinks() und fahreRechts().

  2. Schreiben Sie eine Kalibrierungsfunktion, welche (auf Knopfdruck) den Sensorwert für die Linienkante automatisch ermittelt. Lassen Sie hierfür den Roboter in beide Richtungen automatisch über die Linie drehen und den Maximal- und Minimalwert des reflektierten Lichtes bestimmen. Bestimmen Sie den Sollwert der Linienkante aus dem ermittelten Maximal- und Minimalwert.

  3. Erweitern Sie den Algorithmus um den Fall C: fahreGeradeaus().

    *Hinweis: Legen Sie einen geeigneten Wertebereich um den Sensorwert der Linienkante fest, bei dem der Roboter geradeaus fahren soll. Nutzen Sie hierfür die Variable wertToleranz.

  4. Schreiben Sie ein neues Programm, welches den Kanten-Algorithmus um zwei weitere Stufen (halblinks, halbrechts) erweitert, so dass Sie insgesamt 5 Fälle unterscheiden können. Geben Sie für jeden Fall einen Toleranzbereich und die notwendige Fahrtrichtung an. Die Bereiche sollten relativ zum Minimal- bzw. Maximalwert des IR-Sensors bestimmt werden:

    • 0% - 20% : links
    • 21% - 40% : halblinks
    • 41% - 60% : geradeaus
    • 61% - 80% : halbrechts
    • 81% - 100% : rechts

    Geben Sie für die Bereiche keine Werte vor, sondern berechnen Sie diese aus den automatischen Kalibrierungswerten des Sensors (siehe Aufgabe 2).