[[Vorlage(Archiviert)]] ##[[Vorlage(Getestet,)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] [:sudo: Root-Rechte] [:Benutzer_und_Gruppen: Benutzer und Gruppen] }}} [[Inhaltsverzeichnis()]] [[Bild(Logo, align=left)]] Dieser Artikel beschreibt die Einrichtung einer Programmierumgebung für [wikipedia:Lego_Mindstorms:Lego Mindstorms NXT]. Der Artikel fasst verschiedene englisch- und deutschsprachige Quellen zusammen und ergänzt einige Informationen, vor allem was die Integration in den Editor [:gedit:] betrifft. Für das programmierbare Mindstorms-Gerät werden im Artikel sowohl die Bezeichnungen ''"NXT"'' als auch ''"Brick"'' verwendet. = NeXTTool und Compiler = Das [sourceforge2:bricxcc:Bricx Command Center] {en} (kurz BricxCC) enthält die notwendigen Programme: '''nbc''' und '''nexttool'''. nbc ist der Compiler für die C-ähnliche Programmiersprache [https://www.debacher.de/wiki/NXC NXC] {de}. Nexttool enthält Funktionen zur Verwaltung des Bricks. Der neueste Quellcode von BricxCC kann über [:Archiv/Subversion:Subversion] bezogen werden, zum Kompilieren muss [:Free Pascal:] installiert [1] werden: {{{#!vorlage Paketinstallation subversion fp-compiler fp-units-rtl fp-units-fcl fp-units-base libusb-dev }}} BricxCC herunterladen und NeXTTool kompilieren [2]: {{{#!vorlage Befehl svn co https://svn.code.sf.net/p/bricxcc/code/ cd code make -f nexttool.mak make -f wavrsocvtlinux.mak }}} Die Warnungen kann man ignorieren. Nun ins Unterverzeichnis `NXT` wechseln und den Compiler nbc bauen: {{{#!vorlage Befehl cd NXT make -f nbcunix.mak }}} Die erstellten Programme können nun nach '''/usr/local/bin/''' kopiert werden, auch die Manpage kommt an ihren angestammten Platz: {{{#!vorlage Befehl sudo cp nbc ../nexttool ../wavrsocvt /usr/local/bin/ sudo cp nbc.1 /usr/share/man/man1/ }}} = Programme zum NXT übertragen = Die Übertragung von Programmen kann sowohl über [:Bluetooth:] als auch über die USB-Schnittstelle erfolgen. Beide Möglichkeiten werden unten beschrieben. == Bluetooth == Der Vorteil der [:Bluetooth:]-Verbindung ist, dass kein Kabel benötigt wird. Allerdings dauert die Übertragung etwas länger, und unter Umständen zehrt Bluetooth stärker an den Batterien. Außerdem kann Bluetooth diverse Probleme machen, z. B. dass keine Verbindung zustande kommt. Sobald der NXT eingeschaltet wurde, kann seine Bluetooth-Adresse mit {{{#!vorlage Befehl hcitool scan }}} herausgefunden werden. Um die Bluetooth-Verbindung nutzen zu können, muss auch ein rfcomm-Kanal eingerichtet werden. In '''/etc/bluetooth/rfcomm.conf''' wird die Zuordnung der Bluetooth-Adresse zu einem Kanal (im Beispiel '''/dev/rfcomm1''') durchgeführt [3]: {{{#!code rfcomm1 { bind yes; device 00:16:53:10:FD:2C; # Bluetooth-Adresse des Bricks ("hcitool scan") channel 1; # Kanal ist immer 1 comment "Mindstorms NXT"; } }}} Der Kanal wird mit {{{#!vorlage Befehl sudo rfcomm bind all }}} verbunden. Um das bei jedem Systemstart automatisch durchzuführen, sollte man den folgenden Befehl in '''[:rc.local:/etc/rc.local]''' vor der Zeile `exit 0` eintragen: {{{#!code sh /usr/bin/rfcomm bind all }}} == USB == Damit der NXT-Brick auch ohne Root-Rechte von allen Mitgliedern der Gruppe `legonxt` verwendet werden kann, sind die nachfolgend beschriebenen Schritte notwendig, die auf der BricxCC-Seite [http://bricxcc.sourceforge.net/nbc/doc/nxtlinux.txt beschrieben] {en} sind. Demnach ist die Gruppe `legonxt` anzulegen und alle Benutzer, die den NXT verwenden können sollen, der Gruppe hinzuzufügen [4] [5]: {{{#!vorlage Befehl sudo addgroup legonxt sudo adduser legonxt }}} Eine neue [:udev:]-Regel unter '''/etc/udev/rules.d/45-legonxt.rules''' stellt sicher, dass beim Anstecken des Bricks (identifiziert über idVendor und idProduct) ein zusätzlicher symbolischer Link mit Schreibrechten für die Gruppe `legonxt` angelegt wird. Ihr Inhalt lautet: {{{#!code SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="0694", ATTR{idProduct}=="0002", SYMLINK+="legonxt-%k", GROUP="legonxt", MODE="0660" }}} Ab nun wird bei jedem Anstecken ein symbolischer Link in der Form '''/dev/legonxt-x-y''' angelegt. Damit die Aufnahme des Benutzers in der Gruppe `legonxt` wirksam wird, muss der Benutzer zuerst abgemeldet werden, auch von der grafischen Oberfläche. Nach einem Ab- und erneutem Anmelden kann mit dem Befehl `groups` kontrolliert werden, ob der User auch tatsächlich der neuen Gruppe angehört. Wenn das der Fall ist, können ab diesem Zeitpunkt die Befehle `nexttool` und `nbc` auch ohne Root-Rechte benutzt werden. = Kompilieren und Übertragen von Programmen = Nach Durchführung der oben beschriebenen Schritte können mit Hilfe des Befehls {{{#!vorlage Befehl nexttool -listbricks }}} alle verfügbaren Bricks aufgelistet werden. {{{#!vorlage Hinweis Bei der Verwendung von [:Bluetooth:] kann es vorkommen, dass der Befehl einige Male ausgeführt werden muss, bis eine korrekte Auflistung erfolgt. Falls Brick und Rechner noch nicht gekoppelt sind, erscheint zudem am Brick und am Rechner zuvor noch die Aufforderung zur Eingabe des PIN-Codes. }}} Der Output des obigen Befehls könnte für einen per USB und Bluetooth angebundenen Brick folgendermaßen aussehen, wobei die erste Zeile für die USB-Verbindung und die zweite Zeile für die Bluetooth-Verbindung steht (LEMMI ist in diesem Beispiel der Name des Bricks): {{{ 00165310FD2C=USB0::0X0694::0X0002::00165310FD2C::RAW BTH::LEMMI=BTH::LEMMI::00:16:53:10:FD:2C::5 }}} Zum Kompilieren und Übertragen wird das Programm `nbc` verwendet. Folgende Befehle kompilieren das Programm und übertragen es via Bluetooth oder USB zum Brick: * via BlueTooth: {{{#!vorlage Befehl nbc -S=BTH::LEMMI::00:16:53:10:FD:2C::5 -EF -r programm.nxc }}} * via USB: {{{#!vorlage Befehl nbc -S=USB -EF -r programm.nxc }}} Erklärung der Parameter: {{{#!vorlage Tabelle Parameter Bedeutung +++ -S Name der Bluetooth- oder USB-Verbindung (alles nach dem = im Output von `nexttool -listbricks`) +++ -EF Enhanced Firmware (optional, siehe [#Firmware unten]) +++ -r das Programm auf den NXT laden und starten }}} Die Programmierung selbst ist nicht Teil dieses Artikels. Einen guten ersten Einstieg vermittelt aber zum Beispiel das [https://www.debacher.de/wiki/NXC Debacher-Wiki] {de}. = Integration in gedit= Der GNOME-Editor [:gedit:] bietet für das Programmieren nützliche Funktionen wie Syntaxhervorhebung und ist mit Plugins erweiterbar. Im Folgenden ist beschrieben, wie man den Editor so einrichtet, dass bei Betätigen einer Tastenkombination das gerade bearbeitete NXC-Programm kompiliert und an den Brick gesendet wird. == Syntaxhervorhebung == Wenn man im [:Dateimanager:] auf eine NXC-Datei doppelklickt, wird diese zwar in [:gedit:] geöffnet, die Syntaxhervorhebung wird jedoch mangels einer Definition für '''.nxc'''-Dateien nicht durchgeführt. Man könnte nun für jede Datei unter ''"Ansicht -> Hervorhebungsmodus -> Quelltexte -> C"'' auswählen, auf Dauer ist es jedoch sinnvoll, eine Sprachdefinition für NXC hinzuzufügen. In gedit wird für die Syntaxhervorhebung die Bibliothek [https://wiki.gnome.org/Projects/GtkSourceView/ GtkSourceView] {en} verwendet. Hierfür kopiert man die Datei [[Anhang(nxc.lang)]] {dl} mit [:Root-Rechte:Root-Rechten] [4] ins Verzeichnis '''/usr/share/gtksourceview-3.0/language-specs/'''. {{{#!vorlage Hinweis Die Datei '''nxc.lang''' ist eine modifizierte '''c.lang''', in der die Zeilen {{{#!code xml *.c \}}} auf "nxc", "NXC" bzw. *.nxc angepasst wurden. }}} == Aufruf des Compilers == Unter ''"Werkzeuge -> Externe Werkzeuge verwalten"'' werden folgende Einstellungen vorgenommen (falls dieser Menüpunkt nicht verfügbar ist, muss erst das Plugin ''"Externe Werkzeuge"'' unter ''"Bearbeiten -> Einstellungen"'', Reiter ''"Plugins"'' aktiviert werden): [[Bild(gedit.png, 600)]] Unten der Code zum Kopieren. Hier sind je nach Präferenz die `ALIAS`-Zeilen für USB oder Bluetooth auszukommentieren und im Fall von Bluetooth die richtige Adresse einzutragen: {{{#!code bash #!/bin/sh NXC=$GEDIT_CURRENT_DOCUMENT_NAME #RXE=${NXC%.nxc}.rxe ## USB verwenden: #ALIAS=usb ## Bluetooth verwenden: ALIAS=BTH::LEMMI::00:16:53:10:FD:2C::5 nbc -S=$ALIAS -EF -r $NXC }}} = Firmware = Die ''"enhanced firmware"'' beinhaltet einige Funktionen (multidimensionale Arrays, Winkelfunktionen, ...), die in der Standard-Firmware nicht implementiert sind. Auch wurden einige Bugs behoben. Diese Firmware kann von der BricxCC-Seite als [http://bricxcc.sourceforge.net/lms_arm_nbcnxc.zip lms_arm_nbcnxc.zip] {dl} heruntergeladen werden. = Links = * [https://www.lego.com/en-us/mindstorms/ Lego Mindstorms] {en} - die offizielle Lego-Homepage * [https://www.lego.com/en-us/mindstorms/downloads/ Downloads] {en} - u.a. EV3-Firmware * [heise:-3055305:Analysiert: Die Lego-Roboter greifen an] {de} - heise Security, 01/2016 * [wikipedia:Lego_Mindstorms:] - Wikipedia * [sourceforge:tuxminds:TuxMinds] - eine alternative grafische Entwicklungsumgebung * [sourceforge2:nxceditor:nxcEditor] {en} - Editor für NXC (Syntax-Hervorhebung für NXC, direkte Übertragung der Programme auf den NXT) * [sourceforge2:bricxcc:Bricx Command Center] {en} * [https://www.csquad.org/2008/06/12/build-nxc-programs-under-debian-gnulinux/ Build NXC programs under Debian GNU/Linux] {en} - Blogbeitrag, 06/2008 * [:Archiv/nxt-ROS:nxt-ROS] - älterer Artikel über NXT unter dem Roboterbetriebssystem [wikipedia:Robot_Operating_System:ROS] #tag: Hardware, Editor, Programmierung, Lego