WE-FREE: STUDIO E SVILUPPO DI UN’APPLICAZIONE PER L’USO DI VIDEOGIOCHI NELLA RIABILITAZIONE PER DISABILITA’ MOTORIE Relatore: Ing. Spoletini Paola Correlatore: Ing. Campi Alessandro Elaborato di laurea di: Giacomo Rolli Matr. 677273 Valsecchi Laura Matr. 706501 Politecnico di Milano Anno Accademico 2008-2009 1 Indice Indice ..................................................................................................................................... 1 Capitolo 1. Introduzione .................................................................................................. 4 Capitolo 2. Le Console di settima generazione ............................................................... 5 Capitolo 3. Nintendo Wii ................................................................................................ 8 3.1 La console Nintendo Wii e il controller Wii Remote ............................................ 8 3.2 Specifiche Tecniche della console Nintendo Wii [2] .......................................... 12 3.3 Nintendo Wii Fit .................................................................................................. 14 Capitolo 4. Determinazione e controllo della posizione del centro di massa ............... 18 4.1 Che cosa è il centro di massa ............................................................................... 18 4.2 Cinematica e dinamica per il controllo dei robot ................................................ 19 4.3 Cinetica inversa per il controllo della posizione del centro di massa .................. 21 4.4 “Segmental method” ........................................................................................... 26 4.5 Determinazione del centro di massa di una persona in posizione seduta ........... 29 Capitolo 5. Ambiente di sviluppo................................................................................... 34 5.1 Microsoft Visual Studio 2008.............................................................................. 34 5.2 Microsoft XNA Game Studio 3.1 ........................................................................ 35 5.2 Microsoft XNA Game Studio 3.1 ........................................................................ 35 5.3 Autodesk 3DS Max ............................................................................................. 36 5.4 Libreria WiiMote ................................................................................................ 38 Capitolo 6. Implementazione e realizzazione................................................................. 41 6.1 Specifiche del gioco............................................................................................. 41 6.2 Implementazione del gioco ................................................................................. 43 6.2.1 La classe Game1 .......................................................................................... 43 6.2.2 La classe GameObject ................................................................................. 45 6.2.3 La classe Giocatore ...................................................................................... 45 6.2.4 La classe Fisioterapista ................................................................................ 45 6.2.5 La classe CentroDiMassa ............................................................................ 46 6.2.6 Angolo di piegamento ................................................................................. 48 6.2.7 La telecamera ............................................................................................... 51 2 6.2.8 I modelli 3D ................................................................................................. 52 6.2.9 Detection Collision ...................................................................................... 54 Capitolo 7. Sviluppi futuri ............................................................................................. 55 Elenco figure........................................................................................................................ 56 Elenco Tabelle ..................................................................................................................... 57 Bibliografia .......................................................................................................................... 58 Ringraziamenti..................................................................................................................... 61 3 Capitolo 1. Introduzione Nel 2006 Nintendo ha lanciato sul mercato una console del tutto innovativa, Nintendo Wii, i cui controller non sono dei semplici telecomandi che permettono di comandare il gioco premendo dei pulsanti, ma sono dei dispositivi che rilevano il movimento del corpo permettendone così un controllo diretto. Uno di questi controller è la Balance Board, una pedana che determina i movimenti dell’utente rilevando lo spostamento del suo peso. La maggior parte dei giochi che utilizzano questo controller devono essere eseguiti stando in piedi sulla pedana, non permettendone così l’uso a persone affette da patologie che non consentono tale postura. Il software infatti calibra il gioco calcolando il baricentro del giocatore in posizione eretta, se quindi l’utente si dovesse sedere sulla Balance Board, invece che stare in piedi, non riuscirebbe ad avere un perfetto controllo del gioco. L’obiettivo di questo progetto è rendere possibile l’uso della Balance Board anche a persone che potrebbero incontrare questo problema, in particolare a soggetti paraplegici e tetraplegici, permettendogli di giocare stando seduti sulla pedana. Parlando con Dario Pometto, fisioterapista all’Unità spinale dell’Ospedale Niguarda e con la Dottoressa Tiziana Redaelli , primario dell’Unità spinale dell’Ospedale Niguarda, si è capito che si sarebbe potuto fare un gioco che, oltre ad intrattenere, permettesse degli esercizi riabilitativi in un’ottica divertente. I movimenti sui quali si sarebbe potuto puntare inizialmente sarebbero potuti essere gli spostamenti del busto laterali, anteriori e posteriori. La tesi è stata così suddivisa in due parti. In un primo momento si è affrontato il problema principale della determinazione del centro di massa di un soggetto seduto, in seguito si è sviluppato un gioco che obbliga a compiere movimenti utili alla riabilitazione del soggetto, calibrati in base livello della lesione. 4 Capitolo 2. Le Console settima generazione di Una console è un dispositivo elettronico concepito esclusivamente o primariamente per giocare con videogiochi. Magnavox Odyssey è stata la prima console. Progettata da Ralph H. Baer nel 1968, fu distribuita sul mercato da Magnavox 4 anni più tardi. Si trattava di una macchina alimentata a batterie, sprovvista di audio e dotata di una grafica decisamente approssimativa: basti pensare che insieme alla console venivano fornite una serie di cover colorate trasparenti da posizionare sullo schermo della TV per ottenere gli sfondi di gioco. Odyssey non ebbe un gran successo commerciale, ma si trattò comunque di una vera e propria rivoluzione considerando che era la prima volta che veniva concepito uno strumento per videogiochi dedicato all’ambiente domestico. Negli anni a seguire, numerose aziende si sono avvicinate a questo mercato e hanno cercato di superarsi tra loro con continue innovazioni. I primi modelli permettevano di giocare solo ad un numero limitato di videogiochi implementati al loro interno. Nella implementazione più evoluta la console invece è diventata sempre più simile a un computer che esegue videogiochi, permette di vedere film, ascoltare musica, connettersi a internet per giocare online... Attualmente ci troviamo nella settima generazione di console per videogiochi, che include prodotti sviluppati dal 2004 ad oggi. Le console di questa generazione che stanno avendo maggior successo sono Nintendo DS e Wii di Nintendo, Playstation Portable e Playstation 3 distribuite da Sony, Xbox 360 prodotta da Microsoft con la collaborazione di IBM, ATI Technologies e Samsung. Nintendo DS è una console portatile presentata nel 2004. La console presenta un design a conchiglia, possiede due schermi LCD al suo interno ,uno dei quali è touch screen. Altre caratteristiche, volte ad aumentarne l'interattività, sono il microfono integrato per il riconoscimento vocale e la tecnologia Wi-Fi per il multigiocatore. Nintendo DS consente il 5 gioco in LAN nel raggio di 30 metri circa, fino a 8 giocatori; è inoltre possibile giocare online tramite il servizi gratuito Nintendo Wi-Fi Connection che permettere di sfidare via Internet giocatori da tutto il mondo. Wii è succeduta al Nintendo GameCube. GameCube è una console da tavolo, migliore dal punto di vista grafico rispetto alle precedenti, ma comunque senza nulla di particolarmente innovativo rispetto agli altri prodotti presenti sul mercato. La sua caratteristica più distintiva è il controller senza fili, il Wiimote ,simile ad un telecomando, che reagisce alle forze vettrici e all'orientamento rispetto allo spazio tridimensionali attraverso un sistema di accelerometri e giroscopi presente al suo interno, riproducendo così i movimenti effettuati dall’utente che lo tiene in mano. È inoltre disponibile la funzione WiiConnect24 che permette di essere costantemente connessi alla rete Internet, potendo ricevere messaggi, trucchi ed altri dati anche mentre non si sta giocando, e il sistema Wi-Fi Connection, presente anche in Nintendo DS. La PSP è una console portatile prodotta e venduta dalla Sony Computer Entertainment a partire dagli inizi del 2005. La PlayStation Portable offre la possibilità di giocare, vedere video, ascoltare musica, visualizzare immagini, fornendo anche la possibilità di utilizzare un browser internet apposito. L’azienda Sony ha inoltre distribuito nel 2006 la nuova Play Station 3, che succede alla PS2, migliorandone la grafica, grazie al processore centrale Cell e alla scheda grafica RSX. Supporta l'alta definizione, gestendo risoluzioni Full HD fino a 1080p, e la maggior parte dei giochi sono distribuiti su dischi Blu-ray che consentono di memorizzare una grande quantità di contenuti multimediali. Come Nintendo, anche Sony offre un servizio online gratuito, PlayStation Network, che comprende un browser per navigare in internet, un sistema di chat e di e-mail, la possibilità di giocare on-line e un negozio virtuale dove acquistare video, trailer, immagini, sfondi, temi, giochi (gratuiti o a pagamento), demo e accessori virtuali per personalizzare i giochi. XBOX 360, distribuita nel novembre del 2005 da Microfoft, è una console da tavolo con supporto per la tecnologia ad alta definizione, concorrente della PS3. Il servizio di gioco on-line offerto dalla Microsoft Corporation che permette di giocare in multiplayer attraverso internet è Xbox Live. 6 Tale servizio dispone anche di un mercato virtuale on-line dal quale è possibile scaricare contenuti come trailer, video, espansioni di giochi, demo e aggiornamenti per il sistema. 7 Capitolo 3. Nintendo Wii 3.1 La console Nintendo Wii e il controller Wii Remote Alla fine del 2006 (il 7 dicembre in Italia) ha debuttato sul mercato l’ultima console firmata Nintendo, la Nintendo Wii. Nell’ampio mercato dei videogiochi, questa console è andata a riempire un segmento fino a quel momento vuoto. Infatti la console permette di comandare il gioco direttamente tramite i movimenti del proprio corpo. Le partite di tennis non sono più confinate alla semplice pressione di un pulsante. Grazie all'innovativo controller, Nintendo ti permette di prendere parte all'azione: usi il telecomando Wii per colpire la pallina, come se avessi in mano una racchetta. Figura 1: Wii Sport Tennis È nato così un modo di giocare completamente nuovo, senza più joystick o tastiere. Lo sviluppo della console Wii è iniziato subito dopo il lancio del GameCube. Nello sviluppo di una nuova console, per quel che riguarda i singoli componenti e la tecnologia applicata, non si riparte sempre da zero, ma ci si basa sulle tecnologie esistenti. 8 Figura 2: Console Nintendo Wii Nel mondo della tecnologia ci sono sempre state le cosiddette road map (ovvero i programmi relativi alla tempistica e alla modalità in cui le nuove tecnologie si riveleranno al pubblico in futuro). I vari settori dell'industria cercano di prevedere la modalità di evoluzione delle tecnologie basate sui semiconduttori, come quelle per il supporto dati o per la comunicazione wireless. In genere, ingegneri e sviluppatori fanno riferimento a queste road map durante lo sviluppo delle macchine che verranno lanciate in futuro. La console Wii è invece una console la cui esistenza è totalmente avulsa dagli schemi previsti dalle road map. Se avessero seguito le road map, gli sviluppatori di Nintendo avrebbero cercato di realizzare un qualcosa di "più potente e più bello" di GameCube, in grado di generare una grafica migliore in minor tempo, ma evidentemente non è stato così. Per segnare il lancio di Wii, il presidente e amministratore delegato di Nintendo, Satoru Iwata, ha condotto una serie unica di interviste (Iwata chiede: Wii” [1] ) per documentare nel dettaglio la creazione della nuova console Nintendo. Dalle interviste emerge chiaramente che l’obiettivo intrapreso nello sviluppo è stato un altro. “Più o meno un anno dopo l'inizio dello sviluppo della console Wii, dopo aver parlato con alcuni sviluppatori nostri partner, arrivai alla conclusione che i desideri di quelli che vogliono "sempre di più" non hanno limiti. Se hanno uno, vogliono due. Una volta ottenuto due, non vogliono tre, ma cinque, dieci, trenta, o anche cento. Desiderano sempre di più e, alla fine, cercare di accontentarli non ci porterebbe da nessuna parte. Circa un anno dopo l'inizio dello sviluppo della console Wii ho capito che c'era qualcosa di sbagliato in 9 quell'approccio.” Afferma Takeda-san, il principale responsabile del progetto, nell’intervista. Così invece di puntare a cercare di aumentarne la capacità di calcolo e la potenza, cosa che avrebbe fatto aumentare anche le dimensioni e il consumo energetico del chip, gli sviluppatori Nintendo hanno sfruttato la tecnologia per minimizzare il consumo energetico della console Wii, realizzando così una macchina che può essere lasciata sempre accesa, sfruttando la tecnologia allo stato dell'arte in un modo unico rispetto a tutte le altre macchine. Un altro obiettivo era quello di fare della console Wii non un semplice giocattolo per bambini, ma una console adatta a tutta la famiglia. Proprio questo motivo ha spinto la ricerca di un design adeguato che ha portato ad ottenere una console che possiede le funzionalità e la durevolezza di un giocattolo, ma senza apparire tale. La parte più innovativa della Wii è il controller Wii Remote, più comunemente chiamato Wiimote. Il suo sviluppo è stato influenzato dal Nintendo DS in quanto l’idea di poter toccare direttamente lo schermo, che sta alla base di tale console, ha fatto molto scalpore. L’idea più ovvia sarebbe stata quella di installare un touch screen sul controller Wii, come molti si aspettavano, o di usare un dispositivo per il puntamento simile al mouse di un computer o al touchpad, come inizialmente avevano pensato gli sviluppatori. Alla fine però si è arrivati ad ottenere un qualcosa di molto diverso e completamente innovativo, come spiega nell’intervista Kenichiro Ashida, disegner dell’azienda: “Io credevo fermamente nel fatto che il controller del GameCube fosse il culmine di tutti i controller che lo avevano preceduto e che non sarebbe stato possibile migliorarlo con delle aggiunte. Più che altro, sentivo che io e il controller stavamo diventando incompatibili. Avendo una famiglia, diminuiva il tempo a disposizione per giocare a giochi difficili e si è creato un divario tra il "me stesso creatore" e il "me stesso giocatore". Quando invece ho compreso il concetto alla base della console Wii, ho capito che mi avrebbe fatto divertire. In realtà ho compreso che era ora di cambiare l'idea che avevo del videogioco come momento in cui afferrare il controller con tutte e due le mani e restare incollato davanti al televisore fino al mattino. Non sto rinnegando quel tipo di esperienza di gioco, ma trovo che il passare dall'uso delle due mani vicine a un uso semplice, come se si disegnasse su una lavagna, apra una finestra sul futuro.” 10 Lo sviluppatore era convinto che quando si gioca, la cosa più vicina al giocatore è il controller, per questo motivo, il controller doveva essere percepito non tanto come un'estensione della console, quanto come un'estensione del giocatore stesso. Tutto ciò a portato allo sviluppo di Wiimote, controller simile ad un telecomando da tenere con una sola mano, che comunica con la console utilizzando la tecnologia Bluetooth. Le sue dimensioni sono compatte: è largo circa 3,5 cm e lungo 14 cm, con uno spessore inferiore ai 3 cm. Le parti piu' importanti del Wiimote sono l'accelerometro e la telecamera IR. L'accelerometro ADXL330 è un accelerometro a tre assi e permette di rilevare il movimento del Wiimote (accelerazione, rotazione, inclinazione, ecc..). Figura 3: Il controller WiiMote La telecamera IR permette, interagendo con la Wii Sensor Bar, barra con dei led sensori alle sue estremità da porre sopra o sotto il televisore, di utilizzare il Wiimote come dispositivo di puntamento e di determinare la distanza tra il esso e la console. Figura 4: Wii Sensor Bar Nel Wiimote e' poi presente un “rumble pack” che consente al telecomando di vibrare all'occorrenza. 11 Oltre al WiiMote sono stati progettati altri controller per permettere agli utenti di interagire facilmente con i diversi giochi. 3.2 Specifiche Tecniche Nintendo Wii [2] della console Nintendo ha diffuso poche informazioni sulle specifiche tecniche della console, comunque grazie a ricerche e analisi tecniche sono state dedotte le principali caratteristiche della macchina sebbene non possano essere considerate ufficiali. Processore: CPU: IBM Broadway, basato su architettura PowerPC con processo a 90 nm SOI con tecnologia CMOS, con frequenza di 729 MHz (frequenze clock non ufficiali) GPU: ATI Hollywood con processo a 90 nm CMOS, con frequenza di 243 MHz Performance complessiva della CPU 30 GFLOPS. Memoria: 88 MB memoria principale (24 MB "interna" 1T-SRAM integrata nel chip grafico, 64 MB esterna GDDR3 SDRAM) 3 MB GPU per le texture. Porte e periferiche: Da uno a quattro Wii Remote Controller (collegati via Bluetooth) Quattro porte Nintendo GameCube controller (di cui una usabile insieme a quattro Wii Remote Controller per multiplayer in cinque persone nei titoli nativi per Wii) Due porte Nintendo GameCube Memory Card Uno slot per schede Secure Digital 2 Porte Universal Serial Bus 2.0 Porta per il sensor Bar Porta accessoria posta sul fondo del WiiMote Mitsumi DWM-W004 WiFi 802.11b/g wireless module[12] 12 Compatibile con l'adattatore USB2.0 to Ethernet per la connessione a una rete locale Porte multi uscita videocomposito, component e S-Video Riconosce la gestione dei contenuti vietati dei seguenti enti: BBFC, CERO, ESRB, OFLC, OFLC (NZ), PEGI, USK Memoria non volatile: 512 MB built-in NAND memoria flash Espandibili tramite lo slot SD per SD e SDHC card fino a 32 GB Nintendo GameCube Memory Cards (per salvare solo i giochi GameCube) Lettore ottico slot-loading compatibile con i dischi 8 cm Nintendo GameCube Game Disc e 12 cm Wii Optical Disc Mask ROM di Macronix Video: 50/60Hz 480p (PAL/NTSC) o 576i (PAL/SECAM), standard 4:3 e 16:9 Uscita video componente RGB SCART (solo PAL), S-Video (solo NTSC), uscita composita, o D-Terminal Multimedia: formati video e foto supportati (per visualizzare i contenuti è necessario inserire una SD con file nei seguenti formati): AVI (MJPG) MOV (MJPG). JPEG Audio: Principale: Stereo - Dolby Pro Logic II Controller: speaker integrato 13 3.3 Nintendo Wii Fit Successivamente (in Europa il 24 aprile 2008) la Nintendo ha lanciato sul mercato un prodotto chiamato Wii Fit, che trasforma la console Wii in una piattaforma che con i videogiochi tradizionali ha poco a che fare: Wii Fit è un sistema di allenamento per restare in forma ed eventualmente pianificare il proprio dimagrimento, migliorando la tonicità muscolare, perfezionando la postura e bilanciando correttamente il baricentro, il tutto semplicemente restando davanti alla tv e divertendosi. Figura 5: Nintendo Wii Fit L’idea iniziale di questo software fu di Miyamoto-san, Managing Director di Nintendo. Nell’intervista “Iwate chiede: Wii Fit” [1], egli racconta la sua abitudine di tener controllato il proprio peso regolarmente registrandolo su delle tabelle e creando dei grafici, e spiega come proprio questa sua abitudine gli abbia dato l’idea per creare Wii Fit. “Normalmente quando ci si pesa, ci si toglie i vestiti e lo si fa in privato in bagno, non davanti agli altri, giusto?” Racconta. “Tuttavia, ci sembrava divertente creare un gioco grazie al quale tutta la famiglia potesse riunirsi in salotto, pesarsi e guardare insieme i risultati degli altri. E magari prendere in giro il papà, che è ingrassato un po', o fare i complimenti alla mamma, che è riuscita a dimagrire. 14 Pensavo che sarebbe stato molto bello riuscire a creare questo tipo di comunicazione all'interno della famiglia e comunque, anche se può sembrare un'affermazione esagerata, pesarsi è una cosa divertente e può aiutare a mantenersi in forma. ” Ma l’idea ci ha messo un po’ di tempo per prendere piede in quanto non si riusciva a trovare un obiettivo chiaro. “Ma un giorno un membro dello staff ha comprato due bilance e ci siamo resi conto che era molto divertente salirci sopra e cercare di mantenere l'equilibrio su entrambe. Ho chiesto al programmatore di collegare le bilance a un computer e abbiamo provato a visualizzare dei dati sullo schermo della tv in modo da poter calcolare la distribuzione del peso a colpo d'occhio. Il risultato ci ha impressionato positivamente e da quel momento la misurazione dell'equilibrio è diventata il nostro nuovo tema. Abbiamo fatto delle ricerche e, come pensavamo, esistono anche metodi per mantenersi in forma legati all'equilibrio.” E così lo sviluppo di Wii Fit è iniziato. Nel software Wii Fit disponibili oltre 40 esercizi diversi suddivisi in quattro discipline d'allenamento. Si può bruciare calorie con gli esercizi aerobici, migliorare equilibrio e postura con i giochi di equilibrio, potenziare la massa muscolare con gli esercizi muscolari o imparare ad allungarsi e rilassarsi con le posizioni yoga. Il programma permette inoltre di seguire costantemente i propri miglioramenti, pianificare obiettivi e avere a disposizione un personal trainer pronto a mostrare gli esercizi, spiegandoli e segnalando immediatamente gli eventuali errori. Tutto ciò è possibile grazie alla Wii Balance Board: una pedana sensibile al peso che rileva gli spostamenti di equilibrio in qualsiasi direzione permettendo agli utenti di seguire i movimenti assicurandosi il pieno controllo delle attività sullo schermo. Figura 6: Wii Balance Board 15 La Balance Board è una particolare bilancia di forma rettangolare, larga 51 cm e lunga 31.6 cm con uno spessore di 5,32 cm, dotata di sensori di peso grazie ai quali valuta lo spostamento del baricentro della persona situata sulla pedana. È collegata alla Wii tramite un collegamento bluetooth, ed è alimentata con quattro batterie AA. Figura 7: Retro della Wii Balance Board La rilevazione dei pesi viene effettuata tramite dei dispositivi di misurazione detti estensimetri, incorporati direttamente nei quattro piedini ai vertici della pedana. Si tratta di sensori che misurano le sollecitazioni a cui è sottoposto un oggetto sfruttando il principio fisico secondo il quale la resistenza elettrica in un sottile filo di metallo aumenta man mano che il filo stesso viene allungato. Essi emettono 60 segnali al secondo e li inviano alla console tramite tecnologia bluetooth. Figura 8: Sensori situati nei piedini della Wii Balance Board I quattro segnali indicano quindi il peso supportato dal relativo piedino, in questo modo se il soggetto sulla pedana sposta ad esempio tutto il proprio peso verso destra i sensori dei piedini di destra rileveranno un peso maggiore di quelli di sinistra. 16 Oltre ai giochi del software Wii Fit, numerosi sono i software in commercio o in fase di sviluppo che supportano questa periferica, alcuni di questi sono: Skate It, Family Ski, Rayman Raving Rabbids TV Party, Shaun White Snowboard, Kororimpa 2… 17 Capitolo 4. Determinazione e controllo della posizione del centro di massa Nel seguente capitolo viene spiegato cosa è il centro di massa e sono illustrati vari metodi per determinarlo. In particolare si descrive in modo più accurato il metodo da noi utilizzato, il “segmental method”, spiegando come lo si è utilizzato per il calcolo del centro di massa di una persona in posizione seduta. 4.1 Che cosa è il centro di massa Il centro di massa di un corpo generico è il punto intorno al quale la massa del corpo è equamente distribuita. In un sistema discreto di N punti materiali, le coordinate del centro di massa sono date da: (1) dove M = m1 + m2 + ... + mN è la massa totale del sistema e le quantità ri sono i raggi vettori dei punti materiali rispetto al sistema di riferimento usato. Per quanto riguarda un corpo con densità uniforme, il suo centro di massa coincide con il centro geometrico. Ciò non vale per il corpo umano, dove la distribuzione di massa cambia continuamente con la postura facendo così variare la posizione del centro di massa. In un soggetto in posizione eretta il centro di massa è localizzato nella zona dell’osso sacro, generalmente al 55% dell’altezza totale del corpo. 18 Il centro di massa è comunemente detto baricentro. Questo nome (che etimologicamente significa centro del peso) deriva dal fatto che quando un corpo è immerso in un campo di gravità uniforme (come avviene, con buona approssimazione, sulla superficie terrestre, dove l'accelerazione di gravità si può ritenere costante), allora il moto del baricentro è equivalente al moto di caduta, sotto l'azione della forza peso, di un punto materiale in cui fosse concentrata la massa totale del corpo. 4.2 Cinematica e dinamica per il controllo dei robot Nel campo della robotica sono stati effettuati diversi studi per la determinazione di algoritmi che gestiscono il movimento dei robot. Un manipolatore, o robot, può essere visto come sistema di corpi rigidi (bracci) connessi tramite dei giunti (joint) o articolazioni, a formare quella che è generalmente denominata catena cinematica. Un estremo della catena è vincolato alla base, l’altro estremo, detto endeffector (organo terminale), è libero di muoversi. I due metodi principali che sono stati utilizzati per il controllo dei bracci articolati sono la cinematica e la dinamica. La cinematica è lo studio del movimento senza però considerare l’effetto delle forze. Essa si divide in diretta (Forwards Kinematics) e inversa (Inverse Kinematics). La cinematica diretta, nota la posizione di una singola articolazione, cioè l’angolo formato dai corpi che essa connette, determina la posizione dell’end-effector. Al contrario, la cinematica inversa risolve la posizione e l’orientamento dell’articolazione nota la posizione dell’end-effector. Mentre la soluzione di un problema di cinematica diretta è univoca, il problema inverso è più complesso e può portare a soluzioni multiple, a infinite soluzioni o a nessuna soluzione ammissibile, data la struttura del manipolatore. 19 Figura 9: Robot costituito da due bracci Tramite questo esempio possiamo vedere la differenza tra i due approcci. La Figura 9 mostra una semplice struttura costituita da due bracci che si muovono entrambi sul piano. La posizione dell’estremo x, utilizzando la cinematica diretta, ci viene dalla trigonometria, ed è X (l1 cos l2 cos( 1 2 ), l1 sin 1 l2 sin( 1 2 )) (2) Applicando semplici regole trigonometriche, siamo in grado di calcolare la soluzione inversa, e quindi di risolvere anche il problema cinematico inverso. 2 1 arccos (x2 y 2 l12 2l1l2 l22 ) (l2 sin 2 ) x (l1 l2 cos 2 ) y (l2 sin 2 ) y (l1 l2 cos 2 ) x (3) (4) Entrambi i calcoli diventano più complessi con il crescere della complessità della struttura robotica: ogni articolazione in più aggiunge almeno un grado di libertà e almeno una dimensione del vettore di stato θ. 20 Con lo studio dinamico si è ottenuto un livello di realismo maggiore poiché la descrizione degli oggetti include anche attributi fisici come la massa totale, il centro di massa, il momento di inerzia, etc … Anche la dinamica si suddivide in diretta ed inversa. Nella dinamica diretta, il movimento è approssimato mediante una serie di passi discreti; ad ogni passo si risolve l’equazione del moto per le accelerazioni che gli oggetti subiscono sottoposti a determinate forze. Data la posizione e la velocità di un oggetto al passo precedente, l’accelerazione a può essere integrata due volte per determinare la nuova velocità e posizione al passo attuale. In generale c’è una equazione del moto per ogni grado di libertà. Questo ci conduce ad un grosso sistema di equazioni che deve essere risolto con metodi numerici, i quali sono computazionalmente molto costosi. La dinamica inversa determina automaticamente le forze e i momenti di inerzia necessari per spostare l’oggetto nel punto desiderato. 4.3 Cinetica inversa per il controllo della posizione del centro di massa Basandosi sui concetti di cinematica e dinamica dirette e inverse, che stanno alla base degli algoritmi di controllo dei robot, sono stati sviluppati diversi studi per il controllo della postura. In [3] [4] [5] vi è uno studio di progettazione e di analisi della postura del corpo umano. Questi studi identificano quattro categorie di controllo della figura umana. I “behavioral parameters” (parametri comportamentali) consentono di impostare i limiti sulla posizione di piedi, tronco, testa, mani e altezza del centro di massa. I “passive behaviors” (comportamenti passivi) esprimono delle relazioni tra diverse parti del corpo che devono essere contemporaneamente soddisfatte; solitamente sono parametri connessi al controllo del bilanciamento. Gli “active behaviors” (comportamenti attivi) hanno dimensione temporale, si presentano cioè al verificarsi di determinati eventi e hanno durata limitata. 21 Per esempio, lo “stepping movement” si verifica per ripristinare l’equilibrio quando il centro di massa lascia l’area di supporto. Infine, le “manipulation primitives” (primitive di manipolazione) permettono l’interazione con l’utente, che può ad esempio comandare in modo diretto lo spostamento del centro di massa. Tutti questi aspetti del controllo del centro di massa corrispondono ad un approccio sviluppato in [2], in cui il centro di massa è considerato come un end-effector attaccato alla regione inferiore del tronco. Questo approccio si è dimostrato efficace nella gestione della posizione del centro di massa, ma alcuni aspetti rendono il suo utilizzo piuttosto limitato. In primo luogo, è molto specifico per la postura eretta, quindi non può essere generalizzato per la figura umana con diversi sostegni (seduta, appesa per le mani, etc …). In secondo luogo, l’influenza cinetica dei movimenti delle articolazioni che uniscono i segmenti non è valutata rispetto alla distribuzione di massa di tutto il corpo. Un controllo dinamico della figura articolata è stato invece proposto in [6] e [7]. Il recente approccio riportato in [6] fornisce ad esempio un algoritmo di controllo per generare movimenti realistici di corsa e di salto. Come emerge chiaramente, uno degli aspetti più difficoltosi che la dinamica inversa incontra nel controllo di attività di strutture articolate come la figura umana è l’obbligo di gestire la forza di reazione del suolo. Tutti questi studi mostrano come sia un approccio dinamico, sia cinematico, non riescano a rappresentare in modo corretto ed esaustivo il problema. Gli approcci basati sul controllo dinamico, anche se risultano essere più realistici dal punto di vista fisico, presentano come già detto dei problemi di gestione di alcuni fattori come l’immagazzinamento di energia, le forze di reazione del suolo, etc … Un’altra limitazione deriva dall’elevata dimensione della figura umana ( in [2] , ad esempio, si afferma che abbia 88 gradi di libertà) che ostacola l’interazione in tempo reale sulle attuali workstation per la simulazione del controllo ottimale. Viceversa, la cinematica inversa manca di una garanzia fisica. Per queste ragioni, uno studio del Dipartimento di Matematica e Computer Science del Politecnico di Losanna [8], propone un’estensione della cinematica inversa, che tiene conto 22 della distribuzione di massa in tutto il corpo, sviluppando un nuovo controllo chiamato “Inverse Kinetics” (cinetica inversa). Tale studio si basa su modello di scheletro umano con otto gradi di libertà: il dito del piede, la caviglia,il ginocchio, l’anca, la parte toracica e la parte lombare della colonna vertebrale, l’articolazione della spalla e il gomito. È utilizzato un modello 2D del corpo umano in quanto si è rivelato sufficiente per illustrare l’interesse dell’approccio. Il principio base è quello di valutare l’influenza cinematica della articolazioni basandosi sulla frazione di massa corporea che supportano, detta “augmented body”. Il metodo consiste inizialmente in una valutazione dell’influenza cinetica della variazione istantanea delle articolazioni sulla traslazione del centro di massa ( Direct Kinetics). In una seconda fase, la matrice della trasformazione lineare risultante viene invertita in un processo simile alla cinetica inversa, ma poiché integra i dati della distribuzione di massa, si chiama Inverse Kinetics. Consideriamo una catena di corpi elementari con massa complessiva m. Ogni corpo elementare i ha massa mi, origine locale Oi e centro di massa Gi. La posizione del centro di massa G della catena è così determinata (5) Introducendo dei link intermedi tra O1 e Gi si ottiene (6) Derivando rispetto al tempo, si ottiene il vettore di traslazione istantanea del centro di massa VG sul sistema di riferimento S0 (7) (8) 23 Ogni derivata prima rispetto al tempo del vettore può essere espresso in funzione del vettore istantaneo di rotazione ωj dato dalla variazione del parametro θj, chiamato θ’j, lungo/per il vettore normalizzato rj: (9) (10) (11) (12) (13) Possiamo ora introdurre la posizione del centro di gravità Gaj dell’augmented body ( di massa maj) associato con il parametro θj. La formula del baricentro diventa quindi (14) Ora usando la (9) e la (14), la (13) diventa (15) E infine otteniamo (16) dove JG è la matrice jacobiana pesata rispetto alle masse degli augmented body sulla massa totale del corpo e mette in relazione la traslazione istantanea del centro di massa con l’istantanea variazione dei parametri. Al contrario, la pseudo-inversa di questa matrice Jacobiana può essere valutata, permettendo di fornire una variazione istantanea dei parametri relativi alla traslazione istantanea del centro di massa desiderata. 24 È quindi corretto proporre i termini di diretta e inversa Kinetics, perché si estende in modo significativo la gamma dalla Direct and Inverse Kinematics per il controllo delle strutture articolate. Possiamo anche applicare il principio di conservazione della quantità di moto del centro di gravità degli augmented body per dimostrare la relazione fondamentale della direct kinetics. Noi abbiamo, in questo caso, il vettore di traslazione istantanea VGaj di Gaj, dato dall’istantanea variazione θ’j dell’articolazione j lungo l’asse normalizzato rj, data da (17) Così la (15) diventa (18) Se noi ora vediamo come la traslazione istantanea del centro di massa totale, causata dalla variazione dell’articolazione j, otteniamo (19) (20) La (20) calcola il principio di conservazione della quantità di moto applicato a tutto il corpo e a tutti gli augmented body per il movimento dell’articolazione j. Figura 10 25 4.4 “Segmental method” Il “segmental method” è un metodo per il calcolo del centro di massa di un corpo in una qualsiasi postura. [9] Tale metodo si basa su una visione del corpo umano come un sistema di segmenti (link) uniti tra loro tramite articolazioni (join) e determina la posizione del centro di massa dell’intero sistema in funzione della posizione dei centri di massa dei vari segmenti. Il primo step del “segmental method” consiste nel quantificare la postura del soggetto in esame. Quantificare la postura significa determinare le coordinate delle articolazioni agli estremi di ogni segmento, dette rispettivamente distal end e proximal end, rispetto a un sistema di riferimento scelto. Tale metodo usa un’approssimazione bidimensionale del corpo umano, considerandone solo le dimensioni di altezza e larghezza. Tale approssimazione è corretta in quanto il centro di massa di ogni segmento si trova al centro rispetto allo spessore del segmento stesso, dato che la massa è distribuita generalmente in modo simmetrico rispetto a tale dimensione. Il corpo umano viene quindi considerato piatto, senza spessore. Dato ogni segmento saranno note le coordinate x,y e z di ogni sua estremità, rispetto al sistema cartesiano. Il centro di massa di ogni singolo segmento è dato da: XCM = (XD)(%cm) + (XP)(1 - %cm) oppure (XP) + (%cm)(XD - XP) (21) YCM = (YD)(%cm) + (YP)(1 - %cm) oppure (YP) + (%cm)(YD - YP) (22) ZCM = (ZD)(%cm) + (ZP)(1 - %cm) oppure (ZP) + (%cm)(ZD - ZP) (23) Dove %cm è la posizione del centro di massa del segmento in percentuale rispetto alla lunghezza totale del segmento. Per esempio il CM dell’avambraccio di una donna è localizzato al 45,59% della lunghezza totale del segmento considerando come origine il gomito. 26 Figura 11: Segmento Date le coordinate dei CM di tutti i segmenti costituenti il corpo, le coordinate del CM complessivo sono date dalla somma dei prodotti della massa del segmento per le coordinate del CM del segmento diviso la massa totale del corpo. mi X CMi X CM i mi mi YCMi YCM i i mi mi Z CMi Z CM i i mi (24) i Dove (XCMi, YCMi, ZCMi ) sono le coordinate del CM del segmento i-esimo rispetto al sistema di riferimento scelto e mi è la massa del segmento i-esimo. La massa di un segmento e la collocazione del centro di massa al suo intermo sono misure presenti nelle tabelle BSP (Body Segment Parameters) che riportano dati sui vari segmenti del corpo umano. Tali parametri sono stati ottenuti inizialmente tramite studi su cadaveri effettuati negli anni ’50-’60-’70 [10][11][13]. Successivamente negli anni ’80 nell’Unione Sovietica sono state effettuate nuove ricerche, utilizzando però soggetti vivi, che hanno portato allo sviluppo di nuove tabelle: Zatsiorsky’s BPS [14][15][16][17]. Aggiustamenti alle Zatsiorsky’s BPS sono stati pubblicati nel 1996 da Paolo De Leva che ha effettuato delle ricerche sul corpo umano tramite radioisotope scanning [12]. 27 Figura 12: Descrizione grafica della tabella BSP (Body Segment Parameters) di Paolo De Leva in cui sono riportate le posizioni del centro di massa di ogni segmento rispetto alla lunghezza del segmento. 28 Segmento % Endpoint % Mass Proximal Distal Donna Uomo Donna Uomo Testa VERT CERV 6.68 6.94 58.94 59.76 Tronco CERV MIDH 42.57 43.46 41.51 44.86 Braccio SJC EJC 2.55 2.71 57.54 57.72 18.8 WJC 1.38 1.62 45.59 45.74 14.5 Avambraccio EJC % CM Lunghezza 18.2 Mano WJC MET3 0.56 0.61 74.74 79.00 Coscia HJC KJC 14.78 14.16 36.12 40.95 24.5 Gamba KJC LMAL 4.81 4.33 44.16 44.59 24.6 Piede HEEL TTIP 1.29 1.37 40.14 44.15 8.9 Tabella 1: Body segment parameter data” di Zatsiorsky (1990), modificati da De Leva(1996) 4.5 Determinazione del centro di massa di una persona in posizione seduta Nel nostro caso specifico è necessario calcolare il CM di una persona in posizione seduta. Il calcolo è effettuato considerando il soggetto posizionato nel sistema di riferimento come in Figura 13. Figura 13: Sistema di riferimento utilizzato 29 L’origine del nostro sistema di riferimento si trova all’altezza della coscia, sotto l’ombelico, il piano zy, detto piano frontale mediano, taglia quindi il corpo esattamente in due parti uguali, ovvero con identica distribuzione di massa. Si considera il corpo costituito dai 15 segmenti: testa e collo, tronco superiore e inferiore, braccio, avambraccio, mano, coscia, stinco, piede. Figura 14: Rappresentazione grafica del modello del corpo umano a 15 segmenti Nota l’altezza della persona in posizione eretta e il suo peso complessivo, si sono calcolati peso e lunghezza di ciascun segmento, usando i dati della tabella “Body segment parameter data” aggiornati da De Leva (Tabella 1). Considerando il sistema di riferimento citato sopra è evidente che il baricentro giace nel piano zy e quindi la coordinata XCM è nulla, il problema si riduce così al calcolo delle sole coordinate ZCM e YCM. Per poter applicare il Segmental Method è inoltre necessario conoscere le coordinate dell’estremità dei segmenti. Nota la lunghezza di tutti i segmenti, si sono quindi determinate tali coordinate, riferendosi al sistema di riferimento sopra descritto. Ad esempio, la spalla ha coordinata z pari alla lunghezza del tronco e coordinata y nulla in quanto la spalla è situata nel piano zx, stessa cosa per il collo. 30 Coordinata z Coordinata y Fine testa Lunghezza tronco + lunghezza testa-collo 0 Collo Lunghezza tronco 0 Spalla Lunghezza tronco 0 Gomito Lunghezza tronco - lunghezza braccio 0 Polso Lunghezza tronco - lunghezza braccio – 0 lunghezza avambraccio Fine mano Lunghezza tronco - lunghezza braccio – 0 lunghezza avambraccio – lunghezza mano Bacino 0 0 Ginocchio 0 Lunghezza coscia Caviglia - lunghezza stinco Lunghezza coscia Tabella 2: Coordinate delle "articolazioni" che connettono i segmenti Dai diversi calcoli effettuati con il segmental method si è visto che il centro di massa in una persona in posizione seduta si trova generalmente al di sotto dell’ombelico spostato in avanti di circa 8-10 cm (vedi Figura 15). Figura 15: Posizione del centro di massa di una persona seduta 31 Per effettuare una verifica dell’attendibilità dei risultati ottenuti con questo metodo, si è effettuato un confronto con i dati presenti in uno studio della NASA [18] per lo sviluppo di sistemi spaziali abitati. Tabella 3: Tabella Nasa per il calcolo della posizione del baricentro Postura Dimensione In piedi In piedi (con le mani alzate sopra la testa) A B C x y z -0,035 0,000 0,486 0,024 0,021 -0,014 11,008 8,609 -4,775 x y z -0,040 0,000 0,416 0,020 0,021 -0,007 12,632 8,609 0,305 x y z 0,080 0,000 0,344 0,010 0,021 -0,004 4,450 8,609 7,327 x y z 0,041 0,000 0,212 0,022 0,021 -0,002 7,405 8,610 21,582 x y z 0,075 0,000 0,355 0,010 0,021 -0,010 4,628 8,609 7,389 Seduta Seduta (con le gambe piegate) Seduta (con le braccia giu) 32 Utilizzando i dati presenti in Tabella 3, tale studio determina la posizione del centro di massa utilizzando la seguente formula: Posizione del centro di massa = [ A x (altezza, cm) ] + [ B x (peso, in libre) ] + [C] I dati in Tabella 3 sono però specifici per un possibile membro maschile dell’equipaggio, che si presume sia in buona salute, con completo sviluppo fisico e di età media 40 anni. 33 Capitolo 5. Ambiente di sviluppo Per lo sviluppo dell’applicazione abbiamo utilizzato l’ambiente di sviluppo XNA Game Studio 3.1 che estende Microsoft Visual Studio 2008. È stato poi utilizzato il software Autodesk 3DS Max per realizzare e modificare i modelli 3D degli elementi del gioco. In questo capitolo vengono descritti brevemente questi software. 5.1 Microsoft Visual Studio 2008 Visual Studio 2008 è un ambiente di sviluppo integrato (Integrated development environment o IDE) sviluppato da Microsoft e lanciato sul mercato nel febbraio 2008, che supporta diversi tipi di linguaggio, quali C++, C#, Visual Basic .Net e ASP .Net, e permette la realizzazione di applicazioni, siti web, applicazioni web… È multipiattaforma: con esso è possibile realizzare programmi per server, workstation, smartphone, browser, etc… Visual Studio 2008 integra un debugger che consente di correggere eventuali errori logici e sintattici senza compilare tutta l'applicazione. Il software è stato scaricato da http://msdn.microsoft.com/ con la licenza per gli studenti del Politecnico di Milano. 34 5.2 Microsoft XNA Game Studio 3.1 XNA Game Studio 3.1 è un ambiente di sviluppo integrato che estende Microsoft Visual Studio, per lo sviluppo di giochi per Windows-based PC, Xbox 360 e Zune digital media player. Studio XNA Game 3.1 utilizza il XNA Framework 3.1, che fornisce agli sviluppatori con uno scheletro XNA game per cominciare e la possibilità di personalizzare ed estendere tale gioco. Prima di istallare Studio XNA Game 3 è necessario installare Visual Studio 2008 Standard Edition o superiore o Visual C # 2008 Express Edition. XNA Game Studio 3.1 è scaricabile gratuitamente sul sito della Microsoft nella sezione Download. 35 5.3 Autodesk 3DS Max 3DS Max (chiamato anche 3D Studio Max) è un software di modellazione, animazione e rendering (processo di generazione di un'immagine a partire da una descrizione matematica di una scena tridimensionale interpretata da algoritmi che definiscono il colore di ogni punto dell'immagine) 3D, realizzato dalla divisione Media & Entertainement di Autodesk. È un programma object-oriented, infatti, qualunque elemento creato con 3D Studio MAX è un oggetto: geometria, cineprese e luci della scena sono oggetti, così come i modificatori, i controller dell’animazione, i bitmap e le definizioni dei materiali. Gli oggetti creati in 3D Studio MAX contengono informazioni sulle funzioni su di essi eseguibili e sul comportamento che è considerato valido per ciascun oggetto. 3D Studio Max è stato utilizzato per creare o modificare i modelli 3D degli elementi del gioco sviluppato (la canoa, le paperelle, gli alberi…) e per creare l’ambientazione del gioco. È possibile creare un oggetto utilizzando le funzioni del pannello CREATE, che permettono di assegnare al modello tipo, dimensioni, posizione e orientamento. Figura 16: Creazione di un oggetto in 3DS Max 36 Ad esso è poi possibile applicare un numero qualsiasi di modificatori dell’oggetto, per esempio pieghe o estensioni. Tali modificatori sono applicabili all’intero oggetto o a una sua componente (denominata sub-oggetto). Tutti gli oggetti hanno proprietà uniche che non sono né i parametri degli oggetti di base né il risultato di modificatori o di trasformazioni. Queste proprietà includono elementi come il nome dell’oggetto, il colore wireframe, il materiale assegnato, la capacità di proiettare ombre… Tali proprietà possono essere visualizzate o impostate utilizzando la finestra di dialogo OBJECT PROPERTIES. 37 5.4 Libreria WiiMote Tutti i controller Wii usano la tecnologia Bluetooth per comunicare, quindi possono essere connessi facilmente anche a un PC. Per usare i vari controller con .NET è disponibile in rete la libreria Wiimote.Lib che fornisce tutte le classi e i metodi necessari per interagire con il dispositivo Wii utilizzato, che esso sia il Wiimote, la Balance Board, il Nunchuk, o il controller di Guitar Hero. Per prima cosa è necessario connettere il dispositivo, nel nostro caso la Balance Board, al PC: 1. Avviare il software bluetooth e ricercare un dispositivo. 2. Aprire il coperchio delle batterie presente sul lato inferiore della Balance Board e premere il pulsante di sincronizzazione, di colore rosso. Il led sul retro della pedana inizierà a lampeggiare e deve continuare a farlo durante tutta la fase di sincronizzazione affinché questa vada a buon fine. Se si sta connettendo il Wiimote è necessario tenere premuti durante tutta la fase di inizializzazione della connessione i pulsanti contrassegnati con 1 e 2). 3. Il controller deve comparire nella lista dei dispositivi trovati, la Balance Board verrà visualizzata come Nintendo RVL-WBC-01 e il Wiimote come Nintendo RVL-CNT-01 . 4. Se viene richiesto l’inserimento di un codice PIN di sicurezza, non immettere alcun numero e passare al passo successivo. 5. Terminare la procedura. Se l’operazione è andata a buon fine, il led sul retro della Balance Board devo continuare a lampeggiare e il dispositivo deve essere presente nella lista dei dispositivi Bluetooth connessi, in caso contrario è necessario eseguire di nuovo tutte le istruzioni riportate. A questo punto per usare il controller connesso è sufficiente creare un’istanza Wiimote, indipendentemente da quale sia il particolare controller in uso, settare i parametri necessari, scegliere il tipo dei dati di ritorno desiderato e quindi chiamare il metodo Connect. La libreria corrente supporta solo alcuni dei tipi di dato, riportati in Tabella 4, che i controller Wii sono in grado di produrre, ma questi sono comunque sufficienti per ottenere ciò che necessario per la Balance Board. 38 Tipo Descrizione Status Status report ReadData Legge i dati dalla memoria locale OutputReportAck Register write complete Buttons Solo dati dai pulsanti ButtonsAccel Dati dai pulsanti and accelerometer dati IRAccel IR sensor e accelerometer data ButtonsExtension Dati dai pulsanti e extension controller data ExtensionAccel IRExtensionAccel Extension controller data and accelerometer data IR sensor, extension controller and accelerometer data Tabella 4: Tipi di dati generati dai controller Wii supportati dalla libreria Wiimote Il tipo di ritorno può essere impostato chiamando il metodo Set ReportType e passandogli come primo parametro uno dei tipi di dato appena elencati e impostando il secondo parametro true, se si desidera che i dati siano inviati continuamente, false, se devono essere mandati solo quando lo stato del controller cambia. La Wii Fit Balance Board verrà visualizzato come un controller Wiimote con un'estensione allegata. Il tipo di dato di ritorno è impostato internamente quindi in realtà qualsiasi tentativo di impostare un nuovo tipo su questo dispositivo verrà ignorato. Esempio C#: Wiimote wm; wm = new Wiimote(); crea un’istanza della classe Wiimote wm.Connect(); si connette al primo Wiimote che trova wm.SetReportType(InputReport.IRExtensionAccel, true); setta il ritorno tipo di Se si desidera connettero più dispositivi Wii è necessario istanziare un oggetto WiimoteCollection, chiamare il metodo FindAllWiimotes per inizializzare, e quindi utilizzare ogni oggetto della collezione individualmente. 39 I dati elaborati dal controller possono essere recuperati dall’applicazione sul PC in due modi: con la modalità ad eventi o con il polling. Nella modalità ad eventi si deve sovrascrivere l’evento WiimoteChange della classe Wiimote, che è l’evento che generato quando lo stato del Wiimote cambia. Se non si sceglie di utilizzare il modello ad eventi, si può semplicemente recuperare in qualsiasi momento le informazioni sullo stato del controller dalla proprietà WiimoteState della classe Wiimote. Esempio C#: Wiimote wm; WiimoteState ws; ws = wm. WiimoteState; pesotot = ws.BalanceBoardState.WeightKg; 40 Capitolo 6. Implementazione e realizzazione Nel quarto capitolo viene inizialmente descritta l’applicazione realizzata e, in una seconda parte, vengono illustrati al lettore i passi fondamentali svolti per la sua realizzazione. 6.1 Specifiche del gioco Il gioco che si é sviluppato consiste in un percorso a tempo con una canoa. L'utente, che é seduto sulla Balance Board, deve piegarsi a destra e a sinistra per evitare o colpire gli oggetti, a seconda del caso. E' infatti possibile incontrare delle tartarughe verdi e degli squali, lo scontro con i primi fa perdere 25 punti, lo scontro con i secondi fa invece perdere una vita. Vi sono poi le paperelle che invece devono essere presi in quanto aumentano il punteggio di 50 punti, e i diamanti che permettono di guadagnare una vita. Il gioco é suddiviso in 3 livelli. In ogni livello il giocatore ha a disposizione 120 secondi per effettuare un certo numero di punti necessari per passare al livello successivo. Nel primo livello é necessario raggiungere un punteggio di almeno 1000 punti, nel secondo livello 1500 punti, nel terzo livello 2500 punti. Velocità e numero di elementi più “pericolosi” (che fanno perdere punti o vite) aumentano gradualmente nei tre livelli. All' inizio del gioco, l'utente ha a disposizione tre vite terminate le quali “muore” e, indipendentemente dal livello che ha raggiunto, il gioco ricomincia dal primo livello. Se invece, al termine di un livello, il giocatore non ha raggiunto il punteggio necessario per proseguire al livello successivo, può riprovare senza dover necessariamente ripartire dal livello iniziale. 41 All'avvio del gioco vi é una fase di settaggio in cui l'utente o il fisioterapista, oltre ovviamente a inserire nome, sesso, peso e altezza, deve impostare l'angolo massimo che il giocatore può compiere piegandosi lateralmente, seduto sulla Balance Boad. Sesso, peso e altezza sono necessari per il calcolo della posizione del centro di massa tramite il “Segmental Method”. L'angolo massimo raggiungibile è necessario per impostare il giocatore in modo che si trovi nella posizione limite nel campo di gioco quando compie un piegamento pari a tale angolo. Questo semplice gioco ha diversi benefici per pazienti con traumi midollari nella fase di riabilitazione; permette infatti di effettuare semplici esercizi sullo spostamento del peso e sul controllo del busto in modo divertente. 42 6.2 Implementazione del gioco Il gioco è stato scritto in C#. Sono state definite le seguenti classi Classe Descrizione Game1 Gestisce la grafica e la logica del gioco GameObject Descrive un oggetto 3D dell’applicazione CentroDiMassa In questa classe viene implementato il “segmental method” per determinare il centro di massa di un soggetto, in posizione seduta, noti altezza, peso e sesso Classe che contiene i dati del giocatore Giocatore seduto sulla Balance Board Fisioterapista Serve per permettere al fisioterapista, o direttamente all’utente, di impostare l’angolo massimo di piegamento Tabella 5: Classi del gioco 6.2.1 La classe Game1 Game1 è la classe fondamentale dell’applicazione, nella quale si gestisce tutta la logica del gioco. In ogni progetto XNA Game Studio è presente tale classe e la sua struttura di base è la seguente: using using using using using using using using using using using using System; System.Collections.Generic; System.Linq; Microsoft.Xna.Framework; Microsoft.Xna.Framework.Audio; Microsoft.Xna.Framework.Content; Microsoft.Xna.Framework.GamerServices; Microsoft.Xna.Framework.Graphics; Microsoft.Xna.Framework.Input; Microsoft.Xna.Framework.Media; Microsoft.Xna.Framework.Net; Microsoft.Xna.Framework.Storage; 43 namespace WindowsGame1 { public class Game1 : Microsoft.Xna.Framework.Game E’ la classe principale del gioco. { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } protected override void Initialize() Questo metodo viene eseguito solo all'avvio del programma { base.Initialize(); } protected override void LoadContent() All’interno di questo metodo vengono caricati i contenuti del gioco. Viene eseguito solo all'avvio del programma. { spriteBatch = new SpriteBatch(GraphicsDevice); } protected override void UnloadContent() { } protected override void Update(GameTime gameTime) Questo metodo viene eseguito 60 volte al secondo . Al suo interno viene scritto il codice che gestisce la logica del gioco. { base.Update(gameTime); } protected override void Draw(GameTime gameTime) Questo metodo viene eseguito 60 volte al secondo . Al suo interno viene scritto il codice per disegnare i vari elementi del gioco. { GraphicsDevice.Clear(Color.CornflowerBlue); base.Draw(gameTime); } } } 44 6.2.2 La classe GameObject Identifica tutti gli elementi 3D dell’applicazione (kayak,paperelle, diamanti, alberi, terreno…). Tabella 6: Attributi della classe GameObject Attributo Tipo Descrizione model Model Modello 3D scale float Dimensione rotation Vector3 Rotazione del modello position Vector3 velocity Vector3 alive boolean 6.2.3 Coordinate della posizione del modello Velocità di movimento del modello Indica se l’elemento è vivo La classe Giocatore Tabella 7: Attributi della classe Giocatore Attributo Tipo Descrizione Nome String Nome del giocatore Peso float Peso del giocatore Altezza float Altezza del giocatore 6.2.4 La classe Fisioterapista Tabella 8: Attributi della classe Fisioterapista Attributo Tipo Descrizione Parametro AngoloMax Float che l’utente riesce a raggiungere nel piegamento laterale 45 6.2.5 La classe CentroDiMassa Tabella 9: Attributi della classe CentroDiMassa Attributo Tipo Descrizione massaTot double Peso del giocatore altezza double Altezza del giocatore sesso boolean Sesso del giocatore zCMtot double Altezza del centro di massa del giocatore seduto sulla Balance Board. Array delle altezze dei centri di massa di zCM double[] ogni segmento del corpo dell’utente seduto sulla Balance Board. spessoreSegmentoCoscia double Spessore approssimativo della coscia dell’utente. Array delle lunghezze dei segmenti del lunghezzaSegmenti double[] corpo dell’utente seduto sulla Balance Board. massaSegmenti double[] Array delle masse dei segmenti del corpo dell’utente seduto sulla Balance Board. Array contenete la percentuale di massa percMassU double[] di ogni segmento del corpo di un uomo rispetto alla sua massa totale. Array contenete la percentuale di massa percMassD double[] di ogni segmento del corpo di una donna rispetto alla sua massa totale. Array percLung double[] contenete la percentuale di lunghezza di ogni segmento del corpo di un individuo rispetto alla sua altezza totale. 46 Array contenete posizione in percentuale percPosCMU del centro di massa di ogni segmento double[] rispetto alla lunghezza totale del segmento stesso, per gli uomini.* Array contenete posizione in percentuale percPosCMD del centro di massa di ogni segmento double[] rispetto alla lunghezza totale del segmento stesso, per le donne. * * I dati dei vari segmenti sono memorizzati negli array nel seguente ordine: testa-troncobracci-avambraccio-mano-coscia-gamba-piede. Tabella 10: Metodi della classe CentroDiMassa Metodo Descrizione Riceve come input altezza, peso e sesso del GetCentroDiMassa giocatore e torna l’altezza del centro di massa dell’utente seduto sulla sulla Balance Board. 47 6.2.6 Angolo di piegamento Come già detto la Wii Balance Board è dotata di quattro bilance posizionate ai suoi vertici. Per determinare la posizione del centro di massa della persona seduta sulla pedana, si considerano i quattro sensori come dei corpi puntiformi con massa pari al peso che rilevano, e si determina il centro di massa del sistema costituito da questi quattro corpi applicando la formula (1). Considerando come origine del nostro sistema di riferimento il centro della Balance Board, le quattro bilance hanno quindi le seguenti coordinate: TopLeft TopRight BSL BSW , 2 2 BottomLeft BSL BSW , 2 2 BSL BSW , 2 2 BottomRight BSL BSW , 2 2 dove BLS è pari alla lunghezza della Balance Board, 43 cm BSW è pari alla larghezza della Balance Board, 24 cm. Figura 17: Modello Balance Board Quindi X CM YCM massaTopLeft * X TopLeft massaTopRight * X TopRight massaBottomLeft * X BottomLeft massaTopLeft massaTopRight massaBottomLeft massaTopLeft * YTopLeft massaTopRight * YTopRight massaBottomRight massaBottomLeft * YBottomLeft massaTopLeft massaTopRight massaBottomLeft massaBottomRight * X BottomRight massaBottomRight * YBottomRight massaBottomRight 48 La libreria WiimoteLib utilizzata fornisce la proprietà CenterOfGravity dell’attributo BalanceBoardState della classe WiimoteState che effettua il calcolo sopra citato e ci fornisce le coordinate del centro di massa. Vediamo come è possibile mettere in relazione il centro di massa appena determinato con l’altezza del centro di massa determinata con il “Segmental Method”. Si considerino due soggetti A e B, tali che l’altezza del centro di massa in A è maggiore di quella in B. Se A e B effettuano un piegamento è evidente che B dovrà fare un angolo maggiore per spostare la proiezione sul piano x del proprio centro di massa di una lunghezza pari allo spostamento compiuto dalla proiezione del centro di massa di A. Figura 18 Si è quindi deciso di calibrare il controllo nel gioco sull’angolo di piegamento fatto dal giocatore seduto sulla pedana. 49 Vediamo come si determina tale angolo. Figura 19 Supponiamo che, quando la persona è seduta in posizione esattamente verticale sulla pedana, il suo baricentro sia in A e A’ sia la proiezione di tale punto sulla pedana. Se il soggetto si piega di un angolo α il suo baricentro si sposta in B e B’ è la sua posizione sulla Balance Board. Le distanze AA’ e BA’ sono pari all’altezza del baricentro, determinata con il “Segmental Method”. A’B’ è invece pari allo spostamento rilevato sulla Balance Board. Si determina così α: 90 BB’A’ è un triangolo rettangolo, quindi si ha cos quindi A' B' A' B da cui 90 arccos arccos A' B' A' B A' B' A' B 50 Si determina quindi lo spostamento nel gioco applicando la proporzione secondo cui l’angolo realmente fatto sta alla posizione raggiunta come l’angolo massimo, che si impone che il giocatore possa fare, sta alla massima posizione raggiungibile nel gioco. 6.2.7 La telecamera Uno degli aspetti più importanti di un gioco 3D è la telecamera che rappresenta il punto di vista dell’utente e si deve spostare rispetto ai movimenti effettuati all’interno del gioco. Scegliere il tipo migliore di telecamera e implementarla correttamente è fondamentale affinché il gioco possa funzionare. E' necessario definire dove si trova la camera, a cosa punta, e altre proprietà. In XNA la camera è implementata tramite 2 matrici (oggetti della classe Matrix) cameraViewMatrix e cameraProjectionMatrix. cameraViewMatrix contiene le informazioni che determinano dove la camera è situata nello spazio, in quale direzione punta e quale è il suo orientamento. Per creare la “Viewmatrix” si utilizza il metodo statico CreateLookat della classe Matrix, che accetta i parametri riportati in tabella 8. Tabella 11: Parametri del metodo Matrix.CreateLookAt Parametro Tipo cameraPosition Vector3 cameraTarget Vector3 Descrizione punto nello spazio in cui si trova la telecamera punto nello spazio a cui punta la camera orientamento della camera, cameraUpVector Vector3 che per noi sarà sempre Up, cioè, sarà allineata con l'orizzonte cameraProjectionMatrix contiene informazioni come l'angolo di vista, quanto distante può vedere la camera etc ... In sostanza definisce il campo 3D visibile dalla telecamera. 51 Ogni oggetto all'interno di tale zona è visualizzato sulle schermo, a meno che non sia oscurato da un altro elemento che si trova tra esso e la camera. Per creare tale matrice si utilizza il metodo statico CreateProspectiveFieldOfView della classe Matrix. Tabella 12: Parametri del metodo Matrix. CreateProspectiveFieldOfView Parametro Tipo fieldOfView float Descrizione Angolo di vista della camera, in radianti Tipicamente è dato dal float aspectRatio rapporto tra la larghezza e l’altezza dello schermo nearPlaneDistance float Da dove a dove la camera farPlaneDistance float vede 6.2.8 I modelli 3D XNA permette di creare modelli 3D, ma in genere quando questi sono particolarmente complessi è consigliabile realizzarli tramite un software di modellazione 3D, come ad esempio 3D StudioMax, Maya, Blender e poi importarli. Per l’applicazione creata si sono utilizzati modelli già pronti, tranne che per l’ambientazione di gioco il cui modello è stato creato da noi, che sono stati modificati con 3D Studio MAX. È stato necessario istallare un plug in per esportare i modelli nel formato .FBX, in quanto XNA supporta solo i formati .FBX e .X. Il modello 3D creato e le eventuali texture associate devono essere salvate nella cartella Game/Content /Model del progetto. È stata definita la classe GameObject (paragrafo 6.2.2) per identificare tutti gli elementi 3D dell’applicazione (kayak,paperelle, diamanti, alberi, terreno…). I vari modelli vengono caricati nel metodo loadContent(). Nel metodo draw(), che viene eseguito ad ogni fotogramma, viene invece chiamato per ogni elemento da disegnare il metodo drawGameObject(). 52 void DrawGameObject(GameObject gameobject) { foreach (ModelMesh mesh in gameobject.model.Meshes) { foreach (BasicEffect effect in mesh.Effects) { effect.EnableDefaultLighting(); effect.PreferPerPixelLighting = true; effect.World = Matrix.CreateFromYawPitchRoll( gameobject.rotation.Y, gameobject.rotation.X, gameobject.rotation.Z) * Matrix.CreateScale(gameobject.scale) * Matrix.CreateTranslation(gameobject.position); effect.Projection = cameraProjectionMatrix; effect.View = cameraViewMatrix; } mesh.Draw(); } } ModelMesh è una classe XNA che identifica le mesh ( i “pezzi”) che compongono un modello 3D: per modificare il modello è necessario impostare le proprietà delle sue mesh. La proprietà PreferPerPixelLighting e la funzione EnableDefaultLighting() servono per settare l’illuminazione dell’oggetto. World è una matrice che imposta posizione, rotazione e dimensione del modello. View e Projection sono invece le due matrici che gestiscono la visualizzazione tramite la telecamera ( vedi paragrafo 6.2.7). 53 6.2.9 Detection Collision E' stato necessario realizzare un rilevamento delle collisioni per determinare quando il giocatore sulla canoa si scontra con i vari oggetti. Uno dei metodi più semplice e veloce per implementare il rilevamento delle collisioni è l'algoritmo “Bounding-box” che consiste nel “disegnare” una scatola invisibile intorno ad ogni elemento e quindi controllare se le scatole si intersecano. Anziché delle scatole è anche possibile utilizzare delle sfere, in base alla forma dell'oggetto. Nel nostro caso si è scelto di utilizzare il “Bounding-box” per la canoa e il “BoundigSphere” per le paperelle e i diamanti. Come è intuibile, questo metodo di rilevamento delle collisioni non è preciso al 100% in quanto gli oggetti non hanno esattamente forma sferica o di parallelepipedo . Per ovviare a questo problema è possibile usare più BoundingBox e BoundingSphere di dimensione diversa per ogni modello, oppure usare un metodo molto accurato che verifica la presenza di collisioni triangolo per triangolo. Nel nostro caso abbiamo deciso di implementare il metodo più semplice, usando una sola box o sfera per ogni modello, in quanto tale metodo si è rivelato sufficientemente accurato. XNA fornisce le classi BoundingBox e BoundingSphere che implementano i relativi metodi di collision detection. BoundingSphere sfera= new BoundingSphere (posizioneSfera, raggio) (il primo parametro, posizioneSfera, è di tipo Vector3). BoundingBox box= new BoundingBox (min, max) (min e max sono di tipo Vector3 e rappresentano le coordinate dei vertici minimo e massimo del parallelepipedo). Tali classi possiedono il metodo Intersect: BoundingSphere.Intersect (BoundingBox) che restituisce true se l'oggetto corrente di tipo BoundingSphere si interseca con l'oggetto BoundingBox passato come parametro. 54 Capitolo 7. Sviluppi futuri La libreria Wiimote fornisce i metodi per poter utilizzare i dati del controller Wiimote: si potrebbe simulare il movimento di una vogata per far avanzare la canoa, questo estenderebbe il numero di muscoli coinvolti nella riabilitazione, sia della parte superiore del tronco sia delle braccia e, incrementerebbe lo sforzo fisico del paziente. Per rendere più accattivante il gioco si potrebbe lavorare su alcuni aspetti della grafica che non sono stati ritenuti essenziali. In particolare, i modelli 3d potrebbero essere resi più realistici e, aggiungendo alcuni effetti all'acqua ed al terreno, si accentuerebbe l'idea del movimento. Si potrebbe indurre il paziente ad effettuare piegamenti non solo laterali, ma anche avanti e indietro grazie all'aggiunta di alcuni livelli bonus,nei quali la tipologia di gioco è leggermente diversa. Ad esempio, introducendo un percorso cronometrato, a slalom tra coppie di boe, si potrebbe sfruttare lo spostamento anteriore o posteriore del baricentro per aumentare o ridurre la velocità della canoa. 55 Elenco figure Figura 1: Wii Sport Tennis .................................................................................................... 8 Figura 2: Console Nintendo Wii ............................................................................................ 9 Figura 3: Il controller WiiMote ........................................................................................... 11 Figura 4: Wii Sensor Bar ..................................................................................................... 11 Figura 5: Nintendo Wii Fit .................................................................................................. 14 Figura 6: Wii Balance Board ............................................................................................... 15 Figura 7: Retro della Wii Balance Board ........................................................................... 16 Figura 8: Sensori situati nei piedini della Wii Balance Board ............................................ 16 Figura 9: Robot costituito da due bracci .............................................................................. 20 Figura 10 .............................................................................................................................. 25 Figura 11: Segmento ............................................................................................................ 27 Figura 12: Descrizione grafica della tabella BSP (Body Segment Parameters) di Paolo De Leva in cui sono riportate le posizioni del centro di massa di ogni segmento rispetto alla lunghezza del segmento. ...................................................................................................... 28 Figura 13: Sistema di riferimento utilizzato ........................................................................ 29 Figura 14: Rappresentazione grafica del modello del corpo umano a 15 segmenti ............ 30 Figura 15: Posizione del centro di massa di una persona seduta ......................................... 31 Figura 16: Creazione di un oggetto in 3DS Max ................................................................. 36 Figura 17: Modello Balance Board ..................................................................................... 48 Figura 18 .............................................................................................................................. 49 Figura 19 .............................................................................................................................. 50 56 Elenco Tabelle Tabella 1: Body segment parameter data” di Zatsiorsky (1990), modificati da De Leva(1996)........................................................................................................................... 29 Tabella 2: Coordinate delle "articolazioni" che connettono i segmenti .............................. 31 Tabella 3: Tabella Nasa per il calcolo della posizione del baricentro ................................. 32 Tabella 4: Tipi di dati generati dai controller Wii supportati dalla libreria Wiimote .......... 39 Tabella 5: Classi del gioco................................................................................................... 43 Tabella 6: Attributi della classe GameObject ...................................................................... 45 Tabella 7: Attributi della classe Giocatore .......................................................................... 45 Tabella 8: Attributi della classe Fisioterapista .................................................................... 45 Tabella 9: Attributi della classe CentroDiMassa ................................................................. 46 Tabella 10: Metodi della classe CentroDiMassa ................................................................. 47 Tabella 11: Parametri del metodo Matrix.CreateLookAt .................................................... 51 Tabella 12: Parametri del metodo Matrix. CreateProspectiveFieldOfView ........................ 52 57 Bibliografia [1] Iwata chiede: Wii http://wiiportal.nintendo-europe.com/654.html [2] http://it.wikipedia.org/wiki/Wii#cite_note-IGN_Wii_FAQ-11 [3] Philips C.B., Zhao J., Badler N.I. "Interactive Real -Time Articulated Figure Manipulation Using Multiple Kinematic Constraints", Computer Graphics 24 (2),pp 245-250, 1990 [4] Phillips C.B., Badler N. " Interactive Behaviors for Bipedal Articulated Figures" Computer Graphics 25 (4), pp 359-362, July 1991 [5] Badler N.I., Phillips C.B., Webber B.L., "Simulating Human, Computer Graphics Animation and Control", Chapter 4 "Beh avioral Control", Oxford University Press 1993. [6] Raibert M.H., Hodgins J.K., "Animation of Dynamic Legged Locomotion", Computer Graphics 25 (4), pp 349-358, 1992 [7] McKenna M., Zeltzer D., "Dynamic Simulation of Autonomous Legged Locomotion", Computer Graphics 24 (4), pp 29-38, 1990 [8] Ronan Boulic, Ramon Mas, “Inverse Kinetics for Center of Mass Position Control and Posture Optimization”, Politecnico Federale di Losanna, Settembre 1994 [9] Young-Hoo Kwon of Texas Woman’s University, EXSS 323 CENTER OF MASS LAB, http://oregonstate.edu/instruct/CM_Lab/Center_Of_Mass.htm 58 [10] Chandler RF, Clauser CE, McConville JT, Reynolds HM, & Young JW (1975). Investigation of inertial properties of the human body (AMRL Technical Report 74-137). Wright-Patterson Air Force Base, OH: Aerospace Medical Research Laboratories. [11] Clauser CE, McConville JT, & Young JW (1969). Weight, volume, and center of mass of segments of the human body (AMRL Technical Report 69-70). Wright-Patterson Air Force Base, OH: Aerospace Medical Research Laboratories. [12] de Leva, P (1996). Adjustments to Zatsiorsky-Seluyanov's segment inertia parameters. Journal of Biomechanics, 29(9), 1223-1230. [13] Dempster, WT (1955). Space requirements for the seated operator (WADC Technical Report 55-159). Wright-Patterson Air Force Base, OH: Wright Air Development Center. [14] Zatsiorsky V & Seluyanov V (1983). The mass and inertia characteristics of the main segments of the human body. In H. Matsui & K. Kobayashi (Eds.), Biomechanics VIII-B (pp. 1152-1159). Champaign, IL: Human Kinetics. [15] Zatsiorsky V & Seluyanov V (1985). Estimation of the mass and inertia characteristics of the human body by means of the best predictive regression equations. In DA Winter, RW Norman, RP Wells, KC Hayes & AE Patlaa (Eds.), Biomechanics IX-B (pp. 233-239). Champaign, IL: Human Kinetics. [16] Zatsiorsky V, Seluyanov V, Chugunova L (1990). In vivo body segment inertial parameters determination using a gamma-scanner method. In N. Berme & A. Cappozzo (Eds.), Biomechanics of Human Movement: Applications in Rehabilitation, Sports and Ergonomics (pp. 186-202). Worthington, OH: Bertec Corp. [17] Zatsiorsky VM, Seluyanov VN, & Chugunova LG (1991). Methods of determining mass-inertial characteristics of human body segments. In GG Chernyi & SA Regirer (Eds.), Contemporary Problems of Biomechanics (pp. 272-291). Moscow: Mir. 59 [18] Man-Systems Integration Standards Revision B, “Anthropometry and Biomechanics”, Volume 1 Section 3, July 1995 60 Ringraziamenti Giunti al termine di questo lavoro desideriamo ringraziare ed esprimere la nostra riconoscenza nei confronti di tutte le persone che, in modi diversi, ci sono state vicine e hanno permesso e incoraggiato sia i nostri studi che la realizzazione di questa tesi. I nostri più sentiti ringraziamenti vanno al nostro relatore Ing. Paola Spoletini per la sua disponibilità nei chiarimenti e suggerimenti che ci hanno permesso di intraprendere ogni volta le scelte più appropriate e per la revisione dei vari capitoli di questa tesi. Vorremo inoltre ringraziare la dottoressa Tiziana Redaelli, il fisioterapista Dario Pometto e Flavia dell’Ospedale Niguarda per la loro disponibilità. Ringraziamo anche le nostre famiglie e gli amici che ci sono stati molto vicini in tutti questi anni, che oltre ad averci sempre “supportato” ci hanno più di tutto “sopportato”. 61