Ich hab mir mal das LeJOS installiert. Klasse Sache - das erste Mal, das ich Java für was brauchen kann. Das einzige was unter OS X 10.2 nicht funktioniert ist die direkte Kommunikation zwischen Hostrechner (OS X Kiste) und Targetrechner (RCX Baustein) über den IR-Tower - also verteilte Anwendungen zwischen diesen beiden Systemen kann man nicht bauen. Der Grund ist scheinbar eine Inkompatibilität mit dem JNI (Java Native Interface) mit dem die Kommunikationsroutinen (in C geschrieben) in die Java-Klassen integriert werden. Ansonsten klappt aber alles ganz gut - auch exotische Sensoren (ich hab von HiTechnicStuff den IR-Näherungssensor und den Ultraschall-Entfernungssensor) funktionieren tadellos. Und die VM ist mit 16 KB klein genug das man noch genug Platz für seine eigenen Java-Programme hat.
Ausserdem ist ein Emulator dabei mit dem man seine RCX-Programme auf dem Hostrechner ausprobieren kann. Sehr praktisch für Debugging - der RCX ist da dann doch etwas zu primitiv für. Auch wenn der Emulator sehr primitiv ist - er spuckt nur traces aus, was so passiert ist. Keine grafische Darstellung, keine Sensorsimulation etc. Aber immer noch besser als garnix.
Wichtige Randbedingungen der Java-VM:
- keine Garbage Collection. Also muss man selber dafür sorgen, das nicht ständig neue Objekte instanziert werden und das Speicher nach Möglichkeit statisch alloziert wird - sonst stirbt der RCX früher oder später an Speichermangel (kommt einem das von den Mars-Robots bekannt vor? )
- einige Spracheinschränkungen wie kein Switch, keine Long-Datentypen, Felder nur maximal 511 Elemente, keine Interfacesicherheit (man kann also Objekte in falsche Slots stopfen ohne Exceptions zu kriegen - einiges der Typsicherheit von Java geht verloren)
- keine Introspection (also nicht auf die eigenen Klassen gucken können). In einem Robot warscheinlich eher zu verschmerzen, der soll in die Welt gucken, nicht in sich selbst
- das ganze JDK ist nicht da - logisch, das ganze ist eine extrem eingeschränkte Umgebung. Der RCX hat ja nur 32K Speicher ...
- eine sehr primitive Toolchain - alles Kommandozeile und so. Vielleicht kann man eine grafische Java-Umgebung dazu kriegen das alles richtig zu integrieren, denn im Prinzip wird vom LeJOS der normale Java-Compiler benutzt. Sowas wie Eclipse wäre aber IMO ein ziemlicher Overkill um einen kleinen RCX zu programmieren
Ich glaube ich werde in meinem vorweihnachtlichen Urlaub mal ein bischen meine Java-Kenntnisse auffrischen und gucken ob ich endlich mal meinen idealen frei bewegenden Robot zustande kriege, der nicht überall gegen rennt und wenigstens ein rudimentäres Gedächtnis seiner Umgebung aufbauen kann. Ich hab immerhin ja auch zwei RCX Bausteine - evtl. kriege ich auch endlich mal den mir vorschwebenden Lego-Truck mit zwei Gehirnen (eins für die Fortbewegung und grobe Sensorik zur Kollisionsvermeidung und eins für die Raumorientierung) hin. Und wie üblich hat man bei seiner Lego-Planung als erstes die Erkenntnis das man schlicht zu wenig Bausteine hat. Ich glaube das könnte als Hugos erstes Gesetz in die Geschichte eingehen: Du hast nie genug Legosteine.