NXT e Ubuntu

Aggiornato alla versione 9.04 di Ubuntu (Jaunty)

Nel kit mindstorm LEGO fornisce un tool software di programmazione definito NXT-G sviluppato con la National Instruments, costituito da una programmazione a blocchi, con azioni drag&drop e non necessita di conoscere alcun linguaggio di programmazione e a loro è rivolta. E’ perfetta per l’obiettivo di allargare la schiera di utilizzatori, al contrario se si ha qualche fondamento di C e un approccio un po’ più tecnico, la modalità a blocchi secondo me è abbastanza frustrante e eccessivamente di alto livello.

ubuntu_button_120x60_humanNXC (Not eXactly C) su Ubuntu

Se usate linux (come il sottoscritto) il problema non si pone, il sistema operativo non è supportato da NXT-G. Fortunatamente ci vengono incontro dei tool sviluppati da una comunità di utilizzatori per la programmazione del “mattoncino” in un linguaggio C-like. Ne esistono a decine, personalmente utilizzo NXC (Not eXactly C) sviluppato da John Hansen per varie piattaforme.

Vediamo come procedere per compilare sotto Ubuntu (da terminale):

wget http://downloads.sourceforge.net/bricxcc/nbc-1.0.1.b35.tgz

per il download dell’eseguibile (ultima versione 10/2008, non sembra in sviluppo), per chi volesse esistono anche i sorgenti, ma non esiste una documentazione completa per l’utilizzo, se volete tentare vi lascio il link ad un articolo di J.C. Larsen che indica i procedimenti

tar -xvf nbc-1.0.1.b35.tgz

scompattiamo il pacchetto (NOTA: download eseguito nella cartella home del vostro utente)

cd nxt

mv nbc /usr/bin/

spostiamo l’eseguibile nella cartella dell’utente di sistema (se non si riesce, potrebbero servire i privilegi di root, quindi inserire il comando sudo mv nbc /usr/bin/ e la password di root

a questo punto se si lancia il comando nbc dal terminale otterrete questa schermata:

Next Byte Codes Compiler version 1.0.1.b35 (1.0.1.35, built Sun Oct 19 11:21:14 CDT 2008)
Copyright (c) 2006, John Hansen
Use “nbc -help” for more information.

Il compilatore è a posto potete compilare i vostri sorgenti creati da un comune editor di testo (per es. gedit, già incluso nel sistema Gnome) in questo modo:

dalla cartella in cui vi trovate

gedit helloworld.nxc

vi si apre la schemata di gedit, per esempio il classico primo prog

task main() {

TextOut(0,LCD_LINE1,”Hello World!!”);

Wait(4000);

}

salvate (CTRL-S) e chiudete (CTRL-Q), tornate alla finestra del terminale e digitate

nbc helloworld.nxc

se non sono presenti errori il compilatore termina e il controllo torna al terminale, al contrario vengono visualizzati gli errori trovati nel testo (NOTA: le segnalazioni di errore non sono molto precise, normalmente gli errori “veri” sono i primi visualizzati, i successivi sono segnalazioni sempre legate ai primi, spesso fuorvianti)

Comunicazione con NXT

Bene, siamo riusciti a compilare il nostro sorgente e a non avere segnalazioni di errore, come inseriamo il programma nell’NXT?? Innanzitutto alla Lego hanno previsto la possibilità di caricamento del programma via bluetooth o via Usb, sulla prima modalità non ho ancora avuto modo di testare il funzionamento, per il momento vediamo il sistema via cavo.

Ho trovato due procedimenti per la trasmissione via Usb, uno piu semplice da utilizzare ma più “invasivo”, mentre un altro utilizza un prog esterno senza modificare in alcun modo la configurazione

1) utilizzo delle opzioni di nbc

Link al sito dell’autore

Come indicato dal link qui sopra, per utilizzare il trasferimento diretto via USB tra computer e NXT è necessaria l’introduzione di un nuovo gruppo di utenti e dei relativi permessi per la gestione della connessione. Il tutto è possibile grazie allo script dello stesso Vikram presente in questo link. Troverete scaricato il file setupNxtUSB.sh

A questo punto modifichiamo gli attributi del file con chmod e lo rendiamo eseguibile (richiesta pwd di root):

$ chmod +x  ./setupNxtUSB.sh

$./setupNxtUSB.sh

Il terminale ci indica se la procedura è andata a buon fine. Per averne la conferma, collegare l’NXT (acceso) al pc e digitare sul terminale:

$ ls -l /dev/lego*

Se la procedura è terminata correttamente vi restituirà le varie connessioni in corso con il dispositivo.

Non ci resta di vedere come inviare il programma; sempre da terminale digitate:

$ sudo nbc  nome_file.nxc -d -S=usb

Se l’operazione va a buon fine, l’NXT rilascia un beep di conferma.

NB. nell’ultima operazione eseguita da terminale, il comando sudo (ovvero l’esecuzione con i privilegi di root) nell’articolo citato non viene utilizzato, nel mio caso senza utilizzare sudo il comando veniva eseguito correttamente, ma il programma non veniva inviato al dispositivo!

2) utilizzo di t2n

Link al sito dell’autore

t2n è un programmino a linea di comando che permette la comunicazione tra PC e NXT, come illustrato da J.C. Larsen nell’articolo che vi avevo proposto sopra.

Per installare t2n seguire le procedure:

# apt-get install g++ libusb-dev

$ wget http://www-verimag.imag.fr/~raymond/edu/lego/t2n/t2n-0.2.src.tgz

$ cd t2n-0.2.src

$ make

# mv obj/t2n /usr/local/bin/

Nel caso siate a lavorare su un amd64, lo script necessita di una patch, vi invito a seguire i procedimenti a questo link (non li ho testati).

Una volta installato con successo t2n passiamo a generare l’eseguibile per l’NXT a partire dal sorgente. Anche in questo caso da terminale:

$ nbc nome_file.nxc -O=nome_file.rxe

ecco abbiamo generato l’eseguibile nella cartella di lavoro, a questo punto non ci resta che spedirlo al dispositivo:

$ sudo t2n -v -put hello.rxe

il terminale visualizza il procedimento in corso e al termine fornisce un messaggio di completamento.
Penso di aver detto tutto, per qualsiasi problema non esitate a contattarmi.
Buon divertimento!
Luca

Questa voce è stata pubblicata in Tech Corner e contrassegnata con , , , , , , . Contrassegna il permalink.