LBotics.at

Die mBlock Smart Camera ist eine intelligente Kamera des mBlock-Ökosystems. Die Kamera ist mit Funktionen wie Bilderkennung und -verarbeitung ausgestattet und kann in verschiedenen Projekten verwendet werden, um visuelle Daten zu erfassen und darauf basierende Aktionen auszuführen. Bei der Smart Camera handelt es sich nicht nur um ein reines Kamera-Modul, diese verfügt über eine integrierte Hardware- und Softwarelösung mit Algorithmen zur Bilderkennung, mit denen sie Objekte, Farben, Formen und andere visuelle Merkmale erkennen kann.

Damit kann dieses Kamerasystem auch für Tracking und Bewegungserkennung eingesetzt werden, ohne sich mit der komplexen Materie von digitaler Bildverarbeitung auseinandersetzen zu müssen. Die Kamera kann Objekte verfolgen und deren Bewegungen erfassen. Dies ermöglicht die Erstellung von interaktiven Robotikprojekten, bei denen Roboter auf Bewegungen oder bestimmte Objekte reagieren können.

Anschluss der Smart Camera an einen mBot2 Roboter

Die mBlock Smart Camera verfügt über zwei Buchsen des mBot2 Bus-Systems, mit denen sie, wie die anderen Sensoren mit 4-poligen Kabeln angeschlossen wird. Dabei ist es nicht von Bedeutung, an welcher Stelle sich die Smart Camera innerhalb dieses Bus-Systems befindet. Je nach Aufbau des Roboters können die Kabel wie gewünscht verlegt und die Sensoren in beliebiger Reichenfolge hintereinander angeschlossen werden.

Eine zusätzliche Stromversorgung mit dem Akku, der im Set der Smart Camera enthalten ist, wird beim mBot2 Roboter nicht benötigt. Dieser Akku ist nur bei der Verwendung der Smart Camera mit anderen System nötig.

Die Smart Camera im Detail

Das eigentliche Kameramodul befindet sich am oberen Rand der Smart Camera.

Links und rechts davon gibt es zwei sehr helle LED-Lichter, die als eine Art "Scheinwerfer" eingesetzt werden können, wenn das Umgebungslicht bei machen Anwendungsfällen so gering ist, dass die Auswertung der Bilddaten nicht mehr gut genug funktioniert. Wenn diese LED-Beleuchtung verwendet wird, ist unbedingt zu beachten, dass diese sowohl beim Einlernen von Farben, wie dann auch beim Identifizieren von Farben eingeschaltet ist.

Auf der rechten Seite befindet sich der Learn-Button, mit dem unterschiedliche Farben oder visuelle Objekte eingelernt werden können.

In der unteren Mitte befindet sich das Indicator-Light der Smart Camera. Dieses dient zur Hilfe beim Einlernen einer Farbe und zeigt auch an, wenn eine eingelernte Farbe erkannt wurde.

Mit den beiden Befestigungslöchern am unteren Rand ist es möglich die Smart Camera zu montieren.

Das Koordinatensystem der Smart Camera

Die Smart Camera nimmt Bilder mit einer Größe von 320 x 240 Pixel auf. Blickt man von hinten auf die Smart Camera, so wird dem Bild intern ein Koordinatensystem - wie in der folgenden Abbildung gezeigt - zugeordnet. Der linke obere Eckpunkt hat die Koorinaten (0, 0), die Entfernung eines Bildpunkts vom linken Rand wird in x-Richtung, die Entfernung vom oberen Rand in y-Richtung gemessen.

Ein Verständnis dieses Koordinatensystems ist wichtig, wenn man in der Folge Positionen von farbigen Objekten in einem Bild auswerten und damit Aktionen eines Roboters steuern möchte!

Einlernen von Farben

Die Smart Camera kann kräftig leuchtende Farben einlernen und danach Farbbereiche der gelernten Farben identifizieren, wie auch deren Koordinaten und die Größe dieser zurückgeben.

