VILAP
(English readers: Try the english version of this page. As the german page has some more information, it may also help to use the babelfish translation at the bottom of this page)
Typische Rundenzähler für RC-Autos basieren meist auf Infrarot/Lasermessstrecken oder Transpondern. Bei diesen Lösungen ist immer spezielle Hardware nötig und manche Anlagen sind nicht gerade billig. Alternativen hat man eigentlich nur, wenn man gute Elektrotechnikkenntnisse hat.
VILAP dagegen ist ein Rundenzähler, der auf einer einfachen Webcam basiert, die Markierungen an Autos erkennen kann. VILAP ermöglicht es, mit einem PC und einer billigen Webcam eine Rundenzählanlage für 2 Autos zu bauen. Sollte also beides zufällig schon vorhanden sein, eine recht günstige Alternative.
Im Moment ist das ganze noch im Entwicklungsstadium, also erwartet noch nicht zuviel. Als einfache Anlage für das Einzeltraining zu Hause oder ein Rennen mit einem Kumpel ist es aber durchaus schon geeignet.
Die Benutzeroberfläche der Software ist auch noch sehr spartanisch, aber erstmal brauchbar.
http://www.starky.de/vilap/vilap.tar.gz
Die Idee: Eine Kamera „filmt“ die Ziellinie von der Seite aus ca. 1 m Abstand und ist in der Lage, Fähnchen an den Autos zu erkennen, wobei der Hintergrund weiß sein muß (was sich durch ein paar Blätter Papier und etwas Tape schnell realisieren läßt). Die Fähnchen müssen ungefähr beim Abstand von 1m ca. 5x5cm groß sein (bei kleineren Autos, z.B. Microsizer, dann alles entsprechend kleiner, d.h. 50cm Abstand und 2,5x2,5cm Fähnchen). Die Fähnchen hängen auf unterschiedlichen Höhen und bewegen sich somit auf unterschiedlichen horizontalen Bahnen, die die Webcam prüft.
Die Software ist noch ziemlich neu (Version 0.3), daher gibt es noch eine Menge Einschränkungen.
Damit also Eure Erwartungen nicht zu hoch sind, hier einiges vorweg:
Im Moment ist das Ganze nur mit der DEXXA-Webcam getestet (kompatibel zur Logitech Quickcam Express).
Meine Kombination Webcam/Laptop macht zur Zeit nur 8 Bilder pro Sekunde. Schnelle Autos kann ich damit noch nicht erkennen, daher muß ich einen langsamen Streckenteil nutzen. Könnte aber auf schnelleren Rechnern/Webcams besser sein. Vielleicht läßt sich auch noch etwas über den Treiber machen, mal sehen.
Die Benutzeroberfläche ist noch sehr spartanisch, Ergebnisse werden auf der Konsole ausgegeben.
Die Software läuft nur unter Linux. Das wird wohl auch noch länger so bleiben. Dies mag für manchen eine Einschränkung sein, für manch´ anderen ein Vorteil . Mit der Knoppix-CD (s.u.) sollten es aber auch PC-Enthusiasten einfach hinbekommen, vielleicht ja auch alles unter VMWare emuliert?
Ich bastele noch an der Performanz, damit auch schnelle Autos erkannt werden. Eine Webcam mit 30 Bildern wäre dazu wohl in der Lage.
Das System ist unter Linux implementiert worden, weil ich mir für das Projekt keine M$-Entwicklungsumgebung zulegen wollte und unter Linux alle notwendigen Komponenten für lau vorhanden und gut beschrieben sind. Dazu kommt, dass ich nur wenig über MFC usw. weiß.
Ich selbst betreibe VILAP momentan auf einem Laptop mit 266 Mhz Prozessor und 128MB RAM unter Knoppix mit X-Windows und KDE. Knoppix basiert auf Debian Linux, ich benutze z. Z. Kernel 2.4.20. Prinzipiell sollte das System auch unter jedem anderen aktuellen Linux laufen. Über die Mindesthardwareanforderungen kann ich nichts sagen, aber auf kleineren PCs könnte es knapp werden.
Im Moment betreibe ich das System mit einer „DEXXA Webcam“, die 100% kompatibel zur „Logitech Quickcam Express“ sein soll. Ob auch andere Kameras laufen, weiß ich nicht. Die Software setzt auf „Video 4 Linux“, ist aber z. Z. eben noch mit keiner anderen Kamera getestet worden. Die Auflösung der Kamera muss 176x144 betragen, die Werte in der Konfigurationsdatei hierzu werden noch nicht ausgelesen! Gebt mir doch bitte Bescheid, falls Ihr auch mit anderen Kameras Erfolg haben solltet.
Informationen und alle möglichen Treiber für Webcams unter Linux gibt es unter http://www.exploits.org/v4l/ . Für die DEXXA Webcam benutze ich den Treiber unter http://qce-ga.sourceforge.net/. Laut Webseite sollten damit auch die Logitech Quickcam Express, die Logitech Quickcam Web, die LegoCam und die Labtec Webcam laufen.
Die Kamera wird im Abstand von einem Meter (konfigurierbar) aufgestellt, so das die optische Achse zwischen der hohen und der niedrigen Fahne der beiden Autos liegt. Startpositionen für ein Rennen müssen vor dem durch die Kamera erfassten Bild liegen.
Die Software kann als Tar-Datei „vilap.tar.gz“ unter http://www.starky.de/vilap/vilap.tar.gz heruntergeladen werden und enthält den Sourcecode, ein Makefile, eine Konfigurationsdatei und verschiedene Textdateien. Die Software kann frei weitergegeben werden (aber bitte immer mit allen Dateien).
Vorraussetzung ist, dass die Webcam installiert ist. Da sie normalerweise am USB-Port hängt, muß der Kernel USB unterstützten und natürlich Video für Linux, ggf. muß also ein neuer Kernel kompiliert werden.
Die DEXXA Webcam habe ich mit den Treibern unter http://qce-ga.sourceforge.net/ eingerichtet. Dazu muß nach Compilierung des Treibers einfach „./quickcam.sh“ in der Shell eingegeben werden. Danach steht ein Videogerät an „/dev/video0“ zur Verfügung. Besser ist es natürlich den passenden „insmod“ schon beim Booten zu integrieren. Die Funktion der Kamera kann man mit Programmen wie z. B. „xawtv“ prüfen.
Die Software selbst ist erstmal mit „gunzip vilap.tar.gz “ und „tar xvf vilapt.tar“ auszupacken und besteht aus mehreren Sourcedateien in „C“ und wird durch Eingabe von „make“ kompiliert. Dabei wird das Programm „vilap“ erzeugt. Durch Eingabe „./vilap“ in der Kommandozeile wird das Programm gestartet, dabei sollte die Konfigurationsdatei „vilap.cnf“ im aktuellen Pfad liegen.
Erstmal vilap.tar.gz herunterladen und auf einer Diskette speichern.
Logitech Quickcam an den USB Anschluß anschließen.
Dann Knoppix herunterladen (http://www.knopper.net/knoppix/#order) und eine CD brennen. Oder die CD aus der c´t 4/2003 nehmen, die tut´s auch.
Diese CD ins Laufwerk und von dieser CD booten (dazu ggf. ins BIOS des Rechners). Bei Problemen die unter http://www.knopper.net/knoppix angegebenen Dokumentationen oder Foren zu Hilfe nehmen.
Wenn das System gestartet ist, durch Doppelklick im Desktop auf „HOME“ links oben ins persönliche Verzeichnis gehen.
Nun geht Ihr im Desktop mit einem Doppelclick auf das Diskettensymbol auf das Floppylaufwerk („/dev/fd0“). Nun kopiert Ihr die Datei „vilap.tar.gz“ in das andere Fenster, d. h. Euer „HOME“-Verzeichnis.
Nun macht Ihr eine Shell auf (sowas wie eine MS-DOS Eingabeaufforderung, aber 1000mal besser). Dazu klickt Ihr unten auf das Symbol eines Bildschirms mit einer Muschel davor.
Jetzt gebt Ihr in die Shell folgendes ein: erstmal „gunzip vilap.tar.gz“ und dann „tar xvf vilap.tar“. Damit werden alle Dateien des Programms ausgepackt (Wer lieber klickt: alternativ geht das natürlich auch über den Explorer, der hier Konqueror heisst)
In der Shell danach dann „cd qce“
Jetzt „./quickcam.sh“ um den Treiber für die Kamera zu starten
Jetzt „xawtv“ eingeben, um die Funktion der Kamera zu prüfen.
Danach in der Shell „cd ..“
Uff! Gleich geht´s los. Erstmal ein neues Bier holen.
Jetzt kann das Programm mit „./vilap“ gestartet werden!
Beendet wird das Programm durch den Windowmanager oder durch Anklicken der Shell und drücken von „STRG-C“
Bitte beachten: Wenn Ihr den Rechner ausschaltet, muß beim nächsten mal alles ab Schritt 4 wiederholt werden! Es empfiehlt sich daher, das Programm irgendwo auf eine der angezeigten Festplatten (/mnt/hda1/, /mnt/hda2 ... /mnt/sda1 usw.) zu kopieren. Aber nicht vergessen, diese Platten vorher im Konqueror zu mounten und schreibbar zu machen.
Die Software wird durch eine Konfigurationsdatei eingestellt, die „vilap.cnf“ heißt und im aktuellen Verzeichnis liegen muß. Ein Beispiel wird mit der Tar-Datei ausgeliefert. Kommentarzeilen haben ein „#“ vorangestellt.
Hier ein Ausschnitt aus einer Konfigurationsdatei:
# VILAP Konfigurationsdatei
# M. Stark, April 2003
MINLAPTIME=3.0
CAMDISTANCE=1.0
XMIN1 = 70
XMAX1 = 110
YMIN1 = 14
YMAX1 = 130
...
XSTEP = 8
YSTEP = 8
VIDEOWDTH = 176
VIDEOHGTH = 144
CONTRAST = 33000
HIGHCOLOR = 0
... (usw.)
MINLAPTIME: Stellt die Mindestzeit in Sekunden zwischen dem Verlassen des Meßfeldes und dem nächsten Hochzählen ein . Damit wird (zumindest teilweise) verhindert, das jemand nach Durchfahren der Ziellinie umdreht und sofort eine neue Runde gezählt wird.
CAMDISTANCE: Abstand der Kamera vom Boden (wird z. Z. noch nicht ausgewertet).
XMIN1...YMAX2: Minimale und Maximale Koordinaten der Felder, die untersucht werden. Die Werte müssen sich irgendwo innerhalb des Gesamtfeldes von 0..175 (X) und 0..144 (Y) befinden. Aber besser nicht die ganze Fläche ausnutzen, sondern nur schmale Streifen nehmen, in denen die Fahnen horizontal vorbeifahren.
XSTEP, YSTEP: Schrittweite, mit der im Feld untersucht wird
VIDEOWDTH, VIDEOHGTH: Breite und Höhe des Kamerafeldes. Bitte erstmal nicht ändern (wird z. Z. sowieso nicht ausgewertet ;-).
CONTRAST usw. : Kontrast, Helligkeit usw. des Videobildes (0 bis 65535)
HIGHCOLOR: Bei 8-Bit Farbtiefe auf 0 setzen, bei 24 Bit auf 1.
(weitere Parameter werden noch implementiert und in der Konfigdatei kommentiert)
Die Datei kann durch Eingabe von „kwrite vilap.cnf“ oder mit einem anderen Editor (bei Knoppix links in der Startleiste zu finden) geändert werden.
Bitte passt unbedingt HIGHCOLOR an, sonst geht es nicht!
Nach Aufruf durch „./vilap -c1“ von der Kommandozeile erscheint ein Fenster mit einem Videobild. Die Kamera ist nun so auszurichten, dass die Autos durch die rechteckig markierten Meßfelder fahren und die Zielinie in der Bildmitte von oben nach unten läuft. Der Abstand zwischen Kamera und Strecke sollte einen Meter betragen, ist aber grundsätzlich über die Konfigurationsdatei einstellbar.
Die durch XMIN1...YMAX21 (d.h. durch die Rechtecke) abgedeckte Fläche muß weiß sein, also entsprechend mit Papier o.ä. abgeklebt sein. Die weiße Fläche mit einer Lampe beleuchten oder durch Verändern der Parameter BRIGHTNESS usw. dafür sorgen, dass das Papier ganz weiß dargestellt wird und nicht gräulich oder farbstichig. Dies sieht zwar nicht schön aus, ermöglicht aber erst die Erkennung.
Wird das Programm mit der Option „-c1“ oder „-c2“ aufgerufen, wird der Kalibierungsmodus eingeschaltet (für Auto 1 bzw. Auto 2). Dann erscheinen Hexadezimalzahlen. Diese sollten alle „FFF2“ anzeigen, wenn nichts im Meßfeld ist. Wenn man einen Gegenstand (sprich eine Fahne) ins Meßfeld schiebt, dann sollten wilde Zahlen erscheinen.
Wenn alles korrekt eingestellt ist, sollten sich die Autos an die Startposition begeben, die außerhalb vor dem Messfeld liegt. Nun wird das Programm durch „./vilap“ gestartet und nach ein Paar Sekunden kommt das „Go“ zum Start. Leider werden Frühstarts noch nicht erkannt, aber das kommt noch. Das Programm kann jederzeit durch Eingabe von „STRG-C“ beendet werden. Die beste Runde wird übrigens auch angezeigt.
Wenn man die Software mit „./vilap | tee rennverlauf.txt“ aufruft, dann wird eine Textdatei „rennverlauf.txt“ erstellt.
Die Bedienung und die Konfiguration durch die Datei ist noch sehr spartanisch, da wird natürlich noch etwas getan! Für die Zukunft ist noch einiges möglich:
Die Rundenanzahl oder Dauer für ein Rennen sollte man einstellen können.
Es sollte eine Startampel o. ä. auf dem Monitor geben.
Die Parameter sollte man im Programm und nicht nur über eine Datei einstellen können.
Darüber hinaus sollte es prinzipiell möglich sein, zwei Messungen im Meßfeld zu machen und dadurch die Geschwindigkeit beim Überfahren der Ziellinie zu messen. Denkbar wäre es auch, ein Zielfoto zu machen. Alles nur bei entsprechender Harware möglich.
Ansonsten könnte die Software natürlich um umfangreiche Funktionen oder Datenbanken (Renntage, Fahrerdatenbank, Fahrzeugdatenbank, Tabellen etc.) zur Rennverwaltung erweitert werden. Schön wären auch Sound, Grafik etc..
Unter den folgenden Umgebungen habe ich das System bisher erfolgreich betreiben können.
Betriebssystem:
Debian Linux „sid“ mit Kernel 2.4.18 (hier musste der Kernel mit USB und V4L neu kompiliert werden), Treiber „qce“
Knoppix 3.1 (aus der c´t 4/2003) und Knoppix 3.2 (www.knopper.net) mit Kernel 2.4.20, Treiber „qce“
Hardware:
DEXXA Webcam (laut Hersteller kompatibel zur Logitech Quickcam Express)
Zur Zeit ist das System mit folgenden RC-Autos getestet worden:
Kyosho Palm Racer, Tyco Canned Heat: 100%ige Erkennung
Kyosho Mini-Z: Probleme bei hohen Geschwindigkeiten , daher z. Z. nur an langsamen Stellen mit Schikanen o.ä. einsetzbar.
Microsizer: könnte klappen, ist aber noch nicht getestet. Die Kamera müsste natürlich etwas tiefer hängen und das Erkennungsfeld über die Variablen (XMIN...YMAX, XSTEP, YSTEP) verkleinert werden.
1:18: nicht getestet
Slotcars: nicht getestet. Hier könnte man auf die Fähnchen verzichten und von oben filmen. Allerdings müsste ich erstmal eine Option „Invers“ einfügen, da die Slotcars ja meist schwarzen Hintergrund (sprich Straßen) haben.
Die Entwicklung des Programms ist reines Hobby. Das Programm ist nur für den spielerischen Einsatz vorgesehen. Die Software ist im Moment ein reiner Prototyp und soll erst einmal die Möglichkeit der Rundenmessung über eine Webcam zeigen. Ich lehne jede Verantwortung für Folgen aus Programmfehlern ab. Das Programm ist weit von der Fertigstellung entfernt. Auch wenn die Ergebnisse im Moment ermutigend sind, muß davon ausgegangen werden, dass die Messungen nicht fehlerlos sind.
Das Programm liegt im Sourcecode vor und Dieser kann nach Belieben von Euch geändert oder weiter verwendet werden. Auch eine Verwendung des Codes oder der Idee in einem kommerziellen Tool ist Euch freigestellt.
Das Programm unterliegt der GPL. Große Teile des Programms basieren auf Code von anderen Personen, die diesen auch unter der GPL zur Verfügung gestellt haben. Diese Teile sind deutlich zu erkennen. Von mir stammen nur die Dateien „detect.c/.h“. Die Datei „vilap.cpp“ hieß vorher anders und wurde angepasst.
Über konstruktives Feedback würde ich sehr freuen.
Markus Stark, starky@starky.de, www.starky.de/vilap/vilap-de.html
1Wenn man Parameter in der Konfigurationsdatei ändert, muß das Programm neu gestartet werden.
2Messpunkte werden hier durch Hexadezimalzahlen ausgegeben, und zwar jeweil der Rot, Grün und Blauanteil von 0-15. „FFF“ ist also Weiß, „000“ wäre Schwarz und „F00“ reines Rot. Sobald einer der drei Werte unter „SENSIVITY“ liegt, wird ein Auto erkannt.