Lego Mindstorms Simulator

Vor einiger Zeit hatte ich hier ja mal [über meine Bachelorarbeit geschrieben][1stpost]. Das Thema war, einen Simulator für Lego Mindstorms Roboter zu schreiben, um Schulkindern besser das Programmieren beizubringen. Als ich jetzt gerade [meine Seite][wiki] im Wiki des Lehrstuhls aktualisierte, fiel mir auf, dass ich auch hier ja noch gar nichts dazu geschrieben hatte, wie das ganze ausgegangen ist und wie sich das seither entwickelt. Das muss ich dringend mal nachholen.

Natürlich ist die Arbeit fertig, aber ich habe seit dem an dem Simulator noch etwas gearbeitet. Hier mal ein aktueller Screenshot:

![Der virtuelle Roboter in einer virtuellen Umgebung.](/bachelorthesis/finished_screenshot_small.jpg)

Die wesentlichen Grundfeatures haben sich dabei gar nicht so sehr gewandelt: Der Simulator führt Lego NXT Bytecode aus und ergibt damit Befehle für eine sehr, sehr einfache Physikschicht. Die bewegt den Roboter basierend auf den Motorwerten und kümmert sich um Kollisionen. Außerdem berechnet sie die aktuellen Werte der Sensoren, und liefert die wieder an den Bytecode-Emulator. Am oberen Ende sitzen eine Soundausgabe (und Soundeingabe, für den Schallsensor) und natürlich ein 3D-Interface, was nicht sonderlich aufwändig, aber sehr zweckmäßig ist.

Technisch gesehen ist das ganze nicht sonderlich aufregend, aber doch recht viel Schreibarbeit. Alles ist in C++ implementiert, die Grafik nutzt OpenGL, die Soundausgabe OpenAL und die Anbindung an das Betriebssystem geschieht mit SDL. Der wohl interessanteste Teil ist die Netzwerkunterstützung: Eine Netzwerkschicht sitzt noch zwischen Emulator und Physik und schickt Ausgabe-Befehle an den Server, beziehungsweise die fertigen Positionen und Sensorenwerte zurück an den Client. Im Vergleich zu richtigen Computerspielen ist das nicht sonderlich spannend implementiert, aber es funktioniert gut genug im LAN. Zu guter letzt gibt es noch ein paar Features am Rande, wie die Möglichkeit, den Roboter hochzuheben, zu drehen und wo anders abzusetzen.

Die tatsächliche Bachelorarbeit ist im Wesentlichen eine recht detaillierte technische Dokumentation des Codes. Da ich mir nicht ganz sicher war, wie detailliert ich gehen sollte, ist sie deutlich zu lang geworden, was aber niemanden störte. Im Endeffekt kann ich an so ziemlich jeder Ecke des Simulators sagen, dass man es hätte noch schöner, realistischer oder besser machen können; für ein Werkzeug, um Schulkindern das Programmieren beizubringen, braucht man das aber nicht. Meine Betreuer und die Gutachter waren auf jeden Fall begeistert, und haben mir die Note 1,0 gegeben. Ich würde lügen, wenn ich sagen würde, dass ich da nicht ziemlich stolz drauf bin.

Und weiter

Tatsächlich war ich anscheinend so gut, dass man mir einen HiWi-Job angeboten hat. Daher arbeite ich seit einiger Zeit für den Lehrstuhl als Programmierer. Meine Hauptaufgabe hierbei: Den Simulator verbessern. Neben allgemeinen Verbesserungen gibt es da zwei entscheidende Projekte.

Zuerst gibt es Gedanken, neue Formen zu entwickeln, wie man den Roboter (in der realen Welt) steuern kann, beispielsweise von Handys aus auf verschiedene Arten. Natürlich soll das auch auf dem Simulator laufen, denn der echte Lego-Roboter ist in der Zwischenzeit nicht billiger geworden. Daher habe ich den Simulator so erweitert, dass man recht einfach eine Fernsteuerung für ihn basteln kann. Im Prinzip ist das nichts furchtbar spannendes, denn der Netzwerkmodus hat ja schon alle Features, die dafür nötig sind. Vor allem musste ich das User-Interface etwas anpassen. Die anderen Projekte sind noch nicht so weit, aber ich kann zumindest schon mal das Demoprogramm (gerade im Leerlauf) zeigen:

