C't-Sim Programmierung

Aus c't-Bot Wiki
Wechseln zu: Navigation, Suche

Einführung

Der c't-Bot enthält einen programmierbaren Mikrocontroller für den die Intelligenz vom Anwender definiert und implementiert werden muss. Die Programmierung kann, prinzipiell, in einer beliebigen Sprache erfolgen, der Heise-Verlag -- und wir damit auch -- hat sich für die Verwendung von C entschieden. Um den Bot bei der Jungfernfahrt nicht mit ungetesteter Logik los zuschicken, bietet der Verlag eine rudimentäre Simulation an, auf der die Botlogik zuerst virtuell getestet werden kann. Man entschied sich hierbei für die kostengünstige Variante der Javaentwicklung, unter Zuhilfenahme der Java3D Bibliotheken.

Botlogik

Diese ist bei der verfügbaren Version in C implementiert und durch die mitgelieferten Kommentare ein guter Einstiegspunkt für eigene Entwicklungen. Bei Eigenkreationen zu beachten:

Speicherbedarf
Dem Bot stehen, in der Standardausführung nur wenige KB zur Verfügung
Sensorauswertung
Je nach Ausbaustufe hat der Bot nicht die gesamte Bandbreite an Sensoren zum Auswerten.
 » Besonders wichtig bei weitergereichten Logiken
Übersetzung
Der Mikrocontroller kommt mit dem für das Entwicklungssystem kompilierten Programm nicht zurecht.
Er benötigt ein explizit für ihn erzeugtes Kompilat.

Simulator

Die Simulationsumgebung wurde in Java realisiert. Sie ist als Client-Server-Lösung konzipiert und verwendet das Model-View-Controller-Modell. Nach dem Start der Anwendung öffnet sich eine 3D-Ansicht auf die simulierte Welt und man wird nach der Art des zu erwartenden Bots gefragt. Im Simulator ist zu Testzwecken ein Testbot enthalten, der anstelle eines echten Bots oder seines reinen C-Pendants genutzt werden kann, um die Simulation zu testen.

Autoren: Wolverine

Linux

Installation von Java unter Linux

JDK

Für den c't-Sim wird das JDK 5.0 von Sun benötigt.

Eclipse

Die Entwicklungsumgebung für den ct-Sim sie acuh den ct-Bot ist Eclipse. Diese lädt man als Archiv herunter und packt sie in ein beliebiges Verzeichnis aus. Eine weitere Installation ist nicht notwendig.

Hinweis: Im Menü Window/Preferences bei Java/Compiler/JDK Compliance muß die Version 5.0 aktiviert werden, ansonsten gibt es Kompilierfehler beim übersetzen des c't-Sim.

Java3D Bibliothek

Für die Anzeige der virtuellen Welt wird die Java3D Bibliothek ab Version 1.4.x benötigt.

JD2XX Bibliothek

Diese Bibliothek kann nur für USB-UART Geräte mit FTDI Chip, wie z.B. dem USB-2-Bot Adapters, verwendet werden. Damit der D2XX-Treiber unter Linux funktioniert, benötigt man das Programm socat. Mit Hilfe von socat kann man beliebige Geräte miteinander verbinden. Folgender Befehl leitet die Daten vom Roboter an den c't-Sim weiter:

socat TCP4:localhost:10001 /dev/ttyUSB0,raw,b9600

RXTX Bibliothek

Alternativ zur J2DXX Bibliothek kann auch die RXTX Bibliothek verwendet werden. Dank eines Patches von Max Odenthal funktionieren damit sowohl USB-UART Geräte mit anderen USB Chips als auch normale RS232 Module. Die Installation der RXTX Bibliothek erfolgt entweder anhand der Binaries oder durch neukompileren des Sourcecodes.

Installation mit Binaries

Zur Installation stehen für einige Plattformen (x86, x86_64, ia64) die Bibliothek als Binary zur Verfügung. Dazu benötigt man nur die Datei rxtx-2.1-7-bins-r2.zip.

Daraus kopiert man folgende Dateien:

RXTXcomm.jar       nach  /jre/lib/ext
librxtxSerial.so   nach  /jre/lib/[machine type] (i386 z.B.)

Installation aus dem Soureccode

Zur Installation werden neben den aktuellen rxtx-Quellen folgende Pakete benötigt:

autoconf, automake, libtool, gnu make bzw. gmake, unzip

