LBotics.at

In der Standard-Konfiguration ist ein mBot2 Roboter mit einem Quad RGB Sensor ausgestattet. In diesem befinden sich vier einzelne Sensoren, die reflektiertes Licht analysieren können. Dabei ist es nicht nur möglich unterschiedliche Intensitäten des reflektierten Lichts zu bestimmen, diese Sensoren können auch unterschiedliche Farben erkennen. Die Funktionen dazu werden im Modul mbuild bereitgestellt.

In der folgenden Abbildung (Ansicht von oben) ist die Nummerierung der vier Einzelsensoren zu sehen. Diese beginnt rechts mit der Zahl 1 und endet beim linken Sensor mit 4.

Der Quad RGB Sensor kann eingesetzt werden um einer Linie zu folgen oder bunte Markierungen unterhalb des Roboters zu erkennen. Speziell zum Fahren entlang einer Linie eigenen sich die vier Einzelsensoren sehr gut, um die genaue Position des Roboters über der Linie zu bestimmen und gegebenenfalls Korrekturen vorzunehmen, sollte sich der Roboter zu sehr von der Linie wegbewegen.

Bestimmen von Farben

Das Ermitteln der acht Standardfarben (rot, grün, blau, gelb, cyan, magenta, weiß und schwarz) ist im Modul mbulid implementiert und geschieht mit der Funktion mbuild.quad_rgb_sensor.get_color_sta(port). Dies funktioniert grundsätzlich sehr gut, die Farben müssen aber recht genau dem Farbton und der Intensität entsprechen, wie diese von den Entwicklern des mbuild-Moduls verwendet wurden - rot ist nicht gleich rot!

In der folgenden Abbildung ist der Unterschied zwischen den Farben der Original-Bahn - die beim mBot2 Standard-Set mit dabei ist- und einem Farbstreifen, der mit einem Laserdrucker ausgedruckt wurde, gut zu erkennen. Die Farben der unteren Zeile werden großteils nicht richtig vom Quad RGB Sensor bzw. der weiterverarbeitenden Software im mbulid-Modul erkannt. Die Farben auf der Original-Bahn sind um einiges dunkler, bei der Darstellung in der Abbildung handet es sich um ein Originalfoto! Einen großen Unterschied macht es auch, ob die Oberfläche eines Farbbereichs stark glänzt, wie es zum Beispiel beim Ausdruck mit einem Laserdrucker der Fall ist, oder ob diese matt ist.

Bei entsprechenden Aufgabenstellungen, bei denen ein Roboter mit dem Quad RGB Sensor Farbmarkierungen erkennen soll, empfiehlt es sich, die Farben so zu wählen, dass diese gut erkannt werden können. Für komplexere Aufgabenstellungen, bei denen andere Farbwerte und diese evt. auch bei unterschiedlichen Lichtverhältnissen erkannt werden müssen, gibt es im mbulid-Modul die Funktion mbuild.quad_rgb_sensor.get_color(port). Diese gibt einen Farbcode in hexadezimaler Form (z. B. 0xf2e312) zurück, der weiter analysiert und daraus die jeweiligen Intensitäten für rot, grün und blau bestimmt werden können.

Beispiel - Anzeigen der vier Sensorwerte zur Unterscheidung schwarz-weiß

Mit dem folgenden Beispiel-Skript werden die Reflexionswerte der vier einzelnen Sensoren eingelesen. Innerhalb einer Endlosschleife wird mit der Funktion mbuild.quad_rgb_sensor.is_line(port) ermittelt, ob sich ein Sensor über einer schwarzen Linie befindet oder nicht. Ist dies der Fall, so liefert diese Funktion den Wert True zurück. In den Variablen str_s1, ..., str_s4 wird je nach Rückgabewert der Funktion der String "Yes " oder "No  " abgelegt.

Sind alle vier Sensorwerte eingelesen, wird ein String für die Ausgabe zusammengestellt, mit dem die vier Informationen am Display genau in der gleichen Reichenfolge angezeigt werden, wie die einzelnen Sensoren am Quad RGB Sensor angeordnet sind. Zu beachten ist, dass der rechte Sensor (von oben in Fahrtrichtung betrachtet) die Nummer 1 hat und der linke Sensor die Nummer 4 (siehe Abbildung oben).

Bewegt man den Roboter über einer Linie hin und her, so kann man aufgrund der Informationen am Display gut erkennen, welcher Sensor sich gerade über der Linie befindet.

import cyberpi, mbuild

while True:

if mbuild.quad_rgb_sensor.is_line(1)==True:
str_s1 = "Yes "
else:
str_s1 = "No "
if mbuild.quad_rgb_sensor.is_line(2)==True:
str_s2 = "Yes "
else:
str_s2 = "No "
if mbuild.quad_rgb_sensor.is_line(3)==True:
str_s3 = "Yes "
else:
str_s3 = "No "
if mbuild.quad_rgb_sensor.is_line(4)==True:
str_s4 = "Yes "
else:
str_s4 = "No "

str_text = "S4 S3 S2 S1\n\n" + str_s4 + str_s3 + str_s2 + str_s1
cyberpi.display.show_label(str_text, 16, 0, 0)
Erklärungen zu diesem Skript

1: import cyberpi, mbuild

Import der beiden Module cyberpi und mbuild. Im Modul mbuild sind die Funktionen für den Quad RGB Sensor enthalten.

3: while True:

Hier wird die Endlosschleife eingeleitet, in der die Informationen der vier Einzelsensoren eingelesen und am Display angezeigt werden.

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

