Curiosity in mostra a Pordenone

Sono felice: grazie a ITLUG il mio Curiosity sta allegramente giocando con i visitatori della mostra “Imparare sperimentando” a Pordenone. Con cosa l’ho costruito? Con i LEGO…
Curiosity_splash
Partiamo dall’inizio. A Pordenone ogni anno viene tenuta una mostra interattiva di esperimenti di fisica e scienze.
L’organizzazione ed ideazione è del professor Isidoro Sciarratta, docente di matematica e fisica all’Università degli studi di Pordenone.

Il professore il 29 ottobre 2012 ha contattato per email il consiglio direttivo di ITLUG, dicendo di essere interessato ad un modello di Curiosity da esporre nella mostra.

La richiesta è stata girata ai soci, ed ho risposto che ero interessato anche se non sapevo dove si sarebbe tenuta la mostra. Quando mi è stato risposto che era a Pordenone, ho fatto i salti di gioia…

Ho incontrato a novembre il professor Isidoro, una persona splendida ed umile nonostante la sua posizione, e ci siamo subito capiti: abbiamo parlato a ruota libera dell’evento e di come voleva integrare il Curiosity nell’esposizione.

La domanda fondamentale è stata: “è un evento che si guarda o si tocca?”

Alla risposta “si tocca” sono partito con le idee. Avendo già costruito il Trench Run, avevo pronte da riciclare le librerie di comunicazione tra Unity3D e l’NXT, mi mancava solo un’idea per il gioco del Curiosity.

Mi sono informato su internet come avevano fatto quelli che avevano già costruito il Curiosity, a partire dal modellino della LEGO, ma erano la maggior parte statici oppure richiedevano troppi motori per muoversi.

Per il gioco mi ha aiutato Sabran, il mio figlio maggiore: “Perché non gli fai raccogliere rocce su Marte?” Abbiamo passato qualche ora a buttare su carta il progetto, e dopo quattro fogli A4 avevamo le idee sufficientemente chiare.

Sono partito con il modello, nel mio stile: nessun progetto ed un mucchio di pezzi a disposizione. La prima versione prevedeva il Curiosity con le ruote che si muovevano, per cui ho costruito un complesso sistema per trasmettere il moto dall’asse principale alle ruote rispettando le articolazioni del sistema di sospensioni.

La prima versione è affondata miseramente quando ho aggiunto il peso dell’NXT, per cui sono ripartito ripiegando su un Curiosity che muove solo braccio e testa.

Volevo il braccio articolato in due segmenti, e mi mancava un sistema per aumentare la frizione del primo tratto senza bloccarlo completamente.

Durante questa fase ho partecipato ad un evento, ne ho parlato ed uno degli appassionati mi ha dato l’idea vincente, dicendomi che potevo “usare quello che usano i dentisti”. L’ho guardato con gli occhi spalancati e gli ho chiesto di spiegarmi di cosa parlasse: mi ha parlato degli elastici per ortodonzia…. e la sua idea è stata vincente.

Risolto il problema della frizione del braccio, rimaneva da fare il resto del Curiosity in scala; fatto il primo tratto (braccio e motore), ho affiancato il secondo motore per la testa ed ho stampato un disegno del Curiosity in scala con il pezzo costruito.

Il resto con prove ed errori è cresciuto attorno, fino ad ottenere il modellino completo. Le ruote si sono rivelate un problema, e le sospensioni (più semplici perché ora dovevano restare fisse) le ho rifatte quattro volte per farle apparire in scala.
Ho completato il tutto mettendo l’NXT come supporto per mantenere il Curiosity in piedi davanti al monitor (la prima versione prevedeva il Curiosity appeso, ma Sabran giustamente mi ha fatto notare che il robot deve andare verso l’alto…)

Siamo arrivati a gennaio, ed inizio la parte software: per prima cosa ho chiesto a mio fratello Riccardo di trovare una foto della superficie di Marte, poi con Gimp (www.gimp.org) l’ho resa piastrellabile in modo che non si vedessero le giunture e ci ho sovrapposto una griglia.