![Das Programm enthält Felder zur Auswahl des Servers, Felder die den aktuellen Wert der Sensoren anzeigen, und Bereiche um die Motorausgänge zu steuern.](/bachelorthesis/robosim_remote_small.jpg)

Sonderlich hübsch ist das sicher nicht, es geht aber bei diesem sehr kleinen und einfachen Java-Programm auch nur darum, zu zeigen, dass es geht.

Ein HTC Desire Telefon auf dem der Simulator läuft.

Das andere große Projekt: Der Simulator soll auch auf Tablets laufen, und da die Computer-Supported Learning Research Group (wo das alles stattfindet) der mehr-oder-minder offizielle Android-Lehrstuhl ist, hieß das natürlich: Der Simulator muss auf Android portiert werden. Ich bin ja eigentlich eher iPhone gewöhnt, aber es ist auch mal eine interessante Erfahrung zu sehen, wie die Leute in Mountain View es machen. Ich werde dazu demnächst etwas mehr schreiben. So viel vorab: Eine glühende Empfehlung wird es nicht werden. Dafür ist das Native Development Kit, was man braucht um im Java-lastigen Android mit C++ zu programmieren, noch zu roh.

Ein Apple iPhone 3GS mit dem Simulator.

Im Interesse der Fairness, und vor allem um Multitouch zu testen ohne die Hardware zu haben (das Android-Telefon oben ist vom Lehrstuhl geliehen), habe ich aber auch einen voll funktionsfähigen iPhone-Port. Wer gut aufpasst, dem mag aufgefallen sein, dass weder das HTC-Handy oben noch mein iPhone Tablets sind. Leider ist dies unvermeidlich, da weder die bestellten Android-Tablets des Lehrstuhls, noch mein privates iPad 2, bis jetzt da sind. Die Handys reichen aber aus, um zu testen, ob der Simulator überhaupt auf dem Betriebssystem läuft. Größere Bildschirme sind dann recht einfach.

Zu guter letzt: Ja, es ist geplant den Simulator zu veröffentlichen, als Open Source sogar. Wann und wie genau steht noch nicht fest, aber ich werde es hier im Blog und [auf Twitter](https://twitter.com/zcochrane) bekannt geben, sobald es läuft.

Geschrieben am 14. April 2011 um 16:23

4 Kommentare

  1. Geschrieben 2 Juli 2011

    Sylwia

    thank you

  2. Geschrieben 10 Oktober 2011

    Thomas Daniels

    Hallo Herr Kammer,

    habe mit großem Interesse Ihren NXT-Simulator gesehen und frage mich, ob man auch aus der graphischen Umgebung heraus einen bytecode erzeugen kann, um diesen dann mit Ihrem Simulator auszuführen.
    Geht das?
    Über zweckdienliche Hinweise würde ich mich sehr freuen.

    Freundliche Grüße,
    Thomas Daniels
    Carl-Fuhlrott-Gymnasium Wuppertal.

  3. Geschrieben 14 Dezember 2011

    Stefan Steinborn

    Bin sehr begeistert - funktioniert bestens!

    Ich wäre an einer Weiterentwicklung des Programms sehr interessiert, vor allem das Speichern der Einstellungen (z.B. Sensor-Konfiguration) fehlt mir (oder hab ichs nur nicht gefunden?).

    Open Source wär auch gut, dann könnte ich es selber machen :-)

    Danke!

    Viele Grüße von Stefan Steinborn.

  4. Geschrieben 19 Dezember 2012

    Piet Seibt

    Finde ich ein klasse programm.
    Wo kann man es Dowanloaden?

New comments can no longer be posted because it got to annoying to fight all the spam.