Zum Einlernen einer Farbe ist wie folgt vorzugehen:

  1. Den Learn-Button so lange gedrückt halten, bis die Farbe des Indicator-Lights rot (Einlernen von Color 1) wird, dann den Button loslassen.
  2. Platzieren des Objekts mit der einzulernenden Farbe vor der Kamera.
  3. Beobachten der Anzeige des Indicator-Lights und das Objekt mit der einzulernenden Farbe langsam bewegen, bis die Farbe des Indicator-Lights mit der Farbe des Objekts übereinstimmt.
  4. Nun den Learn-Button kurz drücken, die eingelernte Farbe wird gespeichert.

Wird jetzt das Objekt mit der eingelernten Farbe vor die Smart Camera gehalten, so zeigt das Indicator-Light die Farbe des erkannten Objekts an.

Möchte man weitere Farben einlernen, so ist dabei wie oben beschrieben vorzugehen, allerdings ist im Schritt 1 der Learn-Button so lange zu halten, bis die Farben (orange, gelb, ...) erscheinen. Damit wählt man das Einlernen von Color 2, Color 3, ... aus. Mit dem beschriebenen Einlernvorgang können bis zu 7 unterschiedliche Farben eingelernt werden.

Aktion Learn-Button
Beschreibung
Drücken und halten des Learn-Button bis das Indicator Light rot leuchtet bereit zum Einlernen von Color 1
Drücken und halten des Learn-Button bis das Indicator Light orange leuchtet bereit zum Einlernen von Color 2
Drücken und halten des Learn-Button bis das Indicator Light gelb leuchtet bereit zum Einlernen von Color 3
Drücken und halten des Learn-Button bis das Indicator Light grün leuchtet bereit zum Einlernen von Color 4
Drücken und halten des Learn-Button bis das Indicator Light türkis leuchtet bereit zum Einlernen von Color 5
Drücken und halten des Learn-Button bis das Indicator Light blau leuchtet bereit zum Einlernen von Color 6
Drücken und halten des Learn-Button bis das Indicator Light violett leuchtet bereit zum Einlernen von Color 7

 

Beispiel - Ein- und Ausschalten der LED-Lichter

Im folgenden Code wird gezeigt, wie man die LED-Beleuchtung der Smart Camera aus- und einschaltet. Dieses Skript kann z. B. verwendet werden, wenn man die LED-Lichter beim Einlernen von Farben verwenden möchte.

import cyberpi, mbuild

cyberpi.display.show_label("Lights OFF", 16, 0, 0)

while True:
if cyberpi.controller.is_press("a")==True:
mbuild.smart_camera.open_light()
cyberpi.display.show_label("Lights ON", 16, 0, 0)
if cyberpi.controller.is_press("b")==True:
mbuild.smart_camera.close_light()
cyberpi.display.show_label("Lights OFF", 16, 0, 0)
Erklärungen zu diesem Programmbeispiel

Zeile 1: import cyberpi, mbuild

Mit dem Modul mbuild wird das Objekt smart_camera zur Verfügung gestellt, mit dem man auf die Funktionen der Smart Camera zugreift.

Zeile 7: mbuild.smart_camera.open_light()

Mit der Funktion mbuild.smart_camera.open_light() werden die beiden LEDs links und rechts neben dem Kamera-Modul eingeschaltet.

Zeile 10: mbuild.smart_camera.close_light()

Mit der Funktion mbuild.smart_camera.close_light() werden die beiden LEDs links und rechts neben dem Kamera-Modul ausgeschaltet.

Beispiel - Erkennen einer eingelernten Farbe

Mit dem folgenden Code wird am Display angezeigt, ob eine zuvor eingelernte Farbe von der Smart Camera erkannt wurde. Zu Beginn des Skripts muss die Smart Camera in den Modus versetzt werden, mit dem sie eingelernte Farben im aufgenommenen Bild sucht. Dies geschieht mit der Funktion mbuild.smart_camera.set_mode("color")

import cyberpi, mbuild

mbuild.smart_camera.set_mode("color")

while True:
if mbuild.smart_camera.detect_sign(1)==True:
cyberpi.display.show_label("Color 1\ndetected: YES", 16, 0, 0)
else:
cyberpi.display.show_label("Color 1\ndetected: NO", 16, 0, 0)
Erklärungen zu diesem Programmbeispiel

