Objekterkennung mit CmuCam v5 (Pixy-Cam) mit Matlab/Simulink und EV3

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen

Autoren: Gesina Kira Tigger
Betreuer: Prof. Schneider


Die Aufgabe des Projekts "Objekterkennung mit CmuCam v5 (Pixy-Cam) mit Matlab/Simulink und EV3" ist einen Roboter (LEGO Mindstorms EV3) mit Hilfe eines Farbsensors (Pixy-Cam) kurz vor einem in dem Weg stehenden Gegenstandes anhalten zu lassen. Es wird in sehr vereinfachter Form versucht ein Fahrerassistenzsystem, dass eine Notfallbremsung durchführt, nachzubilden. Bearbeitet wurde das Projekt von Gesina Kira Tigger in dem Modul "Signalverarbeitende Systeme" des Masterstudiengangs "Business and Systems Engineering" unter Prof. Schneider als Betreuer.


Zunächst wird der vorgegebene Sensor mit seinen Funktionen und Übergabeparameter beschrieben. Des Weiteren folgen Ausführungen zur Signalentstehung und -vorverarbeitung, zum Analog-Digital-Umsetzer und Bussystem sowie zum Prozessor. Abschließend wird die digitale Signalverarbeitung und die Darstellung der Ergebnisse thematisiert.


Der Primärsensor

Pixy ist ein schneller Farbsensor für Robotertechnik und ähnliche Anwendungen. Der Sensor kann mit Hilfe eines Tasters angelernt werden, sodass Pixy in der Lage ist Objekte zu erkennen und ihnen zu folgen. Sie kann mehreren hundert Objekten gleichzeitig folgen und stellt nur Daten zur Verfügung, die von Interesse sind. Pixy LEGO benutzt spezifische Firmware, die die Sprache des LEGO Sensor Protokolls verwendet. Zusätzlich beinhaltet der Lieferumfang ein spezielles Kabel, um den LEGO Mindstorms Brick mit der Pixy zu verbinden (siehe Abbildung 1(Bild von Pixy mit Brick)). Des Weiteren werden Software Blöcke für die LEGO Mindstorms Programmierumgebung zur Verfügung gestellt, sodass Pixy ein Teil dieser Umgebung wird. [4]


Da der EV3 mit dem Farbsensor jedoch nicht mit der LEGO Mindstorms Programmierumgebung, sondern mit Matlab/Simulink programmiert werden soll, ist eine tiefergehende Betrachtung des Sensors notwendig.


Eigenschaften des Sensors

