BricxCC mit EV3

Aus HSHL Mechatronik
Version vom 4. Februar 2014, 16:33 Uhr von Gerhard Dick (Diskussion | Beiträge) (Derzeitige Möglichkeiten zur Programmierung des EV3 in BricxCC)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Die Vorteile, die eine Entwicklungsumgebung wie BricxCC für die Programmierung des EV3 von Lego Mindstorms bietet, liegen auf der Hand. Durch die Benutzung von komplexen Hochsprachen, wie zum Beispiel C, C++ oder Java, ist es möglich die gesamte Vielfalt des Mikroprozessors im EV3 auszuschöpfen. Da im inneren des EV3 ein vollwertiges Linux schlummert, hätte man damit fast unbegrenzte Möglichkeiten in der Programmierung. Die originale Programmieroberfläche von Lego ist gut als Einstieg in die Programmierung, jedoch für Fortgeschrittene Nutzer, wie zum Beispiel Mechatronik-Studenten, kaum zu gebrauchen.

Offiziell ist es es noch nicht möglich den EV3 in BricxCC zu programmieren. John Hansen, der Entwickler von BricxCC, arbeitet aber bereits daran. Wer dennoch nicht darauf verzichten will oder kann, hat über einige Umwege bereits jetzt schon die Möglichkeit BricxCC als Entwicklungsumgebung für den EV3 zu testen. In diesem Tutorial wird aufgezeigt welche Schritte erforderlich sind, um C++-Code über BricxCC auf dem EV3 zum Laufen zu bringen.



Vorbereitungen

Weil BricxCC unter Windows läuft und der EV3 unter Linux, benötigt man folgenden Cross-Compiler, der die nötigen Linux-Bibliotheken und Linker für den ARM9-Prozessor des EV3 beinhaltet.

CodeSourcery G++ Lite

Anschließend installiert man die Dateien in einem, möglichst kurzen, Pfad (wegen der weiteren Handhabung der Dateien). Zum Beispiel: c:\CSLITE

Nun muss eine Umgebungsvariable für das System hinzugefügt werden. Unter Systemsteuerung\System\Erweiterte Systemeinstellungen\Umgebungsvariablen fügen wir nun folgenden Pfad in die Umgebungsvariable PATH ein:

c:\CSLite\bin;%path%

Nun muss eine aktuelle Version von BricxCC installiert werden, welche hier zu finden ist:

http://bricxcc.sourceforge.net/test_releases/bricxcc_setup_33810_20130220.exe

Als nächstes braucht man das neueste Test-Release von BricxCC. Nur die Test-Releases unterstützen einen Teil der Funktionen des EV3. Zu finden sind diese unter folgender Adresse:

http://bricxcc.sourceforge.net/test_releases/

Die Dateien des Test-Releases müssen über eine bestehende BricxCC-Installation extrahiert werden. Dabei müssen die alten Dateien überschrieben werden!

Zusätzlich werden die Dateien linux_tools.zip und lms_api.zip benötigt.

Die Datei linux_tools.zip extrahiert man nun in einen weiteren kurzen Pfad, wie zum Beispiel: C:\tools

Nun zurück zu PATH in den Umgebungsvariablen navigieren und foglende Zeile hinzufügenfügen: c:\CSLite\bin;c:\tools\;%PATH%

Dann startet man BricxCC und updatet den EV3 auf die neueste Firmware (die hier beschriebene Variante funktioniert nur mit aktuellen Firmwares ab Version 1.03H!) Lego-Firmware

Als Abschluss der Vorbereitungen muss in den Einstellungen (Preferences) zu dem Reiter Compiler/EV3 navigiert werden. Dort fügt man im Makefile template hinter die Variablen von "# how to link executable" eine zusätzliche Variable -static ein.

Die Vorbereitungen sind damit abgeschlossen.



ein erstes kleines Programm

Als erstes lädt man die Headerdateien Bytecodes.h, lmstypes.h und lms2012.h von https://github.com/robotnav/robotnav herunter und fügt in diese 3 Dateien in den gleichen Ordner, in dem man sein C-Projekt abspeichern möchte. Dies ist erforderlich, um die Headerdateien einbinden zu können.

Als Testprogramm, um einen kleinen Überblick über den Aufbau der Motorbefehle zu bekommen, kopieren wir den Code des Open Loop Control von http://robotnav.com und fügen diesen in eine neue BricxCC-Datei ein, welche wir als program.c abspeichern.

Dieses Testprogramm kann man nun direkt aus BricxCC kompilieren, auf den EV3 downloaden und von BricxCC heraus auch schon starten. Um das Programm jedoch direkt aus dem EV3 heraus starten zu können, sind weitere Schritte notwendig.

Dafür müssen wir die Datei zunächst mit dem Cross-Compiler, den wir zuvor installiert haben, kompilieren. In der kostenfreien Lite-Version ist dies nur durch Anwendung der cmd.exe-Konsole möglich, welche unter c:\Windows\system32\cmd.exe zu finden ist. Mit dem Befehl cd navigieren wir nun in das Verzeichnis, indem sich die program.c, samt Headerdateien, befindet.

Nun tippen wir folgenden Befehl ein: arm-none-linux-gnueabi-gcc program.c -o program

Im selben Verzeichnis wurde nun ein Datei kompiliert, welche wir in das Stammverzeichnis einer MicroSD-Karte verschieben. Diese Datei ist bereits durch den ARM9-Prozessor ausführbar, kann jedoch von der originalen Lego-Firmware nicht gestartet werden. Dafür benötigen wir eine zusätzliche Startdatei, die dem Betriebssystem mitteilt, welches Programm es ausführen soll. Für diese Datei erstellt man auf der MicroSD-Karte einen "myapps"-Ordner, in den man die run_program.rbf kopiert. Diese lässt sich nun ausführen und das Testprogramm startet! Der Motor dreht sich für 2 Sekunden.

Wichtig hierfür ist, dass die Testdatei "program" heisst, sonst kann Sie von der Startdatei nicht gefunden werden!

Die Startdatei wurde in Java Bytecode, einer Assemblersprache verfasst. Hier wird sehr gut erläutert wie man diese selbst mit dem lmsasm_tool programmieren kann und so auch andere Dateinamen einfügen kann.



Schlusswort

In diesem Codebeispiel ist sehr gut zu erkennen, wie ein Motor im EV3 angesteuert wird. Wer mehr darüber wissen möchte, sollte sich die eingefügten Headerdateien etwas genauer anschauen. Dort sind alle Bytecodes und Zugriffssequenzen, sowie ihre spezifischen Hexadezimalwerte zu finden. Der Zugriff auf die Motoren und Sensoren über diese Codesequenzen gestaltet sich jedoch noch etwas schwierig, da konkrete Funktionsaufrufe der einzelnen Klassen, wie man es zum Beispiel von NXC gewohnt ist, noch nicht möglich sind. Um dies zu ermöglichen, müssen die dafür nötigen Bibliotheken inklusive der einzelnen Klassen erst noch verfasst werden.

Auf http://robotnav.com wurde mit diesen Mitteln ein Zeichenroboter komplett in C++ programmiert.

Desweiteren wurde der gesamte Source Code der EV3-Firmware feigegeben, in dem sich noch weitere Funktionen und Befehle des EV3 verbergen.


Andere interessante Möglichkeiten der Programmierung des EV3 in C++ werden auf http://monobrick.dk beschrieben, wo die Software wahlweise über eine alternative Firmware oder einen Tunnel (Fernsteuerung) vom PC eingespeist wird.


Quellen:

http://www.lego.com

http://www.robotnav.com

http://monobrick.dk