Programmare NXT con Enchanting: un`esperienza e

Transcript

Programmare NXT con Enchanting: un`esperienza e
Programmare NXT con Enchanting:
un’esperienza e valutazioni
Giuseppe Callegarin
pj
r.i
ITIS “C. Zuccante”, Via Baglioni 22, 30173 Venezia-Mestre
[email protected]
bo
cu
Vengono descritti i vantaggi di Enchanting, un linguaggio iconico
alternativo ad NXT-G basato su Scratch, un ambiente di
crescente successo per motivare i ragazzi dagli 8 anni in su alla
programmazione di applicazioni grafiche interattive e nato al MIT:
lo stesso ambiente in cui è nato il LOGO. Vengono infine riportati
gli esiti di prime esperienze di robotica e di fisica con questo
strumento in una prima di un ITIS nell’ambito della disciplina
Tecnologie Informatiche introdotta con la riforma dei Tecnici.
1. Introduzione
ww
w.
ro
Stiamo assistendo ad una crescente diffusione di massa di artefatti tecnologici
che hanno fondamentalmente in comune la necessità di elaborare informazione in
modo digitale: cellulari, iPad, televisori, frigoriferi, termostati, opere d’arte e perfino
vestiti, solo per citare alcune categorie. Il robot educativo, non solo rientra in questa
categoria, ma può essere spesso assunto come oggetto in grado di rappresentare
molte di queste categorie. In effetti i kit robotici vengono utilizzati come telecomandi,
nei controlli di processi, come strumenti di misura e di data logging per esperimenti
scientifici di ogni genere.
I mondi della comunicazione, della realtà virtuale (vedi i giochi) e della realtà
concreta (come i robot) si stanno sempre più integrando per dar luogo a creazioni
sempre più fantasiose e anche metafore di applicazioni molto utili, come quelle del
telelavoro e della telemedicina.
La disciplina che più di ogni altra contribuisce a questa rivoluzione è ancora una
volta l’informatica e, in particolare, la programmazione con la fase di problem
solving. Nella recente riforma dei Tecnici è stata giustamente introdotta almeno una
disciplina che include aspetti di questa competenza fin dai primi due anni, quando i
ragazzi hanno dai 14 ai 16 anni.
Per molti educatori si è posto il problema della scelta del linguaggio di
programmazione. Ciascuno dei linguaggi classici del passato presenta qualche
svantaggio, specie per questa fascia di età. Da pochi anni è apparso Scratch
[Maloney et al, 2004], proposto dal Lifelong Kindergarten Group del Media Lab del
MIT, un linguaggio basato su un ambiente multipiattaforma e open source, molto
vicino alle esigenze dei bambini. Il sito [scratch.mit.edu] riporta bene gli obiettivi del
progetto: “Scratch è un linguaggio di programmazione che rende semplice creare
storie interattive, animazioni, giochi, musica e arte -- e condividere le tue creazioni
sul web. Quando i ragazzi creano e condividono i loro progetti Scratch, imparano
importanti idee matematiche e computazionali e allo stesso tempo imparano a
1
2. Scratch e robotica
bo
cu
pj
r.i
pensare creativamente, a ragionare con sistematicità e a lavorare in collaborazione.”
Il successo di questo linguaggio-ambiente di programmazione è tale che esso è
stato tradotto in decine di lingue e ha già un archivio condiviso di milioni di progetti
realizzati da persone di tutte le età in tutto il mondo.
Una delle regioni fondamentali del successo è la filosofia sottostante: rendere
semplici le cose, a costo di rinunciare di poter fare “di tutto”. L’altra grande ragione
del successo è l’adozione di un linguaggio iconico che trova il favore istintivo dei
ragazzi per l’uso delle interfacce grafiche. I programmi nascono così come delle
costruzioni Lego che seguono rigidi principi di programmazione strutturata.
Questa idea non è nuova - la si ritrova, ad esempio, già nel 2005 per la
programmazione del robot Scribbler [www.parallax.com] .
Scratch prevede delle limitate possibilità di interfacciamento con motori e
sensori: l’ambiente Enchanting [enchanting.robotclub.ab.ca] è nato in Canada sia
con lo scopo di superare questi limiti sia come alternativa ad NXT-G [Kelly, 2010]
per programmare NXT con un linguaggio iconico.
Dopo i necessari approfondimenti verrà descritto un possibile percorso didattico
che parte dagli algoritmi, passa per Scratch e si conclude con la programmazione
dei robot NXT. Infine verranno riportate le impressioni ottenute dopo una
recentissima sperimentazione di Enchanting nell’ambito dell’insegnamento della
nuova disciplina Tecnologie Informatiche previsti dalla riforma dei Tecnici.
ww
w.
ro
Del LOGO (precursore degli anni ’80, nato sempre al MIT) Scratch riprende l’idea
degli sprite (icone grafiche in movimento) ma per favorire la semplicità si rinuncia
all’idea di procedura e di sottoprogramma (e quindi anche di ricorsione). Gli sprite
possono svolgere le funzioni di personaggi animati con comandi di movimento
ispirati alla tartaruga del LOGO [Papert, 1980].
Fig. 1 Un esempio di codice Scratch ed effetto.
Ad esempio, in Fig. 1 è riportato il codice Scratch per disegnare un poligono
regolare con la grafica della tartaruga leggendo gli input da tastiera.
2
ww
w.
ro
bo
cu
pj
r.i
L’unità fondamentale è lo script: un frammento di codice strutturato con l’uso di
icone che viene eseguito quando ci si clicca sopra.
Gli sprite possono cambiare dinamicamente il loro costume. Cambiando anche lo
sfondo del palcoscenico, con l’uso di suoni, immagini, video e “fumetti” è possibile
dar luogo a vere e proprie storie e giochi interattivi.
All’interno di ogni script si segue il classico paradigma procedurale con le regole
della programmazione strutturata. L’insieme degli script segue un modello di
programmazione concorrente basata sull’uso dei messaggi: alcuni script entrano in
esecuzione solo quando ricevono un particolare messaggio o viene battuto un certo
tasto. Si possono anche mettere dei comandi di attesa di certi eventi provenienti da
tastiera o dal mouse.
Scratch consente di aggiungere alle storie la possibilità di interagire con un
mondo di oggetti concreti come pulsanti, motori, luci, microfoni, ecc., cioè con gli
stessi sensori e attuatori di cui sono fatti i robot. A questo proposito si è pensato di
fornire gli strumenti linguistici per l’interfacciamento con i dispositivi di alcuni
semplici tipi di kit robotici. In particolare Scratch prevede la possibilità di controllare il
motore del kit Lego WeDo con dei comandi molto semplici da usare (vedi Fig. 2).
Fig. 2 I comandi sul motore Lego WeDo.
Per la lettura dai sensori Scratch prevede l’uso di una Scratch Sensor Board con
la comunicazione attraverso una porta USB, con la possibilità di acquisire lo stato di
un cursore, dell’intensità di un sensore di luce, dell’intensità del suono percepito da
un microfono o del valore di una tra quattro possibili resistenze create, ad esempio,
con materiali conduttori come la carta stagnola o braccialetti metallici. La Sensor
Board ufficiale è la Pico Board [hwww.picocricket.com] riportata in Fig. 3. Tuttavia è
relativamente facile per alcuni volenterosi creativi costruirsi una propria Sensor
Board compatibile anche più potente, flessibile e meno costosa, ad esempio con
Arduino o simili.
Le voci “alzo” e “distanza” di Fig. 3 si riferiscono a sensori di “tilt” e di distanza
(un piccolo sonar) del kit Lego WeDo.
I progettisti di Scratch hanno inoltre previsto una interessante possibilità: quella
di rilevare misure da sensori “remoti” da un computer in rete. È proprio questa
caratteristica che è stata sfruttata nel progetto Enchanting per interfacciare i sensori
di NXT con Scratch.
3
pj
r.i
cu
Fig. 3 Menu valore sensore e Scratch Sensor Board.
3. Enchanting : Scratch per NXT
bo
La possibilità di unire le potenzialità di NXT con quelle di Scratch ha dato luogo
nel 2010 al progetto Enchanting ad opera di un gruppo di ricerca canadese guidato
da Clinton Blackmore principalmente con due obiettivi:
ro
• consentire a Scratch di usare i sensori e gli attuatori collegati ad un NXT;
• programmare NXT con il linguaggio Scratch.
ww
w.
Nel seguito ci interesseremo solo della seconda possibilità, propriamente
finalizzata alla robotica e che non richiede l’uso combinato sia dell’ambiente Scratch
che quello di Enchanting.
3.1 Architettura di Enchanting
Enchanting è frutto dell’integrazione di diverse tecnologie e linguaggi open
source: Scratch, BYOB [byob.berkeley.edu], Squeak [squeak.org] e Lejos [lejos.org].
Innanzitutto occorre dire che si è preferito partire da BYOB (Build Your Own
Block) nato come estensione di Scratch per rimuovere alcuni suoi limiti come
l’assenza di procedure, chiamate appunto blocchi in BYOB.
Squek è il linguaggio in cui è costruito l’ambiente di sviluppo Enchanting (e
anche Scratch). Si tratta di una recente implementazione di Smalltalk, un noto
linguaggio per la programmazione ad oggetti sorto alla fine degli anni ’70.
Si chiede poi la sostituzione del firmware standard di NXT : è necessario per
l’esecuzione di programmi Java per NXT.
Quando si chiede l’esecuzione degli script presenti nell’ambiente Enchanting
avvengono i seguenti passi:
1) Traduzione in java degli script presenti in altrettanti thread java. Volendo è
possibile vedere il codice generato.
2) Compilazione e creazione del file eseguibile Enchanting.nxj in byte code java
per Lejos, completo di tutte le librerie necessarie.
3) Uploading del suddetto file su NXT;
4
4) Lancio dell’esecuzione concorrente di tutti gli script del programma appena
caricato.
ww
w.
ro
bo
cu
pj
r.i
Un bottone rosso della console di Enchanting consente l’interruzione del
programma su NXT (vedi Fig. 4). L’esempio riportato consente di avviare sul display
di NXT la scrittura concorrente di due messaggi diversi.
Fig. 4 L’ambiente di programmazione di Enchanting.
3.2 Programmare con Enchanting
La tecnica di composizione dei programmi è molto simile a quella di Scratch. A
titolo di esempio la Fig. 5 riporta un classico inseguitore di linea molto semplice con
l’uso di un unico sensore di luce. Per confronto, viene riportato anche l’equivalente
programma NXT-G privo dei pannelli di ogni blocco in cui si vedono i parametri
impostati.
Fig. 5 Inseguitore di linea con Enchanting e con NXT-G.
5
cu
Fig. 6 Configurazione di motori e sensori.
pj
r.i
Prima di trasferire ed eseguire il programma è necessario configurare motori e
sensori come illustrato in Fig. 6.
ww
w.
ro
bo
Il prossimo esempio risolve il problema di costruire uno strumento di misura di
distanze, ad esempio per un esperimento di fisica. Vogliamo che il sistema sia in
grado di effettuare e visualizzare sul display di NXT una misura con il sonar tutte le
volte che viene premuto un pulsante. Un secondo pulsante viene utilizzato per
arrestare il sistema (a scopo dimostrativo). La soluzione con due script è
rappresentata in fig. 7.
Fig. 7 Strumento per la misurazione di distanze
3.3 Procedure con Enchanting
Enchanting eredita da BYOB la possibilità di definire procedure (blocchi). A titolo
dimostrativo proponiamoci di costruire un blocco di nome “indietro” (con parametro
durata) che abbia l’effetto di fare arretrare NXT per la durata specificata in secondi.
Come si può vedere in Fig. 8 il blocco può essere definito con un apposito editor ed
entrare a far parte dei blocchi predefiniti a tutti gli effetti.
6
pj
r.i
cu
Fig. 8 Esempio di definizione di blocco e suo uso.
3.4 Confronto con NXT-G
ww
w.
ro
bo
Sia Enchanting che NXT-G sono linguaggi iconici a blocchi ma ispirati a
paradigmi di programmazione diversi che alla fine determinano la facilità d’uso e la
leggibilità.
Quello di Enchanting dovrebbe essere lo stesso di Scracth: i programmi sono
insiemi di task concorrenti in cui ogni task esegue un processo sequenziale che può
avere dei momenti di sincronizzazione con gli altri o su determinati eventi.
In NXT-G le cose sono meno chiare: i programmi dovrebbero essere visti come
dei sistemi composti di sottosistemi elementari (i blocchi) interagenti tra di loro,
come avviene in effetti per l’hardware.
Inoltre:
-i blocchi di Enchanting rappresentano istruzioni o espressioni sostanzialmente
ad albero: la loro semantica è chiara e la rappresentazione grafica coerente. In
NXT-G i blocchi rappresentano di volta in volta motori, sensori, istruzioni od
operatori aritmetici: per far funzionare il tutto occorre impostare proprietà e “unire”
con dei fili virtuali (cavi dati) gli output di alcuni blocchi con l’input di altri.
-con Enchanting non ci sono proprietà dei blocchi nascoste: le impostazioni sono
esplicite e ben visibili come parametri (a parte l’assegnazione delle porte ai sensori
e attuatori, che è meglio siano effettivamente separate). Ad esempio in Fig. 5 non si
vede nell’inseguitore NXT-G la soglia di luminosità (45).
In qualche caso il codice iconico è più semplice con Enchanting e in altri è più
semplice con NXT-G. Uno dei casi in cui è più semplice con NXT-G è, ad esempio,
quello della soluzione al problema chiamato Hello-World in [Moro et al, 2011]. Il
problema è quello di far avanzare un robot comandato da un unico motore verso un
ostacolo con una velocità proporzionale alla distanza che un sonar posto in testa al
veicolo misura rispetto all’ostacolo. In ogni caso il robot deve fermarsi entro 10
secondi. In NXT-G la soluzione si compone di due soli blocchi in ciclo
(apparentemente infinito) con un cavo dati che unisce il sonar con il parametro
“velocità” del motore.
7
cu
pj
r.i
Una soluzione in Enchanting è rappresentata in Fig. 9 in cui si vede che il timer è
stato realizzato con un apposito script che condivide con il task principale la
variabile condivisa ‘tempo’. Il programma funziona ma in generale si possono
sollevare dei dubbii sulla semantica della concorrenza.
Fig. 9 Soluzione Enchanting.
bo
In generale le soluzioni Enchanting presentano una maggiore leggibilità e
attitudine ad una conversione in testo (fase successiva sempre auspicabile per
progetti più complessi, ad esempio verso una versione testuale di Scratch o verso
NXC). Del resto l’esigenza del passaggio al testo c’è anche per NXT-G
NXT
[Moro et
al,2011].
ro
4. Un percorso didattico ed esperienza
•
•
•
ww
w.
Nella
a nostra scuola Scratch è stato scoperto e proposto già lo scorso anno come
primo linguaggio
gio di programmazione per gli allievi delle prime classi nella
n
nuova
disciplina “Tecnologie Informatiche” prevista per il Biennio dalla ultima riforma degli
istituti Tecnici. A disposizione ci sono tre ore alla settima
timana di cui due di laboratorio.
L’esperienza educativa con Scratch è stata giudicata positivamente da tutti i
docenti che l’hanno provata. Solo quest’anno si è provato ad inserire Enchanting per
la programmazione dei robot NXT in una classe prima con i seguenti obiettivi:
motivare gli studenti allo studio della programmazione con un linguaggio e un
ambiente molto simile a Scratch;
fare intuire che l’uso di questi strumenti può trovare applicazione nel contesto di
altre discipline (in particolare fisica e matematica);
matematica)
stimolare il problem solving e la creatività con le prime esperienze di robotica.
robotica
Il percorso didattico ha previsto i seguenti passi:
a)
b)
c)
d)
e)
f)
nozioni elementari di base su problemi e primi algoritmi in pseudocodice;
traduzione da pseudocodice a Scratch;
programmazione di sprite di Scratch per semplicissimi giochi;
giochi
elaborazione di liste con pseudocodice e Scratch;
Scratch
nozioni introduttive di robotica su NXT usando Enchanting;
Enchanting
conduzioni di sperimentazioni di fisica con NXT ed Enchanting
L’introduzione dello pseudocodice è duplice:
8
•
•
abituare sin dall’inizio gli allievi a distinguere tra idee e loro realizzazione;
disporre di una strumento in grado di rappresentare le idee con carta e
penna.
pj
r.i
Così l’algoritmo di controllo dell’inseguitore di linea di Fig. 5 potrà essere
espresso con:
bo
cu
Sinistro su A
Destro su C
Luce su 1
per sempre
se Luce < 45
allora
start Sinistro
stop Destro
altrimenti
start Destro
stop Sinistro
ww
w.
ro
La sperimentazione delle fasi e) ed f) ha previsto due incontri di due ore in
laboratorio precedute da poche informazioni generali e alcune semplicissime
dimostrazioni su sensori e attuatori. Nel primo incontro gruppi di 3-4 allievi hanno
affrontato in successione problemi elementari di introduzione alla robotica con libere
varianti suggerite dagli stessi gruppi. Nel secondo incontro la robotica è stata
utilizzata per sperimentazioni di fisica come la scrittura sul display della velocità di
un robot e del periodo di un pendolo.
In questa classe vi sono diversi allievi con problemi di disagio scolastico: attività
con Scratch e i robot hanno avuto l’effetto di rivalutare il piacere di stare a scuola. I
più diligenti hanno svolto compiti di consulenza e coordinamento.
Un’altra conseguenza è quella di incentivare lo studio e l’integrazione delle
tecnologie informatiche, come quelle connesse con la strutturazione (vedi foglio
elettronico) e la presentazione dei dati (stesura di documenti e slide).
A questo proposito si potrebbe prendere in considerazione nelle prossime
programmazione didattiche di proporre, a gruppi, un progetto interdisciplinare che
preveda l’uso di Enchanting con alcuni spazi di libertà e che coinvolga l’uso di
diverse tecnologie informatiche, come la pubblicazione in web del progetto stesso.
Enchanting è al momento un prodotto incompleto e instabile: anche i ragazzi si
sono accorti che presenta criticità rispetto a Scratch. Ad esempio mancano ancora
molti aiuti, alcuni messaggi di errore non sono chiari e a volte appaiono finestre di
errore di Squeak. Quando NXT va in crash è necessario staccare e riattacare le
batterie. Occorre però ricordare che si tratta di un prodotto open source portato
avanti da pochi volontari. Confidiamo comunque in rapidi miglioramenti.
5. Conclusioni
Scratch sta scuotendo il mondo dell’educazione analogamente a quello che
aveva fatto LOGO a suo tempo. Ciò che attrae ora è la possibilità di creare storie e
giochi interattivi per motivare gli allievi di tutte le età allo studio delle tecniche di
programmazione con un linguaggio iconico con una facile migrazione verso il testo.
9
pj
r.i
La motivazione può essere anche più forte se si punta alla integrazione con il
mondo reale attraverso sensori e attuatori, gli “ingredienti” tipici della robotica. Con
Enchanting si stanno riscoprendo i linguaggi iconici per la programmazione dei robot
NXT e non solo.
L’esperienza fatta in una prima superiore sembra confermare la validità di questo
tipo di strumenti e di questo approccio: Scratch e la robotica hanno il merito di
coinvolgere tutti su problemi che fino a poco tempo fa potevano sembrare
improponibili.
Nonostante i limiti attuali si può essere fiduciosi del successo di Enchanting e
della nascita a breve di strumenti analoghi.
Bibliografia
cu
[Kelly, 2010] Kelly J.F., LEGO MINDSTORMS NXT-G, Programming Guide, Apress,2010
[Maloney et al,2004] Maloney, J., Burd, L., Kafai, Y., Rusk, N., Silverman, B. and Resnick,
M. Scratch: A Sneak Preview. Second International Conference on Creating, Connecting, and
Collaborating through Computing, Kyoto, Japan, 2004, pp. 104-109,
bo
[Moro et al, 2011] - Moro M., Menegatti E., Sella F. Perona M., Imparare con la robotica,
Erickson, 2011
Sitografia
ro
[Papert, 1984] – Papert S. - Mind Storms, Emme edizioni, 1984 (orig. 1980)
[byob.berkeley.edu] Sito di Build Your Own Block.
[enchanting.robotclub.ab.ca] Sito di Enchanting.
ww
w.
[scratch.mit.edu] Sito di Scracth.
[www.parallax.com/tabid/455/Default.aspx] Pagina della Parallax su Scrabbler.
[www.picocricket.com] Sito della Scratch Sensor Board ufficiale.
[www.ortop.org/NXT_Tutorial/index.html] Tutorial su NXT-G (in inglese).
[www.squeak.org] Sito di squeak.
10