ALT + + Schriftgröße anpassen
ALT + / Kontrast anpassen
ALT + M Hauptnavigation
ALT + Y Socials
ALT + W Studiengang wählen
ALT + K Homenavigation
ALT + G Bildwechsel
ALT + S Übersicht
ALT + P Funktionsleiste
ALT + O Suche
ALT + N Linke Navigation
ALT + C Inhalt
ALT + Q Quicklinks
ESC Alles zurücksetzen
X
A - keyboard accessible X
A
T

Lego Mindstorms Roboter mit OpenCV Bildverarbeitung unter Android

English Abstract

We present an Android application that uses OpenCV image processing to control a Lego Mindstorms NXT robot. The Android device is the central control unit. Further, it serves as a Human Machine Interface (HMI) and receives sensor data from the robot. The communication between the robot and the android device is based on Bluetooth technology.

This combination leads to a specific low cost robot application, that uses vision control to find an object with predefined color and size. Due to the powerful OpenCV library, many other image processing tasks can also be used to control the robot.
You will find a detailled description of this project in the thesis of our former student S. Poonudurai (please refer to the download area).

1 Kurzbeschreibung

Ein preiswertes Android-Smartphone (Androidversion 2.3.3) wird als Smartkamera für einen Lego NXT-Roboter verwendet. Dabei übernimmt eine eigens dafür programmierte App sowohl die Bildverarbeitung, die Steuerung wie auch die Aufgaben der Bedienschnittstelle. Der Roboter agiert als „Slave“ (Sklave) und überträgt die Messwerte seiner eigenen Sensoren via Bluetooth an das Smartphone.

Seine Sensordaten werden für die Kollisionsvermeidung und die Interaktion mit dem Benutzer verwendet. Die Bildverarbeitung ermöglicht das Erkennen und gezielte Anfahren eines vorher eingelernten Gegenstandes im Sichtbereich des Roboters.

Bei der Beispiel-App des Videos wird nach dem Starten der App der zu verbindende Roboter ausgewählt. Danach wird eine Farbe eingelernt, die später gesucht werden soll (Menüpunkt „Robot Teach“).
Anschließend wird die vom Farbsensor des Roboters gemessene Farbe in Worten wiedergegeben. Wenn Grün erkannt wird, startet der Roboter seine Suche nach einen Gegenstand mit der vorher eingelernten Farbe.
Zuerst sucht der Roboter nach dem Zufallsprinzip den Raum ab, wobei er den Ultraschallsensor zur Kollisionsvermeidung nutzt. Während dieser Suchfahrt kann das Ergebnis der Bildverarbeitung live auf dem Smartphonedisplay verfolgt werden.
Hat der Roboter die gesuchte Gegenstandfarbe im Sichtfeld, dann fährt er auf diesen Gegenstand zu und bleibt vor kurz ihm stehen. Seinen jeweiligen Status gibt der Roboter mit vordefinierten Audiosequenzen über die Smartphonelautsprecher aus.

2 Motivation

In der Robotik werden mobile Serviceroboter immer wichtiger. Diese Systeme sind neben anderen Sensoren meistens mit einer Kamera ausgestattet. Die Bilddaten der Kamera werden hierbei mit Bildverarbeitungsalgorithmen ausgewertet, um z.B. ein menschliches Gesicht oder eine Geste zu erkennen.

Für die Bildverarbeitung sind leistungsfähige Computer nötig, die meistens im Roboter integriert sind.. Daher kann ein einfacher Roboter, der z.B. von einer Arduino µC-Platine gesteuert wird, nicht einfach nur mit einer Kamera ausgestattet werden, um Bildverarbeitungsinformationen für seine Steuerung zu nutzen. Auch ein Lego Mindstorms Roboter hat hierfür nicht ausreichend Rechenleistung an Bord.

In diesem Fall greift man auf sogenannte „Smartkameras“ zurück. Dies sind komplexe Sensoren bestehend aus einer Kamera und einem PC-ähnlichen Bildverarbeitungssystem. Solche Systeme kosten im Industriebereich mehrere Tausend Euro.
Die einzige im Hobbybereich bezahlbare Smartkamera für einen Lego NXT Roboter ist die sogenannte „CMUCam“. Adaptiert auf die Schnittstellen des Lego NXT kostet diese Smartkamera jedoch auch fast 200 € und ist zudem sehr unflexibel, was die verwendbaren Bildverarbeitungsalgorithmen angeht.

Im Studienbereich Mechatronik an der Hochschule Reutlingen wurde eine Android-App programmiert, die folgende Aufgaben erfüllt:

  • Bidirektionale Bluetoothkommunikation mit dem NXT-Roboter.

  • Bildaufnahme mit ca. 20 FPS (Bilder pro Sekunde) über die Rückseitenkamera des Smartphones.

  • Bildverarbeitung unter Android mit Hilfe der OpenCV Bibliotheken synchron zur Bildaufnahme der Kamera.

  • Abfrage der Sensordaten des NXT-Roboters.

  • Ansteuerung der Antriebe des NXT-Roboters unter Einbeziehung der Sensordaten und Bildverarbeitungsergebnisse.

Zusätzlich zu seiner Steuerungsaufgabe erfüllt das Smartphone also die Aufgaben einer Smartkamera und der einer akustisch-visuellen Schnittstelle zum Benutzer.