Per fortuna non c’erano da creare oggetti: la superficie è un piastrellone quadrato, mentre per il sasso ho riciclato un granello di sabbia disegnato da Riccardo, mio fratello, per un altro gioco.

Inizio in Unity3D a creare il piastrellone e ci attacco una luce per illuminare il tutto.

Per far muovere il Curiosity, ho creato un carrello virtuale, che è l’ombra del Curiosity e ci ho attaccato la telecamera e lo script principale.

Ho creato l’oggetto sasso a cui ho attaccato il granello di sabbia, un proiettore per l’ombra, un collider ed uno script che lo fa ruotare lentamente su sé stesso.

Ed ora via con il C#, ho iniziato a creare la routine di movimento, prima il movimento in avanti (di quanto deve muoversi? Come faccio a sapere quando si muove?), dove ho risolto la maggior parte dei problemi relativi facendo un “semaforo” con tre stati: 0 che aspetta la mossa, 0,001 inizia a muovere, fino ad arrivare a 1 che indica la fine della mossa. Ho scelto i numeri decimali perché moltiplicandoli per la distanza ho la posizione in percentuale, dal punto di partenza a quello di arrivo.

Stesso ragionamento per sterzare, e qui viene il bello: pensavo si sterzasse sugli assi X, Y e Z, quindi ragionavo di far ruotare la base su un asse solo. Dopo una serie di infruttuosi e divertenti tentativi (la telecamera ruotava in tutte le direzioni tranne che in quella scelta, e per di più a scatti) ho realizzato che la rotazione ha bisogno di quattro assi.

Non solo: la rotazione parte da nord, quindi se giro in senso orario da sud a ovest il tutto ruota regolarmente. Al momento di ruotare da ovest a nord il giro invece era inverso!!!
Infatti il programma per andare da 180 a 270 gradi faceva 180,181,182…270 mentre invece per andare da 270 a 0 faceva giustamente 270,269,268…0!!!
A questo punto ho memorizzato due nord, uno per girare in senso orario (0 gradi) e l’altro in senso antiorario (360 gradi).

Da lì sono passato alle routine di input. Unity gestisce egregiamente il joystick, quindi ho pensato di fare una pulsantiera con grossi tasti a disposizione del pubblico, con dentro un joystick. La cosa mi era già riuscita quando ho fatto un programma per la gestione di una telecamera che aveva bisogno di un pedale: avevo messo il circuito di un joystick da 10 euro in una scatola e ci avevo collegato un pedale di quelli da tastierista.

La gestione dell’input è stata una passeggiata, e ci ho attaccato i vari pezzi di movimento. Per la programmazione del Curiosity, ho memorizzato le mosse in una matrice: se questa supera una certa lunghezza o contiene il comando di analizzare, disabilita l’input ed inizia ad eseguire il programma.

Per controllare se il sasso veniva preso, mi sono ritrovato in una situazione particolare: il sistema tradizionale con i collider non funzionava, mi è toccato fare una routine che controllasse la posizione sasso per sasso.

A questo punto l’audio: che suoni mettere? Dopo aver realizzato che avrei passato ore su www.findsounds.com ho avuto un’idea luminosa: usare i suoni del programma Mindstorms.

Trovata la cartella dei suoni e realizzato che il VLC (www.videolan.org) li leggeva, li ho fatti convertire in massa in mp3 e li ho associati alle azioni.

Tempo di collegare l’NXT: ho recuperato le routine di comunicazione che si sono integrate alla perfezione nel programma principale, a parte due routines mancanti, problema risolto da un copia e incolla.

Una serie di perfezionamenti per tarare i motori tramite pulsanti nella schermata principale, un indicatore di batteria che fa anche da sveglia per l’NXT ed il gioco è pronto per il beta test!!

Manca solo un mese, e con Sabran pieno di entusiasmo, proviamo il gioco e spuntano i primi miglioramenti, tra cui un indicatore di punteggio, di punteggio massimo e soprattutto una migliore risposta ai comandi.

