HSG |
|
Auf der Seite wiki.ubuntuusers.de/Archiv/Mindstorms findet man eine erprobte Anleitung zur Installation des nbc-Compilers und der nexttools.
Zuerst wird eine neue Gruppe legonxt angelegt.
mk@x2:~$ sudo addgroup legonxt [sudo] password for mk: Lege Gruppe »legonxt« (GID 1003) an ... Fertig.
Dann werden Mitglieder in die Gruppe eingefügt.
mk@x2:~$ sudo adduser mk legonxt Füge Benutzer »mk« der Gruppe »legonxt« hinzu ... Adding user mk to group legonxt Fertig.
Jetzt ist eine Datei 45-legonxt.rules mit folgendem Inhalt zu erstellen und nach /etc/udev/rules.d/ zu kopieren.
SUBSYSTEM=="usb_device", ACTION=="add", SYSFS{idVendor}=="0694", SYSFS{idProduct}=="0002", SYMLINK+="legonxt-%k", GROUP="legonxt", MODE="0660", RUN+="/etc/udev/legonxt.sh"
Das kann man z.B. mit
mk@x2:~$ sudo gedit /etc/udev/rules.d/45-legonxt.rules
erreichen. Danach soll eine Datei legonxt.sh mit folgendem Inhalt erstellt und nach /etc/udevkopiert werden.
#!/bin/bash # GROUP=legonxt if [ "${ACTION}" = "add" ] && [ -f "${DEVICE}" ] then chmod o-rwx "${DEVICE}" chgrp "${GROUP}" "${DEVICE}" chmod g+rw "${DEVICE}" fi
Das kann man z.B. mit
mk@x2:~$ sudo gedit /etc/udev/legonxt.sh
erreichen. Dieses Script muss dann ausführbar gemacht werden.
mk@x2:~$ sudo chmod a+x /etc/udev/legonxt.sh
Damit sollte nach einem reboot die usb-Unterstützung funktionieren. Es gibt dann in /dev legonxt-Devices.
mk@x2:/dev$ ls -l|grep lego lrwxrwxrwx 1 root root 15 2011-02-15 16:41 legonxt-6-3 -> bus/usb/006/002 lrwxrwxrwx 1 root root 15 2011-02-15 16:41 legonxt-usb1 -> bus/usb/001/001 lrwxrwxrwx 1 root root 15 2011-02-15 16:41 legonxt-usb2 -> bus/usb/002/001
Auch hier kann man nach der Anleitung unter wiki.ubuntuusers.de/Archiv/Mindstorms vorgehen.
Zunächst sucht man mit hcitool scan bei eingeschaltetem NXT-Baustein nach der Adresse.
hsg@hsg:~$ hcitool scan Scanning ... 00:16:53:11:25:41 NXT
Wenn man soweit ist, weiß man, dass die Hardware z.B. ein Bluetooth-Dongle funktioniert. Wir haben in Abweichung von der Anleitung rfcomm0 konfiguriert. Es ist möglich, dass ein Restart der Bluetooth-Unterstützung mit
hsg@hsg:~$ sudo /etc/init.d/bluetooth restart [sudo] password for hsg: * Stopping bluetooth [ OK ] * Starting bluetooth [ OK ]
nützlich ist. Bei uns reagiert s.B. das Bluetooth-Applet seltsam, was nach einen Restart behoben war. Beim Pairing haben wir auf beiden Seiten '1234' als Key eingetragen.
mk@x2:~/bricxcc$ ./nexttool -listbricks 00165300686B=USB0::0X0694::0X0002::00165300686B::RAW
NQC lässt sich unter Ubuntu ganz leicht mit Hilfe des Software-Centers und dem Suchbegriff 'nqc' installieren.
In einem nächsten Schritt gilt es, den USB-IR-Tower zum Laufen zu bringen. Wie
mk@x2:~$ lsusb .... Bus 006 Device 003: ID 0694:0001 Lego Group Mindstorms Tower ....
zeigt, wird das USB-Gerät erkannt. Mit
mk@x2:~$ sudo modprobe legousbtower vendor=0x0694 product=0x0001
wird der Treiber geladen.Das Kommando 'dmesg' gibt am Ende
[16096.820018] legousbtower 6-3:1.0: LEGO USB Tower #0 now attached to major 180 minor 160 [16096.822268] legousbtower 6-3:1.0: LEGO USB Tower firmware version is 1.0 build 134 [16096.822518] usbcore: registered new interface driver legousbtower [16096.822524] legousbtower: v0.96:LEGO USB Tower Driver
aus, was den Erfolg der Aktion zeigt. Jetzt kann man mit
mk@x2:~$ sudo chmod 666 /dev/usb/legousbtower0
die Berechtigungen setzen und mit
mk@x2:~$ echo ABC > /dev/usb/legousbtower0
probeweise etwas an das Device senden. Ein grünes Aufleuchten am Tower zeigt den Erfolg der Aktion. Damit NQC zugreifen kann, wird ein symbolischer Link gesetzt.
mk@x2:/dev/usb$ sudo ln -s /dev/legousbtower0 /dev/usb/lego0 mk@x2:/dev/usb$ ls -l insgesamt 0 lrwxrwxrwx 1 root root 18 2011-02-12 16:01 lego0 -> /dev/legousbtower0 crw-rw-rw- 1 root root 180, 160 2011-02-12 15:30 legousbtower0
und die Umgebungsvariable RCX_PORT gesetzt.
export RCX_PORT=usb
Schließlich zeigt nach
nqc -msg 7
das grüne Aufleuchten am Tower, dass NQC zugreifen kann.
Herunterladen der Firmware firm0328.zip:
mk@x2:/dev/usb$ nqc -firmware /home/mk/Desktop/firm0328.lgo Downloading firmware:............................................................................................................................. Current Version: 00030001/00030208
Das Herunterladen dauert einige Zeit, der Zähler am RCX zeigt am Ende 2494 (?) an.
Man kann auf das Display des RCX nicht so einfach 'Hallo Welt' schreiben, daher begnügen wir uns damit, eine halbe Sekunde den Ton 'a' zu spielen. Zur Programmentwicklung wurde Kate benutzt. Man darf nicht vergessen, die Umgebungsvariable in der Shell zu setzen. Wie üblich, kann man mit nqc -help eine ausführliche Hilfe der Möglichkeiten von nqc bekommen.
Wie immer beim Schreiben eines Programms wird mit einem Editor z.B. Kate die Quelltextdatei hier p0.nqc erzeugt.
task main() { PlaySound(SOUND_FAST_UP); }
Der Compiler nqc macht daraus eine Maschinensprachedatei hier p0.bin.
mk@x2:~/1112/mindstorms$ nqc -Op0.bin p0.nqc
Die Option -O gefolgt vom Namen der Binärdatei (ohne Leerstelle) ermöglicht das Abspeichern der Datei. Ein Hexeditor zeigt p0.bin
abgesehen vom Anfang und dem Ende scheint das wenig 'menschlich lesbar'.
Diese Datei kann auch mit dem Programm nqc in den 'Brick' übertragen ('download') werden. Um die vorhergehende Übersetzung zu vermeiden, benötigt man die zusätzliche Option '-b'
mk@x2:~/1112/mindstorms$ nqc -b -d p0.bin Downloading Program:.complete Battery Level = 7.8 V
Weil normalerweise die Zwischendatei nicht interessiert und die Übertragung auf den 'Brick' sowieso erforderlich ist, wird Übersetzung und Übertragung kombiniert
mk@x2:~/1112/mindstorms$ nqc -d p0.nqc Downloading Program:.complete Battery Level = 7.6 V
Programmiert wird jeweils der mit der 'Prgm'-Taste gewählte Programmspeicherplatz. Das Programm wird mit der 'Run'-Taste ausgeführt.