Die Bildverarbeitung unter Android ist dabei die kritischste Anforderung, da die effektive Rechenleistung auf dem Smartphone stark eingeschränkt ist. Dies liegt im Wesentlichen daran, dass ein Androidprgramm wie ein Java-Programm auf einer Virtuellen Maschine (Dalvik) und nicht direkt in der CPU des Rechners ausgeführt wird. Dieser Nachteil wird aber dadurch relativiert, dass selbst preiswerte Smartphones heute über eine beachtliche Prozessorleisung verfügen.
Für die hier nötigen Ansprechzeiten der Smartkamera im Bereich von mehreren 100 ms reicht somit selbst ein Smartphone mit 1 GHz Singlecore-Prozessor (ARM Cortex A8) und 512 MB RAM aus. (Es wurde ein Samsung Galaxy S WiFi 4.0 mit Android 2.3.3 verwendet).
Solche Androidgeräte sind heute für unter 50 € als Neugeräte bzw. praktisch kostenfrei als Altgeräte erhältlich.

Statt des Lego-Roboters kann auch ein beliebiger anderer Roboter verwendet werden. Dann muss aber das Kommunikationsprotokoll zwischen Roboter und Smartphone selbst erstellt bzw. entsprechend angepasst werden.

3 Einbinden des Lego NXT

Nach dem Einschalten des NXT-Bricks wird in der Steuerung des Roboters die Standardfirmware aktiviert. Hierfür hat Lego das sogenannte „Lego Communications Protocol“ (LCP) veröffentlicht: Es erlaubt, den Roboter als „Slave“ zu betreiben. Damit ist gemeint, dass er nicht selbstständig agiert, sondern nur auf äußere Steuerbefehle reagiert.

Diese Steuerbefehle kommen über die Bluetooth-Schnittstelle vom Smartphone und lesen z.B. den Messwert des Ultraschallsensors aus oder bestimmen die Motordrehzahl eines Antriebs.

4 Androidprogrammierung

Die Androidprogrammierung ist die größte technische Hürde bei diesem Projekt. Für die Kommunikation eines Lego-NXT-Roboters gibt es schon App-Inventor oder Processing Beispielprogramme. Dies ist aber leider nicht der Fall für Programme, die die Bildverarbeitung vpn Kamerabildern einbinden müssen.

Die Programmierung der Bildverarbeitungs-App geht leider (Stand Juli 2015) nur über die professionellen Entwicklungsumgebungen (IDE) „Android Studio“ oder „Eclipse“. Der Quellcode der hier verwendeten App kann im Downloadbereich heruntergeladen werden.
Er wurde in Android Studio erstellt und kann dort problemlos importiert werden. Die notwendigen OpenCV-Bibliotheken müssen nicht separat eingebunden werden, sondern sind mit in der ZIP-Datei des Androidprojekts enthalten.

5 OpenCV unter Android

Eigentlich ist es etwas verrückt, Bildverarbeitung unter Android (=Java) zu programmieren. Denn das fertige Programm läuft anschließend auf einer virtuellen Maschine und kann die Leistungsfähigkeit der Hauptprozessoren und der Grafikprozessoren in keiner Weise ausnutzen. Daher wird dieser Ansatz im professionellen Bereich noch sehr wenig genutzt.

Tatsächlich ist daher bei OpenCV unter Android nicht jeder Basisbefehl in Java geschrieben. Vielmehr existieren die Bildverarbeitungsfunktionen als einzelne schon speziell für die Smartphonehardware vorkompilierte Bibliotheken. D.h. durch den Aufruf einer OpenCV Methode unter Java wird zur Laufzeit eine sogenannte native Laufzeitbibliothek ausgeführt. Dies ist ein Kompromiss, um die Ausführungsgeschwindigkeit auf einen erträgliches Niveau zu halten.
Dafür ist es aber notwendig, dass in der OpenCV-Bibliothek schon diese „nativen“ Bibliotheken enthalten sind.

Dies war am Anfang von Android kein Problem, da es nur wenig unterschiedliche Hardware in den Geräte gab. Heute finden sich z.B. Intel oder ARM-Prozessoren in den Smartpones. Daher hat die OpenCV-Bewegung nun den Weg gewählt, dass auf dem Smartphone zuerst die „OpenCV Manager“ App installiert sein muss. Diese App lädt dann von einem OpenCV-Server genau die nativen Bibliotheken herunter, die die spezielle Hardware des betreffenden Smartphones benötigt.

Das hier vorgestellte Beispielprogramm kommt jedoch noch ohne den „OpenCV Manager“ aus, da es auf OpenCV 2.4.0 basiert und die nötigen nativen Bibliotheken mit an Bord hat. Es kann aber weder die Rechenleistung von Grafikprozessoren nutzen, noch wird es auf allen Hardwareplattformen funktionieren.

Zuletzt sei noch auf das „Native Development Kit“ (NDK) von Android verwiesen: Damit kann man C++ Quellcode direkt in ein Androidprogramm einbinden. Dies ist der professionelle Weg, die OpenCV-Bibliothek zu nutzen. Jedoch sind hierfür tiefgehende Programmierkenntnisse unbedingt erforderlich.

Systemdesign