Bonjour,
Dieser Artikel soll erklären wie ein RCX-Roboter mit einer Webcam via Internet zu steuern ist.
Wie es begann:
Ich hatte im Jahr 2001 das große Glück, das Lego Set 9747 als Geschenk zu bekommen. Ich konnte meine Liebe zu Lego, Computer und Roboter endlich in einem Spiel zusammenfassen.
Meine Idee war einfach, meinen Computer mit dem Roboter und einer Webcam zu kombinieren, damit mein Bruder den Roboter und die Webcam von Paris aus steuern kann. Es hat funktioniert. Es war lustig zu sehen, wie der ferngesteuerte Roboter sich auf dem Tisch bewegt hat!
Seit dieser Zeit haben sich Zeit und Platz nicht mehr so schnell wieder ergeben und ich bin erst jetzt wieder dazu gekommen, das Modell bzw. die Installation wieder aufzubauen. Dieses Mal habe ich alles fleißig mitprotokolliert.
Die nötigen Applikationen, Installations- und Konfigurations-Schritte und der Aufbau des Lego-Modells werden dokumentiert. Dieses Modell wird sich weiterentwickeln und die nächste Meilensteine sind kurz erwähnt.
Am Schluss soll eine kleine Sammlung an Links als Hilfe dienen und die Suche erleichtern.
* Was wird benötigt? Lego RCX Mindstorms: das Set Robotics Invention System 1.5, 9747
Eine Webcam, z.B. die Vision Command, 9731. Diese ist leicht auf dem Roboter einzubauen und hat ein sehr langes USB-Kabel. Es kann sehr wohl auch eine andere Webcam sein.
* Welche Applikationen sind notwendig? Es mag eine Menge sein, aber doch nicht so unüberschaubar. Die Internet Adressen, um diese zu finden, sind unten aufgelistet.
- Einen Webserver: zB. Apache.
- Eine Applikation, um die Videobilder ins Netz zu transferieren, "streamen": z.B. Webcam32. Für Webcam32, die dazu gehörige Streaming Applet: "JavaCamPush.cab".
- Eine Applikation, um den RCX via Internet zu steuern: z.B. webrcx.exe.
- Eine Applikation, um den RCX zu programmieren: z.B. Bricx Command Center 3.3 alias BricxCC.
- Die RCX Firmware: Firm0309.lgo oder wie hier Firm0328.lgo.
- Die ActiveX Kontrolle: spirit.ocx.
- Eine Java Version, mindestens die JRE muss auf dem Client als auch auf dem Server installiert sein, sonst funktioniert das Bild Streaming nicht.
Anmerkung: Diese Konstellation ist unter MS Windows 2000 & Firefox installiert und erprobt worden. Anpassungen für andere MS Operating Systeme sind möglich, was ich leider nicht ganz ausschließen kann. Es kommen mit Internet Explorer ein paar Fehlermeldungen, ich suche noch woran es liegt. Mit Firefox geht es problemlos!
* Installation, Schritt für Schritt:Hier sind die notwendigen Schritte zu folgen. Es ist eine vorgeschlagene Reihenfolge, diese kann sicher adaptiert werden.
Anmerkung: Ich gehe davon aus, dass noch keine von allen diesen Applikationen auf dem Rechner installiert ist. Sollte es schon eine oder mehrere geben, sind die Änderungen nicht aufwendig.
Es sollte für einen Laien (kein Computer Guru in dem Fall) so einfach und klar wie möglich sein. Die Bemerkungen sollten euch, die gleichen unangenehmen Fragen / Abstürze wie ich hatte, sparen. Ich kann dafür etwas übersehen haben, ich bitte dann um Rückmeldung für eine ausführliche Ergänzung.
- Installation des Webservers:
Apache herunterladen und installieren. Siehe den Link unten.
Die Datei "httpd.conf" (im Verzeichnis "conf") mit dem Stammverzeichnis ("documentroot") und dazugehörigen Leserechten anpassen.
- Bilber Streaming:
Webcam32 konfigurieren: die TCP/IP Parameters & Portnummer anpassen. Für die Parameter siehe den Link fur JavaCamPush.cab unten: Applet Enabled & Server Push Enabled & Remote access port & Maximun push interval...)
Nicht vergessen! Die Applet JavaCamPush.cab von Webcam32 ins Stammverzeichnis "documentroot" kopieren!
- Webrcx konfigurieren:
Webrcx herunterladen und installieren.
Die "COM" Nummer für den Serienanschluss & die "TCP/IP Port" Nummer einstellen (defaultmäßig COM 1, bzw. Port 7070)
Wenn nötig (z.B. im Fall einer Fehlermeldung oder keine vorige Installation der mitgelieferten RCX Software) die Datei spirit.ocx in das Webrcx-Verzeichnis kopieren und mit dem Befehl "regsvr32 "\\absoluter Pfad\\"\spirit.ocx" registrieren.
- BricxCC:
BricxCC herunterladen und installieren.
Die RCX Firmware in den RCX laden (Menu "Tools/Download Firmware"). z.B. firm0328.lgo laden.
Das Programm für die Steuerung schreiben bzw. öffnen, kompilieren und z.B. als 5. Programm in den RCX herunterladen.
Die HTML Seite:
Diese Seite soll sich im Stammverzeichnis ("documentroot") neben der Applet JavaCamPush.cab befinden.
Es sind 2 Teile: für die Video- und für die RCX-Steuerung.
Der erste Teil der Seite wird von dem Bild genommen. Ein Beispiel für die HTML Seite kann unten auf dem Link für JavaCamPush gefunden werden.
Der zweite Teil ist für die RCX-Kontrolle. Die erweiterte HTML Seite ist aus einem Beispiel für Webbrick angepasst (IP Adresse siehe: WebBrickURL, Portnummer...). Siehe Link unten.
* Konkrete Beispiele: Ich werde die Programmierungs-Schritte nicht komplett erklären, sondern die Dateien (vorbereitete HTLM Seite und den fertigen RCX-Code) unter dem Link: (
rcxwebcam_sample.htm und
RCXWebCam_sample.nqc) zur Verfügung stellen.
Diese müssen an die eigene Installation angepasst werden, siehe Kommentare in den Dateien selbst.
* Und was ist mit dem Legonanteil? Na ja, es geht doch hier um einen Lego Roboter, und nicht nur um irgendwelche Applikationen! Hier ist eine kleine Erläuterung, welcher Antriebblock und welches Bewegungssystem verwendet werden.
Als Bewegungssystem habe ich mich für die zwei Ketten des Modells 9747 (Seite 21 --> 25) entschieden. Es bietet Stabilität für den Roboter und erlaubt sehr enge Umdrehungen.
Mit den Ketten, dem Antriebblock, der Webcam und dem RCX selbst wiegt das ganze Modell ca. 630 g.
Der Antriebblock ist für die 3 Motoren angepasst. Die Kabeln sollen nicht im Weg sein und die Drehungen der Webcam stören. Es sollte auch leicht und kompakt sein.
Die Motoren A und C sind für die Bewegung des Roboters gewidmet. Für die Programmierung ist zu bemerken, dass der Motor C die Kette in der ungekehrten Richtung dreht! Der Motor B ist dann für die Drehung der Webcam zuständig.
Ein paar Bilder mit den verschiedenen Elementen sind in der Galerie
http://gallery.lgoe.at/thumbnails.php?album=81 zu sehen.
* Es kann los gehen.Die eigene Firewall für die ausgewählten Applikationen bzw. Portnummern (Webstreaming und Webrcx hier:8888, bzw. 7070) öffnen. Vorher prüfen, dass keine andere Applikationen die gleichen Port Nummern verwenden.
Den Webserver starten (für apache via httpd.exe oder via ApacheMonitor.exe).
Die Applikation für das Bild-Streamen starten.
Den RCX starten (die firmware sollte installiert sein).
Webrcx starten und auf dem Knopf "Start" drücken.
Die HTML Seite aufrufen und genießen.
* Und wo sieht man das Ganze laufen? Falls es Interesse an eine live Demo gibt, lasst es mich wissen, damit wir uns einen Termin ausmachen und ich meinen Server konfigurieren kann.
* Konzeptionszeit Umgerechnet ca. 5 Arbeitswochen (mit den verschiedenen Installationen, Testen, Wiederversuchen...) auf mehreren Monaten verteilt.
* Aufbauzeit bis zur vollen Funktion nach dieser Anleitung: Hoffentlich kurz, ich schätze maximal einen Tag, damit alles funktioniert.
Einschränkungen:
Die Reichweite der Sender, die Länge des Kabels (zwischen Webcam und Computer).
Zukunft & Weiterentwicklung: Meine nächsten schlaflosen Nächte sind schon für die Weiterentwicklung der Roboter gebucht. Mein Wunsch ist, diesen Roboter dann auf den Platten meiner Space MOCS laufen zu lassen, und dieses via Internet zur Verfügung zu stellen. Wir könnten es bei einer kommenden Ausstellung versuchen, es geht auch zwischen den Zügen.
Die offenen Punkte sind, die richtige Positionierung des Roboters zu erkennen und nachzuvollziehen. Der Roboter sollte wissen, wo er ist und bei einer Gabelung nur die möglichen Richtungsmöglichkeiten erlauben.
Ich möchte vermeiden, dass sich der Roboter zu weit umdreht und damit entweder dem Infrator Sender den Rücken zeigt oder an dem Kabel der Webcam hängen bleibt. Ich möchte z.B. nur bis 6 Drehungen Links oder Rechts zulassen und dann die weitere Drehung verhindern (ein bisschen Programmierung ist noch notwendig).
Für den Roboter selbst möchte ich auch die Webcam auf einen Kran (z.B. die des Modells 8460, da kommt noch Pneumatic dazu) einbauen, und damit einen weiteren Freiheitsgrad (in die Höhe) erlauben. Der Arm des Krans bedeutet dafür weitere Stabilitätsherausforderungen.
Ein weiterer Schritt wäre, dieses Modell und die Programmierung für den NXT Roboter zu erweitern, aber erst wenn ich ein NXT Set habe.
Na ja, das war's. Es hat wirklich
SPASS gemacht! Es bleibt faszinierend den Roboter zu sehen, der plötzlich anfängt sich zu bewegen.
Eure Kommentare, Rückmeldungen, Empfehlungen sind alle sehr erwünscht!
Viel Spaß mit euren Erfahrungen!
Vincent
Link Sammlung: Apache:
http://httpd.apache.org/ BricxCC:
http://bricxcc.sourceforge.net/ Firmware: auf dem Mindstorms CD im Verzeichnis \FIRM\ oder RCX 2.0 Beta:
http://mindstorms.lego.com/sdk2beta/default.asp LEGO® MINDSTORMS(tm) Internals:
http://www.crynwr.com/lego-robotics/ Spirit.ocx auf dem Mindstorms CD im Verzeichnis \System\
Spirit.ocx Technical References:
http://www.vorlesungen.uni-osnabrueck.de/informatik/robot00/doc/lego/pbrick.pdf Webbrick:
http://popbubble.com/Lego/WebBrick/ WebBrick JavaScript API 1.0:
http://popbubble.com/Lego/WebBrick/CodeExamples/APIDemo.html webcam32:
http://www.webcam32.com/support/webcam32help/index.html JavaCamPush.cab:
http://www.webcam32.com/support/webcam32help/javacampush.html webrcx:
http://www.sckans.edu/~sireland/lego/webrcx/Schlüsselwörter: Lego, Mindstorms, RCX, Java, Webcam, BricxCC