Zeile 1: import cyberpi, mbuild

Mit dem Modul mbuild wird das Objekt smart_camera zur Verfügung gestellt, mit dem man auf die Funktionen der Smart Camera zugreift.

Zeile 3: mbuild.smart_camera.set_mode("color")

Bevor man mit der Smart Camera Farbbereiche von eingelernten Farben dedektieren kann, muss diese durch einen Aufruf der Funktion mbuild.smart_camera.set_mode("color") in diesen Modus versetzt werden.

Zeile 6: if mbuild.smart_camera.detect_sign(1)==True:

Um Abzufragen, ob eine eingelernte Farbe erkannt wurde, muss die Funktion mbuild.smart_camera.detect_sign(color) aufgerufen werden. Mit dem Parameter color gibt man an, welche der eingelernten Farben (siehe Tabelle oben) man erkennen möchte.

color (int): 1, 2, 3, ..., 7

return (bool): True, False

Beispiel - Erkennen einer eingelernten Farbe in einem bestimmten Sektor

Erkennt die Smart Camera eine der eingelernten Farben, so kann diese auch den Bereich zurückmelden, in dem sie diese Farbe erkannt hat. Dazu ist das aufgenommene Bild in die fünf Bereiche wie in der Darstellung unterteilt. Diese werden mit up, down, left, right und middle bezeichnet.

Diese Informationen können z. B. dafür verwendet werden, um die Fahrtrichtung eines Roboters zu steuern, wenn dieser einem färbigen Objekt folgen soll. Wird die entsprechende Farbe im Bereich middle dedectiert, so lässt man den Roboter gerade aus fahren. Erkennt die Smart Camera die Farbe im linken oder rechten Bereich, so können passende Korrekturen der Fahrtrichtung vorgenommen werden.

In diesem Codebeispiel wird der Bereich identifiziert, in dem eine eingelernte Farbe erkannt wird und dies wird am Display sinngemäß an den jeweiligen Positionen angezeigt.

import cyberpi, mbuild

mbuild.smart_camera.set_mode("color")

while True:
if mbuild.smart_camera.detect_sign_location(1,"up")==True:
cyberpi.display.show_label("UP", 16, 54, 5)
elif mbuild.smart_camera.detect_sign_location(1,"down")==True:
cyberpi.display.show_label("DOWN", 16, 48, 100)
elif mbuild.smart_camera.detect_sign_location(1,"left")==True:
cyberpi.display.show_label("LEFT", 16, 6, 52)
elif mbuild.smart_camera.detect_sign_location(1,"right")==True:
cyberpi.display.show_label("RIGHT", 16, 80, 52)
elif mbuild.smart_camera.detect_sign_location(1,"middle")==True:
cyberpi.display.show_label("MIDDLE", 16, 38, 52)
else:
cyberpi.display.clear()
Erklärungen zu diesem Programmbeispiel

Zeile 1: import cyberpi, mbuild

Mit dem Modul mbuild wird das Objekt smart_camera zur Verfügung gestellt, mit dem man auf die Funktionen der Smart Camera zugreift.

Zeile 3: mbuild.smart_camera.set_mode("color")

Bevor man mit der Smart Camera Farbbereiche von eingelernten Farben dedektieren kann, muss diese durch einen Aufruf der Funktion mbuild.smart_camera.set_mode("color") in diesen Modus versetzt werden.

Zeile 6: if mbuild.smart_camera.detect_sign_location(1,"up")==True

Mit der Funktion mbuild.smart_camera.detect_sign_location(color, position) kann ermittelt werden, ob sich ein Objekt mit der eingelernten Farbe Color 1 im oberen Abschnitt befindet. Wird ein solcher Farbbereich gefunden, gibt die Funktion den Wert True zurück.

color (int): 1, 2, ..., 7

position (string): "up", "down", "left", "right", "middle"

return (bool): True, False

Beispiel - Ermitteln der genauen Position eines Farbbereichs

