Mindstorms Material NQC NXC Python Linux firstlegoleague Roboter Delphi Sensoren Simulatoren CAD Reparaturen Einsortieren
Pfad: Startseite / Fächer / Informatik / MSR / Mindstorms / Linux
Autor: mk
19.04.2012 17:48:58
1021
Linux

RCX/NQC

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.

'Hallo Welt'-Programm mit NQC

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.

p1nqc

p1.nqc

Die Schritte im Detail

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

Binärdatei

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.

Links

NXT/NXC

NBC

Auf der Seite wiki.ubuntuusers.de/Mindstorms findet man eine erprobte Anleitung zur Installation des nbc-Compilers und der nexttools.

USB

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
Bluetooth

Auch hier kann man nach der Anleitung unter wiki.ubuntuusers.de/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.

'Materialsprengsel'
mk@x2:~/bricxcc$ ./nexttool -listbricks
00165300686B=USB0::0X0694::0X0002::00165300686B::RAW
Test

p0

Links