Giochi di robotica

Transcript

Giochi di robotica
Progetto “Giochi di robotica”
Classe 1ªG
Proff. Marco Manfrin Silvia Ferraresso
I.T.I.S. “Carlo Zuccante”
a.s. 2012-2013
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
1. INTRODUZIONE
Questo e-book serve ad avvicinare gli appassionati della robotica alla programmazione dei
robot LEGO Mindstorm NXT.
La redazione è di un gruppo di ragazzi della classe 1ªG dell’ITIS “Carlo Zuccante” di
Mestre- Venezia,che hanno lavorato sotto la supervisione dei professori Manfrin Marco e
Ferraresso Silvia. L’obiettivo di questi scritti è quello di fornire la descrizione dei diversi
componenti dei robot LEGO, chiarimenti circa le loro diverse funzioni e la spiegazione del
software Enchanting utilizzato per la programmazione dei robot.
Pagina 2 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
2. HARDWARE
Il robot MINDSTORM è costituito da un mattoncino (brick), sul quale vi sono dei pulsanti e
un display, ad esso vanno collegati sensori e motori attraverso le porte di ingresso-uscita.
2.1 BRICK
1.a Pulsanti
L’ NXT possiede 4 tasti:
•
Un pulsante arancione: Accendi/Conferma
•
Due tasti freccia grigio chiaro utili allo spostamento a destra e a sinistra nel
menu dell’ NXT.
•
Un pulsante rettangolare grigio scuro: Cancella/Indietro.
Per spegnere l’NXT bisogna tenere premuto il pulsante grigio scuro, comparirà una
schermata con richiesta di conferma di spegnimento, altrimenti per tornare al menù
principale premere il tasto grigio scuro.
I pulsanti sono programmabili e possono quindi assumere le funzioni richieste.
Pagina 3 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
1.b Display
Il display permette all’utente di visualizzare le funzioni del menu, i dati forniti dai sensori o
messaggi del programma. Il display LCD è monocromatico, di 10 X 64 pixel.
1.c Porte di ingresso e uscita
I sensori e i motori dell’NXT devono essere collegati a porte specifiche. I sensori dovranno
essere connessi alle porte della parte bassa del brick, ovvero le porte 1, 2, 3 e 4. I motori
(o altri dispositivi di uscita come luci) invece andranno collegati alle porte superiori del
brick cioè A, B e C.
1.d Porta USB
La porta USB permette di caricare e scaricare dati tra il computer e l’NXT. Il computer
deve riconoscere il dispositivo NXT collegato, per cui precedentemente deve essere
installato il driver, scaricabile dal sito della LEGO.
1.e Alimentazione
L’NXT ha un’alimentazione che funziona tramite pile che vanno inserite nella parte
posteriore del Brick. Per ottenere un funzionamento corretto del dispositivo è consigliato
usare 6 pile AA\LR6, meglio ancora se alkaline. C’è anche la possibilità di utilizzare
batterie ricaricabili, ma la potenza dell’NXT potrebbe subire una riduzione e i motori
potrebbero ruotare più lentamente. La soluzione ottimale rimane comunque quella di usare
le apposite batterie al litio fornite dalla LEGO.
Nel caso in cui le batterie siano scariche, sul display verrà visualizzata un’icona di
avvertimento.
Pagina 4 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
2.2 SENSORI
Sono disponibili diversi tipi di sensore, alcuni dei quali contenuti nel kit di base, altri
opzionali.
2.a Sensore di colore.
Permette al robot di misurare l’intensità della luce diretta o riflessa
e distinguere i colori nero, blu, verde, rosso, bianco e giallo. Può
essere usato come sorgente di luce colorata grazie al LED RGB.
2.b Sensore di contatto
Questo sensore consente di rilevare il contatto con un oggetto
quando questo preme o rilascia il pulsante.
2.c Sensore di luminosità
Ha la funzione di misurare l’intensità luminosa del luogo di
utilizzo, vengono restituiti valori da 0 a 100 che corrispondono alla
calibrazione del punto più scuro e del punto più chiaro.
2.d Sensore a ultrasuoni
Permette al robot di individuare la presenza di oggetti di
misurarne la distanza e rilevare movimenti. Può essere usato
per far evitare ostacoli al robot. Come i pipistrelli, misura la
distanza calcolando il tempo che un’onda sonora emessa
impiega a tornare indietro. E opportuno posizionare il sensore
come oggetto più sporgente per evitare eventuali problemi. Questo sensore ha un range
che va da 0 a 2,5 metri con una precisione di 3 cm. Il sensore ad ultrasuoni è situato verso
il basso per essere più efficiente nelle operazioni di guida.
Pagina 5 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
2.e Sensore di rumore
Ha il compito di determinare l’intensità sonora. Per capire il livello
di rumore della stanza verranno visualizzati dei dati in decibel: 45dB indica una stanza silenziosa, 5-10dB se qualcuno parla nella
stanza a distanza dal sensore, 10-30dB corrisponde al rumore
prodotto da una conversazione nei pressi del sensore, 30-100dB quando viene rilevato un
rumore forte quanto un grido o musica ad alto volume, 100dB è pari al fragore prodotto da
un tosaerba.
2.3 MOTORI
L’NXT dispone di tre servomotori che danno la capacità di movimento con precisione.
3.a Sensore di rotazione incorporato
Il motore è dotato di un sensore di rotazione che permette di controllarne i movimenti con
precisione. La rotazione viene misurata in gradi positivi o negativi, a seconda del verso di
rotazione, quindi è possibile calcolare la distanza percorsa conoscendo il diametro della
ruota utilizzata.
Pagina 6 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
3. FIRMWARE
3.1 NXT FIRMWARE LEJOS
leJOS è un firmware sostitutivo per il mattone Lego Mindstorms RCX ed NXT. Include una
Java Virtual Machine, che permette di
programmare i robot in linguaggio Java.
leJOS è in grado di eseguire programmi
scritti in Java tramite i quali si possono
comandare i motori ed i sensori del robot.
Una JVM è un software che permette al
codice compilato, chiamato byte code, di
essere interpretato e eseguito su un
qualunque sistema. Il punto di forza di
Java
è
infatti
l’indipendenza
del
linguaggio dalla piattaforma utilizzata.
Oltre alla JVM, leJOS include anche
molto altro:
•
una libreria di classi che vanno a definire alcune applicazione per l’NXT;
•
gli strumenti necessari per la programmazione del firmware, il trasferimento di
software e il debugging;
•
le API necessarie per la programmazione lato PC, quindi tutti i modi di
connessione al brick NXT, via USB o Bluetooth oppure tramite il protocollo LCP
(Lego Communications Protocol);
•
le API complete di tutte le innumerevoli classi utilizzabili sull’NXT. Tra queste:
o
Batter: consente l’accesso alla batteria;
o
ButtonCounter: permette l’immissione di dati tramite la tastiera NXT. Conta
il numero di volte che viene premuto il bottone sinistro o destro;
o
SystemSettings: questa classe è stata progettata per leggere le
impostazioni di sistema da parte di altre classi leJOS;
o
USBConnection: fornisce e supporta una connessione USB;
Pagina 7 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
1.a Opzioni
Le principali voci di menù di Lejos sono:
•
System
•
Version
•
Run default
•
Files
•
Bluetooth
•
Sound
Nello specifico permettono:
System: verificare la carica della batteria, la RAM rimanente, la
quantità di memoria flash e altre opzioni come: Sleep time che
incrementa il tempo di autospegnimento con valori in minuti da
1 a 10, AutoRun che se attivato fa partire il programma
impostato come default automaticamente all’accensione, Unset
default che permette di disattivare il programma selezionato come default e Format che
consiste nella possibilità di cancellare tutti i files residenti nel sistema.
Version: conoscere la versione del firmware in uso.
Run Default: avviare il programma impostato come default.
Files: trovare l’elenco dei programmi caricati con la possibilità di
eseguirli, cancellarli o impostarli come default.
Pagina 8 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
Bluetooth: accedere alla possibilità di controllare il robot
tramite Bluetooth da smartphone, tablet, computer, ecc. Con
Power off si accende o spegne il dispositivo Bluetooth; con
Search/Pair abbiamo la possibilità di cercare un altro sistema
Bluetooth attivo; con Devices possiamo sapere il nostro nome e
indirizzo nella rete Bluetooth; Visibility invece rende visibile o meno la presenza del
dispositivo nella rete Bluetooth mentre Change PIN offre la possibilità di cambiare il PIN
code.
Sound: controllare il volume dell’altoparlante e del bip che
corrisponde alla pressione del tasto.
1.b leJOS per Java
L’utilizzo del firmware leJOS per Java rende molto più veloce la macchina e
supporta connessioni bluetooth, usb, I2C e protocolli RS485 riuscendo così a
interfacciare il brick con il PC in entrambe le direzioni grazie alle API a
disposizione.
L’utilizzo di Java come linguaggio di programmazione permette di sfruttare la
programmazione orientata agli oggetti, mettendo a disposizione ambienti di sviluppo
diffusissimi come Eclipse e Netbeans.
Supporta il cross-platform, funziona su macchine Windows, Linux e Mac OS X.
La programmazione multithreading permette di far eseguire al robot più comandi
contemporaneamente. Ad esempio si può pensare ad un thread che gestisce il
movimento, ad uno che sfrutta il GPS ed un altro che usa il sensore ultrasuoni, mandati in
esecuzione tutti insieme e gestiti dallo scheduler del brick, per ottenere un dato
comportamento. La presenza dell’interfaccia Behaviour evita il problema dello “spaghetti
code”, ovvero un groviglio mal definito di funzioni con scopi diversi. Grazie a questa
astrazione è possibile definire comportamenti specifici, rendendo il codice pulito ed
efficiente.
Pagina 9 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
3.2 MATLAB: FIRMWARE ALTERNATIVO
MATLAB® è un linguaggio di alto livello e un ambiente interattivo
per il calcolo numerico, l'analisi e la visualizzazione dei dati e la
programmazione.
MATLAB
consente
di
analizzare
dati,
sviluppare algoritmi e creare modelli e applicazioni. Il linguaggio,
gli strumenti e le funzioni matematiche incorporate consentono
di esplorare diversi approcci e di raggiungere una soluzione più
velocemente rispetto all'uso di fogli di calcolo o di linguaggi di programmazione
tradizionali, quali C/C++ o Java™.
Esso può essere utilizzato per controllare i robot Lego Mindstorm NXT attraverso una
porta seriale Bluetooth.
Pagina 10 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
4. LINGUAGGIO DI PROGRAMMAZIONE
ENCHANTING
4.1 GENERALITÀ
1.a Storia
Enchanting è un’estensione robotica di Scratch che permette la comunicazione e la
programmazione del robot LEGO MINDSTORMS NXT e si integra con leJOS NXJ (Java
per NXT). Naturalmente necessita dell’installazione del firmware leJOS. È stato sviluppato
da Clinton Blackmore, un programmatore canadese esperto di videogiochi il quale .ha
ideato una modifica di Scratch perché voleva ottenere un linguaggio per la
programmazione dei robot LEGO che fosse diverso da quelli già esistenti e che risultasse
semplice, anche per dei bambini.
Enchanting utilizza molti linguaggi open-source, come ad esempio Scratch, BYOB, leJOS
e Squek. L’ultimo è il linguaggio su cui è basato questo programma, ed è
un’implementazione del programma Smalltalk, che è un noto linguaggio per la
programmazione ad oggetti.
Enchanting sfrutta la semplicità di utilizzo di Scratch e la programmazione drag-and-drop,
cioè una successione di tre azioni che consente di cliccare su un oggetto virtuale,
trascinarlo e rilasciarlo in una determinata posizione. Per rendere possibile il controllo
dell’NXT, Enchanting è stato integrato con blocchi di controllo dei motori e di lettura dei
sensori. Molti blocchi invece sono stati eliminati perché non ritenuti necessari per
programmare i robot LEGO. Sono state previste due modalità di utilizzo: quella interattiva
e quella autonoma. Nella modalità interattiva il robot è pilotato dal computer passo-passo.
Pagina 11 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
Quando invece si vuole realizzare un software autonomo che giri direttamente sul robot,
basta trasferire il codice nel robot stesso.
Per quanto il programma si presti bene ad un semplice utilizzo, esso presenta alcune
limitazioni:
•
richiede la sostituzione del firmware LEGO con quello fornito da leJOS;
•
mancano blocchi più complessi di comando dei motori (come lo steering, cioè lo
sterzo, l’avanzamento di una distanza precisa, il controllo della curvatura del
percorso in gradi), per la cui realizzazione bisogna procedere a calcoli
complessi
•
la scelta di utilizzare leJOS impedisce che il robot venga usato con altri
programmi che invece sfruttano il firwmare originale.
Comunque, Enchanting rappresenta al momento l’unico progetto legato a Scratch che
permetta una buona interazione con LEGO MINDSTORM NXT; inoltre fornisce la
possibilità di realizzare programmi ricorsivi grazie all’integrazione con BYOB fornito dalla
versione 0.0.9.
È possibile installare Enchanting nei sistemi operativi Windows, Mac OS X e Linux.
1.b Download e Installazione di Enchanting su Windows:
Per installare i driver LEGO, scaricare il file dal sito:
http://mindstorms.lego.com/en-us/support/files/driver.aspx
•
Cliccare su Fantom Driver 1.1.3 (o versioni successive)
•
Cliccare su Downloads e scegliere il sistema operativo desiderato.
•
Salvare il file .zip ed estrarlo sul disco fisso.
•
Eseguire Setup.exe
Per installare Enchanting:
•
Scaricare il file di installazione gratuita collegandosi al sito:
https://launchpad.net/enchanting/trunk/0.2.3/+download/Enchanting-0.2.3-Setup.exe
•
Salvare Il file
•
Eseguirlo.
Al termine dell’installazione appare l’icona di Enchanting, che è pronto per l’esecuzione.
Pagina 12 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
4.2 CONFIGURAZIONE
2.a Collegamento PC-NXT
Innanzitutto per poter collegare il proprio NXT al computer, bisogna disporre dei seguenti
requisiti di sistema se si usa il sistema operativo Microsoft Windows:
•
Windows XP Professional o Home Edition con il Service Pack 2 o successivo
•
Processore Intel Pentium o compatibile, a 800 MHz minimo (1,5 GHz o
superiore raccomandato)
•
Lettore CD-ROM
•
512 MB di RAM minimo
•
700 MB di spazio libero su disco
•
Schermo XGA (1024x768)
•
1 porta USB disponibile
•
Adattatore compatibile Bluetooth (opzionale)
Poi, seguire le seguenti istruzioni:
•
Accendere l’NXT premendo il pulsante arancione.
•
Connettere l’NXT al PC mediante il cavo USB e
automaticamente si avvierà l’installazione del software
LEGO MINDSTORMS NXT.
2.b Configurazione dei sensori:
I diversi sensori devono essere collegati all’NXT, dopo di che si apre Enchanting e si
seleziona la sezione “sensori”.
A seguire si seleziona “Configure Sensors”
Pagina 13 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
Si apre così la finestra:
Scegliere il tipo di sensore da collegare e trascinare la sua icona sull’indicatore della porta
a cui è collegato.
Nell’esempio si è collegato un sensore di luce alla porta 1.
Per dare il nome ai sensori basta cliccare sopra la casella di fianco alla parola “named” e
digitare il nome che si vuole dare al sensore stesso.
2.c Configurazione dei motori:
Il brick LEGO mette a disposizione 3 porte (A,B,C) per i motori o per collegare una
lampadina.
Per configurare i motori, cliccare sul pulsante “Movimento”
Dopo cliccare sopra il pulsante “Configure Motors”
Si apre una finestra dove,come per i sensori, è possibile collegare i motori alle rispettive
porte.
Pagina 14 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
I
Fare attenzione al tipo di motori in dotazione. Nel kit sono presenti motori di tipo NXT, ma
è possibile utilizzare anche motori del vecchio kit RCX.
Il procedimento per dare il nome ai motori è lo stesso di quello per i sensori: basta cliccare
sopra la casella di fianco alla parola “named” e digitare il nome desiderato.
Pagina 15 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
4.3 ISTRUZIONI DI ENCHANTING
3.a Motori
Dopo aver configurato i motori, appaiono le seguenti istruzioni:
Il primo blocco permette di avviare il motore etichettato
“Motore Sinistro” in avanti (forward) o all’indietro (backward).
Il secondo permette al motore selezionato di fermarsi frenando
(braking) o lasciando che si fermi da solo (coasting).
Questa istruzione serve per far girare il motore scelto
di un certo numero di gradi. La fine dell’istruzione avverrà o quando l’azione è terminata
(until done) o mentre si stanno eseguendo le istruzioni successive (just start it).
A differenza della precedente, questa istruzione serve
per far riportare il motore in una determinata posizione. Nell’esempio il motore girerà fino a
Pagina 16 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
tornare nella posizione iniziale che può essere definita mediante il comando:
Questa istruzione imposta la velocità del motore.
Infine abbiamo l’ultimo comando che serve a far partire il motore
ad una velocità definita.
3.b Sensori
Dopo aver configurato i sensori, otteniamo le seguenti istruzioni:
Il sensore touch rileva se è premuto, urtato, o rilasciato.
Il sensore di luce rileva il livello di luce in una direzione, e comprende anche un LED per
l'illuminazione di un oggetto.
Pagina 17 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
Il sensore sonoro ha un microfono che può essere utilizzato per rilevare l'ampiezza di un
suono.
Il sensore ad ultrasuoni è in grado di misurare la distanza tra il sensore e un ostacolo, e di
rilevare il movimento. La distanza massima che può misurare è di 233 cm con una
precisione di 3 centimetri.
Il pulsante arancione Enter e il pulsante grigio destro e sinistro possono essere
programmati per funzionare come sensori.
I sensori di luce si distinguono in: sensore di colore e sensore di luminosità.
La prima istruzione è per il sensore di colore, e serve ad impostare il colore della
lampadina.
Per impostare il colore basta cliccare sopra la casella di fianco alla parola “lamp” e
selezionare il colore desiderato.
per il sensore di luminosità, abbiamo l’istruzione che serve ad impostare il punto più scuro
(darknest point) o quello più chiaro (brightest point).
Per calibrare il sensore di luminosità bisogna utilizzare la seguente istruzione.
L’ultima istruzione consiste nel calibrare il sensore di luminosità per fare una determinata
lettura.
Pagina 18 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
5. LINGUAGGIO LEGO MINDSTORMS NXT-G
L’uso del linguaggio che viene ora descritto è legato all’utilizzo del firmware originale
LEGO. Lego Mindstorms NXT offre un linguaggio di programmazione grafico molto
efficace e facile da usare anche per chi non ha particolari abilità in linguaggi di sviluppo.
Questo linguaggio viene chiamato NXT-G ed è fornito con il kit base, costituisce l'ambiente
di programmazione che presenteremo in questa parte.
5.1 L'AMBIENTE DI PROGRAMMAZIONE NXT-G
L’ambiente è compatibile con Mac e Windows. I requisiti tecnici minimi sono i seguenti:
Microsoft Windows
Apple Macintosh
•
Windows XP Service Pack 2 o
•
Apple MacOS X 10.3.9 o 10.4
Windows Vista
•
Power PC G3, G4, G5 a 1.3 GHz
•
Processore da 1.5 GHz
•
512 MB di RAM
•
512 MB di RAM
•
300 MB di spazio su disco
•
300 MB di spazio su disco
•
1 porta USB
•
1 porta USB
•
Unità CD-ROM (per l'installazione)
•
Unità CD-ROM (per l'installazione)
•
Adattatore Bluetooth (opzionale)
•
adattatore Bluetooth (opzionale)
processore
L'ambiente NXT-G è una versione specifica del prodotto LabView professionale
(http://www.ni.com/labview) pubblicato da National Instruments. La piattaforma di base
LabView è molto diffusa per la sua affidabilità e versatilità.
Pagina 19 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
1.a L'interfaccia di NXT-G
La figura seguente mostra l'ambiente di sviluppo NXT-G.
•
La palette elenca i blocchi funzionali che possono essere trascinati nell'area di
lavoro.
•
L'area di lavoro è il luogo dove depositare i blocchetti delle istruzioni.
•
Il pannello di configurazione presenta le impostazioni che è possibile regolare
quando si seleziona un blocco nell'area di lavoro.
•
Il controller viene utilizzato per compilare il programma e trasferirlo al robot (con
connessione USB o Bluetooth).
•
Nel Robot Center si trovano i tutorial, esso consente di costruire e programmare
una delle 4 principali categorie di robot che possono essere costruiti utilizzando
Lego Mindstorms NXT (veicoli, armi, animali e robot umanoidi). I tutorial
consentono di produrre i programmi passo dopo passo. Una seconda scheda è
disponibile in questo spazio, che dà accesso al portale Lego, dove è possibile
visitare il forum, scaricare suoni aggiuntivi per il vostro robot, ecc.
•
La Guida in linea contiene tutto il supporto necessario per utilizzare l'interfaccia.
Pagina 20 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
1.b Principi di programmazione di NXT-G
La programmazione tramite NXT-G è interamente grafica. Non occorre alcuna conoscenza
di programmazione specifica per la produzione di programmi avanzati utilizzando NXT-G.
Per l’impostazione predefinita, l'area di lavoro mostra solo un punto di partenza. Da
questo, si trascina uno dei blocchi dalla tavolozza. I blocchi sono aggiunti uno dopo l'altro
su un asse definito “linea sequenza”.
I blocchi che non sono collegati ad una linea sequenza non sono presi in considerazione
dal programma. E 'possibile costruire più linee sequenza programmate in parallelo. Per
fare questo, linee di sequenza aggiuntive possono essere create dal punto di partenza,
come mostrato nella figura seguente.
I blocchi disponibili in NXT-G
NXT-G viene fornito con 35 blocchi. Blocchi aggiuntivi possono essere scaricati da internet
e se ne possono creare di propri. Quando viene acquistato un sensore non standard , ad
esempio la webcam CMUCam, esso viene fornito con un CD contenente un blocco
addizionale che permette di configurare e interagire con il sensore.
Pagina 21 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
I blocchi possono essere suddivisi in 7 famiglie principali:
1.
Blocchi comuni
2.
Blocchi di azione
3.
Blocchi sensore
4.
Blocchi di flusso
5.
Blocchi dati
6.
Blocchi avanzati
7.
Blocchi personalizzati
È facile vedere da questa lista la gran varietà dei programmi che possono essere creati
utilizzando NXT-G. Diamo un rapido sguardo ai blocchi disponibili.
Blocco
Blocco "Display"
Descrizione
Permette di visualizzare un testo sullo schermo LCD dell’ NXT
Blocco "Loop"
È usato per creare un ciclo nel programma, la stessa serie di azioni
può essere ripetuta più volte.
“Blocco motore”
Serve per attivare un servomotore. È possibile impostare la
direzione, la velocità e la durata di rotazione.
Pagina 22 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Blocco
Classe 1G a.s. 2012-2013
Descrizione
Blocco "Suono"
Si utilizza per riprodurre un suono (un bip, una serie di diverse
tonalità registrate o un file audio).
Blocco "Switch"
Fa eseguire determinate azioni in base alle condizioni che si
verificano nel programma.
Blocco "di
rotazione del
sensore"
È utilizzato per determinare il numero di rotazioni o l'angolo di
rotazione di un servomotore.
Blocco "ad
ultrasuoni Sonar
Sensor
È impiegato per interagire con il sensore sonar ultrasuoni e quindi
rilevare gli ostacoli e la loro distanza dal robot.
Pagina 23 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Blocco
Classe 1G a.s. 2012-2013
Descrizione
Blocco "Luce del
sensore"
È adoperato per interagire con il sensore di luce e quindi
determinare la quantità di luce ricevuta dal sensore.
Blocco "Sound
sensor"
Viene utilizzato per interagire con il sensore di suono e quindi
determinarne l'intensità che raggiunge il sensore.
Blocco "Touch
sensor"
Viene adoperato per interagire con il sensore di contatto e quindi
determinare se è stato premuto o rilasciato.
Blocco
"Confrontare"
È usato per fare confronti logici nel programma.
Pagina 24 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Blocco
Blocco
Classe 1G a.s. 2012-2013
Descrizione
"Matematica"
È impiegato per eseguire calcoli di base, quali addizione,
sottrazione, moltiplicazione e divisione.
"Bluetooth riceve il
messaggio" blocco
È usato per ricevere messaggi tramite Bluetooth. C'è anche un
blocco che consente di inviarli. Utilizzando la tecnologia di
comunicazione senza fili, il robot è in grado di comunicare con il PC
o altri Lego Mindstorms NXT robot.
Blocco "Timer"
È utilizzato per gestire un timer.
Blocco "Variabile"
Viene adoperato per creare e manipolare le variabili del
programma.
1.c Un primo programma con NXT-G
Esso utilizza il sensore di suono e visualizza il livello sonoro (come percentuale della
sensibilità del sensore) sullo schermo del mattone intelligente del robot.
Pagina 25 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
Il programma definitivo con NXT-G è illustrato nella figura seguente:
Per la costruzione del programma aprire la lista dei blocchi "sensore" e trascinare il
sensore di suono sulla linea sequenza, come mostrato nella figura seguente:
Pagina 26 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
Dall'elenco dei blocchi "avanzate", trascinare il blocco "numero come testo”. Posizionare
poi i blocchi in ordine sulla linea sequenza:
•
"Variabile", (in blocchi "dati"). Dal suo pannello di configurazione scegliere la
variabile di tipo testo e assicurarsi che il pulsante "Write" sia selezionato (indica
che la variabile è di scrittura).
•
"Testo", (in blocchi "avanzate").
•
"Display", (in blocchi "azione"). Dall'elenco a discesa del pannello di
configurazione, selezionare "Testo". Questo indicherà al blocco di visualizzare
dati di tipo testo
•
"Wait" (in blocchi "flusso") è usato per indicare il tempo tra due misure (lo
lasceremo a 2 secondi per default).
Mettere questa intera sequenza in un ciclo in modo che il programma si ripeta diverse
volte e ottenga misurazioni a intervalli regolari. Per fare ciò, trascinare un blocco di "Loop"
dalla lista dei blocchi di "flusso" e quindi spostare tutti i blocchi all'interno del ciclo,
mantenendoli in ordine e assicurandosi che rimangano sulla linea sequenza.
Per impostazione predefinita, il loop viene impostato su "Forever". Ciò significa che il
programma verrà eseguito a tempo indeterminato fino a quando non si blocca premendo
un tasto sul mattone. Se si desidera visualizzare solo 10 misurazioni, selezionare
"Counter" nell'elenco a discesa e immettere 10 nello spazio "Volte" che appare sotto.
In questa fase, il programma si presenta come la figura qui sotto.
A questo punto è necessario collegare i blocchi in modo che i dati passino tra loro.
Per lo scambio di informazioni, i blocchi utilizzano fili di dati. Il colore del filo di dati ne
determina il tipo:
•
I dati numerici vengono trasmessi dai cavi gialli.
Pagina 27 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
•
I dati logici da fili verdi.
•
I
dati
di
testo
da
fili
arancioni.
•
Se il filo è grigio, significa
che la porta di ingresso si
aspetta un valore di un
tipo che non è quello
definito
uscita
dalla
del
precede.
porta
blocco
Questo
di
che
viene
definito “filo rotto”, ovvero
errore del programma.
Esempio di collegamenti:
Tornare alla prima figura e disegnare i fili di dati.
Ecco alcuni commenti sui fili di dati. Noi li abbiamo numerati per chiarezza:
1. Il filo giallo viene utilizzato per inviare il valore del livello sonoro letto dal sensore di
suono al blocco che lo converte il testo
2. Il secondo filo invia la misurazione convertita in testo ad una variabile di testo.
3. La variabile viene memorizzata mediante il blocco di testo
Pagina 28 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
4. Infine, l'ultimo filo di dati invia la variabile al blocco display, che ne visualizza il valore
sullo schermo dell’NXT.
Salvare il lavoro e poi testarlo sul vostro robot Lego cliccando sul pulsante "Scarica ed
esegui" al centro del controller (vedi immagine dell’ambiente di sviluppo).
Il dato letto dal sensore di suono è un dato relativo, espresso in percentuale (non in
decibel) rispetto alla sua sensibilità.
Pagina 29 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
6. GUIDA AL BLUETOOTH
6.1 USO DEL BLUETOOTH
Bluetooth è una tecnologia che consente di inviare e ricevere dati senza l'utilizzo di cavi. Il
LEGO MINDSTORMS NXT include un dispositivo wireless Bluetooth che permette al
mattoncino NXT di comunicare con altri dispositivi Bluetooth.
In generale, il Bluetooth serve per instaurare connessioni tra:
•
NXT e un pc
•
due NXT
•
un NXT e un cellulare
•
un NXT e un qualsiasi dispositivo Bluetooth remoto.
Obiettivo di questa guida è sfruttare i metodi messi a disposizione dal Bluetooth della
LEGO per riuscire a connettere due brick.
Le funzionalità Bluetooth dell’NXT servono per :
•
Comunicare con un altro dispositivo Bluetooth
•
Collegare un massimo di tre dispositivi alla volta
•
Cercare altri dispositivi Bluetooth e permetterne la connessione
•
Effettuare una riconnessione rapida senza reinserire il codice pin in quanto NXT
ricorda il precedente dispositivo collegato
•
Gestire la propria visibilità da parte di altri dispositivi
•
Scegliere modalità di risparmio energetico (acceso/spento)
Pagina 30 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
6.2 COME EFFETTUARE IL COLLEGAMENTO CON IL
COMPUTER WINDOWS:
Il procedimento è il seguente:
1. Assicurarsi che il computer disponga di un
collegamento Bluetooth
2. Consultare il manuale delle impostazioni
3. Individuare l’icona del Bluetooth
4. Cliccare “ricerca”
5. Inserire la passkey 1,2,3,4 nel caso in cui ci
si trovi la prima volta a controllare NXT
tramite Bluetooth
6. Controllare lo stato dell’ NXT.
2.a Problemi
Lo scopo di questa guida consiste nell’aiutare l'utente nella risoluzione delle difficoltà più
comuni con la connessione della NXT LEGO ad un PC utilizzando Bluetooth.
L'NXT può comunicare senza incontrare intoppi solo con le periferiche Microsoft, e non
tutti i PC ne dispongono. In questo caso c’è comunque la possibilità di connettersi con la
radio Bluetooth del l'NXT, ma si possono incontrare alcuni problemi. Se si presentassero e
ci si fosse già collegati in precedenza, prendere l’NXT, entrare nelle impostazioni
Bluetooth, aprire i contatti e quindi eliminarli. A volte il Bluetooth non chiude correttamente
la connessione, che ostacola quelle seguenti. L'eliminazione dei vecchi collegamenti e la
riassegnazione dei nuovi sembra funzionare nella maggior parte dei casi. Se succede di
stabilire una connessione tra un PC e NXT, ma non risultano comunicare tra loro,
controllare il driver Bluetooth in Gestione periferiche.
2.b Enemyleft NXT Control
Enemyleft NXT Control è un’applicazione eseguibile solo nei dispositivi cellulari che
dispongono del sistema operativo Android. Essa consente di collegare il telefono al robot
NXT utilizzando il sistema del Bluetooth
Come si fa instaurare un collegamento per l’applicazione Enemyleft NXT Control:
Pagina 31 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
1. Attivare Bluetooth su entrambi i dispositivi.
2. Cercare l’NXT tramite l’applicazione.
3. Una volta trovato il robot con cui connettersi, inserire il PIN.
4. Se il collegamento ha successo si apre la schermata dei comandi.
5. Provare il funzionamento dei motori, se ci dovessero essere dei problemi
controllare il collegamento dei motori con l’impostazione “settings”.
6. L’app può essere collegata solo con un NXT alla volta.
2.c Problemi con l’applicazione
Normalmente non si hanno difficoltà con l’applicazione, ma può capitare con alcuni
dispositivi che non ci si riesca a collegare. Per risolvere questo problema basta riavviare
l’NXT e il telefono riaccendendo così il Bluetooth.
Pagina 32 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
7. REALIZZAZIONE DI PROGRAMMI
7.1 ROBOT “LINE FOLLOWER”
1.a Scopo
Far percorre al robot un percorso tracciato con del nastro adesivo nero mediante l’uso dei
sensori di luce.
1.b Metodo usato
Per la programmazione del robot abbiamo usato Enchanting, un
linguaggio simile a Scratch, ma specifico riguardo le istruzioni per
il robot. Nella costruzione siamo ricorsi a due sensori di luce che
servivano a mantenere la traiettoria e due motori per il
movimento. I due sensori di luce sono stati posizionati nella parte
anteriore, il più vicino possibile tra loro e quasi aderenti al piano
di spostamento.
1.c L’algoritmo
Il nostro programma è basato su un unico ciclo infinito, perché il robot deve funzionare
sempre finché non viene spento.
Pagina 33 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
Sono presenti quattro funzioni “se” che permettono al robot di capire se sta vedendo il
riflesso della luce del piano bianco oppure del nastro nero. Ci si accorge che il robot sta
uscendo dalla traccia quando uno dei due sensori rileva molta più luce dell’altro, in questo
caso significa che il dispositivo sta deviando di lato. Nel caso in cui il robot deviasse dalla
traiettoria, deve ruotare di un numero definito di gradi, in modo da ritrovare la traccia che
stava seguendo precedentemente.
1.d Problemi incontrati e soluzioni
Durante il lavoro la complicazione più grande è stato realizzare il ciclo d’isteresi per il
passaggio nero-bianco e bianco-nero. Con ciclo di isteresi si intende una tecnica in base
alla quale il passaggio da uno stato ad un altro non ha un’unica soglia, ma 2: una per il
passaggio da A a B e una diversa per il passaggio da B ad A. Supponiamo che il nero
venga rilevato per certo con un valore di 30 e il bianco con uno di 40, si effettuerà il
passaggio di stato da nero a bianco quando si supera la soglia di 40 e per tornare allo
stato nero sarà necessario scendere sotto il 30. Abbiamo rilevato i valori delle soglie in
maniera sperimentale.
Un altro problema è stato quello di far rilevare la traccia nera ad entrambi i sensori perché
la traccia che il robot avrebbe dovuto seguire era troppo stretta per i due sensori di luce, il
problema è stato risolto allargando la pista con un altro strato di nastro adesivo di colore
nero.
1.e Avvertenze
Per far muovere correttamente il robot su un piano di un certo colore, quest’ultimo deve
essere ben distinto dal colore della pista. In questo modo il sistema distinguerà
chiaramente queste differenze.
1.f Prove effettuate
Abbiamo eseguito molte prove, la maggior parte di queste con esiti negativi. Il problema
maggiore è stato far compiere una curva molto stretta del percorso al robot perché quest’
ultimo non riusciva a trovare più la traccia. La soluzione l’abbiamo ottenuta riducendo la
velocità di movimento del dispositivo.
Pagina 34 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
1.g Osservazioni e conclusioni
In conclusione il lavoro ha avuto successo, anche se abbiamo affrontato alcune difficoltà
nel rendere fluido il movimento del robot. Abbiamo risolto il problema inserendo un ruotino
centrale indipendente in coda.
Pagina 35 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
7.2 Robot combattente
2.a Scopo
Lo scopo del nostro progetto è quello di creare un robot capace di sollevare o spingere
altri robot come se fosse un combattente. I comandi sono impartiti manualmente mediante
2 sensori di contatto che servono ad avviare e a dare la direzione di spostamento. Ogni
pulsante è associato ad un motore: se premuti entrambi si procederà in linea retta
altrimenti il robot girerà a destra o sinistra a seconda del pulsante premuto.
Se la distanza rilevata dal sensore ad ultrasuoni è inferiore a 3 centimetri si presume di
aver incontrato il robot avversario. Di conseguenza il braccio collegato al terzo motore è
posizionato sotto di esso; azionandolo si otterrà il sollevamento del rivale. Dopo averlo
tenuto sollevato per un po’ viene liberato muovendo in senso opposto il braccio.
2.b Metodo usato
Vengono impostate le velocità dei motori, le operazioni successive sono inserite in un ciclo
infinito in quanto non cambiano durante tutta la durata del funzionamento. All’interno del
ciclo è presente una struttura decisionale che avvia e ferma i motori di movimento a
seconda di quale sensore di contatto è premuto. Dopo questo controllo viene valutata la
distanza dal sensore a ultrasuoni. Se essa è inferiore a 3 cm, viene azionato il terzo
motore con una rotazione di 1080°, in modo da solle vare il braccio. Perché il braccio ritorni
alla suo posizione originaria viene avviata una rotazione di -1080°.
Per affinare il procedimento abbiamo proceduto empiricamente.
Pagina 36 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
Algoritmo
2.c Hardware
Per poter utilizzare il nostro programma va prima predisposto il robot in questo modo:
•
Si realizza una struttura solida con due ruote motrici anteriori collegate ai motori
(quella di destra alla porta B e quella di sinistra alla porta A) e una terza libera
di assecondare i movimenti del robot.
•
Si monta un terzo motore sopra il mattoncino.
Pagina 37 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
•
Classe 1G a.s. 2012-2013
In mezzo alle due ruote si crea un prolungamento che parte dalla struttura e
che ha una parte solida e una libera di alzarsi e abbassarsi come il braccio
umano.
•
Sulla parte mobile del braccio si crea una maniglia a cui si attacca un filo o un
elastico che viene legato al terzo motore in modo che sollevi il braccio quando
questo si attiva.
2.d Problemi incontrati e soluzioni
All’inizio il problema principale è stato quello di creare un programma che includesse le
quattro soluzioni ( andare avanti, indietro, girare a destra e a sinistra ) ma non pesasse più
di tanto. Ne abbiamo creato uno da 10k ma aveva tempi di reazione troppo lunghi (5 sec)
e non era facilmente manovrabile. Per risolvere l’inconveniente abbiamo sostituito i vari
“se” con dei “se altrimenti” in modo da alleggerirlo e, così facendo, abbiamo ottenuto dei
tempi di reazione di qualche frazione di secondo.
Abbiamo anche riscontrato problemi con la struttura poiché bastava un colpo perché si
rovesciasse. Per risolverlo abbiamo creato una struttura più solida, anche se abbiamo
perso in velocità. In seguito la ruota toccava con una sporgenza del corpo centrale e
questo impediva al robot di muoversi correttamente, abbiamo risolto questa difficoltà
alzando la struttura.
2.e Avvertenze
Essendo il robot composto da pezzi di lego non è in grado si sollevare grossi pesi poiché
la struttura potrebbe essere soggetta a cedimenti o rotture dei vari componenti.
Quando si scrive l’algoritmo bisogna stare attenti a come si configurano i motori e i sensori
e poi a come si montano, in modo da evitare che quando si preme il pulsante per andare a
destra il robot non giri a sinistra.
Montare l’ultrasonic sensor perfettamente parallelo alla struttura e orientato leggermente
verso l’alto altrimenti si rischia che il robot attivi il terzo motore appena sfiora una parete o
un oggetto.
Pagina 38 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
2.f Osservazioni e conclusioni
In conclusione il lavoro è venuto bene anche sa ha ampie possibilità di miglioramento, ad
esempio si potrebbe arrivare a far girare il programma anche con un comando Bluethoot o
rendere il robot capace di trovare da solo i bersagli e caricarli.
Pagina 39 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
SITOLOGIA
http://enchanting.robotclub.ab.ca/tiki-index.php
Manuale
d’uso
di
Enchanting
in
Inglese. Aiuta a compiere i primi passi
con
tutorial
e
presenta
video
dimostrativi
http://it.wikipedia.org/wiki/Firmware
Enciclopedia online
https://launchpad.net/enchanting/+download
Sito di download del file di installazione
di Enchanting.
http://mindstorms.lego.com/en-us/default.aspx
Sito ufficiale della LEGO.
http://mindstorms.lego.com/en-
Guida all’uso del Bluetooth di LEGO
us/bluetooth/default.aspx
NXT.
http://mindstorms.lego.com/en-
Raccolta di driver per il riconoscimento
us/support/files/driver.aspx
dell’NXT.
http://wiki.scratch.mit.edu/wiki/Main_Page
Descrizione in Inglese di Enchanting e
delle sue caratteristiche
http://www.mathworks.it/products/matlab
Sito ufficiale di MATLAB.
http://www.robocupjr.it/3/wp-
Storia e uso di Enchanting e Scratch.
content/uploads/2012/03/01_Callegarin_.pdf
http://tesi.cab.unipd.it/23512/1/Tesi_Robotica.pdf Documentazione
per
l’approccio
al
robot LEGO Mindstorms NXT in Java.
http://tesi.cab.unipd.it/42207/1/tesi_FINAL.pdf
Documentazione
per
l’approccio
al
robot Mindstorms NXT.
Pagina 40 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
1. Introduzione .....................................................................................................................2
2. Hardware .........................................................................................................................3
2.1 Brick ...........................................................................................................................3
1.a Pulsanti...................................................................................................................3
1.b Display....................................................................................................................4
1.c Porte di ingresso e uscita........................................................................................4
1.d Porta USB...............................................................................................................4
1.e Alimentazione .........................................................................................................4
2.2 Sensori .......................................................................................................................5
2.a Sensore di colore....................................................................................................5
2.b Sensore di contatto.................................................................................................5
2.c Sensore di luminosità..............................................................................................5
2.d Sensore a ultrasuoni...............................................................................................5
2.e Sensore di rumore ..................................................................................................6
2.3 Motori .........................................................................................................................6
3.a Sensore di rotazione incorporato ............................................................................6
3. Firmware..........................................................................................................................7
3.1 NXT firmware leJOS...................................................................................................7
1.a Opzioni ...................................................................................................................8
1.b leJOS per Java .......................................................................................................9
3.2 MATLAB: firmware alternativo..................................................................................10
4. Linguaggio di programmazione Enchanting...................................................................11
4.1 Generalità.................................................................................................................11
1.a Storia ....................................................................................................................11
1.b Download e Installazione di Enchanting su Windows: ..........................................12
4.2 Configurazione .........................................................................................................13
2.a Collegamento PC-NXT .........................................................................................13
2.b Configurazione dei sensori: ..................................................................................13
2.c Configurazione dei motori: ....................................................................................14
4.3 Istruzioni di Enchanting ............................................................................................16
3.a Motori....................................................................................................................16
Pagina 41 di 42
Introduzione all’uso di robot LEGO Mindstorm NXT
ITIS C. Zuccante – Mestre
Classe 1G a.s. 2012-2013
3.b Sensori .................................................................................................................17
5. Linguaggio Lego Mindstorms NXT-G.............................................................................19
5.1 L'ambiente di programmazione NXT-G ....................................................................19
1.a L'interfaccia di NXT-G...........................................................................................20
1.b Principi di programmazione di NXT-G ..................................................................21
1.c Un primo programma con NXT-G .........................................................................25
6. Guida al Bluetooth .........................................................................................................30
6.1 Uso del Bluetooth .....................................................................................................30
6.2 Come effettuare il collegamento con il computer Windows: .....................................31
2.a Problemi ...............................................................................................................31
2.b Enemyleft NXT Control .........................................................................................31
2.c Problemi con l’applicazione ..................................................................................32
7. Realizzazione di programmi...........................................................................................33
7.1 robot “line follower”...................................................................................................33
1.a Scopo ...................................................................................................................33
1.b Metodo usato ........................................................................................................33
1.c L’algoritmo ............................................................................................................33
1.d Problemi incontrati e soluzioni ..............................................................................34
1.e Avvertenze............................................................................................................34
1.f Prove effettuate .....................................................................................................34
1.g Osservazioni e conclusioni ...................................................................................35
7.2 Robot combattente ...................................................................................................36
2.a Scopo ...................................................................................................................36
2.b Metodo usato ........................................................................................................36
2.c Algoritmo...............................................................................................................37
2.d Hardware ..............................................................................................................37
2.e Problemi incontrati e soluzioni ..............................................................................38
2.f Avvertenze.............................................................................................................38
2.g Osservazioni e conclusioni ...................................................................................39
Sitologia .............................................................................................................................40
Pagina 42 di 42