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