NXT Linienfolger mit Richtungssteuerung

Stefan Bracher

Es gibt viele Möglichkeiten einen NXTRoboter dazu zu bringen, einer Linie zu folgen. In diesem Bericht soll erklärt werden, wie man dies über die „Richtungs-Option“ des Motor Blocks in Lego's NXT G-Code erreichen kann.

NXT Linienfolger mit Richtungssteuerung

Video

Die Steuerung des Linienfolgers

Die wohl bekannteste Variante zur Steuerung des Linienfolgers ist das Programm im Lego Mindstorms Tutorial. Bei dieser „Bang-Bang“ Steuerung dreht der Roboter nach Rechts wenn er auf einem schwarzen Untergrund (der Linie) steht und nach Links wenn er auf einem weissen Untergrund steht. Das Resultat ist ein Roboter der, wie ein Betrunkener, der Linie entlang torkelt.

NXT-Code

Eine bessere Lösung ist die früher beschriebene Fuzzy Logik -variante. Für Kinder ist diese allerdings nur schwer zu verstehen.

Eine einfachere Lösung ist, die Richtungs-Option des NXT Motor-Blocks zu verwenden. Bekommt der Block einen Input mit dem Wert Null, so fährt der Roboter geradeaus. Für positive Werte (0-100) dreht der Roboter in eine Richtung, für negative Werte (0-100) in die andere Richtung. Die Idee ist nun, den Ausgangswert des Lichtsensors (0-100) zu verwenden um die Richtung zu steuern. Wenn sich der Sensor gerade auf der Grenze der Linie befindet, soll der Roboter geradeaus fahren. Wir müssen also den Wert, den der Sensor auf dieser Grenze liest, von dem Wert zur Richtungssteuerung abziehen.

Meistens ist der Unterschied zwischen den Sensorwerten von Schwarz und Weiss relativ klein. Um ausreichend kleine Kurvenradien erzeugen zu können, muss der Steuerungswert nach der Subtraktion verstärkt werden.

Der Roboter

Verschiedene Roboter können mit diesem Programm benützt werden. Voraussetzung ist, dass jedes Rad einen eigenen Motor besitzt und dass der Lichtsensor vor dem Roboter, zwischen den Rädern, etwa 2cm über dem Boden montiert ist. Im Video wurde der „einfache Hello World NXT Roboter” verwendet.

Um das Programm in NXT-G Code umzusetzen, werden nur 5 verschiedene Kontrollblöcke benötigt:

  1. Eine Endlosschleife, damit der Roboter für immer und Ewig der Linie folgt.
  2. In der Schleife brauchen wir einen „Sensor Block“ zwei Mathematik-Blöcke und einen Motor-Block. Die Mathematik-Blöcke befinden sich in erweiterten Menü der Minstorms Software.
  3. Für den Sensor-Block, wähle „Lichtsensor – Reflektiertes Licht“ und wähle den richtigen Port (an welchen der Sensor angeschlossen ist).
  4. Im ersten Mathematik-Block, wähle „Subtraktion“. Um die Ein- und Ausgänge der Blöcke sichtbar zu machen, muss man auf den unteren Rand der Blöcke klicken. Verbinde den Ausgang des Sensor-Blocks mit dem Eingang „A“ des Mathematik-Blockes. Im Feld „B“, muss dann der Wert, den man abziehen will, eingegeben werden. Es ist ein experimenteller Wert der zwischen den Werten für Weiss und Schwarz liegen sollte. (Normalerweise um 40*).
  5. Verbinde nun den Ausgang des ersten Mathematik-Blockes mit Eingang „A“ des Zweiten. Wähle „Multiplikation“ und gebe einen Verstärkungsfaktor im Feld „B“ ein. Auch dieser Wert muss experimentell ermittelt werden. Er liegt wahrscheinlich zwischen 2 und 4.
  6. Verbinde nun den Ausgang des zweiten Mathematik-Blockes mit dem Eingang zur Richtungssteuerung des Motor-Blockes (Das „Steuerrad“). Stelle sicher, dass die richtigen Ports für die Motoren ausgewählt sind. Für die Geschwindigkeit: Mittlere Werte funktionieren am besten. Starte mit 50% und erhöhe den Wert Schritt für Schritt.

* Um den Wert für „Auf der Kannte der Linie“ zu ermitteln, sollte man folgendes tun: 1. Stelle den Roboter auf den hellen Untergrund und notiere den Sensorwert für „Weiss“ (Benutze die „View“ Funktion des NXT). 2. Stelle den Roboter auf die Linie, so dass sich der Sensor in über der Mitte der Linie befindet und notiere den Wert für „Schwarz“. Der Durchschnittswert („Weiss“+“Schwarz“)/2 ist nun der Wert für das Feld B des ersten Mathematik-Blockes.