Vor dem Start der Installation muß man dem configure Skript die Pfadangabe zum Java JDK mitteilen, falls das JDK nicht im Pfad steht:

$ JAVA_HOME=$HOME/jdk<version>
$ export JAVA_HOME

Es wird dringend empfohlen falls die javacomm Bibliothek installiert ist, javacomm zuerst zu deinstallieren bevor rxtx installiert wird.

Zum uebersetzen und installieren von rxtx:

$ unzip rxtx-<version>.zip
$ cd rxtx-<version>
$ ./configure
$ make install

Evtl. werden für den letzten Schritt der Installation Root-Rechte benötigt.

$ sudo make install

Den CLASSPATH muss man nicht anpassen. Eclipse erkennt die Library auch so.


Windows

Installation von Java unter Windows

JDK

Für den c't-Sim wird das JDK 5.0 von Sun benötigt.

Eclipse

Die Entwicklungsumgebung für den ct-Sim und den ct-Bot ist Eclipse. Diese lädt man als Archiv herunter und packt sie in ein beliebiges Verzeichnis aus. Eine weitere Installation ist nicht notwendig.

Hinweis: Im Menü Window/Preferences bei Java/Compiler/JDK Compliance muß die Version 5.0 aktiviert werden, ansonsten gibt es Kompilierfehler beim übersetzen des c't-Sim.

Java3D Bibliothek

Für die Anzeige der virtuellen Welt wird die Java3D Bibliothek ab Version 1.4.x benötigt.

JD2XX Bibliothek

Für die Kommunikation zwischen c't-Sim und dem realen c't-Bot über den USB-2-Bot Adapters wird diese Bibliothek verwendet. Die JD2XX Bibliothek kann nur für USB-Seriell Wandler mit FTDI Chip, wie z.B. dem USB-2-Bot Adapters, verwendet werden. Für USB-Seriell Wandler mit Chips anderer Hersteller oder RS232 Module die über die COM-Schnittstelle des PC's angebunden sind, verwendet man stattdessen die JAVACOMM oder RXTX Bibliothek.

Zur Installation benötigt man die D2XX Treiber und die Java-API für den D2XX Treiber. Aus dem Archiv kopiert man die Datei jd2xx.dll, in das Verzeichnis C:\Windows\system32.

JAVACOMM Bibliothek

Für die Kommunikation zwischen c't-Sim und dem realen c't-Bot über reale oder virtuelle COM-Ports wird diese Bibliothek verwendet. Dank eines Patches von Max Odendahl funktionieren damit sowohl USB-Seriell Wandler mit USB Chips anderer Hersteller als auch RS232 Module.

RXTX Bibliothek

Alternativ zur JAVACOMM Bibliothek kann für die Kommunikation zwischen c't-Sim und dem realen c't-Bot über reale oder virtuelle COM-Ports auch die RXTX Bibliothek verwendet werden. Die Installation der RXTX Bibliothek erfolgt anhand der Binaries.

Installation

1. aktuelle RXTX-Installationen holen.

Zur Installation steht die Bibliothek als Binary für Windows, Linux, Solaris und Mac zur Verfügung. Dazu benötigt man nur die Datei rxtx-2.1-7-bins-r2.zip. (Darin stecken alle Dateien für alle Betriebssysteme)

2. Das Zip-File irgendwo auspacken.

RXTX Zip File

3. Im Verzeichnis \rxtx-2.1-7-bins-r2\ die Datei RXTXcomm.jar in das Verzeichnis der JAVA-Installation .\jre\lib\ext\ kopieren.

Java Directory

Hier lauern Abseitsfallen. Wenn mehrere JDKs und JREs installiert sind, muß man in das installieren, was von Eclipse verwendet wird.

Das sieht bei mir in Eclipse unter WINDOW-PREFERENCES... z.B. so aus:

Eclipse Preferences

Die Dateien unter 3. und 4. wurden nur ins jdk1.5.0_06 kopiert, weil damit der ct-SIM standardmäßig gebaut wird.

4. Im Verzeichnis \rxtx-2.1-7-bins-r2\Windows\i368-mingw32\ die Dateien rxtx*.dll in das Verzeichnis der JAVA-Installation .\jre\bin\ kopieren. Ansonsten wie unter 3..

ct-Sim

Dann noch einige Dinge, die ebenfalls stimmen müssen.

5. Den Punkt hätte ich fast vergessen, es ist aber der Wichtigste.