Mit der Funktion mbuild.quad_rgb_sensor.is_line(port) wird überprüft, ob sich der jeweilige Sensor über einer schwarzen Linie befindet. Wenn ja, liefert die Funktion den Wert True, sonst den Wert False zurück.

port: 1, 2, 3, 4 (Position des gewünschten Sensors, 1 ganz rechts, 4 ganz links)

return: True, False (True, wenn sich ein Sensor über einem schwarzen Bereich befindet, sonst False)

6: str_s1 = "Yes "

Der Variable str_s1 wird der String "Yes " zugewiesen, dieser hat nach dem Wort Yes ein Leerzeichen, damit der String insgesamt 4 Zeichen lang ist.

8: str_s1 = "No  "

Liefert die Funktion mbuild.quad_rgb_sensor.is_line(port) nicht den Wert True zurück, so wird der Variable str_s1 der Wert "No  " mit zwei Leerzeichen hinter No zugewiesen, damit auch dieser String eine Länge von vier Zeichen hat.

22: str_text = "S4  S3  S2  S1\n\n" + str_s4 + str_s3 + str_s2 + str_s1

In dieser Zeile wird ein String für die Ausgabe zusammengestellt. In der ersten Zeile sollen die Sensorbezeichnungen "S4  S3  S2  S1" stehen, nach einem Zeilenumbruch mit \n ein weiterer Zeilenumbruch damit eine Leerzeile angezeigt wird und dann hintereinander die Werte der vier Variablen s4, s3, s2 und s1

23: cyberpi.display.show_label(str_text, 16, 0, 0)

Mit der Funktion cyberpi.display.show_label(text, size, x, y) wird der Inhalt der Variable str_text am Display ausgegeben.

Beispiel - Ermitteln von Farbwerten

Im folgenden Skript wird am Display angezeigt, welche der acht Standardfarben, die von der Funktion mbuild.quad_rgb_sensor.get_color_sta(port) ermittelt werden können, von einem Sensor erkannt wird. In einer Endlosschleife werden die Farbwerte eingelesen und dann am Display untereinander angezeigt.

import cyberpi, mbuild

while True:

str_s1 = mbuild.quad_rgb_sensor.get_color_sta(1)
str_s2 = mbuild.quad_rgb_sensor.get_color_sta(2)
str_s3 = mbuild.quad_rgb_sensor.get_color_sta(3)
str_s4 = mbuild.quad_rgb_sensor.get_color_sta(4)

str_ausgabe = "Farbwerte\n\n"
str_ausgabe = str_ausgabe + "S1: " + str_s1 + "\n"
str_ausgabe = str_ausgabe + "S2: " + str_s2 + "\n"
str_ausgabe = str_ausgabe + "S3: " + str_s3 + "\n"
str_ausgabe = str_ausgabe + "S4: " + str_s4 + "\n"
cyberpi.display.show_label(str_ausgabe,16,0,0)
Erklärungen zu diesem Skript

1: import cyberpi, mbuild

Import der beiden Module cyberpi und mbuild. Im Modul mbuild sind die Funktionen für den Quad RGB Sensor enthalten.

3: while True:

Hier wird die Endlosschleife eingeleitet, in der die Informationen der vier Einzelsensoren eingelesen und am Display angezeigt werden.

5: str_s1 = mbuild.quad_rgb_sensor.get_color_sta(1)

Mit der Funktion mbuild.quad_rgb_sensor.get_color_sta(port) wird eine der möglichen acht Standardfarben ermittelt, die der jeweilige der vier Einzelsensoren erkennt. Die Farbwerte werden als Strings zurückgegeben.

port: 1, ..., 4 (Position des gewünschten Sensors, 1 ganz rechts, 4 ganz links)

return: "white", "black", "red", "green", "blue", "yellow", "cyan", "purple" (die möglichen Farben als Strings)

11: str_ausgabe = str_ausgabe + "S1: " + str_s1 + "\n"

In dieser Zeile wird der String str_ausgabe weiter zusammengestellt. Zunächst soll in dieser Zeile S1: stehen, dann der Inhalt der Variable str_s1 und zum Schluss ein Zeilenumbruch mit \n.

15: cyberpi.display.show_label(str_text, 16, 0, 0)

Mit der Funktion cyberpi.display.show_label(text, size, x, y) wird der Inhalt der Variable str_text am Display ausgegeben.

Zusammenfassung - Was wurde in diesem Abschnitt gelernt?
  • Der Quad RGB Sensor enthält vier einzelne Sensoren, die zwischen schwarz-weis unterscheiden können und mit denen man auch verschiedene Farbwerte bestimmen kann.
  • Mit der Funktion mbuild.quad_rgb_sensor.is_line(port) kann ermittelt werden, ob sich einer der vier Einzelsensoren über einer schwarzen Fläche (z. B. schwarze Linie) befindet. Diese Funktion liefert den Wert True oder False zurück.
  • Die Funktion mbuild.quad_rgb_sensor.get_color_sta(port) kann verwendet werden, um den Untergrund auf verschiedene Farbmarkierungen abzutasten. Eine der möglichen acht Farbwerte "white", "black", "red", "green", "blue", "yellow", "cyan" und "purple" wird in der Form eines Strings zurückgegeben. Um die Farben mit großer Sicherheit erkennen zu können, müssen diese recht genau den Farben entsprechen, welche die Entwickler bei der Erstellung der Auswertungssoftware verwendet haben - je dunkler, desto besser.