Mit der Smart Camera ist es auch möglich, die genaue Position und die Größe eines Bereichs einer eingelernten Farbe im aufgenommenen Bild zu bestimmen. Dabei werden die Koordinaten des linken, oberen Eckpunkts, wie auch die Breite und die Höhe des Rechtecks zurückgegeben, das den Farbbereich umspannt.

In diesem Codebeispiel werden die Koordinaten des Eckpunkts, wie auch die Breite und Höhe eines Rechtecks am Display angezeigt, das einen Farbbereich einer eingelernten Farbe umspannt, wenn diese erkannt wird. Wird kein Objekt mit der gewünschten Farbe erkannt, so sind alle vier Werte 0. Damit könnte man bei der Steuerung eines Roboters z. B. abfragen, ob es überhaupt ein Objekt mit der jeweiligen Farbe im Sichtbereich der Kamera gibt.

import cyberpi, mbuild

mbuild.smart_camera.set_mode("color")

while True:
int_x = mbuild.smart_camera.get_sign_x(1)
int_y = mbuild.smart_camera.get_sign_y(1)
int_w = mbuild.smart_camera.get_sign_wide(1)
int_h = mbuild.smart_camera.get_sign_hight(1)

str_Ausgabe = "OBJECT Color 1\n"
str_Ausgabe = str_Ausgabe + "x: " + str(int_x) + "\n"
str_Ausgabe = str_Ausgabe + "y: " + str(int_y) + "\n"
str_Ausgabe = str_Ausgabe + "w: " + str(int_w) + "\n"
str_Ausgabe = str_Ausgabe + "h: " + str(int_h) + "\n"

cyberpi.display.show_label(str_Ausgabe, 16, 0, 0)
Erklärungen zu diesem Programmbeispiel

Zeile 1: import cyberpi, mbuild

Mit dem Modul mbuild wird das Objekt smart_camera zur Verfügung gestellt, mit dem man auf die Funktionen der Smart Camera zugreift.

Zeile 3: mbuild.smart_camera.set_mode("color")

Bevor man mit der Smart Camera Farbbereiche von eingelernten Farben dedektieren kann, muss diese durch einen Aufruf der Funktion mbuild.smart_camera.set_mode("color") in diesen Modus versetzt werden.

Zeile 6: int_x = mbuild.smart_camera.get_sign_x(1)

Mit der Funktion mbuild.smart_camera.get_sign_x(1) wird die x-Koordinate des umspannenden Rechtecks eines dedektierten Farbbereichs zurückgeliefert, wenn ein solcher mit der eingelernten Farbe Color 1 erkannt wurde. Dieser Wert wird in der Variable int_x abgelegt.

color (int): 1, 2, ..., 7

return (int): 0, ..., 319

Zeile 7: int_y = mbuild.smart_camera.get_sign_y(1)

Mit der Funktion mbuild.smart_camera.get_sign_y(1) wird die x-Koordinate des umspannenden Rechtecks eines dedektierten Farbbereichs zurückgeliefert, wenn ein solcher mit der eingelernten Farbe Color 1 erkannt wurde. Dieser Wert wird in der Variable int_y abgelegt.

color (int): 1, 2, ..., 7

return (int): 0, ..., 319

Zeile 8: int_w = mbuild.smart_camera.get_sign_wide(1)

Mit der Funktion mbuild.smart_camera.get_sign_wide(1) wird die Breite des umspannenden Rechtecks eines dedektierten Farbbereichs zurückgeliefert, wenn ein solcher mit der eingelernten Farbe Color 1 erkannt wurde. Dieser Wert wird in der Variable int_w abgelegt.

color (int): 1, 2, ..., 7

return (int): 0, ..., 319

Zeile 9: int_h = mbuild.smart_camera.get_sign_hight(1)

Mit der Funktion mbuild.smart_camera.get_sign_hight(1) wird die Höhe des umspannenden Rechtecks eines dedektierten Farbbereichs zurückgeliefert, wenn ein solcher mit der eingelernten Farbe Color 1 erkannt wurde. Dieser Wert wird in der Variable int_h abgelegt.

color (int): 1, 2, ..., 7

return (int): 0, ..., 319