In der Pixy ist der Video-Bild-Sensor Omnivision OV9715 (1/4") verbaut. Dieser Sensor hat die folgenden relevanten Spezifikationen: [6]

  • Arraygröße: 1280x800
  • Energieversorgung:
    • Hauptversorgung: 1.5 VDC +- 5% (eingebauter Regler)
    • Analog: 3.0 - 3.6 V
    • I/O: 1.7 - 3.6 V
  • Leistung:
    • Aktiv: 110 mW
    • Stand-by: 50 microA
  • Ausgabeformat: 10-bit RGB-Rohdaten
  • Linsengröße: 1/4"
  • Objektiv Kopfstrahlwinkel: 0°
  • Eingangstaktfrequenz: 6-27 MHz
  • Abtastmodus: Progressiv
  • Maximale Bildübertragungsrate:
    • WXGA (1280x800): 30 fps
    • 640x400: 60 fps
  • Bildbereich: 5415 microm x 2430 microm
  • CFA: RGB Bayer


Der 1/4-Zoll-Sensor bietet Full-Frame-, Sub-Sampling- oder Fenster-10-Bit-Bilder im Roh-RGB-Format über den digitalen Video-Port. Bildqualität, Formatierung und Ausgabedatenübertragung können je nach Anwendung verändert werden. Außerdem verfügt er über erweiterte Bildverarbeitungsfunktionen, einschließlich Belichtungssteuerung, Verstärkungsregelung, Weißabgleich, Objektivkorrektur und defekte Pixelkorrektur, die über die serielle Kamera-Steuerbus-Schnittstelle (SCCB) programmierbar sind. Für die Speicherung verfügt es über einen einmal programmierbaren (OTP) Speicher. [6]


Funktionsweise des Sensors

Abbildung 2: Der in der Pixy-Cam verbaute Farbsensor [6]

In Abbildung 2 ist ein schematischer Aufbau des Innenlebens des verbauten CMOS Sensors OV9715 dargestellt. Man kann drei Hauptteile ausmachen: Den Kern und den Prozessor des Bildsensors und die Bildausgangsschnittstelle. Der Kern des Bildsensors gliedert sich wiederum in mehrere Funktionsblöcke. Am Anfang der Kette steht zunächst der Bildbereich (image array) mit einer Größe von 5415 microm x 2430 microm. Hier sind die Photodioden mit den dazugehörigen Transistoren angeordnet, um einen Photonenstrom in eine messbare Spannung umzuwandeln. Durch die Anordnung können Zeilen und Spalten definiert werden, wodurch sich einzelne Pixel ergeben. Die Informationen werden mit Hilfe eines Busnetzes zum Analog-Digital-Umwandler weitergeleitet. Diese Architektur ermöglicht es im Gegensatz zum CCD-Sensor jede Diode direkt zu adressieren und einzeln auszulesen. [10]


Physikalisch gesehen, funktioniert das wie folgt:

  • Photodiode
  • Die Photoströme werden mit Hilfe von Transimpedanzwandler (vgl. AMP in Abbildung 2) in Spannungen umgewandelt, gefiltert und verstärkt. [9]
  • Problem: Photodiode nur Intensitäten; Die lichtempfindlichen Fotozellen eines Halbleiters können lediglich Helligkeitswerte erfassen


Abbildung 3: Bayer-Filter [8]

Aus diesem Grund werden die Photodioden mit winzigen Farbfiltern in Rot, Grün oder Blau überzogen. Dabei werden in den ungeraden Zeilen in der Folge Grün-Rot und in den geraden Zeilen in der Folge Blau-Grün Filter verwendet, sodass der Filter zu 50 % aus Grün und je 25 % aus Rot und Blau besteht. Jedes einzelne Pixel liefert also nur die Informationen über die Intensität einer einzigen Farbkomponente (siehe Abbildung 3). Dieser Filter wird auch Bayer-Filter genannt. [8]

Signalvorverarbeitung

???


Analog-Digital-Umsetzer

Wie werden die analogen Signale umgesetzt? Welcher ADU kommt zum Einsatz? Welche Gründe sprechen für diesen ADU? Alternativen?


Prozessor

Durch die Betrachtung der daneben liegenden Zellen wird der Farbwert eines gesamten Pixels bestimmt. Dabei werden die verschiedenen RGB-Werte zu einem Farbton zusammengefasst.


Bussystem

Pixy for LEGO verwendet ein standardmäßiges I2C-Signal und agiert als I2C-Slave (I2C ist ein serieller Datenbus). Alle Transaktionen erfolgen über die I2C Adresse 1. Unterstützt wird dies durch einen I/O-Anschluss. Wie Abbildung 1 zeigt, ist der Pin 5 für das Taktsignal und Pin 9 für das Datensignal zuständig. Alternativ kann Pixy for Lego auch über eine UART-Schnittstelle kommunizieren. [1]


Wenn Pixy über I2C adressiert ist, wird das erste Byte Query Address genannt. Für bestimmte Arten von Abfragen werden sogenannte Optional Query Data an Pixy gesendet, um die Anfrage weiter zu beschreiben. Schließlich antwortet Pixy mit der Pixy Response. Diese besteht typischerweise aus einer bestimmten Anzahl von Bytes und hängt von der Query Address ab. Alle 16-Bit-Werte, die über I2C gesendet oder empfangen werden, werden als kleiner Endian codiert, dh das niedrigstwertige Byte wird zuerst gesendet. [1]


Die General Query ist die Abfrage, die in der Pixy LEGO Dokumentation als "Allgemeiner Modus" bekannt ist: [1]

Adresse Optionale Daten Pixys Antwort
0x50 - 6 Bytes, die den größten Block mit allen Signaturen beschreiben und den Farbblock beinhalten. Wenn keine Objekte gefunden wurden, sind alle Bytes 0.


Byte Beschreibung
0, 1 16-bit-Wert, der die Signaturen des größten Blocks beschreiben. Ein Wert von 1 bis 7 entspricht einer Signatur von 1 bis 7. Ein Wert, der größer als 7 ist, ist ein Farbcode codiert in Oktal (8 als Basis).
2 X-Wert von dem Zentrum des größten Blocks (von 0 bis 255). Ein X-Wert von 255 beschriebt die rechte Kante von Pixys Bild.
3 Y-Wert von dem Zentrum des größten Blocks (von 0 bis 199). Ein X-Wert von 199 beschriebt die untere Kante von Pixys Bild.
4 Breite des größten Blocks (von 1 bis 255). Ein Wert von 255 beschreibt die gesamte Breite von Pixys Bild.
5 Höhe des größten Blocks (von 1 bis 200). Ein Wert von 200 beschreibt die gesamte Höhe von Pixys Bild.

Die Signature Query fordert Pixy auf den größten erkannten Block der angegebenen Signatur (Query Address 0x50) auszugeben: [1]

Adresse Optionale Daten Pixys Antwort
0x51 bis 0x57 - 5 Bytes, die den größten Block mit allen Signaturen von 1 bis 7 beschreiben. Wenn keine Objekte gefunden wurden, sind alle Bytes 0.


Byte Beschreibung
0 Nummer von Blöcken, die der angegebene Signatur entsprechen.
1 X-Wert von dem Zentrum des größten Blocks (von 0 bis 255). Ein X-Wert von 255 beschriebt die rechte Kante von Pixys Bild.
2 Y-Wert von dem Zentrum des größten Blocks (von 0 bis 199). Ein X-Wert von 199 beschriebt die untere Kante von Pixys Bild.
3 Breite des größten Blocks (von 1 bis 255). Ein Wert von 255 beschreibt die gesamte Breite von Pixys Bild.
4 Höhe des größten Blocks (von 1 bis 200). Eine Ein Wert von 200 beschreibt die gesamte Höhe von Pixys Bild.


Die Color Code Query fordert Pixy auf, den größten Block, der dem vorgegebenen Farbcode entspricht, auszugeben:

Adresse Optionale Daten Pixys Antwort
0x58 16-bit Wert (2 Bytes), der den Farbcode definiert (in Octal codiert). 6 Bytes, die den größten Block, der dem Farbcode entspricht, beschreiben. Wenn keine Objekte dem Farbcode entsprechen, sind alle Bytes 0.


Byte Beschreibung
0 Nummer von Blöcken, die dem vorgegebenen Farbcode entsprechen.
1 X-Wert von dem Zentrum des größten Blocks (von 0 bis 255). Ein X-Wert von 255 beschriebt die rechte Kante von Pixys Bild.
2 Y-Wert von dem Zentrum des größten Blocks (von 0 bis 199). Ein X-Wert von 199 beschriebt die untere Kante von Pixys Bild.
3 Breite des größten Blocks (von 1 bis 255). Ein Wert von 255 beschreibt die gesamte Breite von Pixys Bild.
4 Höhe des größten Blocks (von 1 bis 200). Ein Wert von 200 beschreibt die gesamte Höhe von Pixys Bild.
5 Winkel des größten Farbblocks (von 0 bis 255). Ein Wert von 255 entspricht einem Winkel von 360 Grad.


Funktionsweise des I2C-Bussystems

I2C-Adressen der Pixy-Cam

Digitale Signalverarbeitung

Welche Verarbeitungsschritte sind notwendig? Welche Filter werden angewendet? Bestimmen Sie Auflösung, Empfindlichkeit und Messunsicherheit des Sensors.


Darstellung der Ergebnisse

Welche Fehler treten in welchem Verarbeitungsschritt auf? Stellen Sie die Messunsicherheit bzw . das Vertrauensintervall dar.

Weiterführende Links und Quellen

[1] Getz, Edward (2016): Pixy LEGO I2C Protocol. Online verfügbar unter http://cmucam.org/documents/36, zuletzt geprüft am 27.05.2017.
[2] Introduction and Background - CMUcam5 Pixy - CMUcam: Open Source Programmable Embedded Color Vision Sensors. Online verfügbar unter http://cmucam.org/projects/cmucam5/wiki/Introduction_and_Background, zuletzt geprüft am 01.06.2017.
[3] Lang, Jean-Philippe: Introduction and Background - CMUcam5 Pixy - CMUcam: Open Source Programmable Embedded Color Vision Sensors. Online verfügbar unter http://cmucam.org/projects/cmucam5/wiki/Introduction_and_Background, zuletzt geprüft am 30.05.2017.
[4] LeGrand, Rich (2015): Pixy for LEGO Mindstorms. Online verfügbar unter http://charmedlabs.com/default/pixy-for-lego-mindstorms/, zuletzt aktualisiert am 27.05.2017, zuletzt geprüft am 27.05.2017.
[5] The MathWorks, Inc. (2017): MATLAB Support for LEGO MINDSTORMS EV3 - Video - MATLAB. Online verfügbar unter https://de.mathworks.com/videos/matlab-support-for-lego-mindstorms-ev3-95208.html, zuletzt aktualisiert am 30.05.2017, zuletzt geprüft am 30.05.2017.
[6] Omnivision (2012): ... CMOS Sensor
[7] CmuCam5 Übersicht
[8] Wikipedia: Bayer-Sensor. Online verfügbar unter https://en.wikipedia.org/wiki/Bayer_filter, zuletzt geprüft am 16.06.2017
[9] Wikipedia: Farbsensor. Online verfügbar unter https://de.wikipedia.org/wiki/Farbsensor, zuletzt geprüft am 16.06.2017
[10] Göhring, Daniel (2002): Digitalkameratechnologien. Online verfügbar unter http://www.drgoehring.de/uni/papers/CCD-CMOS_08122002.pdf, zuletzt geprüft am 17.06.2017
[11] Wikipedia: Active Pixel Sensor. Online verfügbar unter https://de.wikipedia.org/wiki/Active_Pixel_Sensor, zuletzt geprüft am 17.06.2017



→ zurück zum Hauptartikel: Signalverarbeitende Systeme SoSe2017