LBotics.at

Soll ein Roboter einer schwarzen Linie folgen, so muss dieser mit Hilfe eines Sensors Informationen über den weiteren Linienverlauf erhalten. Dies kann aber nicht dadurch erreicht werden, dass sich der Sensor genau über der schwarzen Linie befindet. Das, was mit dem Sensor dedektiert werden kann, ist aber der Übergang von schwarz zu weiß, da sich die Werte in diesem Bereich ändern. Aus diesen Änderungen kann auf den Verlauf der Linie geschlossen und die Bewegung des Roboters gesteuert werden. Ein Roboter fährt genau genommen also nicht entlang einer schwarzen Linie, sondern entlang der Grenze zwischen der schwarzen Linie und der weißen Fläche.

Aus den aktuellen Sensor-Informationen wird die Fahrtrichtung des Roboters bestimmt: Liefert der Sensor die Information, dass sich dieser über der weißen Fläche befindet, muss sich der Roboter drehen und in Richtung der schwarzen Linie fahren. Sobald sich der Sensor über der schwarzen Linie befindet, muss sich der Roboter in die Gegenrichtung drehen und wieder von der Linie herunter zur weißen Fläche hin fahren.

Letztendlich bewegt sich der Sensor (und somit auch der Roboter) auf einer Zick-Zack-Bahn bzw. fährt entlang von Schlangenlinien auf der Grenze zwischen schwarz und weiß. In der folgenden Abbildung wird der Sensor 2 verwendet um festzustellen, ob sich dieser über der schwarzen Linie befindet oder nicht. Die gepunktete Linie zeigt die Bahn dieses Sensors zwischen schwarz und weiß.

Achtung: Verwendet man nur einen Sensor oder steht überhaupt nur ein Sensor zur Verfügung, so muss es eine definierte Startrichtung geben, damit der Roboter beim ersten Mal in Richtung der Linie fährt und in der Folge immer auf der gleichen Seite der Linie zwischen schwarz und weiß hin- und herpendelt.

Beispiel - Folgen einer Linie mit einem Sensor und schwarz-weiß Erkennung

Im folgenden Beispiel wird mit der Funktion mbuild.quad_rgb_sensor.is_line(2) bestimmt, ob sich Sensor 2 über der schwarzen Linie befindet, oder nicht. Der Roboter muss wie in der Abbildung so auf die Linie gestellt werden, dass sich der Sensor auf der Linie befindet. Ist dies der Fall, so muss sich der rechte Motor schneller drehen als der linke, damit sich der Roboter nach links dreht und der Sensor in Richtung der weißen Fläche bewegt wird.

"Sieht" der Sensor dann weiß - die Funktion mbuild.quad_rgb_sensor.is_line(2) liefert also nicht den Wert True zurück - so muss sich der linke Motor schneller drehen, als der rechte. Der Roboter dreht sich in Richtung der Linie und der Sensor gelangt wieder über die schwarze Fläche der Linie. Der Vorgang beginnt von vorne.

Für einen vorgegebenen Streckenverlauf müssen im folgenden Code einige Optimierungen unter realen Bedingungen vorgenommen werden:

  • Anpassung der einzelnen Motorgeschwindigkeiten
  • Anpassung der Differenz zwischen beiden Motorgeschwindigkeiten an den Kurvenverlauf
import cyberpi, mbot2, mbuild

while True:

if mbuild.quad_rgb_sensor.is_line(2)==True:
cyberpi.display.show_label("BLACK",32,10,50)
mbot2.EM_set_speed(20,1)
mbot2.EM_set_speed(-40,2)
else:
cyberpi.display.show_label("WHITE",32,10,50)
mbot2.EM_set_speed(40,1)
mbot2.EM_set_speed(-20,2)
Erklärungen zu diesem Skript

1: import cyberpi, mbot2, mbuild

Import der Module cyberpi, mbot2 (Motoren) und mbuild (Quad RGB Sensor)

5: if mbuild.quad_rgb_sensor.is_line(2)==True:

In dieser Zeile wird überprüft, ob sich der Sensor 2 über der schwarzen Linie befindet. Wenn ja, werden die folgenden drei Code-Zeilen ausgeführt, wenn nicht, dann die drei Code-Zeilen, die nach else: stehen.

6: cyberpi.display.show_label("BLACK",32,10,50)

Befindet sich Sensor 2 über der schwarzen Linie, wird das Wort BLACK am Display angezeigt.

7: mbot2.EM_set_speed(20,1)
8: mbot2.EM_set_speed(-40,2)

Der linke Motor dreht sich mit der Geschwindigkeit 20 RPM und der rechte Motor dreht sich mit der Geschwindigkeit 40 RMP - also um 20 RMP schneller. Der Roboter fährt eine Linkskurve und der Sensor bewegt sich von der Linie in Richtung der weißen Fläche.