Fatte le modifiche (per fortuna avevo dei GIF di numeri, la gestione del testo a risoluzioni diverse in Unity è bestiale), il gioco è quasi pronto per il debutto: ho aggiunto ancora grafica per le icone dello schermo con GIMP.

Per le schermate durante il demo e le scritte (tutte in italiano, tranne il classicissimo GAME OVER), adotto una tecnica nuova.
Per il Trench Run avevo costruito le scritte con i mattoncini in LDD, salvato la schermata e resa trasparente con Gimp.
Stavolta le scritte erano davvero troppe per questo sistema, costruire un font lettera per lettera è un impresa e poi come mettere ed allineare le lettere insieme?
Mi è venuta in aiuto internet: esiste un font già pronto con l’aspetto dei mattoncini, il LEGORAMA.
Una rapida registrazione al sito e via a costruire le schermate con OpenOffice Impress, salvarle in BMP, renderle trasparenti con il GIMP e salvarle in PSD.
Volevo farle direttamente in GIMP ma ammetto la mia ignoranza, non ci sono riuscito a farle in due strati con due font e colori diversi con lo stesso testo.

Nel frattempo Isidoro mi presta il computer che servirà per l’evento: ci aggiungo una chiavetta Bluetooth, accoppio l’NXT, imposto la risoluzione corretta ed il gioco parte liscio come l’olio. Meno male!

Altro beta test la prima domenica di febbraio invitando alcuni piccoli amici, superato a pieni voti (ancora migliorare la risposta, mannaggia…) e via al montaggio.

Venerdì 8 febbraio notte (dopo il lavoro…) porto alla mostra di tutto ed ovviamente…. manca qualcosa. C’è il monitor ma è troppo basso, manca un supporto. Ha la presa HDMI e manca un cavo HDMI, ci sono mouse e tastiera wireless ma manca il ricevitore… e domani mattina mentre lavoro passano a registrare il video della mostra!!!!

Soluzione semplice (meno male che avevo dietro il computer): catturo una schermata del gioco, la metto su una chiavetta USB e la faccio visualizzare dal televisore. Per lo meno la ripresa TV è salva!

Sabato 9 febbraio pomeriggio, pochi minuti prima dell’inaugurazione faccio gli ultimi collegamenti… ed il braccio non funziona!!! Il Curiosity si gratta la pancia e si dà pugni in faccia… Incredibile!!! Problema risolto staccando il cavo del motore: mi piange il cuore ma bisogna presentarlo ai cervelloni che sono venuti apposta per l’inaugurazione.

Dopo la conferenza di presentazione, quando le autorità arrivano  recluto un bambino per fare da cavia e spiego come funziona la mia creatura: riesce a prendere tutti i sassi riempiendolo di orgoglio. Gli adulti danno consigli ma quando il gioco si libera nessuno ha il coraggio di provare… Fa niente, andiamo al rinfresco.

Dopo il rinfresco trovo due ragazzi che stanno giocando, bene!! Spiego come accendere e spegnere ai custodi e ciceroni della mostra, consegno le istruzioni scritte per farlo passo-passo e posso andarmene con il cuore in pace e carico di soddisfazione.

Il giorno dopo torno alla mostra con Sabran e… per fortuna trova un altro errore!!! I sassi a fine partita non vengono cancellati, quindi si accumulano sul terreno partita dopo partita, rallentando il gioco a livelli disumani.

Di corsa a casa, via con le modifiche, test, ricompila, rimetti in chiavetta e torna alla mostra… chiusa!!!

Isidoro (che ha proprio un cuore d’oro) ritorna apposta per aprire; installo il tutto più velocemente possibile, mi profondo in ringraziamenti anche a sua moglie e finalmente torno a casa, che avventura!

Oggi (19 febbraio) sono tornato alla mostra, tutto funziona regolarmente, ho messo altri volantini ITLUG ed il contatore dice quasi 250 partite: sono proprio felice!

 

Loading