Hier finden Sie einige Tools für Lego Mindstorms,
die während meiner Master Thesis entstanden sind.
Sie dienen dazu, Mindstorms-Roboter Fußball spielen zu lassen, können aber auch in
ganz anderen Projekte hilfreich sein.
Zum Entpacken der Dateien können Sie z.B. WinZip verwenden.
Der Quellcode für die Fußball-Roboter
enthält unter anderem Routinen, die folgendes leisten:
-
Entlangfahren an einer Wand (
followBorderRight() und
followBorderLeft() in "kicker.h").
Der Roboter bewegt sich dabei flüssig und recht schnell (hängt natürlich auch
von der Konstruktion ab). Benötigt wird dazu eine
Stoßstange mit Berührungssensoren rechts und links (siehe auch meine
Master Thesis).
-
Erkennen verschiedener Helligkeitswerte, z.B. schwarz - grau - weiß
(
adjustShades() in "kicker.h"). Das besondere
ist, daß die Helligkeit nicht an den absoluten Lichtsensor-Werten festgemacht wird.
Stattdessen bekommt der Algorithmus nur vorgegeben, wieviele Helligkeitsstufen er
unterscheiden soll, und lernt dann selbständig, welche absoluten Werte dazu
gehören. Bei veränderter Gesamthelligkeit (z.B. durch Einschalten einer Lampe)
paßt sich die Erkennung ebenfalls automatisch an.
Programmiert ist das ganze in NQC.
Die Vision Command Kamera kann zwar Farben erkennen, aber bei
kleinen Objekten, die innerhalb eines großen Bereichs erkannt werden soll, versagt die
Erkennung. Zu diesem Zweck habe ich einen
Filter-Treiber geschrieben, der
solche Objekte erkennen und für Vision Command vergrößern kann. Der
Quellcode ist ebenfalls
verfügbar.
Hinweis: Die erste Version des Filters enthielt einen Fehler beim Setzen der
Toleranz-Werte. Dieser ist in der aktuellen Version behoben.
 |
 |
 |
Original-Bild |
Erkannte Pixel |
Vergrößerter Ball |
Die Installation des Filters ist einfach: Zuerst die Datei "camfilt.sys" ins
Verzeichnis "C:\Windows\System32\Drivers" (oder entsprechend) kopieren. Die Datei
"camtool.exe" kann dagegen in einem beliebigen Verzeichnis stehen. Um den Filter
zu verwenden, rufen Sie
camtool -install 1
auf und starten Sie Windows neu. Um den Filter abzuschalten, rufen Sie
camtool -install 0
auf (ebenfalls erst nach Neustart wirksam). Beachten Sie bitte, daß sich die Datei
"camfilt.sys" möglicherweise erst nach Abschaltung per camtool löschen läßt.
Der Filter kann im laufenden Betrieb konfiguriert werden. Die Parameter werden im
Detail in meiner Master Thesis erklärt, deshalb hier
nur ein kurzes Beispiel, wie man ein rotes Objekt erkennen und für Vision Command
vergrößern kann:
camtool -color 0x00FFFF -tolerance 0x204080 -radius 8 -weight 9 -replacement 0xFF0000
Die Filtereinstellungen kann man testen, indem man "camtool -showFireflies 1 "
aufruft. Damit zeigt der Filter die Punkte an, deren Farbe er erkannt hat
(siehe mittleres Bild oben). Mit
"camtool -showFireflies 0 " kommt man wieder zum üblichen Vergrößerungsmodus
zurück. Die aktuellen Einstellungen des Filters können Sie sich durch Aufruf von
"camtool " (ohne Parameter) auflisten lassen.
Getestet wurde der Filter unter Windows 98, er sollte aber auch unter ME
funktionieren. Windows 2000 sollte laut Microsoft-Doku ebenfalls klappen (halte ich aber
für eher unwahrscheinlich).
Vision Command (VC) kann immer nur mit einem RCX-Baustein zusammenarbeiten. Befinden sich
mehrere Bausteine in Reichweite, bricht VC mit einer Fehlermeldung ab, weil
sich Bestätigungsmeldungen der Roboter überlagern und nicht mehr einwandfrei beim
Infrarot-Tower ankommen. Oft wäre es aber nützlich, an mehrere Roboter zu senden, z.B.
die Position des Balls bei einem Fußball-Spiel.
Dieses Problem kann man mit einer neuen
"VPBrick.dll" lösen. Diese gaukelt
Vision Command vor, daß das Senden von Nachrichten immer erfolgreich ist. Auf diese
Weise wird das VC-Programm nicht unterbrochen, wenn mehrere Roboter in Reichweite sind
oder auch gar keiner.
Zur Installation müssen Sie die Datei "VPBrick.dll" im Vision Command Verzeichnis in
"VPBrick_orig.dll" umbenennen. Es muß ganz genau dieser Name sein, denn die neue Version
benötigt das Original zum Funktionieren und sucht es unter diesem Namen! Anschließend
können Sie die heruntergeladene "VPBrick.dll" ins Vision Command Verzeichnis kopieren.
Achtung: Überschreiben Sie auf keinen Fall die Original-DLL, sonst müssen Sie
Vision Command neu installieren!
Beachten Sie bitte, daß Vision Command beim Start eines (VC-)Programms ein kleines
RCX-Programm nach Slot 5 des Roboters übertragen will. Wenn keiner oder mehr als ein Roboter in
Reichweite ist, geht das schief (auch mit der neuen "VPBrick.dll"). Deshalb
müssen Sie beim Programmstart folgende Reihenfolge einhalten, wenn Sie die Übertragung
an mehrere Roboter benutzen wollen:
- Zuerst genau einen RCX-Baustein einschalten.
- Warten, bis Vision Command sein Programm übertragen hat.
- Jetzt die übrigen Roboter einschalten und das gewünschte RCX-Programm starten.
Wenn Sie Vision Command NICHT als "Smart Sensor" benutzen wollen (beschrieben
auf Michael Gasperis Vision Command Homepage), dann müssen
Sie mehrmals das VC-Programm starten, wobei jeweils genau ein Roboter eingeschaltet ist.
Dadurch empfangen nach und nach alle RCX-Bausteine ihr Programm. Das ist deshalb nötig,
weil die gleichzeitige Übertragung des Programms an mehrere Bausteine nicht funktioniert
(auch nicht mit der neuen "VPBrick.dll"). Nachdem jeder einmal an der Reihe war, kann man
wie oben beschrieben vorgehen, um mehrere Roboter gleichzeitig anzusteuern.
Letzte Änderung: 24.10.2001
|