Projekt-ATS-Mindstorms

 

 

 

 

Beschreibung ...     

 

Ziel des Projekts war es, ein System zu entwerfen, welches in der Lage ist, einem roten Lichtpunkt auf heller und homogener Oberfläche zu folgen.                                                     

ATS steht dabei für  "Automatic Tracking System" .

Die Realisierung erfolgte auf Basis von  LEGO MINDSTORMS.

 

 

 

Was brauch ich alles ?

 

                                        Folgende Komponenten werden benötigt:

Von LEGO:

                      Robotics Invention System 2.0 Baukasten

                      Vision Command Baukasten

                      SDK

             Visual C++ 6.0 oder höher

                                                      Bricx Command Center

                                                      Unser Quellcode

                                                      QuickCam - SDK 

                                                      Punktlichtquelle (z.B. ein klassischer Laserpointer)

                                                      Betriebssystem Win9x/2k

                                      


 

Wie bau' ich mir das Ding nu' ?

Installiere erst einmal folgende Software: Robotic Invention Systems, QuickCam-SDK (Kameratreiber für Win9x/2k mit installieren !!!),  Bricx Command Center.

Nachdem alles installiert wurde, müssten also nun LEGOTOWER und die LEGOCAM angeschlossen sein und einwandfrei funktionieren.

Folgende Sachen baust Du dir jetzt

F RoverBot mit Kettenantrieb (siehe S. 10 Constructopedia des Robotics Invention System 2.0)
        GesamtBild siehe S. 25

F Kamera LEGO Cam-Halterung (LCH) (siehe S. 10 Constructopedia von Vision Command)
        Kameragestell mit LCH siehe S. 29

Starte VC++ !  Unter Datei --> Arbeitsbereich öffnen lädst Du unser Projekt. (tripod.dsw --> siehe Quellcode)

Unter Projekt --> Einstellungen klickst Du auf die Registerkarte C/C++ . Da stellst Du, unter der Kategorie Präprozessor, das Include-Verzeichnis der QuickCam-SDK ein. (z.B. D:\QCSDK1\inc) 

Jetzt gehe auf   Erstellen -->  Alles neu erstellen !
Unser Projekt wird jetzt compiliert und eine ausführbare Datei (tripod.exe) erstellt.

Dann musst Du mit dem Bridge Command  Center den NQC-Code (msghandler.nqc) auf den RCX laden. (z.B. auf Programmplatz 1)

Starte das Programm auf dem RCX  (in unserem Beispiel Programm 1) und führe die unter VC++ erstellte EXE aus ! (Erstellen --> Ausführen von tripod.exe )

Hinweis: Das VC-Programm startet nur, wenn die Kamera und der USB-Tower auch angeschlossen sind !!!

Es müsste ein Dialog erscheinen, auf welchem ein Button mit der Beschriftung "Connect To RCX" steht.

Im oberen Bild erscheint die aktuelle Aufnahme der Kamera. Diese soll in Richtung Boden schauen. Am günstigsten ist, wenn man schon die Ränder der "Füße" unseres RoverBots erkennt.

Klicke erst auf den oben genannten Button, wenn die Kamera sich an die aktuellen Lichtverhältnisse angepasst hat, ersichtlich daran, dass der untere Bildausschnitt vollständig weiß ist. Falls nicht, kannst Du mit den 3 Balken die Software den Lichtverhältnissen anpassen.

Jetzt nimm den Laserpointer und leuchte auf den Fußboden in den Kamerabereich !

Man sieht im unteren Bild einen schwarzen Bereich, welcher den Ort des Lichtpunktes repräsentiert.

Jetzt kannst Du zusätzlich mit den drei Balken die Erkennung des Lichtpunktes verfeinern.

Klicke nun auf den Button !

Das Programm kontaktiert jetzt mit dem LEGOTOWER den RCX.                                                                                     (Falls die Meldung kommt: "Connection to RCX lost", überprüfe ob der Tower in der Nähe des RCX steht, damit er Daten senden bzw. empfangen kann.)

Falls alles funktioniert, müsste der RCX bzw. RoverBot dem Pointer folgen.

Hinweis: Falls nichts passiert, dann prüfe, ob Dein Programm auch auf dem RCX ausgeführt wird !!!

 

Funktion und Realisierung des Systems

    1. Aufbau und Aufgabenverteilung: 

Die Daten der Kamera werden empfangen und mit dem PC - Programm verarbeitet. Aus den Ergebnissen der Bildverarbeitung werden über den LEGOTOWER  per Infrarot Messages gesandt, welche durch den RCX weiterverarbeitet werden. Das Programm auf dem RCX gibt dann entsprechende Steuerdaten an die Motorausgänge, so dass der RoverBot dem Lichtpunkt folgt. 

    2. PC-Programm:

Als Grundlage nahmen wir folgendes Programm von TRIPOD

 

Das Programm nimmt das aktuelle Bild der Kamera auf und speichert die Pixeldaten als 24 Bit RGB-Werte in einem Vektorformat (siehe Abb. 2) ab. Die Pixeldaten liegen nun im Speicher und lassen sich ganz einfach mit Hilfe von Zeigern bearbeiten. Für eine detaillierte Beschreibung siehe TRIPOD

 

Die Abb. 3 zeigt den prinzipiellen Ablauf unseres Basis-Programmes, wobei die Funktion doMyImageProcessing nicht mehr benötigt wird. 

Das Bild wird bei Auswertung in 16 Cluster unterteilt, die wie folgt durchnummeriert sind: 

Die Funktion grayScaleFrameData ist nun mit folgender Funktionalität erweitert worden: 

Detektieren des Leuchtpunktes in einem bestimmten Teil des Bildes z.B. "Cluster 6" und senden dieser Zahl über den LEGOTOWER an den RCX. Das Auswahlkriterium des Clusters besteht darin, dass man den Bereich nimmt, welcher die meisten für uns relevanten Pixel (z.B. helle Pixel) enthält. Um grobe Störungen herauszufiltern, wurde die maximale Anzahl von relevanten Pixeln, die in einem Cluster sein können begrenzt. (Implementierung => siehe Quelltext )

Für die Toweransteuerung wurden Funktionen aus der LEGO-SDK hinzugefügt.

 

    3. RCX-Programm:

In Abhängigkeit der empfangenen Message werden die Motoren (siehe Quelltext RCX) angesteuert. Zusätzlich wurde ein Timer eingebaut, der bei Verschwinden des Leuchtpunktes den RoverBot nach 0,5s stoppt.

 

Wie man das System erweitern könnte ...

 

Um das System noch interessanter zu machen, könnte man zusätzlich die Kamera bewegen. Das könnte dann so aussehen, dass sich am Anfang die Kamera dreht und die Umgebung nach dem Lichtpunkt absucht. In Abhängigkeit von der aktuelle Blickrichtung folgt der RoverBot dem Pointer. Die Bewegung sollte dabei so ablaufen, dass unser Gefährt vorausschauend versucht, die Route des Lichtpunktes festzustellen, um so unnötige Richtungswechsel zu vermeiden.

Zusätzlich könnte man das System um die Funktionalität der Hinderniserkennung erweitern.

Sollte der RoverBot auf einem Tisch zum Einsatz kommen wäre auch eine "Tischkantenerkennung" günstig. Vorschläge zur Realisierung mit einem Drucksensor findest Du in der Constructopedia des Robotics Invention System.