Der Patch von Max Odendahl [max.odendahl@t-online.de] aus der Mailingliste muß eingespielt werden. Den gibt es bisher nur in der Mailingliste und ich denke, er wird kurzfristig veröffentlicht und in die Codebase aufgenommen. -> Seit dem 20.5.2006 ist der Patch in der Codebase.

Wie man einen Patch einspielt, steht hier:

6. In ct-sim.xml den COM-Port eintragen, der verwendet werden soll.

ct-sim.xml

(Man erfährt den Port im Zweifel aus START-SYSTEMSTEUERUNG-SYSTEM-HARDWARE-GERÄTE_MANAGER-Anschlüsse(COM und LPT))

7. In ComConnection.java die rxtx-Komponenten bekannt machen.

import gnu.io.*;//rxtx serial IO

eintragen

und

//import javax.comm.*; 

auskommentieren

ComConnection.java


Und was auch noch stimmen muß, wenn man bisher den D2XX-Treiber für die FTDI-Chips benutzt hat:

8. Für die oben beschriebene Konfiguration muß der USB/Seriell-Wandler natürlich einen COM-Port im Windows zur Verfügung stellen. Das macht der VCP-Treiber. Die neuesten CDM FTDI Treiber (ab Version 2.0.0) beinhalten jetzt die beide Treibertypen D2XX und VCP. Mit den älteren Treibern war es nicht möglich D2XX und VCP Treiber gleichzeitig zu installieren. Dies ist mit den neuen Teibern jetzt möglich . Alte FTDI Treiber sollte man vor der Installation unter SOFTWARE in der Systemsteuerung deinstallieren. (vorher den USB-Stecker herausziehen). Dann den USB-Stecker wieder einstecken. Es folgt die bekannte Installationssession, wobei dann D2XX und VCP-Treiber installiert werden.

Ausführliche Anleitung gibt hier

Die jeweils aktuellen VCP-Treiber gibts hier

Das ist der derzeit aktuellste VCP-Treiber

9. Die Belohnung

Simulator startet
Warte auf Verbindung vom c't-Bot auf Port 10001
Stable Library
=========================================
Native lib Version = RXTX-2.1-7
Java lib Version   = RXTX-2.1-7
Serial-Connection aufgebaut

So sieht es in der Eclipse-Konsole aus, wenn alles läuft. :-)

Es funktioniert jetzt jede serielle Verbindung über den COM-Port, egal mit welcher Hardware.

RXTX Library Installationsanleitung von ct-Bot Forum User rlishere. Ins Wiki übernommen durch Marvin

Weblinks


macOS

Da der Simulator c't-Sim in Java geschrieben ist, ist der Betrieb prinzipiell auch unter MacOS X möglich. Gleiches gilt für den simulierten Bot, der in der Programmiersprache C geschrieben ist.

Die hier aufgeführten Probleme sind inzwischen gelöst, Bot und Sim funktionieren zu 100% auch unter Mac OS X. Für weitere Informationen zur Java3D Installation siehe Installationsanleitung Java3D.

Der praktischen Umsetzung stehen zur Zeit noch einige Probleme entgegen:

java3d
Das Projekt verwendet die Bibliothek java3d in der Version 1.4. Dies ist eine Beta-Version, die momentan für den Mac noch nicht verfügbar ist. Es gibt einen Patch, der den Simulator an die Version 1.3 von java3d, die auch für den Mac verfügbar ist, anpaßt. Ein solchermaßen gepatchter c't-Sim läßt sich allerdings nicht mehr mit java3d 1.4 verwenden, was die Aufnahme der Änderungen in die offizielle Codebasis erschwert. Dazu wäre es nötig, grundsätzlich mit der Version 1.3 zu arbeiten. Dies ist im offiziellen Forum vorgeschlagen worden, eine weitere Diskussion steht jedoch noch aus.
Endian (Byte Order)
Den technischen Hintergrund findet man in der Wikipedia.
Da Java unabhängig von der verwendeten Hardware immer Big Endian verwendet, C jedoch je nach Hardware Little oder Big Endian, kann es bei der Kommunikation zwischen (simuliertem) c't-Bot und c't-Sim auch dann Probleme geben, wenn die Programme auf derselben Maschine laufen. Die momentan im CVS verfügbare Version der beiden Programme beseitigt die Probleme durch explizite Bit-Operationen. Wenn die Kommunikation zwischen c't-Bit und c't-Sim um weitere Daten ergänzt wird, so muß auch für diese die Byte Order angepaßt werden.

Autoren: Ansgar