LBotics.at

Wenn ein Roboter dem Verlauf einer Linie folgen soll, so muss dieser über einen nach unten gerichteten Sensor verfügen, der Informationen über den befahrenen Untergrund liefert. Dabei kann es sich um Farbinformationen, um Graustufen oder um reine schwarz/weiß-Informationen handeln.

Beim Folgen einer schwarzen Linie auf einem weißen Untergrund bietet es sich an, den Farb/Licht- Sensor als Licht-Sensor zu verwenden. In diesem Modus liefert dieser Werte zwischen 0% und 100% zurück, was der Intensität des reflektierten Lichts entspricht.

Somit kann nicht nur die weiße Oberfläche von der schwarzen Linie unterschieden werden, sondern man erhält auch Werte dazwischen die angeben, wie weit sich der Sensor über der schwarzen Linie bzw. der weißen Fläche befindet.

Soll der Roboter nun 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 ermittelt 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ß.

Steht 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.

Programmierbeispiel - Folgen einer Linie mit einem Sensor und einem Schwellenwert

Im folgenden Beispiel werden ausgehend von einem Schwellenwert (die Intensität des reflektieren Lichts, wenn sich der Sensor genau mittig auf der Grenze zwischen schwarz und weiß befindet) die Geschwindigkeiten der Motoren so festgelegt, dass der Roboter entweder eine Links- oder eine Rechtskurve fährt.

Optimierung bei realen Bedingungen und einem vorgegebenen Streckenverlauf:

  • experimentelle Bestimmung der Schwelle basierend auf den tatsächlichen Lichtverhältnissen
  • Anpassung der Motorgeschwindigkeiten und der Differenz zwischen beiden an den Kurvenverlauf
#include "evclibrary.h"
int main()
{
// 1. Konfiguration
SET_IN(IN_1,IN_EV3_LIGHT);
SET_OUT(OUT_A,OUT_MOTOR);
SET_OUT(OUT_B,OUT_MOTOR);
// 2. Initialisieren des Brick
EVC_INIT();
// 3. Programm - Roboter
int Wert = 0;
while(NOTEXITBUTTON)
{
Wert = READ_IN(IN_1);
LCD_DRAW_INT(2,2,Wert);
if(Wert<50)
{
WRITE_OUT(OUT_A, MOTOR_POWER, 40);
WRITE_OUT(OUT_B, MOTOR_POWER, 20);
}
else
{
WRITE_OUT(OUT_A, MOTOR_POWER, 20);
WRITE_OUT(OUT_B, MOTOR_POWER, 40);
}
}
// 4. Programmende - Freigeben der Hardwarezugriffe
EVC_CLOSE();
return 0;
}
Erklärungen zu diesem Programmbeispiel
Zeile 14: Wert = READ_IN(IN_1);

Einlesen des aktuellen Werts des Licht-Sensors und Ablegen in der Variable Wert.

Zeile 16-25: if(Wert<50) {...} else {...}

Befindet sich der Sensor zu einem größeren Teil über der schwarzen Linie (Intensität < 50) wird die Geschwindigkeit der beiden Motoren so gesetzt, dass dieser in der entgegengesetzten Richtung auf die weiße Fläche fährt, aus der er auf die Linie gefahren ist.

Ist die gemessene Intensität größer oder gleich 50, dann befindet sich der Sensor mehr über der weißen Fläche und die beiden Motoren werden so angesteuert, dass der Roboter in Richtung der schwarzen Linie fährt.