here - Rosario Santoro

Transcript

here - Rosario Santoro
POLITECNICO DI BARI
DIPARTIMENTO DI INGEGNERIA
ELETTRICA E DELL'INFORMAZIONE
CORSO DI LAUREA MAGISTRALE IN
INGEGNERIA INFORMATICA
TESI DI LAUREA IN
ELABORAZIONE DI IMMAGINI E VIS IONE ARTIFIC IALE
STUDIO, PROGETTAZIONE E SVILUPPO DI
UN PROTOTIPO DI UN SISTEMA DI REALTA' VIRTUALE
PER LA RIQUALIFICAZIONE DEGLI AMBIENTI VITALI
Relatore:
prof. ing. Vitoantonio BEVILACQUA
Laureando:
Rosario SANTORO
Correlatori:
dott. Michele PANTALEO
prof.ssa Marina DE TOMMASO
ANNO ACCADEMICO 2012/13
SOMMARIO
1 INTRODUZIONE E CONTESTO ........................ 1
1.1
LA REALTÀ AUMENTATA E LA REALTÀ VIRTUALE................................ 1
1.2
STATO DELL'ARTE ............................................................................... 4
1.3
IL CONTESTO ....................................................................................... 5
1.3.1
1.3.2
1.3.3
1.4
SENSORISTICA ..................................................................................... 8
1.4.1
1.4.2
1.4.3
1.4.4
1.4.5
1.5
Prima fase .................................................................................................... 6
Seconda fase................................................................................................. 7
Terza fase ..................................................................................................... 7
Elettrocardiogramma (ECG) ....................................................................... 8
Elettroencefalogramma (EEG) .................................................................... 9
Elettromiogramma (EMG) ......................................................................... 12
FIT.............................................................................................................. 13
La condizione di stress e suo rilevamento ................................................. 13
L'INTERVENTO DEL CANDIDATO NEL PROGETTO ................................ 14
2 PANORAMICA DEL SISTEMA ........................ 15
2.1
PANORAMICA DI ALTO LIVELLO ......................................................... 15
2.2
CICLO ESEMPLARE DI FUNZIONAMENTO ............................................ 16
2.2.1
2.2.2
2.3
La macrofase offline .................................................................................. 17
La macrofase online................................................................................... 19
ARCHITETTURA DEL SISTEMA ............................................................ 20
3 MODULO OFFLINE: MODELLAZIONE 3D ........ 23
3.1
L'ACQUISIZIONE ................................................................................ 23
3.1.1
3.1.2
Teoria sull'acquisizione ............................................................................. 23
Le alternative ............................................................................................. 30
i
3.1.3
3.2
La soluzione di acquisizione ...................................................................... 47
VISORI DI REALTÀ VIRTUALE ............................................................. 51
3.2.1
3.2.2
Meta AR ..................................................................................................... 51
Oculus Rift ................................................................................................. 54
3.3
LEAP MOTION ................................................................................... 57
3.4
CREAZIONE DELL'AMBIENTE VIRTUALE ............................................. 60
3.4.1
3.4.2
3.4.3
3.4.4
3.4.5
Unity 3D ..................................................................................................... 60
Le classi ..................................................................................................... 62
L'architettura event-oriented ..................................................................... 64
La descrizione XML della scena ................................................................ 66
La doppia visualizzazione .......................................................................... 68
3.5
I TIPI DI OGGETTO MODIFICABILI........................................................ 70
3.6
PROTOTIPO DELL'AMBIENTE VIRTUALE ............................................. 71
4 MODULO ONLINE: CONTROLLO DELLA REALTÀ
VIRTUALE ........................................................ 74
4.1
L'INTERFACCIA OPERATORE .............................................................. 74
4.1.1
4.1.2
4.1.3
4.1.4
4.2
Il Qt Creator .............................................................................................. 74
Il design pattern MVC e la sua variante .................................................... 76
Il diagramma delle classi ........................................................................... 79
L'aspetto della GUI .................................................................................... 82
LA COMUNICAZIONE .......................................................................... 83
4.2.1
4.2.2
4.2.3
4.2.4
Il formato JSON ......................................................................................... 83
Integrazione in Qt Creator......................................................................... 85
Integrazione in Unity 3D e C# ................................................................... 86
Il protocollo di comunicazione in JSON .................................................... 86
5 SVILUPPI FUTURI ....................................... 89
5.1
ALTRI STIMOLI .................................................................................. 89
5.2
MAGGIORE ATTIVITÀ DA PARTE DEL PAZIENTE.................................. 89
5.3
INGOMBRO DELL'OCULUS VR ........................................................... 91
5.4
IL SISTEMA COME WEB SERVICE ....................................................... 91
ii
5.5
DESCRIZIONE DELLE SCENE 3D MEDIANTE X3D ............................... 91
5.6
ALTRI UTILIZZI DEL SISTEMA ............................................................. 92
5.7
CRONOLOGIA DELLE MODIFICHE ALL'AMBIENTE ............................... 93
6 CONCLUSIONI ........................................... 94
7 APPENDICE ............................................... 95
7.1
CONTENUTO X3D D'ESEMPIO ............................................................ 95
8 BIBLIOGRAFIA ........................................... 97
iii
All'equilibrio.
iv
Introduzione e contesto
Rosario Santoro
1 INTRODUZIONE E
CONTESTO
1.1 La realtà aumentata e la realtà virtuale
Negli ultimi anni, la disciplina della Visione Artificiale ed Elaborazione di Immagini ha
apportato una serie di enormi contributi in ambito medico, sia in fatto di diagnosi sia di
mezzi.
Per quanto riguarda le diagnosi, basta citare le numerose tecniche di image processing
mediante le quali l'immagine ottenuta attraverso una lastra, un'endoscopia o una TAC, può
essere migliorata al fine di facilitare la rilevazione di occorrenze di certi artefatti.
In questa disciplina vi è una branca in particolare il cui sviluppo in questi tempi sta
subendo una forte spinta: la realtà aumentata e la realtà virtuale.
Figura 1.1 - Relazione tra l'ambiente reale, la realtà aumentata e la realtà virtuale [1]
Questi due ambiti sono in correlazione l'uno con l'altro. Come illustrato in Figura 1.1, non
si tratta di una distinzione netta ma di una misura di quanto la realtà osservata si fonde con
1
Rosario Santoro
Introduzione e contesto
informazioni e scenari prodotti esclusivamente da una macchina. A seconda di quanto una di
queste due componenti prevale sull'altra si ottiene la definizione per la scena osservata.
Ad esempio considerando un paio di occhiali sulle cui lenti vengono proiettate
informazioni come una scritta recante data e ora, si è di fronte ad un sistema di realtà
aumentata in quanto la provenienza della maggior parte dell'immagine percepita
dall'osservatore è naturale, a fronte delle poche informazioni prodotte sinteticamente (Figura
1.2).
Aggiungendo una quantità sempre maggiore di informazione digitale sulle lenti ci si
avvicina ad una configurazione di "virtualità aumentata"; portando questo procedimento agli
estremi e dunque rimuovendo tutta la scena naturale e visualizzando il 100% di informazioni
digitali si giunge alla definizione di realtà virtuale (Figura 1.3).
Questi dispositivi ricreano l'illusione della tridimensionalità proiettando contenuti
stereoscopici sulle lenti e imitando il funzionamento naturale del sistema visivo umano
(vedere 3.1.1).
Figura 1.2- La scena complessivamente percepita in un sistema di realtà aumentata1
1
http://www.ilbloggatore.com/2011-07-12/live-view-realta-aumentata-anche-sui-symbian/
2
Rosario Santoro
Introduzione e contesto
Figura 1.3 - Il visore di realtà virtuale impiegato in fase di test (Oculus Rift)
Tali dispositivi hanno applicazioni che spaziano dall'ambito videoludico (realtà virtuale)
ad attività quotidiane come la guida di un'automobile (realtà aumentata).
Un altro settore che beneficia dei progressi della tecnologia VR è quello
medico/riabilitativo. Recenti innovazioni permettono infatti ad un medico chirurgo di
operare un paziente nel modo meno invasivo possibile, servendosi di un visore a realtà
aumentata che mostra e aggiorna in tempo reale il modello tridimensionale di un organo del
paziente, guidando il bisturi del chirurgo lungo il tratto di incisione migliore (Figura 1.4).
Figura 1.4 - Applicazioni di realtà aumentata in ambito medico chirurgico2
2
http://www.medgadget.com/2013/08/augmented-reality-ipad-app-guides-surgeons-during-tumor-
removal.html
3
Rosario Santoro
Introduzione e contesto
Figura 1.5 - Un dispositivo di realtà aumentata mentre viene usato per alleviare il dolore e l'ansia durante
la sostituzione del bendaggio di un'ustione3
Esistono anche una serie di giochi con webcam4 sviluppati dall'Università dello Ulster il
cui scopo è la riabilitazione in seguito ad infarto. Questi giochi sono stati creati per
incoraggiare movimenti marcati del tronco del corpo usando una tecnologia webcam a basso
costo e un comune PC. I giochi conservano un profilo del giocatore in modo tale che il gioco
stesso possa adattarsi dinamicamente per fornire un livello appropriato di sfida per l'abilità
motoria del paziente.
Risulta di particolare efficacia l'utilizzo di giochi poichè il paziente durante la
riabilitazione ha una tendenza allo scoraggiamento. Essendo la riabilitazione un processo
intensivo, frequente e impegnativo bisogna motivarlo permettendogli di riabilitarsi mentre
gioca [2].
Nel caso in cui si tratti di un bambino, egli può trarre beneficio dalla distrazione dalla
particolare operazione che sta subendo giocando servendosi di sistemi di realtà virtuale [3].
1.2 Stato dell'arte
La realtà virtuale è ben conosciuta per i suoi impieghi nei simulatori di volo e nei giochi.
Comunque, questi sono solo due dei molti modi in cui essa è impiegata oggigiorno.
3
4
http://cirrie.buffalo.edu/encyclopedia/en/article/119/
Un esempio è "Coleraine" (http://www.youtube.com/watch?v=1_QH1a0AziA)
4
Rosario Santoro
Introduzione e contesto
Un utilizzo diverso è la rilevazione finalizzata all'eliminazione delle situazioni di stress.
Sono già state in parte esplorate le tecniche di realtà virtuale finalizzate al rilevamento di
condizioni di stress. Nel bando ALBO5 della Regione Toscana, veniva previsto l'utilizzo
della realtà virtuale non immersiva per la valutazione delle situazioni di stress in ambiente
lavorativo [4].
Il progetto ALBO si proponeva di verificare l'applicabilità delle tecnologie ICT per la
costruzione di ambienti di lavoro virtuali e "immersivi" finalizzati alla rilevazione, al
monitoraggio e al miglioramento continuo del benessere organizzativo nelle imprese
industriali e non della Toscana. Il concetto di benessere oggetto della ricerca è strettamente
correlato alla prevenzione dello stress e dei rischi psico-sociali emergenti o latenti sui luoghi
di lavoro.
1.3 Il contesto
Il progetto propone metodologie e strumenti per definire nuovi approcci nella
progettazione di ambienti di vita dedicati a soggetti con capacità residua nelle fasi iniziali
della perdita di autonomia.
Il progetto, nel suo insieme, prevede la realizzazione di un sistema per la misura
oggettiva della capacità residua che permetterà di determinare in modo oggettivo il deficit
cognitivo e/o sensoriale. La misura della capacità residua costituirà un requisito in input per
la configurazione di un ambiente di vita sostenibile che potrà essere adeguato per
assecondare l’evoluzione del deficit. Ciascun ambiente di vita deve essere analizzato e
riqualificato, con particolari accorgimenti architettonici e di design, per ottenere un sistema
adattabile in funzione del deficit misurato. Sarà dotato di strumenti attivi (domotica e ausili)
e passivi (elementi strutturali e accessori di ambiente) che miglioreranno le capacità del
soggetto di sopperire al deficit. Il progetto prevede la realizzazione di un laboratorio
dimostrativo nel quale eseguire i test necessari per la validazione direttamente sugli utenti
finali, valutando così la qualità della progettazione.
5
Ambienti di Lavoro virtuali per la rilevazione del Benessere Organizzativo
5
Rosario Santoro
Introduzione e contesto
Il progetto ha come principale obiettivo quello di mettere in atto una procedura di
progettazione/riqualificazione di ambienti domestici e assistenziali al fine di consentire un
adattamento dinamico e personalizzato degli stessi a seconda del contesto e delle capacità
cognitive/motorie residue del paziente in questione.
Il termine “riqualificazione” porta con sé l’enorme vantaggio di non richiedere
necessariamente la costruzione ad-hoc di strutture, bensì di modificare quelle esistenti con
opportuni interventi a costi non troppo elevati. L’adattamento dell’ambiente avviene sia
mediante accorgimenti architettonici (arredi, infissi, ….) sia attraverso la definizione di una
sequenza di scenari ambientali multisensoriali preimpostati, costruiti sulle particolari
esigenze del paziente: l’idea è quindi quella di seguire nel tempo l'evoluzione della patologia
del paziente stesso intervenendo attraverso la modifica di alcuni dei principali parametri
inerenti il comfort ambientale.
A fronte di questa premessa, il progetto può essere realizzato in tre fasi principali:
1. Progettazione e generazione delle specifiche progettuali e di configurazione
ambientale (paragrafo 1.3.1);
2. Progettazione, attuazione e realizzazione dell’ambiente domotico multisensoriale
(paragrafo 1.3.2);
3. Realizzazione di una piattaforma tramite la quale monitorare e controllare gli alert
generati volontariamente attraverso un meccanismo di feedback basato su ADL6;
questi alert possono in alternativa essere generati automaticamente attraverso la
piattaforma domotica (paragrafo 1.3.3).
1.3.1 Prima fase
La prima fase di progettazione e generazione delle specifiche progettuali, anche a valle di
campagne di acquisizione di geometrie tridimensionali degli ambienti oggetto di
modellazione, prevede l’utilizzo di tecniche di realtà virtuale/aumentata mediante la quale è
possibile immergere il paziente in scenari virtuali dando allo stesso la percezione di trovarsi
nella realtà: in questo contesto viene valutata la percezione emotiva, di piacevolezza
6
Activities of Daily Living
6
Introduzione e contesto
Rosario Santoro
mediante l’utilizzo di sensori tipo EEG e della risposta simpatico-cutanea provata durante
l’esplorazione dell’ambiente virtuale mediante l’utilizzo di sensori e tracciati ECG e EMG.
In questo modo è possibile percepire in maniera oggettiva e quantificata la gradevolezza o
sgradevolezza/fastidio che un paziente sperimenta per esempio in un ambiente più o meno
luminoso o rumoroso, o dinanzi ad una porta colorata, o ad una vetrata che cambia colore.
L'output di questa fase è la produzione di una serie di specifiche progettuali necessarie
alla fase di attuazione e realizzazione dell’ambiente domotico: si tratta dunque di sistemi di
fonoassorbenza,
servomeccanismi
per
operazioni
di
sollevamento,
abbassamento,
orientazione, regolazione delle tende, apertura/chiusura/modulazione dell'angolazione di
finestre, serrande e porte.
1.3.2 Seconda fase
L'output della prima fase costituisce la base per l’implementazione di un adeguato
sistema di domotica avanzata. Questo sistema di domotica avanzata sarà in grado di
applicare le caratteristiche dello scenario prescelto all’ambiente controllato mediante i
classici meccanismi di retroazione e di inseguimento delle variabili di controllo tipici
dell’automazione. Questo tipo di domotica consentirà pertanto, in aggiunta alla domotica
classica, di adeguarsi in maniera automatica e proattiva nel tempo alle esigenze psicofisiche
del soggetto fragile.
1.3.3 Terza fase
L’ultima fase prevede la realizzazione di una piattaforma che svolga le tipiche funzioni di
una centrale operativa e che si occupi della gestione di sistemi per il calcolo dell’indice di
ADL e per la memorizzazione delle informazioni veicolate mediante l’utilizzo di
applicazioni mobile. Il paziente/soggetto target potrà pertanto quotidianamente effettuare
segnalazioni ad un sistema centrale che prenderà decisioni supportate da esperti medici.
Inoltre l'utilizzo della piattaforma consentirà l'offerta di un ulteriore servizio che tenendo
conto della condizione contingente del soggetto (risposta al piano farmacologico, impreviste
complicanze del decorso della condizione patologica, effetti collaterali cronicizzanti delle
terapie continuative) sarà in grado di fornire meccanismi di alert, ovvero modificare le
condizioni di regolazione automatica proposte dal sistema domotico, sulla base delle
indicazioni di specialisti medici in grado di comprendere la condizione del soggetto target.
7
Rosario Santoro
Introduzione e contesto
1.4 Sensoristica
1.4.1 Elettrocardiogramma (ECG)
Al contrario delle contrazioni dei muscoli scheletrici volontari che sono comandate
direttamente dal sistema nervoso, le contrazioni del muscolo del cuore iniziano
internamente, nelle fibre muscolari stesse e sono soltanto accelerate o rallentate dal sistema
nervoso (e da una varietà di fattori chimici). Il processo coinvolge movimenti di ioni entranti
e uscenti dalle cellule muscolari e la polarizzazione e depolarizzazione cellulare [5].
Posizionando una serie di sensori in determinate posizioni sulla superficie del corpo (Figura
1.6), è possibile tracciare nel tempo l'andamento delle differenze di potenziale da un sensore
ad un altro: il tracciato risultante è un elettrocardiogramma (ECG, anche noto come EKG,
Figura 1.8).
Figura 1.6 - Posizione degli elettrodi sul tronco del
paziente (non sono raffigurati quelli sulle gambe)
Figura 1.7 - Differenze di potenziale delle tracce I,
II e III in un ECG (in senso antiorario, partendo da
quella disposta orizzontalmente)
8
Introduzione e contesto
Rosario Santoro
Figura 1.8 - Esempio di tracciato di un ECG a 12 tracce (12-lead).
1.4.2 Elettroencefalogramma (EEG)
L'identificazione di un EEG normale si deduce sul riconoscimento di un EEG anormale,
sulla conoscenza delle normali variazioni delle forme d'onda e sulla loro evoluzione dalla
gioventù alla vecchiaia.
L'encefalogramma è una misura unica e valutabile della funzione elettrica del cervello. È
un mezzo grafico delle differenze di potenziale tra due parti del cervello registrata nel
tempo. L' EEG riguarda lo studio di questi segnali elettrici che sono generati dal cervello. L'
EEG extracraniale fornisce un sunto ampio dell'attività elettrocerebrale attraverso entrambi
gli emisferi del cervello. L'EEG intracraniale fornisce invece un EEG specifico registrando
direttamente dal cervello attraverso elettrodi impiantati chirurgicamente in specifiche regioni
del cervello. Può essere così rivelata informazione su una disfunzione diffusa o locale
cerebrale, come la presenza di scariche epilettiformi interictali (Interictal Epileptiform
Dischagers, IEDs), o sequenze di particolare importanza.
Per l'interpretazione di un EEG anormale bisogna prima comprendere i criteri necessari
per la definizione dei pattern normali. Mentre un normale EEG non esclude una diagnosi
clinica (come l'epilessia), un'occorrenza insolita su un EEG può essere a supporto di una
9
Rosario Santoro
Introduzione e contesto
diagnosi, può indicare una disfunzione cerebrale o può non avere niente a che fare con la
ragione dello studio (per esempio, un mal di testa).
I segnali elettrici si creano infatti quando cariche elettriche si muovono nel sistema
nervoso centrale. Tali segnali sono nell'ordine dei µV. [6].
Figura 1.9 - Il casco con elettrodi attraverso il quale viene misurata l'attività cerebrale (EEG)
Figura 1.10 - Posizionamento degli elettrodi nel sistema 10-20 (punti neri) e nel sistema 10-10 (punti neri e
bianchi) in un EEG. Le sigle su ciascun punto identificano univocamente una regione del cranio.
10
Introduzione e contesto
Rosario Santoro
Le registrazioni EEG dal cuoio capelluto mostrano la differenza di potenziale tra due
differenti siti sulla testa sopra la corteccia cerebrale che è più vicina all'elettrodo che sta
registrando. Durante l'uso normale, i potenziali elettrici sono acquisiti indirettamente dalla
superficie del cuoio capelluto e incorporano l'analisi delle forme d'onda, delle frequenze, dei
voltaggi, della morfologia e topografia. Questi potenziali vengono acquisiti per via digitale
attraverso un certo numero di elettrodi disposti tra loro in accordo allo standard
internazionale 10-20 che prevede una suddivisione in regioni ampie dal 10% al 20%, in
ciascuna delle quali verrà posizionato un elettrodo. Una misura clinicamente accettabile
prevede almeno 21 elettrodi. Recentemente è stato messo a punto il nuovo standard 10-10
che prevede un maggior numero di elettrodi e dunque più vicini tra loro, tuttavia il più
diffuso resta il 10-20.
Per la corretta lettura di un tracciato EEG come quello in Figura 1.11, quando stimolato
da interventi esterni come il progetto di questa tesi si propone di realizzare, è necessaria una
sincronizzazione fine (al microsecondo) tra la lettura e le variazioni degli input forniti al
paziente a mezzo della realtà virtuale. È possibile soddisfare questo requisito tramite
realizzazione di un sistema real-time (soft realtime) oppure tramite la registrazione di
marche temporali rispetto ad un riferimento comune (per esempio l'orario di un server NTP)
e in fase di studio dei tracciati tenere presente l'eventuale sfasamento.
Figura 1.11 - Tracciato d'esempio di un EEG
11
Introduzione e contesto
Rosario Santoro
1.4.3 Elettromiogramma (EMG)
L'elettromiografia è il test che verifica lo stato di salute dei muscoli e dei nervi che
controllano quei muscoli. Il test è condotto inserendo dei sottili aghi nei muscoli: questi aghi
registrano l'attività elettrica prodotta dai muscoli. Dopo il posizionamento degli elettrodi può
venir chiesto al soggetto osservato di flettere il braccio e l'attività elettrica visualizzata su
monitor fornisce informazioni circa l'abilità del muscolo di rispondere quando i nervi dei
muscoli sono stimolati [7].
Figura 1.12 - Esempio di elettromiografia (EMG) ad un braccio.
Dunque un EMG produce una lettura nel momento in cui il muscolo cui gli elettrodi sono
collegati compie un movimento e tale segnale è direttamente proporzionale allo sforzo
compiuto.
Una volta chiarito lo scenario di un EMG ci si imbatte purtroppo in un'incompatibilità
con il progetto. Un EMG misura lo sforzo dei muscoli ai quali è collegato, ma il soggetto
osservato durante la somministrazione dell'ambiente virtuale tramite il visore non compie
alcun movimento sotto sforzo. Nella configurazione attuale, infatti, il paziente è considerato
come entità statica nella realtà e il movimento più evidente che può compiere è la rotazione
della testa per esplorare il mondo virtuale in cui è immerso. Date queste premesse, un EMG
risulta del tutto inutile ed è stato dunque escluso.
Eventualmente in configurazioni future, considerando l'inclusione di dispositivi quali il
Leap Motion (si rimanda ai paragrafi 3.3 e 5.2), sarà possibile incrementare l'attività del
12
Rosario Santoro
Introduzione e contesto
paziente permettendogli, per gradi, un livello di interazione sempre maggiore con il mondo
virtuale che gli viene presentato.
Esempi di interazioni sono: la possibilità di indicare un oggetto con un dito, proiettando
una linea che permetta all'operatore medico di capire rapidamente a quale oggetto il paziente
si riferisca; la possibilità di muoversi nell'ambiente virtuale (al momento è possibile solo
osservare in ogni direzione); la possibilità di interagire con degli oggetti presenti nella scena,
come tende, porte e finestre.
1.4.4 FIT
Il Laboratorio di Informatica Industriale del Politecnico di Bari in collaborazione con
AMT Services S.r.l. nell'ambito del PON “Sviluppo di un Sistema di Rilevazione della
Risonanza (SS-RR)” (contesto FIT, Fondo rotativo per l'Innovazione Tecnologica) ha
recentemente sviluppato un sistema il cui scopo è il riconoscimento degli stati d'animo di
una persona osservando e studiando l'espressione del volto, il tono della voce e la gestualità,
servendosi di webcam e microfoni.
Ai fini del progetto oggetto di questa tesi è stato considerato il riutilizzo di due di questi
tre moduli: il rilevamento dell'espressione facciale è stato tralasciato poiché non è possibile
inquadrare il volto del soggetto, completamente ostruito dalla presenza del visore virtuale
Oculus Rift.
Gli output di questi moduli software andranno ad affiancare la sensoristica medica EEG
ed ECG precedentemente considerata.
1.4.5 La condizione di stress e suo rilevamento
La condizione di stress psicofisico di un soggetto può trovare riscontro nelle letture dei
tracciati EEG ed ECG.
In un'ottica generale, è stata già dimostrata la possibilità di rilevare una certa quantità di
emozioni attraverso la lettura e l'interpretazione di un elettroencefalogramma e tali stati
d'animo includono la sensazione di disagio e stress [8].
Recentemente, è stata coinvolta in queste indagini anche l'elettrocardiografia: infatti, è
stata studiata la dipendenza tra caratteristiche oggettive di un ECG e la presenza di stress
mentale nel soggetto osservato [9]. Esempi di queste caratteristiche sono le variazioni a
breve termine delle misurazioni della variabilità del ritmo cardiaco (Heart Rate Variability,
HRV) e la variabilità morfologica (MV), analizzate sia nel dominio del tempo sia della
13
Rosario Santoro
Introduzione e contesto
frequenza. I risultati dello studio di Costin, Rotariu & Pasarica hanno rivelato infatti che le
misure HRV denominate mHR e mRR, le VLF/LF/HF normalizzate, differenze tra la LF
normalizzata e la HF normalizzata e il valore SVI sono metriche effettive per il rilevamento
dello stress mentale [9]. Risultati migliori sono stati ottenuti usando l'analisi MV e un
modulo per il supporto alle decisioni basato su entrambi i metodi, HRV ed MV.
Un'altra caratteristica che può fornire una misura del grado di stress di un soggetto è la
risposta simpatico cutanea (Sympathetic Skin Response, SSR).
1.5 L'intervento del candidato nel progetto
Nel presente lavoro di tesi, il candidato ha affrontato lo studio, la progettazione e lo
sviluppo del prototipo del sistema di realtà virtuale ipotizzato nel paragrafo 1.3, mediante il
quale somministrare ad un soggetto affetto da deficit cognitivi e/o motori nello stadio
iniziale, una replica virtuale e fedele dei suoi ambienti quotidiani e permettergli di interagire
con un operatore che in tempo reale possa apportare cambiamenti a tali ambienti.
Questi cambiamenti sono volti a facilitare le operazioni più comuni la cui possibilità per
il soggetto affetto da certi tipi di disturbi va man mano riducendosi: si parla dunque di
tracciamento di percorsi luminosi verso stanze della casa con un'importanza particolare
(come i sanitari o la cucina o la stanza da letto), di aggiunta di meccanismi di oscuramento
automatici alle finestre per regolare nell'arco della giornata la quantità di luce che entra
nell'appartamento o ancora la riproduzione di suoni particolari in alcuni punti della casa.
L'obiettivo di queste modifiche è, in ultima analisi, ridurre la quantità di stress nel
soggetto quando vive i propri spazi vitali. La ricerca di questa condizione di minor stress è
guidata dall'interpretazione degli output di sensori quali elettroencefalogramma (EEG) ed
elettrocardiogramma (ECG). Una volta individuata la configurazione migliore, le modifiche
introdotte nell'ambiente sintetico vengono realizzate con dispositivi domotici nella realtà.
Considerando il contesto descritto in questo capitolo, l'intervento del candidato riguarda
la prima fase del progetto (paragrafo 1.3.1), cioè il modulo dell'acquisizione e ricostruzione
del mondo virtuale e il sistema di immersione e somministrazione della realtà virtuale.
14
Panoramica del sistema
Rosario Santoro
2 PANORAMICA DEL
SISTEMA
2.1 Panoramica di alto livello
Figura 2.1 - Schematizzazione del progetto come sistema a retroazione
La somministrazione dell'ambiente virtuale al paziente, l'analisi dei suoi parametri vitali e
la conseguente modifica della configurazione del mondo sono operazioni cicliche ed
effettuate in sequenza, a partire da una configurazione iniziale (la configurazione reale
dell'appartamento) con l'obiettivo di raggiungere una certa condizione d'equilibrio a regime.
Tali caratteristiche riportano alla mente le caratteristiche salienti di un sistema
retroazionato, ottica attraverso la quale è stato progettato il sistema (Figura 2.1).
15
Rosario Santoro
Panoramica del sistema
2.2 Ciclo esemplare di funzionamento
Viene ora esposto un ciclo completo di funzionamento del sistema dal punto di vista del
livello applicativo: nei capitoli 3 e 4 entrambi i moduli verranno analizzati con maggior
dettaglio.
Figura 2.2 - Diagramma delle componenti e delle loro interazioni.
È possibile notare le due macrofasi ("offline" e "online") separate da una linea verde.
I blocchi con i bordi rossi sono le componenti singole che saranno in esecuzione
16
Rosario Santoro
Panoramica del sistema
Tenendo presente la Figura 2.2, il funzionamento dell'intero sistema è suddiviso in due
macrofasi: la parte offline e la parte online, eseguite temporalmente in questo ordine. Nella
macrofase offline si effettuano acquisizioni dell'ambiente reale e costruzione dell'ambiente
virtuale, mentre nella macrofase online avviene la somministrazione dell'ambiente virtuale al
soggetto osservato sotto la supervisione dell'operatore medico.
È importante notare che in entrambe tali fasi, è prevista la presenza di un operatore
umano. Nella macrofase offline questa figura sarà un operatore/programmatore specializzato
nella costruzione di ambienti virtuali, che abbia particolare familiarità con il motore di gioco
Unity 3D e gli strumenti di acquisizione, così come previsto nel paragrafo 3.1.3. Nella
macrofase online, tale operatore afferisce invece al settore medico (in particolare
neurologico), in quanto è suo compito la modifica in tempo reale della configurazione
dell'ambiente somministrato al soggetto sulla base dei valori forniti dalla sensoristica medica
EEG ed ECG e moduli FIT (vedere rispettivamente i paragrafi 1.4 e 1.4.4).
2.2.1 La macrofase offline
La prima fase tratta dell'acquisizione dell'ambiente vitale del paziente, sia esso il suo
appartamento o la struttura ricettiva specializzata che lo accoglie.
Le acquisizioni effettuate sono di due tipi: la distinzione giace nel ruolo che gli oggetti
acquisiti rivestiranno nella macrofase online. Infatti, tenendo a mente che lo scopo del
sistema e stimolare il paziente apportando modifiche al suo ambiente, alcuni oggetti presenti
al suo interno dovranno poter subire tali modifiche e altri oggetti invece rimarranno invariati
nel tempo.
Gli oggetti che non subiranno variazioni sono ovviamente la pianta dell'appartamento, la
posizione delle finestre e tutte quelle modifiche che un sistema domotico non è per sua
natura in grado di attuare. Tutti questi oggetti potranno essere dunque acquisiti assieme alla
stanza intera, andando a formare un'unica nuvola di punti immutabile, che tra l'altro andrà a
costituire i confini invalicabili dell'ambiente virtuale. Ad ogni modo, ciò non preclude
affatto la possibilità di acquisire in due momenti distinti stanza e oggetti immutabili al suo
interno: una delle ragioni a favore di quest'ultimo approccio è la maggior qualità di
un'acquisizione singola di un oggetto.
La seconda tipologia di acquisizioni riguarda quegli oggetti di cui si intende permettere la
modifica a runtime, durante la somministrazione dell'ambiente al paziente. Questi oggetti,
17
Rosario Santoro
Panoramica del sistema
detti anche "stimoli", è opportuno che vengano acquisiti separatamente dal resto
dell'ambiente poichè nel motore grafico dovranno costituire una mesh distinta alla quale i
metodi di modifica invocati a runtime devono potersi riferire in maniera univoca.
Una volta concluso il sopralluogo per l'acquisizione, si prosegue alla fase di creazione
dell'ambiente virtuale. Mediante il software Unity 3D si importano le nuvole di punti
dell'ambiente, degli oggetti e degli stimoli, disponendole nelle stesse posizioni dei rispettivi
oggetti reali. Alcuni degli oggetti potrebbero richiedere un raffinamento grafico, come per
esempio una riduzione delle irregolarità della superficie di una parete.
Il risultato è un surrogato dell'ambiente reale, pronto per la navigazione virtuale.
Bisogna ora considerare i dispositivi fisici di output che verranno impiegati poichè questa
scelta influisce sul tipo di esportazione dell'ambiente virtuale in Unity 3D. Nel caso di
output su un dispositivo di realtà virtuale infatti la schermata sarà suddivisa in due parti
ciascuna contenente immagini per i rispettivi occhi; impiegando un normale monitor invece
l'esportazione sarà quella comune, con un unico riquadro.
Il candidato ha previsto la possibilità per l'operatore medico di visualizzare in anteprima
le modifiche da lui proposte sul mondo virtuale prima che queste vengano somministrate al
paziente. Considerato ciò, risulta che gli output visivi del sistema debbano essere
necessariamente due: l'output su visore virtuale stereoscopico (paziente) e l'output su
schermo in una finestra normale (l'operatore medico).
Dal punto di vista dell'implementazione, ciò richiede una doppia esportazione
dell'ambiente virtuale in Unity 3D ciascuna delle quali sarà basata su un modello comune
del mondo reale.
L'ultimo passo della macrofase offline è la creazione di una descrizione degli stimoli
presenti nel mondo virtuale da comunicare all'interfaccia grafica di cui disporrà l'operatore
medico (vedere paragrafo 3.4.4).
18
Panoramica del sistema
Rosario Santoro
2.2.2 La macrofase online
Figura 2.3 - Funzionamento di alto livello della macrofase online
La macrofase online ha luogo nel momento della somministrazione dell'ambiente virtuale
al paziente, sotto la supervisione di un operatore medico che ha la facoltà di modificare
alcune caratteristiche degli stimoli disponibili sulla base delle letture della sensoristica
medica collegata al paziente.
La prima operazione di questa macrofase è il caricamento della descrizione degli stimoli
nell'interfaccia grafica in modo tale che tutti i componenti del sistema ora lavorino e si
scambino messaggi tenendo presente il medesimo modello e la medesima configurazione del
mondo.
Successivamente l'operatore medico disporrà di un elenco di stimoli con le rispettive
proprietà modificabili; si potranno variare alcuni di questi parametri e scegliere se renderli
effettivi sul modello, visualizzandoli su tutte le viste disponibili, o se saggiarne solo
un'anteprima sulla propria macchina.
Man mano che gli stimoli variano, il paziente risponderà in modo diverso e i suoi
parametri vitali varieranno in accordo. Si suppone che dopo una certa quantità di modifiche
dell'ambiente virtuale venga raggiunta una situazione di equilibrio in cui si è individuato una
configurazione del mondo tale che produca la quantità minore di stress nel soggetto
19
Panoramica del sistema
Rosario Santoro
osservato. In questa sede si dà per certa l'esistenza almeno di un minimo locale nella
quantità totale di stress nel paziente.
In seguito, la configurazione dell'ambiente verrà analizzata da esperti nel settore
domotico che indicheranno il modo più efficiente di rendere effettive le modifiche a cui si è
pervenuti.
2.3 Architettura del sistema
Presentato il sistema da un punto di vista applicativo, viene ora affrontata una
presentazione dello stesso dal punto di vista del livello implementativo e progettuale.
In Figura 2.4 è rappresentata l'architettura del sistema, la struttura a stack di ciascuna
delle componenti e le interazioni tra queste. Di questi quattro stack, lo stack disegnato in
basso si riferisce alla macrofase offline, mentre i tre superiori rappresentano la macrofase
online del progetto.
Figura 2.4 - Vista globale degli stack delle componenti e delle loro interazioni
Una vista della struttura di un sistema come una pila (stack) è un artificio di progettazione
e rappresentazione molto comune nell'ambito dell'Information Technology. Esso si presenta
come una sequenza di moduli interconnessi e indipendenti fra loro: ciascuno di questi strati
(layer) ha una funzione ben specifica che non si sovrappone a nessuno degli altri layer.
Solitamente, procedendo dal basso verso l'alto in uno stack, il livello di astrazione dei dati si
eleva: prendendo come esempio la pila ISO/OSI (Figura 2.5), si passa dai byte (o bit) del
20
Rosario Santoro
Panoramica del sistema
livello fisico in basso, fino ad un file audio o pagina web al livello applicativo, strato che si
occupa di interagire con l'utente, passando attraverso una serie di rappresentazioni
intermedie come frame, pacchetti e stream.
Figura 2.5 - La pila International Organization for Standardization Open Systems Interconnection model
(stack ISO/OSI)7
In maniera simile, gli stack progettati dal candidato in Figura 2.4, individuano la
sequenza di moduli indipendenti che svolgono il compito assegnato.
Il primo dettaglio implementativo da descrivere è l'architettura scelta per il sistema nella
macrofase online.
Come spiegato nel paragrafo 4.1.2, la modifica apportata dal candidato al design pattern
Model-View-Controller (MVC), ovvero la trasformazione della componente View in un
gateway per più di una View, permette l'aggiunta e la rimozione di visualizzatori durante
l'esecuzione, a prescindere che si tratti di un'anteprima in una finestra normale su schermo o
di un visore di realtà virtuale.
La comunicazione tra visualizzatori e l'interfaccia operatore avviene tramite protocollo
TCP (Transmission Control Protocol). La libertà d'impostazione degli indirizzi IP non pone
vincoli sulla configurazione dal punto di vista dei tier, ovvero le macchine fisiche che
compongono l'architettura dell'intero sistema.
7
Fonte: Wikipedia
21
Rosario Santoro
Panoramica del sistema
Figura 2.6 - Modalità di connessione tra un visualizzatore (sia anteprima sia stereoscopico) e l'interfaccia
dell'operatore
La Figura 2.6 indica le tre possibili configurazioni per una connessione tra l'interfaccia
operatore e un visualizzatore.

localhost: il visualizzatore e l'interfaccia operatore sono in esecuzione sulla stessa
macchina, costituendo così un'architettura monolitica (one-tier);

Local Area Network: il visualizzatore è collegato nella stessa rete locale della GUI
operatore, dunque le macchine coinvolte diventano due (two-tier);

Rete esterna: estendendo la connessione oltre i confini di una rete locale, è possibile
collegare in remoto un visualizzatore all'interfaccia grafica (sempre two-tier). Questa
configurazione presenta un ulteriore beneficio, poichè non obbliga paziente e
operatore ad essere presenti nella stessa stanza.
A prescindere da questo grado di libertà, il sistema rimane in una chiara configurazione
client-server, dove a fungere da server è l'interfaccia operatore in Qt mentre i client sono
qualsiasi visualizzatore che si connetta ad esso, a prescindere se stereoscopico o meno.
22
Rosario Santoro
Modulo offline: modellazione 3D
3 MODULO OFFLINE:
MODELLAZIONE 3D
3.1 L'acquisizione
3.1.1 Teoria sull'acquisizione
3.1.1.1 La stereoscopia
Il sistema percettivo umano riesce a ricostruire la tridimensionalità attraverso un processo
chiamato stereopsi, mediante il quale si interpretano i cosiddetti indizi monoculari e
binoculari [10] (anche noti rispettivamente come pittorici e fisiologici) riuscendo a
ricostruire la tridimensionalità. Indizi monoculari sono l'interposizione, la grandezza relativa
e familiare, gli indizi prospettici, l'ombreggiatura e il movimento relativo. Indizi binoculari
sono invece la convergenza dei due globi oculari e la disparità oculare.
La creazione di contenuti multimediali tridimensionali si basa sull'imitazione del
funzionamento della vista umana: in fase di acquisizione ci si serve di due telecamere
orientate e distanziate opportunamente, una delle quali catturerà immagini da mostrare
all'occhio sinistro e l'altra le immagini da mostrare all'occhio destro. In fase di riproduzione,
si dovrà fare uso di un sistema che permetta di far ricevere l'immagine sinistra all'occhio
sinistro e l'immagine destra all'occhio destro: tale tecnica è chiamata parallasse [10].
Il cervello mediante la stereopsi ricaverà l'informazione sulla profondità dei diversi
oggetti nella scena. Le tecniche di rappresentazione e di separazione in fase di fruizione
sono diverse. Il metodo più semplice è quello dell'anaglifia [11], che consiste nel separare i
due canali (flusso sinistro e flusso destro) filtrandoli mediante due colori complementari fra
di loro (come rosso e ciano, ma non solo): lo spettatore dovrà indossare occhialini con lenti
dello stesso colore dei filtri. Tale metodo è semplice ma penalizza di molto la percezione
cromatica e l'esperienza utente. Successivamente è stata sperimentata una tecnica basata
23
Rosario Santoro
Modulo offline: modellazione 3D
sulla polarizzazione. I due flussi venivano proiettati con filtri polarizzatori con direzioni di
polarizzazione perpendicolari [10] fra loro. L'utente avrebbe dovuto indossare occhiali con
lenti polarizzate in modo adeguato. Siccome la separazione dei canali, in accordo con la
legge di Malus, dipendeva dall'orientamento degli occhialini rispetto allo schermo, si è
pensato di impiegare la tecnica della polarizzazione circolare [10], assegnando quella
sinistrorsa ad un occhio e quella destrorsa all'altro. In entrambe le modalità di
polarizzazione, è necessario un monitor con due pannelli distinti e sovrapposti la cui
emissione è polarizzata in modo adeguato, oppure in caso di proiezione è necessario un tipo
speciale di schermo, detto silverscreen, in grado di conservare la polarizzazione dell'onda
che lo colpisce. Si è passati poi alle tecniche di separazione attiva [12]. Impiegando monitor
con frequenza di proiezione raddoppiata vengono proiettati in modo alternato il frame
sinistro e il frame destro. Gli occhialini dello spettatore sono dotati in questo caso di filtri
otturatori finemente sincronizzati con il monitor. Questo metodo sfrutta la persistenza
retinica dell'occhio umano. Il costo però sale.
Un'innovazione interessante è stata il monitor autostereoscopico [10] capace di fornire
l'illusione della profondità senza che lo spettatore indossi alcun paio di occhiali ma
sfruttando la barriera di parallasse o una rete lenticolare. L'attuale frontiera della
sperimentazione è il multiview [13] che prevede l'acquisizione di più di due flussi della
stessa scena in modo tale da permettere una percezione del 3D in modo autostereoscopico da
più di una posizione (che è uno svantaggio della tecnica precedente).
Una tecnica di natura diversa è l'utilizzo di una sola vista, quindi un solo flusso di
acquisizione, a cui viene associata un'immagine in scala di grigi solitamente acquisita con
una profondità in bit minore (8 bit, per esempio), in cui ciascun pixel è tanto più scuro
quanto più vicino è un certo punto della scena [14]. Queste immagini possono essere create
in due modi diversi:

si estrapola l'informazione della profondità dalla singola vista già acquisita con il
normale sensore RGB;

si utilizzano speciali telecamere in grado di produrre le cosiddette mappe di
profondità (vedere 3.1.1.2).
3.1.1.2 Mappe di profondità
Una mappa di profondità (Figura 3.1) è un'immagine monocromatica (o un canale di
un'immagine a più canali) in cui ogni pixel non è, come in una normale acquisizione, la
24
Rosario Santoro
Modulo offline: modellazione 3D
somma dei contributi di raggi luminosi incidenti sullo stesso elemento della matrice di
transistor del sensore, ma fornisce una misura della distanza dal sensore fino all'oggetto cui i
punti catturati da quel pixel appartengono.
Figura 3.1 - Un esempio di mappa di profondità in cui è possibile individuare
un oggetto in primo piano (foreground) e uno sfondo (background). L'intensità del pixel e la distanza
possono essere direttamente o inversamente proporzionali, a seconda del sensore.
L'informazione sulla distanza può essere ottenuta con due diverse tecniche.
La prima si serve di un cluster di emettitori infrarosso che emettono una certa quantità di
raggi IR secondo un pattern uniforme: i raggi proiettati vengono riflessi dagli oggetti che
colpiscono e vengono catturati da un sensore infrarosso (Figura 3.3). A seconda della
distanza dell'oggetto sul quale i punti incidono, la densità dei punti catturati in ricezione
cambierà. Nel dettaglio, la densità dei punti riflessi su una superficie e la distanza della
superficie stessa dal sensore sono direttamente proporzionali.
La seconda tecnica continua ad utilizzare emettitori IR ma si basa sul concetto di tempo
di volo (Time Of Flight, TOF). Nella cattura di un singolo frame, un illuminatore infrarosso
emette un singolo impulso infrarosso e questi raggi vengono riflessi dagli oggetti su cui
incidono. Il sensore infrarosso in ricezione è dotato di un otturatore controllato molto rapido.
L'impulso IR riflesso è modificato dalla struttura della scena e quest'informazione può essere
estratta combinando il segnale riflesso con l'otturatore rapido. Dopo la normalizzazione, i
valori misurati di intensità possono essere interpretati come valori di profondità [15].
25
Modulo offline: modellazione 3D
Rosario Santoro
(a)
(b)
Figura 3.2 - L'ASUS Xtion (a) e l' ASUS PrimeSense (b)
Figura 3.38 - Il pattern di fasci luminosi infrarossi proiettati dall'emettitore IR.
Si noti la differenza di densità di punti a seconda della distanza dell'oggetto sul quale incidono.
3.1.1.3 3D laser scanning
La scansione laser 3D può essere realizzata con approcci basati su differenti principi di
cattura, alcuni ideali per una scansione a corto raggio, altri più indicate per raggi mediolunghi.
Rientrano nella categoria dei laser scanner a corto raggio (distanza focale minore di un
metro) i laser scanner 3D a triangolazione e laser scanner 3D a luce strutturata; le tecnologie
per i laser scanner a medio-lungo raggio sono impulsi laser a tempo di volo e a spostamento
di fase.
8
Foto di Mattew Fisher (http://graphics.stanford.edu/~mdfisher/Kinect.html)
26
Modulo offline: modellazione 3D
Rosario Santoro
Figura 3.4 - Percorso del fascio di luce in un laser scanner triangolatore
Figura 3.5 - Calcolo della distanza in un laser scanner 3D a triangolazione
I laser scanner a triangolazione (Figura 3.5) usano un raggio laser o un punto laser per
scansionare un oggetto. Un sensore riceve la luce del laser riflessa dall'oggetto e mediante la
triangolazione trigonometrica il sistema calcola la distanza dell'oggetto dallo scanner.
La distanza tra la sorgente laser e il sensore e l'angolo tra il laser e il sensore sono rilevate
con grande precisione. Quando il raggio laser si riflette sull'oggetto scansionato, il sistema
può risalire all'angolo con il quale esso incide sul sensore e da lì alla distanza dalla sorgente
laser alla superficie dell'oggetto.
27
Modulo offline: modellazione 3D
Rosario Santoro
Figura 3.6 - Laser scanner a luce strutturata
Anche gli scanner a luce strutturata (solitamente bianca o blu) usano la triangolazione
trigonometrica ma invece di misurare la luce del laser questi sistemi proiettano una serie di
pattern lineari sull'oggetto (per esempio, una serie di righe parallele). Successivamente,
esaminando i bordi di ciascuna linea del pattern riflesso e catturato, viene calcolata la
distanza dello scanner dalla superficie dell'oggetto. Essenzialmente la telecamera invece di
osservare una linea laser, osserva il bordo di un pattern proiettato e ne calcola la distanza in
modo simile.
Figura 3.7 - Laser scanner a tempo di volo di un impulso laser
Gli scanner a impulsi laser, anche noti come scanner a tempo di volo, sono basati sul
concetto che la velocità della luce è nota con estrema precisione9, quindi se si conosce il
tempo impiegato dal raggio laser a raggiungere un oggetto e a tornare indietro al sensore, si
può dedurre la distanza di quell'oggetto. Questi sistemi usano elettronica accurata in grado di
misurare tempi nell'ordine dei picosecondi (ps) e misurano il tempo impiegato da milioni di
impulsi laser riflessi al sensore, calcolandone la distanza. Ruotando lo scanner a 360° su se
stesso (di solito servendosi di uno specchio) lo scanner può acquisire tutta una stanza.
9
Velocità della luce nel vuoto: c = 299 792 458 m/s
28
Modulo offline: modellazione 3D
Rosario Santoro
Figura 3.8 - Laser scanner a spostamento di fase
I laser scanner a spostamento di fase (phase shift) sono anch'essi basati sul tempo di volo,
con all'aggiunta della modulazione della potenza del fascio laser. Lo scanner, una volta
ricevuto il fascio, confronta le fasi dei raggi emessi e poi riflessi. La misurazione dello
spostamento di fase è più accurata. Si veda la Tabella 3.1 per un confronto tra i metodi.
Tabella 3.1 - Confronto tra le tecniche di laser scanning
Raggio
Tecnica di laser scanning
Vantaggi
Svantaggi
Triangolazione singolo raggio
 Disponibile in molte
forme (scanner di
aree, handheld,
braccio portatile)
 Spesso è più
portabile
 Minor preparazione
delle parti
 Minore sensibilità
alla luce ambientale
 Generalmente meno
accurati
 Generalmente a
minor risoluzione
 Rumore maggiore
Corto
Triangolazione di pattern di
laser
Basato su impulsi
Medio-lungo
Spostamento di fase
 Solitamente più
accurata
 Spesso maggior
risoluzione
 Minor rumore
 Da 2 a 1000m
 Più accurato
 Acquisizione più
veloce
 Minor rumore
 Solo scansioni di
area
 Generalmente non
molto portabili
 Più sensibile alla
finitura della
superficie (richiede
preparazione)
 Può richiedere
un'illuminazione
particolare
 Meno accurato
 Acquisizione più
lenta
 Maggior rumore
 Solo distanze medie
29
Modulo offline: modellazione 3D
Rosario Santoro
3.1.2 Le alternative
Un approccio alternativo prevede l'aggiunta di tecniche di intelligenza artificiale come i
problemi a vincoli (Constrained Satisfaction Problems, CSP) per l'individuazione della
struttura di una stanza indipendentemente dalla presenza di oggetti, i quali vengono
approssimati a box [16].
3.1.2.1 Acquisizione a mano
L'acquisizione manuale è il metodo di acquisizione più flessibile ma anche più lungo e
complicato. Un addetto rileva le misure degli ambienti e degli oggetti per poi riportarli
manualmente nel software di creazione del mondo virtuale.
Pur lasciando libertà e flessibilità sotto tutti gli aspetti dell'acquisizione e modellazione,
questa tecnica richiede molto tempo sia durante il sopralluogo per la raccolta delle misure
sia in fase di modellazione e inserimento dei dati essendo interamente demandata alla
manodopera umana.
3.1.2.2 I laser scanner CAM2
Figura 3.9 - I loghi della FARO e della CAM2
Figura 3.10 - Il laser scanner Focus 3D X-330 prodotto dalla FARO
I laser scanner della CAM2 (azienda del gruppo FARO Technologies Inc.) utilizzano la
tecnologia di laser scanning a triangolazione e sono quindi dotati di uno specchio che ruota
30
Rosario Santoro
Modulo offline: modellazione 3D
attorno all'asse orizzontale e che riflette di 90° il raggio laser proiettato. Oltre a ciò, il
dispositivo intero ruota lentamente intorno all'asse verticale: in questo modo il laser può
raggiungere punti in ogni direzione nell'ambiente. Le dimensioni di questo dispositivo sono
compatte (24cm x 20cm x10cm) e il peso è di 450g. Ha una fotocamera a colori da 70 Mpx
integrata e la batteria dura fino a 5 ore. I dati acquisiti sono memorizzati su una scheda SD.
È dotato di una bussola elettronica per associare dati direzionali alle scansioni, facilitando
quindi il processo di auto-registrazione (ambito GIS10). Possiede anche un altimetro che
permette di distinguere le altezze delle diverse acquisizioni (per esempio nei piani di un
edificio). Il controllo del dispositivo è via wireless LAN oppure tramite touch screen.
Un pregio di questo tipo di laser scanner e in particolare del modello X330 in Figura 3.10
è l'intervallo di distanze che può acquisire, da 60 cm a 330 m e con grande precisione.
Questi pregi sono bilanciati dallo svantaggio dell'elevato costo (nell'ordine delle decine di
migliaia di €).
Il laser scanner FARO è impiegato nel settore forense per la conservazione delle scene
del crimine e per sopralluoghi (Figura 3.11): infatti, il software SCENE della FARO che
carica le scansioni è in grado si effettuare misure precise di distanza tra due punti. Il
software è anche in grado di fondere tra loro acquisizioni in diversi punti dello stesso
ambiente.
Figura 3.11 - Un autoveicolo incidentato catturato mediante un laser scanner.
Sono indicate le posizioni in cui sono avvenute le diverse scansioni, dalla cui fusione questa immagine è
stata generata.
10
Geographic information system
31
Rosario Santoro
Modulo offline: modellazione 3D
L'acquisizione con laser scanner è costosa ma più precisa.
Figura 3.12 - Una nuvola di punti catturata mediante laser scanner rappresentante un'intersezione
stradale a livelli sfalsati
Figura 3.13 - Il risultato della fusione delle nuvole di punti catturate mediante
diverse acquisizioni con laser scanner e visualizzato nel software SCENE della FARO
32
Modulo offline: modellazione 3D
Rosario Santoro
3.1.2.3 Kinect
(a)
(b)
Figura 3.14 - Il Kinect per Windows (a) e i sensori al suo interno(b)
Il Kinect è una gamma di dispositivi prodotti dalla Microsoft per il riconoscimento del
movimento dell'utente e si prefigge lo scopo di permettere agli utenti di interagire in modo
naturale con i computer attraverso i gesti e il parlato. Il Kinect for Windows impiegato dal
candidato assieme al software di ricostruzione Skanect (paragrafo 3.1.2.4) appartiene a
questa gamma e ha al suo interno sensori audio e video (Figura 3.14b).
Per la parte audio, i sensori sono quattro microfoni disposti lungo il corpo del Kinect a
formare il cosiddetto array di microfoni: la quantità di microfoni permette sia di registrare
audio da una direzione ben precisa sia di individuare la provenienza di un suono.
La parte video prevede un sensore RGB che memorizza dati a tre canali con una
risoluzione di 1280x960 a 12 FPS11 oppure a 640x480 a 30 FPS, un emettitore di infrarossi
(IR) e un sensore IR. L'emettitore IR proietta dei raggi a luce infrarossa e il sensore IR
riceve i raggi riflessi: questi raggi vengono convertiti e la distanza con l'oggetto che li ha
riflessi interpretata. In questo modo si acquisisce un'immagine di profondità (per i dettagli si
rimanda al paragrafo 3.1.1.2).
È possibile attivare la funzione "Near Mode" che permette ai sensori luminosi di vedere
oggetti vicini anche 40 centimetri senza perdere accuratezza o precisione, con un
peggioramento graduale per distanze superiori ai tre metri.
L'SDK del Kinect for Windows, aggiornato con una buona frequenza, contiene driver,
strumenti, API, interfacce per dispositivi, ed esempi di codice per semplificare lo sviluppo
delle applicazioni per il deploy commerciale.
11
Frames Per Second
33
Rosario Santoro
Modulo offline: modellazione 3D
Questo SDK è inoltre in grado di riconoscere alcune caratteristiche umane come il
tracciamento dello scheletro (posizione e postura dell'utente), il tracciamento del volto e il
riconoscimento dei gesti e della voce. Le librerie Kinect Fusion (3.1.2.4) acquisiscono dati
del colore e della profondità di una scena durante una scansione e ricostruiscono i dati in un
modello tridimensionale. L'SDK espone i dati dell'array di sensori e fornisce agli
sviluppatori strumenti per accedere a questi dati: per esempio, è possibile accedere in
maniera estesa ai dati di profondità e all'emettitore infrarosso. L'SDK offre infine la
possibilità di integrazione con le librerie OpenCV e MATLAB.
3.1.2.4 Kinect Fusion
Le Kinect Fusion sono librerie che compongono l'SDK del Kinect for Windows: si
occupano dell'acquisizione di nuvole di punti e la loro fusione è mirata alla ricostruzione
tridimensionale di ambienti o oggetti. Ne esiste un'implementazione anche nelle librerie
PCL12 denominata KinFu (pcl.kinfu).
Il candidato ha ritenuto opportuno studiare anche questa libreria poichè è stata creata su
misura del Kinect e dunque è lo strumento ideale per sviluppare un sistema ad-hoc per
l'acquisizione di oggetti e/o ambienti, aspetto importante dell'ottica del presente lavoro di
tesi. Segue quindi l'esposizione della processing pipeline delle Kinect Fusion (con
riferimento alla Figura 3.15).
Figura 3.15 - Processing pipeline della ricostruzione tridimensionale effettuata dalle librerie Kinect
Fusion
12
Point Cloud Library
34
Rosario Santoro
Modulo offline: modellazione 3D
a) Conversione della mappa di profondità. Si converte la profondità raw dei sensori del
Kinect in profondità in virgola mobile in metri, seguita da una conversione opzionale in una
nuvola di punti orientata che consiste di punti/vertici 3D nel sistema di coordinate della
telecamera e le normali alla superficie in questi punti da utilizzare con la funzione
AlignPointClouds.
b) Calcolo della posizione della telecamera. Si calcola la posizione e l'orientamento della
telecamera rispetto ad un riferimento globale e ne si tiene traccia durante gli spostamenti del
sensore in ciascun frame servendosi di un algoritmo di allineamento iterativo, che permette
di conoscere sempre la posizione corrente del sensore relativa al frame iniziale. A tal
proposito esistono due alternative nelle Kinect Fusion. La prima è l'algoritmo
NuiFusionAlignPointClouds che può essere usato sia per allineare la nuvola di punti
calcolata dalla ricostruzione con quella della telecamera di profondità del Kinect, sia in
modalità standalone (per esempio per allineare due telecamere separate che osservano la
stessa scena). L'altro algoritmo è AlignDepthToReconstruction che fornisce risultati più
accurati di tracciamento della telecamera ma può risultare meno robusto per oggetti in
movimento nella scena. Se il tracciamento dovesse subire interruzioni è sufficiente
riallineare la telecamera con l'ultima posa tracciata.
c) Fusione dei dati di profondità. I dati provenienti dalla posizione corrente del sensore
vengono integrati in una singola rappresentazione volumetrica dello spazio. Questa
integrazione dei dati di profondità è eseguita per ciascun frame applicando una media
durante l'esecuzione per ridurre il rumore; allo stesso tempo riesce a gestire qualche
cambiamento dinamico nella scena come l'aggiunta o la rimozione di alcuni oggetti.
Osservare una superficie da punti di vista nuovi contribuisce a riempire una porzione vuota
o buco e alla continua ridefinizione con nuovi dati delle stesse superfici.
35
Modulo offline: modellazione 3D
Rosario Santoro
Figura 3.16 - La fase di raycasting13: l'intersezione delle tre frecce indica il punto di vista dell'osservatore
mentre il reticolo rappresenta i pixel del monitor.
d) Raycasting. Il volume ricostruito può subire il procedimento di raycast (Figura 3.16)
da un punto di vista e la nuvola di punti risultante può subire un processo di shading per
produrre un'immagine visibile renderizzata del volume 3D ricostruito.
Il tracciamento effettuato dalle Fusion usa solo i dati del sensore di profondità e si basa
sulla sufficiente presenza di variazioni di profondità tra un frame e il successivo in modo
tale da far corrispondere i dettagli robusti nei due frame e calcolare la differenza di
posizione. Per questa ragione il tracciamento e la ricostruzione risulteranno difficoltosi se
effettuati in ambienti spogli o privi di dettagli (come per esempio un muro completamente
bianco). Le scene ideali presentano oggetti sparsi a diverse distanze. Per mantenere un buon
tracciamento è necessario effettuare spostare o ruotare con lentezza il Kinect.
Nelle
Kinect
Fusion
sono
implementati
due
algoritmi
di
tracciamento:
AlignDepthFloatToReconstruction e AlignPointClouds. Se si sta creando un volume
di ricostruzione, la funzione AlignDepthFloatToReconstruction probabilmente eseguirà
un tracciamento migliore. D'altra parte, la funzione AlignPointClouds può essere anche
usata da sola, senza un volume di ricostruzione per allineare due nuvole di punti. È bene
notare che l'interfaccia INuiFusionReconstruction usa al suo interno la funzione
AlignDepthFloatToReconstruction .
L'algoritmo AlignPointClouds invece può fornire in output un'immagine ARGB
visibile del risultato dell'algoritmo di allineamento che può essere riutilizzata come input per
altri algoritmi di visione come segmentazione degli oggetti. I pixel in ciascuna vista durante
13
http://www.cs.berkeley.edu/~sequin/CS184/IMGS/RayCasting.JPG
36
Modulo offline: modellazione 3D
Rosario Santoro
la ricostruzione possono rientrare nella categoria degli inlier o degli outlier, in relazione al
tracciamento positivo nelle diverse scene oppure no: entrambe le categorie evidenziano i
pixel in questione con dei colori particolari.
Anche il secondo algoritmo di tracciamento AlignDepthFloatToReconstruction può
fornire in uscita un'immagine di tipo NUI_FUSION_IMAGE_TYPE_FLOAT come risultato
dell'allineamento dell'algoritmo di tracciamento della camera e che può essere processata per
creare un rendering a colori o può essere usata come input per altri algoritmi di visione come
la segmentazione degli oggetti. Questa immagine descrive quanto bene un pixel di
profondità descrive il modello di ricostruzione. Questi valori residui sono normalizzati tra -1
e 1 e rappresentano il costo/energia di allineamento per ciascun pixel. Valori di intensità
maggiori (sia positivi sia negativi) rappresentano maggiore discrepanza e valori minori
rappresentano minore discrepanza o meno informazione su quel pixel.
Il volume di ricostruzione è composto da piccoli cubi nello spazio, denominati "Voxel". I
volumi che possono essere scansionati arrivano fino a 8m3. Le risoluzioni tipiche del voxel
di un mondo reale sono 1-2mm/voxel. Una peculiarità della ricostruzione e fusione 3D è il
legame che sussiste tra la dimensione del voxel e l'estensione dell'ambiente acquisito. È
possibile
specificare
il
volume
di
ricostruzione
NUI_FUSION_RECONSTRUCTION_PARAMETERS
passando
alla
una
struttura
funzione
NuiFusionCreateReconstruction . Il numero di voxel che possono essere creati dipende
dalla quantità di memoria disponibile all'allocazione sulla macchina di esecuzione e
tipicamente si arriva a 640x640x640= 262144000 voxel creabili su un dispositivo con
1.5GB di memoria o più. L'aspect ratio di questo volume può essere arbitrario ma è
opportuno far corrispondere le dimensioni del volume del voxel a quelle della forma
dell'area nel mondo reale che si intende scansionare.
Il membro voxelsPerMeter scala la dimensione reale a cui corrisponde un voxel: per
esempio, in presenza di un volume cubico 384x384x384 vx, si può rappresentare un cubo di
3m di lato nel mondo reale se si imposta voxelsPerMeter a 128vpm14, dato che 384/128=3,
dove ciascun voxel è 3m/384=7.8mm3, oppure un cubo di 1.5m di lato se si è impostato
256vpm (384/256=1.5 e ciascun voxel occupa un volume di 1.5m/384=3.9mm3). Tale
14
Voxels Per Meter
37
Modulo offline: modellazione 3D
Rosario Santoro
combinazione di voxel nello spazio e i voxel per metro permettono di specificare
dimensione e risoluzione del volume da acquisire, ma si noti che si tratta di un tradeoff: in
altre parole, non è possibile acquisire un volume di grandi dimensioni ad alta risoluzione,
ma bisogna scegliere il punto di equilibrio più adeguato tra risoluzione e dimensione.
Questo tradeoff è generato dalle caratteristiche della macchina che esegue il processo di
ricostruzione. In particolare sulle GPU15 il massimo blocco di memoria contiguo che si può
tipicamente allocare è circa 1GB, e questo limita la risoluzione della ricostruzione
approssimativamente a 640x640x640 = 262144000vx. Similmente, sebbene le CPU abbiano
una quantità di memoria maggiore delle GPU, non viene aggirato il problema in quanto la
frammentazione della memoria heap potrebbe impedire l'allocazione di blocchi di memoria
dell'ordine del GB. Il tradeoff è quindi obbligatorio; se dovessero essere richieste sia alta
risoluzione sia dimensioni elevate, una soluzione potrebbe essere volumi multipli o
dispositivi multipli.
3.1.2.5 Skanect
Figura 3.17 - Logo dell'applicativo Skanect (ManCTL)
Skanect16 è un software creato dalla ManCTL e rilasciato il 27 gennaio 2014 sia sotto
licenza commerciale a pagamento sia in versione gratuita di prova: in quest'ultimo caso
viene limitato il numero delle facce nell'esportazione della mesh (massimo 5000 facce).
Skanect permette di collegare un dispositivo di acquisizione come il Kinect della
Microsoft (ma funziona anche con l'ASUS PrimeSense, Figura 3.2b) attraverso le OpenNI e
opera la fusione tra le nuvole di punti acquisite dalle diverse viste in tempo reale, basandosi
sulle geometrie in due acquisizioni consecutive.
La ricostruzione della mesh tridimensionale è possibile grazie alla natura dei due flussi
video acquisiti, cioè quello del visibile e una mappa di profondità a 16 bit.
15
16
Graphical Processing Unit
http://skanect.manctl.com/
38
Modulo offline: modellazione 3D
Rosario Santoro
Figura 3.18 - Skanect durante un'acquisizione in modalità "body"
La Figura 3.18 mostra un'acquisizione in atto: nella parte sinistra è mostrata la nuvola di
punti ricostruita; sulla destra i singoli output del sensore RGB e la mappa di profondità (a
colori modificati). In basso a destra invece, vengono mostrate contemporaneamente la
nuvola di punti ricostruita e la scena correntemente inquadrata: in fase di acquisizione è
opportuno fare riferimento a questa finestra in quanto comunica all'utente se le nuove
acquisizioni sono state aggiunte correttamente al modello già ricostruito oppure se Skanect
non è riuscito a seguire lo spostamento degli oggetti nella scena da un frame al successivo.
In quest'ultimo caso, la zona verde scompare e rimane in trasparenza l'ultima vista della
nuvola di punti ricostruita: sarà compito dell'utente riposizionare il dispositivo di
acquisizione in modo tale da riprendere la ricostruzione da dove si era interrotta.
È opportuno segnalare che l'interruzione della ricostruzione è tutt'altro che rara durante
un'acquisizione: infatti, lo spostamento del dispositivo è un'operazione delicata e richiede
assenza di scossoni evitando di avvicinarsi troppo agli oggetti da acquisire, poichè il sensore
di profondità ha un limite inferiore di distanza al di sotto del quale non riesce a dedurre la
posizione di un punto.
Inoltre, quando viene effettuata una ricostruzione (fusione) ad alta qualità l'attesa è molto
lunga.
39
Modulo offline: modellazione 3D
Rosario Santoro
Figura 3.19 - Le impostazioni iniziali di Skanect
Skanect permette di settare due importanti caratteristiche prima di iniziare l'acquisizione.
Con riferimento alle prime due opzioni mostrate in Figura 3.19, la prima è la modalità della
scena e la seconda la cosiddetta bounding box.
La bounding box, ovvero scatola di contenimento, è il volume del cubo che costituirà il
limite per lo spazio acquisito e il modello ricostruito: il lato di questo cubo può variare da
0.1 fino a 9 metri. Opzionalmente, è possibile raddoppiare l'altezza di questo cubo, scelta
consigliata nel caso dell'acquisizione del corpo di una persona.
Sono previste quattro diverse modalità di scena: body (corpo umano), object (singolo
oggetto), room (stanza completa) e half room (parte di una stanza). Sostanzialmente,
sussistono differenze solo tra body/object e room/half room, in quanto acquisendo un
oggetto o un corpo umano il Kinect si muove intorno all'oggetto da acquisire mentre nel
caso di una stanza il dispositivo dovrà inquadrare verso l'esterno.
Il candidato ha effettuato diverse acquisizioni di prova servendosi della combinazione
Kinect+Skanect ed è pervenuto alle seguenti conclusioni.
L'impostazione iniziale della tipologia della scena influisce molto sia sulla procedura di
acquisizione in sè per sè sia sui risultati finali della ricostruzione. Infatti, la modalità
migliore di funzionamento di Skanect è "body" (esempio nella Figura 3.25 e Figura 3.26)
40
Rosario Santoro
Modulo offline: modellazione 3D
oppure "object" in quanto riduce di molto il volume da acquisire e quindi a parità di tempo è
possibile tornare su scene già acquisite e perfezionarle aumentandone il livello di dettaglio.
Nel caso di acquisizioni di ambienti interi, il candidato ha riscontrato diversi casi in cui la
ricostruzione offline (in seguito alle acquisizioni) portava a risultati completamente estranei
alla realtà acquisita; tali occorrenze si verificavano solo con le modalità room/half room
(esempio in Figura 3.24).
Un altro aspetto da non sottovalutare è la mole di dati acquisiti. Supponendo per assurdo
che l'acquisizione di un'intera stanza venga portata a termine senza errori e con una buona
qualità, si dovrebbe gestire un modello tridimensionale di dimensioni elevate che
allungherebbe i tempi di risposta e di utilizzo di qualsiasi software di modellazione
impiegato in fase di post-processing.
Con adeguati accorgimenti la dimensione di un modello esportato con le modalità
"body"/"object" è medio-bassa.
Il candidato ha acquisito con Skanect una lampada da comodino (Figura 3.21) e un
mobile di piccole dimensioni (Figura 3.23): i modelli tridimensionali risultanti (inclusi come
game object in Unity) sono rispettivamente in Figura 3.20 (con una fonte luminosa accesa) e
Figura 3.22 ed entrambi sono stati ricostruiti selezionando il massimo della fedeltà.
A valle delle ricostruzioni si è rivelato necessario operare un post-processing sulle
rispettive mesh, il cui motivo giace nell'eccessiva dimensione dei modelli esportati che
comporta elevati tempi di attesa di generazione del modello e un notevole rallentamento di
qualsiasi programma sia nell'importazione del modello sia nell'interazione con lo stesso.
Skanect offre un'intera sezione di strumenti di post-processing che includono l'esclusione
di porzioni del modello (mediante intersezione di un piano), la semplificazione della mesh,
la chiusura delle porzioni non acquisite mediante watertighting, open e closed hull,
l'aggiunta di colore alla mesh in accordo alle viste RGB acquisite e interpolando le zone
sprovviste di colore. Queste semplificazioni hanno provveduto a ridurre drasticamente la
dimensione del modello esportato. Nella Tabella 3.2 e Tabella 3.3 sono elencate le
41
Modulo offline: modellazione 3D
Rosario Santoro
operazioni di post-processing subite dai due modelli acquisiti, la variazione della
complessità della mesh e del peso del modello .obj esportato (con texture UV17 a parte).
Tabella 3.2 - Variazione del numero di facce del modello del mobile in seguito alle operazioni di postprocessing
Operazione di post-processing
Numero di facce del
modello
Dimensione modello
.obj esportato
(ricostruzione ultimata)
5 442 230
277 MB
Simplify <8%
5 441 512
-
Fill holes - closed hull - smoothing <6cm
240 000
16 MB
La drastica riduzione del numero delle facce tra la seconda e la terza riga è dovuta ai 6cm
di limite di smussamento della mesh.
Tabella 3.3 - Variazione del numero di facce del modello della lampada in seguito alle operazioni di postprocessing
Operazione di post-processing
Numero di facce del
modello
Dimensione modello
.obj esportato
(ricostruzione ultimata)
194 547
116 MB
Sagomatura del modello con il piano
141 231
-
Simplify < 3%
100 000
-
Fill holes - opened hull - smoothing <2cm
28 719
1.8 MB
Skanect offre quattro formati di esportazione del modello acquisito: .obj, .ply, .stl, .vrml.
Per l'esportazione dei due modelli acquisiti con Skanect si è utilizzato il formato .obj con
texture UV (l'alternativa per la texture è "per-vertex").
17
Mappatura UV della texture: il procedimento mediante il quale la texture 2D viene proiettata su una
forma 3D. Si chiama UV per via delle coordinate di un punto della texture (u,v) dato che (x,y,z) sono già
utilizzati nel modello tridimensionale.
42
Rosario Santoro
Figura 3.20 - Una lampada da comodino acquisita e
inclusa nel mondo virtuale
Figura 3.22 - Il modello 3D di un mobile di piccole
dimensioni acquisito e incluso nella scena
Modulo offline: modellazione 3D
Figura 3.21 - L'oggetto
dell'acquisizione di Figura 3.20
Figura 3.23 - L'oggetto reale acquisito in
Figura 3.22
Figura 3.24 - Nuvola di punti registrata risultante dall'acquisizione in modalità "room" (visualizzata con
Blender)
43
Modulo offline: modellazione 3D
Rosario Santoro
Figura 3.25 - Nuvola di punti senza texture
risultante dall'acquisizione di un volto (Skanect in
modalità "body", visualizzata in Blender)
Figura 3.26 - Nuvola di punti in
Figura 3.25 con texture per-vertex associata
(visualizzazione in Blender)
3.1.2.6 Reconstruct Me
Figura 3.27 - Il logo dell'applicativo ReconstructMe
Reconstruct me18 è un software simile a Skanect che utilizza Kinect o Asus PrimeSense
per ricostruire ambienti 3D da nuvole di punti. L'interfaccia di quest'applicazione è molto
più semplice e non offre le stesse opzioni di Skanect sia per quanto riguarda il postprocessing sia per le opzioni di esportazione (solo .ply ed .stl). La bounding box massima è
inoltre minore di quella di Skanect, quindi un'eventuale acquisizione di una stanza sarebbe
ulteriormente penalizzata. Esistono due licenze, una commerciale a pagamento e l'altra di
prova gratuita senza limite nella mesh di esportazione ma con l'aggiunta di artefatti come
sfere colorate e il nome del software.
18
http://reconstructme.net/pricing/
44
Rosario Santoro
Modulo offline: modellazione 3D
3.1.2.7 Il progetto Matterport
Figura 3.28 - Il dispositivo di acquisizione messo
a punto dalla Matterport (prima versione)
Figura 3.29 - La seconda versione19
Il progetto Matterport prevede sia software sia hardware. La parte software consiste in
un'applicazione di fusione e ricostruzione 3D (come Skanect) da nuvole di punti acquisite
con la parte hardware, costituita quest'ultima da tre ASUS PrimeSense ognuno dotato di
sensore di profondità e sensore RGB e disposti reciprocamente ad un angolo di 120° (Figura
3.28). Questi tre dispositivi sono racchiusi in una scatola che, montata su un treppiedi, ruota
lentamente e acquisisce i dettagli dell'ambiente in cui è posizionata, in modo simile al laser
scanner FARO, con la differenza che non si tratta di laser scanning, ma di RGB+depth. È
controllabile a distanza via bluetooth e iPad con un'app dedicata e costa 4500$ (più una
quota mensile). In tempi brevi e soprattutto in modo semplice è possibile avere un modello
3D di qualità accettabile (Figura 3.30).
19
http://www.3ders.org/articles/20130202-startup-matterports-low-cost-3d-scanner-project-raises-nearly$4m.html
45
Modulo offline: modellazione 3D
Rosario Santoro
Figura 3.30 - Esempio di ricostruzione di una stanza mediante Matterport
Spostando il dispositivo in altre posizioni nello stesso ambiente è possibile acquisire
dettagli mancanti nelle precedenti acquisizioni: considerando questi spostamenti,
l'acquisizione dura venti minuti circa [17]. La ricostruzione è effettuata dal cloud Matterport
dopo l'upload dell'acquisizione.
3.1.2.8 Google Tango project
Google Tango20 è un progetto iniziato nel febbraio 2014 il cui scopo è la messa a punto di
uno smartphone Android con hardware e software dedicato alla visione artificiale ed
elaborazione delle immagini, in particolare al tracciamento della posizione del dispositivo
nello spazio tridimensionale, alla ricostruzione di una mappa dell'ambiente e, più in
generale, cerca di digitalizzare in 3D tutto quello che circonda l'utente. I suoi sensori
permettono di effettuare più di 250mila misurazioni 3D al secondo.
Questo smartphone non è attualmente in vendita ma è ancora in fase di "early
prototyping" (primo prototipo) e solo alcuni pezzi sono stati distribuiti a sviluppatori di
Università ed Enti di ricerca per studiarne applicazioni, trovare bug e contribuire alla sua
messa a punto. Il software di ricostruzione di Matterport esposto poc'anzi rientra in questi
gruppi.
Il Google Tango possiede quattro fotocamere. La fotocamera principale è da 4Mpx RGB,
dotata di flash laterale. Subito in baso è situata una camera con ottica fisheye in grado di
catturare immagini con un angolo di 180° e un altro obbiettivo che viene utilizzato per
catturare la profondità degli ambienti e oggetti. Il quarto sensore è una fotocamera frontale
20
https://www.google.com/atap/projecttango/
46
Modulo offline: modellazione 3D
Rosario Santoro
che ha un angolo di visione di 120° che ha circa lo stesso campo visivo dell’occhio umano
[18].
Figura 3.31 - Project TANGO, un prototipo di
smartphone costruito da Google per la ricostruzione
3D su dispositivi mobile
Figura 3.32 - Elaborazione artistica di
un'acquisizione con lo smartphone Google TANGO
3.1.3 La soluzione di acquisizione
3.1.3.1 Confronto fra le tecniche
Tabella 3.4 - Confronto fra le tecniche di acquisizione esposte in precedenza.
Per ciascuna cella viene espresso un giudizio sulla caratteristica basato sul colore (rosso: scarso, giallo:
accettabile, verde: ottimo) e, a seconda di quante caselle sono colorate, viene quantificata la caratteristica
(1:poco, 2:nella media, 3:molto). Per esempio, il costo delle Fusion è basso (una tacca) e questo è un bene
(verde), mentre gli strumenti di postprocessing offerti da Reconstruct me sono pochi (sempre una tacca) ma
questo è un male (rosso)
Metodo di
acquisizione
Tempo
Precisione
Costo
Distanze
Complessità
PostEsportazione
di utilizzo processing
Manuale
Skanect
Reconstruct
me
Kinect
Fusion
Matterport
Laser
scanner
47
Rosario Santoro
Modulo offline: modellazione 3D
Il confronto tra le tecniche di acquisizione presentate nel capitolo 3.1.2 è stato condotto
valutando sette diversi aspetti, ciascuno dei quali viene di seguito spiegato includendo un
commento su ciascuna delle sei tecniche candidate.

Tempo: durata del processo di acquisizione, post-processing escluso. Tutti i
dispositivi comportano un tempo di attesa praticamente simile, intorno ai venti
minuti per acquisizione dettagliata, che nel caso di dispositivi automatizzati come il
laser scanner e Matterport vengono impiegati per una rotazione completa, mentre per
gli altri metodi in cui è previsto lo spostamento del Kinect il tempo è impiegato
nell'inquadratura lenta di ogni prospettiva degli oggetti/stanze. Il metodo manuale
impiega un tempo maggiore rispetto agli altri poichè la raccolta delle misure a mano
porta via molto tempo.

Precisione: qualità del modello ricostruito a processo ultimato (post-processing
escluso). Tutti i metodi garantiscono una buona qualità di ricostruzione del modello
3D fatta eccezione per Reconstruct me e le Fusion che sono sempre accettabili ma di
qualità peggiore.

Costo: prezzo del dispositivo. Il laser scanner e Matterport svettano per l'elevato
costo mentre il metodo manuale e le Fusion non hanno un costo in quanto il primo
non prevede attrezzatura particolare e le seconde si possono scaricare gratuitamente.
Skanect e Reconstruct me si assestano a metà in quanto per l'utilizzo completo
richiedono l'acquisto di una licenza commerciale.

Distanze: massima distanza alla quale è possibile rilevare un punto (e quindi un
oggetto). Con un range che va da qualche decina di centimetro alle centinaia di metri,
la tecnica del laser scanning copre le distanze maggiori. Le stesse distanze
potrebbero essere coperte con il mero intervento umano ma è ovviamente più
difficoltoso. Il metodo Matterport ha una portata massima inferiore ma riesce con
facilità ad acquisire una stanza, anche servendosi di acquisizioni multiple fuse tra di
loro. I metodi che sfruttano il Kinect invece mostrano un basso profilo per un
problema comune alla base, vale a dire il compromesso tra la risoluzione del voxel e
la dimensione massima di un'acquisizione (come esposto in 3.1.2.4). Per questa
ragione l'estensione massima non può superare una stanza di piccole dimensioni.
48
Rosario Santoro

Modulo offline: modellazione 3D
Complessità di utilizzo: difficoltà nell'utilizzo dell'intero metodo, dall'acquisizione
all'esportazione del modello. L'acquisizione manuale dell'ambiente e degli oggetti è
un procedimento tanto lungo e faticoso quanto più complessi e vasti sono gli
ambienti e gli oggetti da acquisire. La procedura si semplifica con l'utilizzo del
Kinect e di software (Skanect/Reconstruct me/API Fusion) per la sua gestione fino a
diventare semplice come la pressione di un tasto "Avvia" nei metodi Matterport e
laser scanner.

Post-processing: quantità e utilità degli strumenti messi a disposizione dal metodo
stesso per la rifinitura del modello appena acquisito. Reconstruct me non offre alcuno
strumento di post-processing al contrario di Skanect che offre watertighting,
semplificazione della mesh con diversi metodi, colorizzazione, sagomatura del
modello e altri. Essendo librerie di programmazione, le Fusion possono
implementare e includere qualsiasi procedura di post-processing. Il laser scanning
offre sì qualche strumento ma solo nel software fornito a parte. Per il metodo
manuale, il postprocessing è tanto più facile quanto più semplice è il modello
(idealmente, un solido geometrico basilare) ma come per il laser scanner della CAM2
è necessario servirsi (ovviamente) di tool esterni.

Esportazione: quantità di formati in cui è possibile esportare il modello ricostruito.
Fatta eccezione per Matterport e il laser scanner a proposito dei quali non si dispone
di informazioni e di Reconstruct me che offre un solo formato di esportazione, gli
altri metodi offrono una buona gamma di formati. Le Fusion, trattandosi di librerie di
programmazione, offrono il massimo della libertà in quanto è possibile includere le
librerie più adatte all'esportazione e conversione dei formati (per esempio le PCL).
A valle del confronto e forte dello spirito di equilibrio pesato che caratterizza il lavoro di
un ingegnere, il candidato ritiene che la soluzione di acquisizione migliore sia composta
dalla combinazione Microsoft Kinect e Skanect e dell'acquisizione manuale. Nel dettaglio,
considerate le buone prestazioni dello Skanect in modalità "object", il Kinect verrebbe
impiegato nel progetto per acquisire ogni oggetto presente nella stanza, sia esso uno stimolo
oppure no. D'altra parte, visti i pessimi risultati di ricostruzione del Kinect quando si tratta di
acquisire un ambiente, il candidato ritiene opportuno demandare la modellazione
dell'ambiente ad un operatore umano: ciò è altresì permesso dalla semplicità geometrica
49
Rosario Santoro
Modulo offline: modellazione 3D
della modellazione di una stanza che è assimilabile ad un parallelepipedo e la cui
costruzione la si può effettuare direttamente in Unity 3D, usandolo come un programma
CAD21, a seguito di una sessione di raccolta delle misure degli ambienti. L'operatore
incaricato della costruzione della scena si occuperà, laddove necessario, della rifinitura dei
modelli 3D degli oggetti acquisiti e dell'aggiunta delle texture alle pareti (nel caso in cui per
esempio sia presente della carta da parati).
3.1.3.2 Formati di esportazione dei modelli 3D
Tenendo presente che nel progetto è previsto l'utilizzo di più applicazioni di modellazione
e motori di gioco, è opportuno valutare quali formati garantiscono la portabilità dei modelli
3D tra queste applicazioni. Vengono perciò di seguito elencati i formati di esportazione
incontrati nel corso dello studio del candidato.

OBJ: formato ASCII open, contiene il semplice elenco delle coordinate dei vertici e
la posizione UV di ciascun vertice della texture. È solitamente affiancato da altri due
file: l'.mtl che contiene informazioni sul materiale della mesh e il .png che contiene
la texture.

PLY: Polygon File Format, contiene una lista di triple (x,y,z) per i vertici e una lista
di facce descritte da indici nella lista dei vertici.

STL: formato senza unità utilizzato per la prototipazione rapida e la stampa
tridimensionale (richiede che le mesh siano chiuse e abbiano subito il watertighting).
È da preferire quando la scansione è ad alta risoluzione dato che la dimensione del
file è minore di OBJ. Definisce una superficie triangolata grezza e non strutturata
descrivendo il versore della superficie triangolare e i tre vertici secondo la regola
della mano destra.

FBX: FilmBoX, formato proprietario di Autodesk, non documentato.

3DS, MAX: formati proprietari di 3DStudio Max, è lo standard industriale de facto
(assieme a OBJ) per il trasferimento di modelli tra programmi 3D.
21
Computer Aided Design
50
Rosario Santoro
Modulo offline: modellazione 3D
Per la modellazione e rifinitura delle mesh acquisite ma anche per la conversione tra un
formato e l'altro è possibile utilizzare tool gratuiti come Blender 22 e MeshLab23 o proprietari
come 3DStudio Max e Revit (entrambi sviluppati da Autodesk).
Considerata la soluzione di acquisizione scelta (Kinect & Skanect) e il motore di gioco
Unity 3D, il formato per i modelli 3D più adatto risulta dunque essere l'OBJ con texture UV
(modalità con la quale sono stati importati i modelli della lampada e del mobile in Unity):
esso è infatti esportabile da Skanect, leggibile dai programmi di modellazione sopracitati e
importabile in Unity3D.
Per quanto attiene ai modelli a parte presenti nell'ambiente virtuale prototipale di Figura
3.51, il formato con il quale sono stati scaricati alcuni di essi è stato l'FBX.
3.2 Visori di realtà virtuale
Il candidato ha valutato diverse soluzioni per quanto riguarda la parte di output
stereoscopico per il paziente. Questo è un settore fervente e sta riscuotendo un notevole
successo sul mercato poichè ha applicazioni non solo in ambito medico, come nel presente
lavoro di tesi, ma anche nel mondo videoludico. Nuovi e migliori dispositivi sono in fase di
messa a punto, ma il candidato ne ha individuati due in particolare, i Meta AR e gli Oculus
Rift, entrambi nati come progetti sulla piattaforma di crowdfunding Kickstarter24.
3.2.1 Meta AR
Nascono come diretti concorrenti dei Google Glass e permettono di creare sia realtà
virtuale sia realtà aumentata. Sono progettati per interfacciarsi con il motore di gioco Unity
3D attraverso un apposito framework incluso nell'SDK (Software Development Kit). I Meta
AR sono in grado di riconoscere mani e di tracciare la posizione delle dita e offrono
un'interfaccia di controllo precisa basata sui gesti.
22
http://www.blender.org/
http://meshlab.sourceforge.net/
24
http://www.kickstarter.com/
23
51
Modulo offline: modellazione 3D
Rosario Santoro
Figura 3.33 - La prima versione del visore
"Meta 1"
Figura 3.34 - La seconda versione
"Meta SpaceGlasses"
Figura 3.35 - La versione più recente "Meta Pro"
Figura 3.36 - Confronto della superficie utilizzabile per la realtà aumentata
tra MetaPro e Google Glass (in alto a destra)
52
Modulo offline: modellazione 3D
Rosario Santoro
Figura 3.37 - Composizione hardware degli occhiali MetaPro
La risoluzione del display see-through in ciascuna lente è di 1280x720 pixel e garantisce
un FOV (Field Of View) di 40°. Le connessioni disponibili sono via Wireless LAN
(modalità b/g/n), Bluetooth 4.0 e USB 3.0. La tecnologia che impiegano gli occhiali Meta si
basa su sensori di profondità 3D a tempo di volo, due telecamere RGB, una IMU (Integrated
Motion Unit) a 9 assi, accelerometro, giroscopio e bussola. Il peso dei soli occhiali è di
180g. Il Meta Pro è corredato di un pocket computer con processore Intel i5 da 1,5GHz,
4GB di RAM, un SSD da 128GB e una batteria da 32Wh. Queste caratteristiche motivano il
prezzo particolarmente alto di questo dispositivo (3650$).
Va infine citato il Meta App Store25 dove vengono pubblicate le applicazioni create
appositamente per questi occhiali: degna di nota è l'applicazione di realtà aumentata in
ambito medico26, la preferita dal pubblico.
A conti fatti, i Meta sono stati progettati principalmente per la realtà aumentata e per
l'interazione con gli oggetti virtuali.
In relazione agli scopi del progetto, i Meta presentano il vantaggio del basso ingombro
una volta indossati dal paziente, aspetto assolutamente da non sottovalutare. Inoltre,
l'interazione con il mondo virtuale è facilitata sia dal punto di vista hardware sia software,
25
26
https://www.spaceglasses.com/killer_apps
https://www.spaceglasses.com/applicants/131
53
Rosario Santoro
Modulo offline: modellazione 3D
poichè esiste già un'API (Application Programming Interface) per il riconoscimento dei gesti
dell'utente: ciò permetterebbe di fare a meno di hardware esterno come il Leap Motion
(paragrafo 3.3). La presenza di un piccolo sistema audio solleva dall'obbligo di procurarsi
delle cuffiette.
Gli svantaggi, tralasciando il costo, sono invece la scarsa immersività e minore praticità
di implementazione di una soluzione di realtà aumentata: infatti, una realtà completamente
virtuale dà maggiore libertà e semplicità d'implementazione al programmatore di quel
mondo rispetto alla soluzione aumentata poiché non vi è bisogno di interfacciarsi in tempo
reale con il mondo esterno. Un altro punto a sfavore è la regolazione della luce: se nel
mondo virtuale si volesse simulare una riduzione della quantità di luce in una stanza, con un
dispositivo come i Meta risulterebbe impossibile, poiché la luminosità dell'ambiente
continuerebbe ad essere percepita dal paziente interferendo con la misurazione dei parametri
vitali. Infine, trattandosi di realtà aumentata, c'è bisogno che il paziente si trovi fisicamente
nell'ambiente che si intende riqualificare.
3.2.2 Oculus Rift
Figura 3.38 - Prima versione del development kit dell'Oculus Rift, il visore di realtà virtuale
impiegato dal candidato per il test
L'Oculus Rift è un visore di realtà virtuale prodotto dalla Oculus VR, compagnia
californiana fondata da Palmer Luckey, nata da un crowdfunding su Kickstarter, mediante il
quale raccolse 2.4 milioni di dollari a fronte dei 250mila richiesti. Ebbe da subito l'appoggio
di compagnie di sviluppo di videogiochi come Valve, Epic Games e Unity.
L'Oculus Rift permette l'head tracking a 360° con una latenza sufficientemente bassa
usando una tecnologia di tracking proprietaria, permettendo così di guardarsi intorno come
54
Rosario Santoro
Modulo offline: modellazione 3D
nella vita reale. Ogni minimo movimento della testa è tracciato in tempo reale creando
un'esperienza naturale e intuitiva.
In maniera dissimile dalla stereoscopia su un televisore o in un film, ciò è ottenuto
presentando immagini uniche e parallele a ciascun occhio. Questo è lo stesso modo
mediante il quale gli occhi umani percepiscono le immagini del mondo, creando
un'esperienza molto più naturale e confortevole. L'Oculus Rift permette un'esperienza di
realtà virtuale di alto livello ad un prezzo accessibile: è stato infatti progettato anche per
essere quanto più possibile confortevole e leggero per lunghe sessioni di gioco. Il suo peso è
di 370 grammi circa, simili ad un paio di occhiali da sci pesanti. Il campo visivo è ampio
approssimativamente 110°, valore raggiunto deformando allungamento il mondo virtuale
oltre la visione periferica. La combinazione di un campo visuale ampio, dell'head tracking e
della stereoscopia 3D crea un'esperienza di realtà virtuale immersiva.
L'SDK27 dell'Oculus include integrazioni out-of-the-box per l'Unreal Development Kit
(link), Unreal Engine 4 e Unity 4 che facilitano lo sviluppo di applicazioni di realtà virtuale.
Al momento i sistemi operativi supportati sono Windows, Mac OS X e Linux.
Il visore del Development Kit 1 (Figura 3.38), del costo di 300€, è dotato di tre diverse
paia di capsule lenticolari intercambiabili a seconda del grado di miopia del giocatore (A, B,
C, rispettivamente per miopia nulla, leggera e avanzata).
Il visore necessita di alimentazione esterna a 5V CC e sulla scheda sono presenti ingressi
DVI, HDMI e USB mini. Per i primi due collegamenti, è come aver collegato alla propria
macchina un proiettore o un secondo monitor; il collegamento USB invece è necessario per
interfacciare il proprio ambiente di sviluppo VR con il dispositivo e poterne fruire senza
dover necessariamente esportare.
Uno svantaggio dell'Oculus Rift è la risoluzione non particolarmente elevata del display a
cristalli liquidi (LCD), dettaglio di cui ci si accorge una volta indossato il visore, considerata
la distanza dei piccoli schermi dagli occhi (si riescono a distinguere i singoli pixel). Inoltre,
la frequenza di aggiornamento degli schermi è sì buona ma purtroppo non elevatissima e ciò,
dopo un utilizzo più o meno lungo a seconda dell'utente che lo indossa, può provocare
fastidio.
27
Software Development Kit
55
Modulo offline: modellazione 3D
Rosario Santoro
Ad ogni modo non ne risentono l'immersività e l'esperienza di realtà virtuale che
rimangono buone, considerata la precisione e responsività dell'head tracking.
Il terzo e ultimo modello in fase di studio e sviluppo è il prototipo Crystal Cove (Figura
3.39), presentato al CES 2014 di Las Vegas, che garantisce di eliminare i difetti di cui
sopra[19]. Infatti, la latenza è stata ridotta di molto e la risoluzione e definizione dei display
OLED da 5,6 pollici con risoluzione 1920x1080 (16:9) aumentano ancora di più l'esperienza
di realtà virtuale. Inoltre, è stato aggiunto anche il tracciamento della posizione della testa
dell'utente: questo particolare permette di rilevare piccoli spostamenti della testa (come
sporgersi da un balcone).
Figura 3.39 - La seconda versione, il prototipo
Crystal Cove, presentato al CES di Las Vegas 201428
Figura 3.40 - Un particolare della Figura 3.39
I punti bianchi sul visore in Figura 3.39 servono a individuare con maggiore precisione i
movimenti dell'utente considerando non solo la testa ma anche tutto il corpo, mediante una
piccola telecamera ("EyeToy") disposta di fronte.
Figura 3.41 - Output su schermo delle due immagini
28
Foto: Maurizio Pesce - wired.it
56
Modulo offline: modellazione 3D
Rosario Santoro
stereoscopiche proiettate all'interno dell'Oculus Rift
A marzo 2014 l'intera compagnia è stata acquisita da Facebook Inc. al prezzo di 2
miliardi di dollari [20].
3.3 Leap Motion
Il Leap Motion traccia entrambe le mani e tutte e dieci le dita con precisione al punto e ad
alta velocità.
Figura 3.42 - Il Leap Motion
Figura 3.43 - L'interno del Leap Motion: in rosso sono cerchiati i due sensori infrarosso,
in azzurro i tre emettitori infrarosso
57
Modulo offline: modellazione 3D
Rosario Santoro
Figura 3.44 - Volume visibile e utilizzabile del Leap Motion
Il dispositivo ha un raggio d'azione come in figura: 120° (avanti e indietro) intorno alla
normale al dispositivo e 150° lateralmente, sempre rispetto alla normale. Lungo tali
direzioni la distanza massima alla quale è rilevabile una mano è 61 cm.
Il Leap Motion permette una nuova dimensione di gioco ma può anche essere utilizzato
per interagire in modo innovativo con applicazioni come Google Earth e di disegno in
generale. In alternativa è possibile ricercare un'applicazione in particolare nel negozio online
dedicato al Leap Motion, l'App Leap29. Il costo del dispositivo è di 80 $ (marzo 2014).
Tale rilevamento è permesso attraverso tre illuminatori infrarossi e ciò presenta vantaggi
come l'alimentazione via USB (basso assorbimento di potenza)
ma anche svantaggi:
trattandosi di luce emessa e riflessa non può occorrere riflessione se le due mani sono
disposte in modo allineato rispetto al Leap perchè quella più in basso schermerebbe dalla
luce infrarossa la mano più lontana.
29
https://airspace.leapmotion.com/
58
Modulo offline: modellazione 3D
Rosario Santoro
Figura 3.45 - La modellazione delle mani e delle dita mediante Leap Motion.
Nel progetto il Leap Motion può essere utilizzato in due modalità diverse. La prima
prevede che il dispositivo sia adagiato su un ripiano di fronte all'utente e ne rilevi il
movimento delle mani sopra di esso (utilizzo canonico). La seconda invece è più audace e
interattiva in quanto prevede che il Leap Motion sia attaccato solidalmente alla parte
anteriore dell'Oculus Rift (Figura 3.46).
Figura 3.46 - Il Leap Motion montato sulla parte anteriore dell'Oculus Rift
In questa configurazione, c'è l'importante vantaggio di avere le proprie mani sempre nel
campo visivo del Leap Motion e quindi non si è vincolati ad una certa posizione ma le
proprie mani saranno visibili finchè l'utente effettua movimenti con le mani di fronte al
visore (e al Leap).
59
Rosario Santoro
Modulo offline: modellazione 3D
3.4 Creazione dell'ambiente virtuale
3.4.1 Unity 3D
Lo sviluppo di giochi per computer e, più in generale, di ambienti virtuali interattivi e
navigabili è passato nel tempo dall'essere un'esclusiva delle grandi aziende di sviluppo alla
disponibilità per l'utente comune che può ora disporre di piattaforme di sviluppo di giochi
come Unity 3D.
Figura 3.47 - Il logo del motore di gioco Unity 3D
Figura 3.48 - L'interfaccia utente di Unity 3D durante lo sviluppo di un ambiente
Unity 3D è uno strumento di authoring integrato per la creazione di videogiochi 3D.
Attualmente supporta lo sviluppo solo su Windows e iOS ma le opzioni di esportazione sono
60
Modulo offline: modellazione 3D
Rosario Santoro
numerose e includono Windows, Linux, Iphone, Google Android, Nintendo Xbox 360, Sony
Playstation 3 e anche un semplice browser dotato del plugin Unity 3D player.
Unity 3D è rilasciato con due tipi di licenze: una licenza pro a pagamento (mensile) che si
può provare gratuitamente per un mese e una licenza free senza limiti di tempo ma con
l'inibizione di alcune funzionalità come la proiezione delle ombre, l'importazione dei
pacchetti per le superfici d'acqua e l'interfacciamento con l'Oculus Rift.
Gli script che è possibile associare ad un game object possono essere scritti in JavaScript,
C# e Boo30.
Un game object in Unity è una qualsiasi entità rappresentabile nella scena: un cubo, una
luce, un piano, un modello 3D importato sono tutti esempi di game object. Ad un game
object può essere associata una mesh, una texture, un materiale e, più in generale, una
componente. Qualsiasi game object ha la componente "transform" che conserva
informazioni sulla posizione nello spazio rispetto ad un riferimento fisso della scena, sulla
rotazione e sulla scala (dimensione).
Una componente agganciabile può essere anche uno script scritto in uno dei linguaggi
indicati poc'anzi.
Figura 3.49 - La componente dello script StimulusCommon
di un gameObject trattato come stimolo.
Per esempio nel progetto ogni game object che rappresenta uno stimolo ha uno script
"StimulusCommon" associato (Figura 3.49).
Per quanto riguarda l'interfacciamento con il visore virtuale Oculus Rift, è necessario
scaricare un plugin gratuito dal sito degli sviluppatori di Oculus Rift (dopo essersi
registrati31): questo plugin sarà un file ".unitypackage" che verrà importato in Unity 3D e
metterà a disposizione i game object appropriati per la modellazione ed esportazione con il
visore Oculus (come per esempio la doppia telecamera per la stereoscopia). Ad importazione
30
Boo è un linguaggio di programmazione orientato agli oggetti, a tipi statici, general-purpose che cerca di
fare uso del supporto della Common Language Infrastructure per Unicode, l'internazionalizzazione e le web
application. Utilizza una sintassi ispirata a Python e tiene in considerazione l'estensibilità del linguaggio e del
compilatore.
31
https://developer.oculusvr.com/?action=dl
61
Rosario Santoro
Modulo offline: modellazione 3D
avvenuta, si aggiungerà un menu "Oculus" nell'editor Unity attraverso il quale gestire le
build del progetto e aggiungere i prefab giusti.
Il prefab da aggiungere è OVRPlayerController composto da una forward direction (la
direzione in cui è rivolto il personaggio) e da un OVRCameraController che contiene le due
telecamere per la visione stereoscopica (leftCamera e rightCamera).
3.4.2 Le classi
Alcune delle classi codificate dal candidato sono derivate da una classe di Unity
denominata MonoBehaviour (nel package UnityEngine, di cui va segnalato l'utilizzo in ogni
file sorgente C#). Tutti gli script che divengono componenti di un game object dovrebbero
essere derivati da MonoBehaviour, poichè offre un'interfaccia per accedere all'esecuzione
della scena, ai suoi elementi e ai game object. Per fare un esempio, i metodi più
frequentemente reimplementati di quest'interfaccia sono Awake(), Start(), Update(),
onDestroy() e vengono richiamati in precise circostanze durante l'esecuzione: Awake viene
eseguita all'avvio dell'eseguibile della scena, Start all'istanziamento del game object cui è
associato lo script, Update è richiamato ad ogni frame e onDestroy alla distruzione del game
object.
3.4.2.1 Commpack
La classe CommPack svolge le stesse funzioni della sua omonima lato Qt. Si rimanda
dunque al paragrafo 4.1.3.4. L'unica differenza è nella lista degli stimoli, che è una List di
StimulusCommon.
3.4.2.2 EventManager
La libreria riutilizzata per la gestione del sistema event-oriented: contiene metodi per il
dispatching degli eventi e per l'aggiunta e rimozione dei listeners.
3.4.2.3 Gui
Il file gui.cs contiene la classe Gui che si occupa dell'interfaccia grafica e
dell'inizializzazione dell'ambiente virtuale istanziando la classe che gestisce la connessione
TCP, passandole l'indirizzo IP del server e la porta. Va notato che, per ora, questi parametri
sono hard-coded nel programma (in quanto assegnate nel codice): in realtà questi parametri
andrebbero specificati all'avvio dell'eseguibile già esportato, per esempio passandoli
62
Rosario Santoro
Modulo offline: modellazione 3D
attraverso la CLI32 oppure scrivendoli in appositi campi mostrati all'avvio della scena
virtuale in una maschera, proprio come un menu di gioco.
L'oggetto di classe Gui rimane poi in un ciclo infinito che prevede la ricezione di dati dal
server e il loro dispatching sottoforma di eventi attraverso il metodo TriggerEvent()33.
Questo ciclo infinito è eseguito in un altro thread attraverso la chiamata a RunAsync della
libreria Loom, altrimenti la scena di gioco sarebbe stata inservibile in quanto sempre
bloccata con la ricezione sincrona di dati su socket TCP.
3.4.2.4 NetManager
Si occupa della connessione e disconnessione del client al server e della trasmissione e
ricezione dei dati. La ricezione dei dati è effettuata con un metodo sincrono poichè il
chiamante di questo metodo è già in un thread secondario: diversamente dal Qt che offre un
metodo sul socket TCP per la ricezione di un'intera riga di caratteri, in C# l'unico metodo
per la lettura di dati da stream TCP richiede un parametro in ingresso che specifichi quanti
byte leggere dal socket. Non disponendo a priori di quest'informazione, il candidato ha
scelto di acquisire un byte (un char) alla volta finchè non venga incontrato il carattere di line
feed "\n" e aggiungere man mano questi byte ad una lista dinamica: alla ricezione del line
feed, la lista viene copiata in un vettore di byte e poi convertita in stringa ASCII. Sarà
ovviamente premura del server evitare che nella stringa JSON inviata siano presenti dei
caratteri di line feed all'infuori di quello finale.
3.4.2.5 RVEventObj
Contiene le stringhe statiche di tutti gli eventi possibili, come "audio" e "solid".
3.4.2.6 StimulusCommon
La differenza principale nella progettazione delle classi lato Unity e lato Qt giace
nell'assenza della derivazione dei singoli stimoli da un'unica classe Stimulus (come descritto
in 4.1.3.6) poichè i linguaggi C++ e C# non lasciano al programmatore le stesse libertà. In
particolare, la differenza è nel polimorfismo a runtime, limitato al solo downcast in C#.
Si consideri il seguente codice.
32
Command Line Interface
In C# i nomi dei metodi iniziano per convenzione con la lettera maiuscola come per le classi,
contrariamente a quanto ci si aspetterebbe.
33
63
Rosario Santoro
Modulo offline: modellazione 3D
Stimulus* stimolo;
Solid* solido = new Solido("cubo");
stimolo = solido;
L'ultima riga non costituisce errore in C++ poichè Solid è una classe derivata da Stimulus
e il C++ supporta il polimorfismo a runtime in entrambe le direzioni.
Solid* solid = (Solid*) (getStimuli()[i]);
Il metodo "getStimuli()" restituisce la QList (gergo Qt) di tutti gli stimoli. Tale lista è
stata dichiarata come "QList<Stimulus*>" e può contenere riferimenti a Solid, Light e
Audio senza che ciò costituisca un errore, trattandosi di classi derivate da Stimulus stesso.
In C# invece il polimorfismo a runtime è supportato solo nella direzione di
generalizzazione e non in quella di specializzazione: in altre parole è possibile trattare un
oggetto Solid come se fosse uno Stimulus, ma il cast di uno Stimulus in Solid o altra classe
derivata genera un eccezione a runtime di tipo "unsafe cast".
Di conseguenza, nella struttura delle classi lato Unity il candidato ha dovuto eliminare la
differenza tra uno stimolo generale e gli stimoli concreti implementando una sola classe
(StimulusCommon) che abbia al suo interno l'unione degli insiemi delle proprietà (e dei
metodi di accesso) di tutti gli stimoli previsti.
3.4.3 L'architettura event-oriented
Affinchè i valori delle nuove proprietà specificate via JSON arrivino ai rispettivi stimoli,
il candidato ha scelto l'adozione di un'architettura orientata agli eventi che prevede un
singolo dispatcher degli eventi ed n listener, ovvero tutti i game object corrispondenti agli
stimoli. I listener sono raggruppati per tipo di evento, corrispondente al tipo di stimolo
(solid, audio, light, ...).
Le classi afferenti a quest'architettura event-oriented sono state create da Dustin
Andrew34 nel 2012 e rilasciate sotto licenza GNU GPL, nel rispetto della quale vengono
riutilizzate in questo contesto.
Il funzionamento di quest'architettura è suddiviso in cinque diverse fasi.
1. Inizializzazione dell'architettura. In Unity si crea un game object vuoto e gli si
aggiunge come componente lo script C# "EventListener". Si estende la classe
34
http://www.dustinandrew.me/
64
Modulo offline: modellazione 3D
Rosario Santoro
"CustomEvent" personalizzandola con le stringhe identificative dei diversi tipi di
evento previsti (nel progetto, "RVEventObj").
2. Ricezione del messaggio. Si riceve il messaggio JSON con il metodo
NetManager.rx() e ne si crea un oggetto di classe CommPack da passare al
metodo TriggerEvent(CommPack).
3.
Generazione dell'evento. All'interno del metodo TriggerEvent si crea l'evento
come oggetto di classe RVEventObj e ne si avvalorano il tipo e le proprietà.
Quest'oggetto viene poi inviato a tutti i game object già in ascolto tramite il
metodo EventManager.instance.dispatchEvent(RVEventObj) .
4.
Iscrizione del listener. Nel metodo Start() della classe StimulusCommon ogni
game object si mette in ascolto del tipo di evento appropriato servendosi del
metodo
EventManager.instance.addEventListener(string,
gameObject, callBack): il primo parametro è il tipo di evento (in accordo al
punto 1), il secondo è il game object in questione (una sorta di "this") e il terzo è
la funzione di callback da chiamare alla ricezione dell'evento. La funzione di
callback
dovrà
avere
la
seguente
firma:
public
void
CallBackFunc(RVEventObj) .
5.
Esecuzione delle modifiche. All'interno della suddetta funzione si effettuerà un
controllo sull'id a cui l'evento si riferisce: se coincide con l'id del game object
che ha ricevuto l'evento allora si assegnano le varie proprietà.
La struttura di Unity, inoltre, impedisce che thread secondari abbiano permessi di
modifica dei game object, operazione a disposizione solo del thread principale del gioco.
Ciò rappresenterebbe un problema in quanto la ricezione dei dati JSON in rete avviene in un
thread separato da quello principale per ovvi motivi di continuità dell'esecuzione e
disponibilità dell'interfaccia utente.
Il candidato ha ovviato a questo problema servendosi della libreria Loom35 suggerita
nella documentazione ufficiale di Unity. Loom è tornata utile sostanzialmente in due
evenienze nel contesto del presente progetto: per eseguire operazioni in modo asincrono e
35
http://unitygems.com/threads/
65
Rosario Santoro
Modulo offline: modellazione 3D
per accodare operazioni sul thread principale. Rispettivamente questi due compiti sono
svolti dalle chiamate
Loom.RunAsync(() => {...});
Loom.QueueOnMainThread( () => {...});
La notazione tra parentesi degli argomenti è detta funzione lambda. Sulla destra
dell'operatore lambda ("=>") c'è il corpo della funzione che si riferisce ai parametri passati in
ingresso sulla parte sinistra dell'operatore lambda (in questo caso sono assenti).
3.4.4 La descrizione XML della scena
L' eXtensible Markup Language è un linguaggio di markup creato nel 1998 il cui scopo è
lo scambio e l'interusabilità di documenti strutturati e l'estendibilità. È basato su Unicode ed
è platform independent. I principali vantaggi derivanti dall'utilizzo di questo formato sono
nell'interscambiabilità dei documenti, la struttura ad albero navigabile e la leggibilità sia da
macchine sia da umani. Le sue alternative sono JSON e YAML. XML è un linguaggio di
markup da estendere creando adeguati elementi, attributi e valori. Nel contesto del progetto
è stato utilizzato come mezzo per descrivere la composizione della scena e in particolare gli
stimoli e le rispettive proprietà modificabili.
La GUI Qt e il mondo virtuale sono applicativi indipendenti che comunicano solo durante
l'esecuzione via TCP. Concettualmente però il mondo modellato al quale entrambi si
riferiscono è lo stesso: questo mondo viene creato in Unity 3D e dunque la componente
Unity lo conosce a priori ma lo stesso non avviene per l'interfaccia grafica Qt di modifica.
Per questo motivo si è rivelato necessario un modo per descrivere la composizione del
mondo virtuale al Qt.
Le alternative prevedevano una descrizione comunicata tramite un handshake applicativo
via TCP oppure tramite file caricato manualmente nell'interfaccia Qt dall'operatore. I formati
candidati erano l'XML o sempre il JSON.
Il candidato ha preferito usare entrambi questi formati nello sviluppo del sistema in modo
tale da non precludersi alcuna strada negli sviluppi futuri: il formato JSON è stato adottato
per la formattazione della comunicazione tra GUI Qt e viste Unity a runtime (si rimanda al
paragrafo 4.2.4) mentre l'XML è stato scelto per questa fase prettamente descrittiva.
66
Modulo offline: modellazione 3D
Rosario Santoro
Bisogna tener presente che questa descrizione non riguarda l'intera composizione del
mondo virtuale ma soltanto gli oggetti che possono essere modificati e che possono aver
ripercussioni sui parametri vitali del paziente: a questi oggetti ci si riferirà con il termine
"stimolo". Dunque, questo file XML è sostanzialmente un elenco di entità modificabili
corredate ciascuna dell'elenco di proprietà modificabili, come dimensione, posizione,
rotazione, colore e così via. Il Listato 3.1 ne è un esempio.
Listato 3.1 - Esempio di descrizione XML degli stimoli di una scena
<stimuli>
<stimulus>
<id>cubo01</id>
<type>solid</type>
<editable property="pos">
<x>3</x> <y>2</y> <z>3</z>
</editable>
<editable property="rot">
<x>0</x> <y>0</y> <z>0</z>
</editable>
<editable property="siz">
<x>1</x> <y>1</y> <z>1</z>
</editable>
<editable property="col">
<r>200</r> <g>0</g> <b>0</b> <a>1</a>
</editable>
</stimulus>
<stimulus>
<id>comodino01</id>
<type>light</type>
<editable property="pow">
150
</editable>
<editable property="pos">
<x>4</x> <y>1</y> <z>5.4</z>
</editable>
<editable property="col">
<r>150</r> <g>150</g> <b>0</b> <a>1</a>
</editable>
<editable property="isIn">
1
</editable>
</stimulus>
...
</stimuli>
La struttura ad albero utilizza un nodo radice di nome "stimuli" i cui diretti discendenti
sono tutti e soli "stimulus". Ciascuno degli "stimulus" rappresenta uno stimolo e ha almeno
67
Rosario Santoro
Modulo offline: modellazione 3D
un identificativo "id", un tipo "type" e una proprietà modificabile "editable" non vuota. Il
contenuto di ciascun "editable" varia a seconda del valore del campo "property" del tag
editable.
Considerando il Listato 3.1, vengono descritti due stimoli. Il primo è un solido
identificato dall'etichetta "cube01" di cui è permessa la modifica di posizione, rotazione,
dimensione e colore. Inizialmente questo solido ha posizione (3,2,3), rotazione (0°,0°,0°),
dimensione 1x1x1 e colore (200,0,0,1) nel formato RGBA36. Il secondo stimolo è una luce
di nome "comodino01" ed espone la modifica della sua potenza luminosa (l'unità di misura
sottintesa è Watt), posizione, colore e se si tratta di una luce artificiale o naturale (isInner):
inizialmente la luce è nella posizione (4,1,5.4), ha un colore sulle tonalità medie del giallo
(150,150,0,1) ed è una luce artificiale con potenza 150W.
Non è necessario esporre tutte le possibili proprietà per ciascuno stimolo. Può infatti
essere descritta una configurazione particolare in cui un solido è compreso tra due mobili e
in questo caso rotazione e dimensione potrebbero essere disattivate e mantenute costanti ai
valori imposti dall'operatore in fase offline, per evitare collisioni tra i diversi corpi rigidi;
oppure, nel caso di una luce, può essere modificabile esclusivamente il colore trattandosi per
esempio di un lampadario.
Questo file così formattato, viene caricato nell'interfaccia grafica Qt (si rimanda al
paragrafo 4.1.4).
3.4.5 La doppia visualizzazione
Data l'architettura del sistema, il candidato ha ritenuto opportuno fornire una visuale del
mondo anche all'operatore. Infatti la vista dell'Oculus Rift durante l'esecuzione occupa uno
schermo intero e comunque prevede la visualizzazione di entrambe le viste (sinistra e destra)
nella stessa schermata: questo è ovviamente scomodo per l'operatore.
Per questo motivo oltre alla normale visualizzazione stereoscopica per Oculus Rift, il
candidato ha previsto un ulteriore tipo di esportazione dell'ambiente virtuale in una finestra
normale, senza visualizzazioni stereoscopiche. Questa vista alternativa è stata creata per
fornire all'operatore dell'interfaccia di controllo del mondo virtuale un'anteprima della
configurazione del mondo prima di sottoporla al visore del paziente.
36
Red, Green, Blue, Alpha
68
Rosario Santoro
Modulo offline: modellazione 3D
Durante la progettazione si era pensato di sfruttare l'esportazione su browser della scena
Unity 3D e ciò avrebbe permesso l'inclusione e visualizzazione della scena RV
nell'interfaccia di controllo stessa attraverso l'utilizzo di una classe particolare offerta dal Qt,
la QWebView. Questa ipotesi è stata scartata poichè Unity 3D impedisce di aprire, chiudere
e gestire socket TCP quando si sceglie l'esportazione della scena per browser: l'unico
meccanismo di comunicazione di rete permesso in questo caso è la Remote Procedure Call
(RPC). Ciò giustifica la scelta di esportare l'anteprima per l'operatore come eseguibile
standalone che mostrasse la scena in una finestra a parte.
Considerando inoltre che lo scopo di questa visualizzazione alternativa è di fornire
un'anteprima, il candidato ha pensato di lasciare a discrezione dell'operatore di commutare
tra lo stesso punto di vista del paziente, aggiornato in tempo reale da uno stream dati TCP
dalla vista con il visore, e un punto di vista completamente mobile che permetta all'operatore
di cambiare posizione e osservare il mondo da altre posizioni oltre a quella correntemente
occupata dal paziente.
Ad ogni modo le differenze tra le due tipologie di esportazioni sono poche e riguardano
principalmente due aspetti: i dettagli delle connessioni di rete e l'assetto delle telecamere. A
seconda del tipo di visualizzazione la connessione di controllo degli stimoli va stabilita su
porte diverse (6001/6002, cfr. Figura 2.2) e per la connessione dello stream della posizione
del paziente la vista stereoscopica produrrà il flusso TCP mentre la vista anteprima lo
consumerà (in alternativa può essere usato il meccanismo delle RPC). Per quanto riguarda la
telecamera, per la natura della visione stereoscopica (si veda paragrafo 3.1.1.1) devono
esserci due viste differenti e distanziate e orientate in modo opportuno piuttosto che una
singola telecamera che inquadri in prospettiva la scena. In Unity 3D ciò comporta l'aggiunta
di una seconda telecamera per l'inquadratura, costituendo così una left-camera e una rightcamera, una per ciascun occhio; inoltre per l'interfacciamento con l'Oculus Rift, si importa
un plugin dedicato che aggiunge non solo il game object della suddetta telecamera
composita ma anche degli script di controllo del movimento della testa del giocatore
attraverso accelerometri, bussola e giroscopio.
Dal lato dell'implementazione è sia possibile scegliere a compile-time che tipo di scena
esportare sia a run-time, aggiungendo un parametro booleano passato via shell che indica se
costruire una scena stereoscopica o meno. In fase di inizializzazione verranno costruiti gli
oggetti adatti.
69
Rosario Santoro
Modulo offline: modellazione 3D
3.5 I tipi di oggetto modificabili
Gli oggetti inclusi nella scena virtuale che hanno una o più proprietà esposte a modifica
da parte dell'operatore sono definiti "stimoli". Correntemente, il candidato ha implementato
tre tipi diversi di stimoli: la luce, un corpo solido e una fonte sonora.
Le proprietà modificabili di una fonte luminosa (Light) sono la posizione nello spazio, il
colore della luce emanata (utile per fini cromoterapeutici), se si tratta di una fonte luminosa
interna o esterna (cioè, una lampadina o l'illuminazione pubblica) e l'intensità luminosa
espressa in Watt.
Un corpo solido (Solid) è sostanzialmente qualsiasi oggetto con una mesh all'interno della
scena tridimensionale. Nell'ottica del progetto, potrebbe trattarsi di un quadro, una porta, una
poltrona. Di tale oggetto è possibile modificare posizione, rotazione, dimensioni e la tinta
della texture37.
Una fonte sonora (Audio) permette di modificare la propria posizione, intensità del suono
riprodotto e l'indicazione di quale file riprodurre. Inizialmente si era pensato di specificare
direttamente dall'interfaccia operatore in Qt (attraverso un messaggio di commit delle
modifiche) il percorso del file audio da riprodurre, ma ciò avrebbe obbligato l'operatore a
conoscere la struttura delle directory nel file system dei rispettivi client (a parte ovviamente
la configurazione in cui un visualizzatore è in esecuzione sul localhost), accoppiando in
modo eccessivo ed inopportuno client e server. La soluzione scelta e implementata è stata
invece una combo box (menù a tendina) nell'interfaccia operatore attraverso la quale
scegliere un suono tra quelli disponibili: questo elenco verrà popolato in fase di lettura del
file XML di configurazione del mondo, in cui si conosceranno a priori i suoni disponibili.
Per i nuovi stimoli e per le nuove proprietà di stimoli esistenti in fase di progettazione, si
rimanda alla sezione 5.1.
37
Texture: i dettagli, un'immagine di superficie o un colore associato a superfici generate al computer o ad
un modello 3D.
70
Rosario Santoro
Modulo offline: modellazione 3D
3.6 Prototipo dell'ambiente virtuale
Figura 3.50 - Il primo prototipo di ambiente di test. Si noti in basso a destra l'interfaccia operatore in
funzione, mentre nel riquadro in alto a sinistra è riportato (per ragioni di debug) il messaggio JSON ricevuto.
In Figura 3.50 è rappresentato il primo ambiente di test creato dal candidato. L'obiettivo
era evidentemente la semplicità e gli unici due stimoli controllabili erano un cubo e una
fonte luminosa di tipo puntuale38. Nella stessa scena, per ragioni di debugging, viene
visualizzato in una textbox l'intero messaggio JSON ricevuto.
Dopo aver affinato le conoscenze del motore Unity 3D ed essersi procurato una certa
quantità di modelli tridimensionali da includere nella scena, il candidato ha elaborato la
versione migliorata dell'ambiente di test (Figura 3.51).
38
Il tipo "Point" è una fonte luminosa isotropa.
71
Modulo offline: modellazione 3D
Rosario Santoro
Figura 3.51 - La versione ufficiale dell'ambiente di prova
Questo ambiente virtuale è stato composto servendosi di modelli 3D scaricati
gratuitamente da alcuni negozi online39 e di due oggetti acquisiti dal candidato, trattati nel
paragrafo 3.1.2.4 (Figura 3.20 e Figura 3.22).
Gli stimoli presenti in questa scena sono otto:

Tre cubi colorati in blu, rosso e nero (tipologia di stimolo: "solid").

Tre fonti luminose di tipo "spotlight" che proiettano cioè un cono di luce, posizionate
nella lampada azzurra sul tavolo a sinistra, nella lampada da soffitto centrale e nello
schermo del computer portatile sulla scrivania dall'altra parte della stanza (tipologia
di stimolo: "light").

Due fonti sonore: una canzone proveniente dal computer e il ticchettio delle lancette
dall'orologio a parete (visibile in Figura 3.52) (tipologia di stimolo: "audio").
39
Come http://3dexport.com/ .
72
Rosario Santoro
Modulo offline: modellazione 3D
Figura 3.52 - Particolari dell'ambiente virtuale in Figura 3.51
73
Modulo online: controllo della realtà virtuale
Rosario Santoro
4 MODULO ONLINE:
CONTROLLO DELLA
REALTÀ VIRTUALE
4.1 L'interfaccia operatore
4.1.1 Il Qt Creator
Figura 4.1 - Il logo delle librerie Qt
Figura 4.2 - Il logo della Nokia, contesto nel
quale sono state sviluppate le librerie Qt
Figura 4.3 - Il logo della Digia, attuale
proprietaria del progetto Qt
Il framework Qt permette uno sviluppo multi piattaforma, è principalmente utilizzato per
la creazione di interfacce grafiche ed è scritto in C++.
74
Rosario Santoro
Modulo online: controllo della realtà virtuale
Lo sviluppo del framework iniziò nel 1991 ad opera della Quasar Technologies in
Norvegia. Successivamente fu rinominata in Trolltech e acquisita dalla Nokia che ne
sponsorizzò lo sviluppo. Nel 2012 la Digia acquistò il progetto.
Attualmente il Qt è disponibile sia in forma closed source con una licenza commerciale,
sia con una licenza open-source sviluppatore scaricabile liberamente.
Il Qt Creator è un IDE (Integrated Development Environment) che si basa sulle librerie
Qt e permette la creazione di interfacce grafiche mediante drag&drop (in modo simile
all'interfaccia di Autocad) e l'implementazione del loro funzionamento.
I vantaggi principali derivanti dall'impiego delle librerie Qt sono due.
Multipiattaforma. I sorgenti in Qt possono essere compilati per i maggiori sistemi quali
Windows, iOS, Linux, Embedded Linux e, quando era in auge, anche il sistema operativo
Symbian dei primi smartphone caduto ormai in disuso.
Ciò è possibile grazie al tool QMake che interpreta il file principale di un progetto Qt, il
.pro che contiene l'elenco dei file coinvolti, delle librerie esterne e dei moduli del Qt da
caricare come ad esempio la rete, l'XML, la grafica OpenGL. Il Qmake eseguito sul file .pro
produce in uscita i MakeFile configurati per il sistema in uso (equivale all'esecuzione del
comando configure nei sistemi Unix) che guideranno nella compilazione dei sorgenti.
Il meccanismo signal/slot. In maniera simile al funzionamento in ambito Microsoft
Windows Presentation Foundation con gli hook.
Il Qt è fortemente orientato agli oggetti intendendo con ciò che esistono molte classi
ciascuna specializzata per uno scopo: ad esempio c'è la QString, la QJsonDocument, la
QTcpSocket, QThread e così via. Ognuna di queste classi ha dei metodi che automatizzano
operazioni comuni come la scrittura di byte in rete, la conversione di un intero in stringa, la
gestione di un file ecc...
Ciascuna di queste classi è derivata da un'unica classe genitrice di nome QObject che
offre tra le altre cose il metodo connect(..)
QObject::connect(QObject *sender, SIGNAL(..), QObject *receiver,
SLOT(..));
che permette di legare l'emissione di un segnale all'esecuzione di un metodo (slot). Un
segnale è emesso attraverso la parola chiave emit e ha una firma come se fosse una funzione.
75
Modulo online: controllo della realtà virtuale
Rosario Santoro
In questo modo è possibile costruire il comportamento dell'interfaccia grafica (GUI,
Graphical User Interface) in modo più semplice e inoltre permette la comunicazione tra
componenti che richiederebbero un cablaggio complesso se si usassero solamente le regole
del C++.
È possibile anche servirsi delle librerie Qt senza dover necessariamente scaricare anche il
Qt Creator.
Figura 4.4 - L'interfaccia operatore durante lo sviluppo (nel Qt Designer)
4.1.2 Il design pattern MVC e la sua variante
Per design pattern si intende un insieme di accorgimenti, metodologie e architetture di
progettazione software volte alla prevenzione di problemi comuni nel ciclo di vita del
software. Un design pattern non è un concetto limitato al solo ambito dell'ingegneria del
software ma trova applicazione anche in qualsiasi altra branca dove sia necessaria della
progettazione. Un design pattern può essere visto come una raccolta di soluzioni di alto
livello che vanno implementate in modo sempre diverso a seconda del caso particolare in
esame. Queste soluzioni sono frutto dell'esperienza progettuale comune di cui si garantisce
così il riutilizzo e sollevano dal compito di trovare soluzioni a problemi comuni e noti alla
comunità dei progettisti.
Nello specifico, un design pattern in ingegneria del software fornisce soluzioni a
problemi di programmazione noti: per esempio ci si può servire di un design pattern che
risolve un problema di visibilità e comunicazione tra componenti che vanno mantenute
separate, oppure può servire per la corretta progettazione di una componente il cui solo
76
Modulo online: controllo della realtà virtuale
Rosario Santoro
scopo è l'osservazione di altre, oppure ancora garantisce un'elevata manutenibilità del codice
nell'ottica di futuri aggiornamenti e fix. In altre parole, l'adozione di un design pattern è una
caratteristica necessaria in un software di qualità, dove per qualità si intendono anche aspetti
che riguardano tutto il ciclo di vita del software.
Figura 4.5 - Semplice schema del design pattern MVC (puro)
Figura 4.6 - Il design pattern MVC (puro) con interazioni e compiti per ciascuna delle tre componenti40
Nel progetto dell'interfaccia operatore in Qt, il candidato ha scelto di implementare il
design pattern architetturale Model-View-Controller (Figura 4.5) il cui scopo è la
40
http://lkubaski.files.wordpress.com/2012/12/mvc1.gif
77
Modulo online: controllo della realtà virtuale
Rosario Santoro
separazione e comunicazione tra i tre livelli tipici di un'applicazione: livello dati, livello
della logica applicativa e il livello di presentazione. La logica dell'applicazione è
implementata nel "controller", il livello dei dati nel "model" mentre la "view" si occupa della
presentazione.
Nell'ottica del progetto il candidato ha ritenuto opportuno apportare alcune modifiche a
questo pattern. L'ostacolo maggiore da superare è stata la gestione di più di una vista nel
sistema: infatti, all'interfaccia operatore possono essere collegati diversi visualizzatori, siano
essi a realtà virtuale o in una normale finestra, mentre il design pattern MVC puro prevede la
gestione di una sola interfaccia utente.
Figura 4.7 - Il design pattern MVC modificato dal candidato.
La componente View diventa un aggregatore e gateway di viste.
La soluzione è stata la modifica della componente "view" in una sorta di gateway per le
view (da cui "vieway", Figura 4.7) a cui un visualizzatore esterno si connette via TCP e ne
inizia a ricevere i dati. Internamente, il nuovo componente "vieway" si comporta
esattamente come una view classica evitando così che il controller o il model subiscano
modifiche nel loro comportamento e nella comunicazione.
In teoria non sono posti limiti al numero di visualizzatori della scena simulata a patto
però che siano in grado di operare con il protocollo discusso al paragrafo 4.2.4. Dal lato
implementativo, allo stato delle cose, il sistema accetta solo due connessioni TCP alla volta,
sulle porte 6001 e 6002, dove rispettivamente si attende la connessione della scena esportata
per Oculus Rift e la connessione dell'anteprima operatore (cfr. Figura 2.2).
78
Modulo online: controllo della realtà virtuale
Rosario Santoro
4.1.3 Il diagramma delle classi
Figura 4.8 - Diagramma delle classi UML dell'interfaccia operatore Qt
79
Rosario Santoro
Modulo online: controllo della realtà virtuale
In riferimento al diagramma delle classi in Figura 4.8, verrà ora spiegato il contenuto
delle classi più importanti.
4.1.3.1 RV_controller
La classe RV_controller svolge il ruolo di controller nell'ottica MVC ed è l'interfaccia
grafica dell'applicazione scritta con il Qt Creator: essa dunque contiene anche i segnali e gli
slot necessari al funzionamento della stessa (segnali quali la pressione di un pulsante della
GUI).
Questa classe conserva i riferimenti agli eseguibili delle scene Unity 3D dell'ambiente
virtuale e ne gestisce l'intero processo, dall'avvio fino al termine (attraverso la classe
QProcess). Inoltre, ci sono due timer (istanze della classe QTimer) che si occupano di
inviare ogni minuto dei messaggi di controllo della connessione alle viste collegate
(messaggio "check", vedere 4.2.4).
4.1.3.2 RV_model
Implementa il model dell'MVC e di conseguenza è responsabile della conservazione,
aggiornamento e comunicazione dello stato corrente del mondo. Essa conserva una lista di
riferimenti ad oggetti derivati dalla classe "Stimulus", in questo caso "Solid", "Light",
"Audio" (QList<Stimulus*>), di cui ne permette l'aggiunta; inoltre memorizza il percorso e
il nome del file xml contenente la configurazione iniziale del mondo (xmlPath).
In fase d'inizializzazione dell'intera interfaccia operatore, un riferimento a questa classe è
passato dal controller alla componente "vieway" in modo tale che quest'ultimo possa
richiedere, in fase di commit delle modifiche, la configurazione corrente degli stimoli in
formato JSON e includerla nel messaggio in fase di invio. Di conseguenza, è la componente
dove avviene la conversione dell'array degli stimoli in JSON (si rimanda a per i dettagli
4.2.2).
Istanziata dal controller, durante l'esecuzione del programma ne è sempre presente una e
una sola istanza.
4.1.3.3 RV_vieway
È l'aggregatore delle viste e riveste il ruolo di "view" nel contesto del design pattern
MVC. Si occupa dei server e socket TCP (QTcpServer e QTcpSocket) gestendone la
variazione di stato e la connessione/disconnessione dei client visualizzatori. Riceve il
80
Modulo online: controllo della realtà virtuale
Rosario Santoro
comando di commit delle modifiche dall'interfaccia operatore e si occupa di inviare i
messaggi JSON a ciascuna vista connessa.
Conserva un riferimento all'unica istanza del model e un riferimento ad un oggetto di
classe CommPack.
4.1.3.4 CommPack
La classe Communication Packet (abbreviata in CommPack) rappresenta un messaggio
nel formato previsto in 4.2.4 e contiene i campi "method", "error" e "content" il cui
significato è spiegato nel paragrafo 4.2.4, oltre ai comuni metodi get/set. Contiene il metodo
di conversione del messaggio in formato JSON che viene invocato durante l'invio fisico dei
dati in rete; dualmente, è in grado di convertire un messaggio JSON in un'istanza della
classe CommPack permettendo così l'accesso ai campi method ed error del messaggio di
risposta di uno dei client.
4.1.3.5 Stimulus
La classe Stimulus non viene mai istanziata direttamente ma è la classe base da cui
vengono derivate le classi che implementano gli stimoli reali. Essa contiene due campi di
fondamentale importanza, l'identificativo ("id") e la tipologia di stimolo ("type"): tali campi
vengono avvalorati nel costruttore delle classi e in seguito possono solo essere letti.
4.1.3.6 Le classi derivate da Stimulus
Le classi che implementano gli stimoli reali corrispondono agli stimoli previsti
attualmente dal progetto (cfr. paragrafo 3.5).
struct _pos{
float x;
float y;
float z;
};
struct _rot{
float x;
float y;
float z;
};
struct _col{
unsigned char r;
unsigned char g;
unsigned char b;
float a;
};
struct _size{
float dx;
float dy;
float dz;
};
Listato 4.1 - Le strutture impiegate nel progetto (sia Qt sia Unity3D):
rispettivamente posizione, colore, rotazione e dimensione.
81
Modulo online: controllo della realtà virtuale
Rosario Santoro
4.1.4 L'aspetto della GUI
Figura 4.9 - L'interfaccia Qt di controllo del mondo virtuale
In Figura 4.9 è rappresentata la GUI dell'operatore. Essa è composta da tre parti
principali: l'elenco degli stimoli, la configurazione di uno stimolo e i comandi.
La parte dei comandi offre all'operatore la possibilità di caricare un file XML contenente
la configurazione degli stimoli nel mondo virtuale (in qualsiasi momento dell'esecuzione)
mediante il pulsante "Load XML description": a lettura completata, la lista degli stimoli
viene svuotata e ripopolata.
I pulsanti "Start OVR" e "Start Preview" avviano (e osservano lo stato) l'eseguibile della
scena, rispettivamente stereoscopica e normale, nel caso in cui si utilizzi la configurazione in
localhost dei visualizzatori (si rimanda al paragrafo 2.3).
Per il controllo della scena virtuale e per il suo eventuale roll-back si utilizzano i pulsanti
"Revert..", "Preview.." e "Commit". La funzione della preview permette di mostrare le
modifiche al mondo solo nella scena di anteprima dell'operatore (la scena del paziente non
subisce modifiche); i pulsanti "Commit" e "Revert" rispettivamente rendono effettive o
comandano il roll-back delle modifiche anche al visore virtuale del paziente.
Per configurare uno stimolo è sufficiente che l'operatore ne selezioni uno dall'elenco e la
schermata accanto verrà popolata con gli adeguati comandi, a seconda della tipologia dello
stimolo (Figura 4.10).
È bene notare che la GUI deve essere in esecuzione prima delle scene virtuali in quanto
funge da server: inoltre, è opportuno conoscere le regole del firewall della macchina su cui è
in esecuzione e modificarle in modo tale che le porte 6001 e 6002 risultino aperte.
82
Rosario Santoro
Modulo online: controllo della realtà virtuale
Figura 4.10 - La GUI dopo aver letto il file XML descrittivo del prototipo della scena in Figura 3.51
4.2 La comunicazione
4.2.1 Il formato JSON
JavaScript Object Notation41 è un formato di descrizione e di interscambio di dati
standardizzato nel 1999 che si basa su Unicode e sulla sintassi di descrizione degli oggetti in
JavaScript (linguaggio di client-side scripting nelle pagine web). È inoltre di facile
comprensione per gli umani (human-readable).
Si consideri il seguente codice javascript.
var num = 4;
var arr = ["lun","mar","mer","gio","ven"];
var obj = {"qty": 5};
arr.push("sab");
obj.what = "days";
obj.content = arr;
obj.qty++;
console.log(obj);
41
http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf
83
Modulo online: controllo della realtà virtuale
Rosario Santoro
L'output in console dell'oggetto "obj" sarebbe il seguente:
obj = {
"qty": 12,
"what": "days",
"arr": ["lun","mar","mer","gio","ven"]
};
Questa notazione propria di Javascript è lo standard di notazione degli oggetti JSON.
Nonostante la sintassi semplice permette di rappresentare oggetti di qualsivoglia complessità
e permette la gestione di diversi tipi di dato quali numeri (interi e decimali), array di oggetti,
oggetti, stringhe e valori booleani.
Un altro vantaggio di JSON è la possibilità di essere trasformato in stringa, eliminando
spazi e line feed e preparandolo quindi all'invio in rete o alla semplice memorizzazione.
JSON rappresenta un'alternativa ad XML e i linguaggi per la sua manipolazione come
l'XSLT ed è molto usato come formato di interscambio dati.
Citando un'applicazione, JSON è il formato con il quale vengono restituiti i risultati delle
richieste di geocodifica inverse di Google Maps: è possibile impiegare anche XML ma
Google stesso suggerisce l'uso di JSON [21].
var jsonString = JSON.stringify(obj);
In Javascript è possibile convertire un oggetto arbitrario in una stringa JSON mediante il
metodo "stringify" e il processo intero prende il nome di serializzazione. L'operazione
inversa è detta deserializzazione e la si esegue con il metodo "parse".
Negli altri linguaggi è necessario ricorrere a librerie esterne per interpretare e convertire
correttamente dati in formato JSON: ne esistono diverse per ogni linguaggio (C, C++, Qt,
Java, Objective C, C#, ...). Si rimanda alle fonti per una lista completa [22].
Figura 4.11 - Sintassi JSON di un oggetto
Figura 4.12 - Sintassi JSON di un array
84
Modulo online: controllo della realtà virtuale
Rosario Santoro
Figura 4.13 - Sintassi JSON di un numero
Figura 4.14 - Sintassi JSON di un valore
Figura 4.15 - Sintassi JSON di una stringa
4.2.2 Integrazione in Qt Creator
Il Qt 5 offre già delle classi in grado di gestire il formato JSON e le sue conversioni:
QJsonDocument, QJsonObject, QJsonArray, QJsonValue.
QJsonDocument ingloba l'intera struttura dati da convertire in JSON o appena convertita
da JSON. Questa struttura comincia sempre con un QJsonObject (oggetto JSON) che
costituisce l'oggetto radice e al suo interno può avere un qualsiasi numero di oggetti
85
Rosario Santoro
Modulo online: controllo della realtà virtuale
(QJsonObject), array (QJsonArray) e valori semplici (QJsonValue) siano essi stringhe o
numeri.
4.2.3 Integrazione in Unity 3D e C#
Il C# non dispone di un supporto nativo al JSON e dunque si è dovuto fare ricorso ad una
libreria esterna di nome JSON.NET42 (versione 6.0.2) in formato ".dll" e dunque chiusa.
Questa libreria permette di effettuare la conversione JSON con una sola riga di codice, al
contrario di quanto avviene in Qt in cui bisogna servirsi di qualche struttura di controllo in
più.
CommPack comm = JsonConvert.DeserializeObject<CommPack> (jsonrx);
String json = JsonConvert.SerializeObject(comm);
Queste due linee di codice si occupano rispettivamente della conversione di una stringa
JSON in una struttura interna C# e della conversione di un oggetto in stringa JSON. Si badi
che gli attributi della classe da scrivere nella deserializzazione devono essere tutti dotati dei
comuni metodi di accesso get e set.
I vettori scritti e letti in C# sono dichiarati con le "List" come segue:
public List<StimulusCommon> stimuli { get; set; }
4.2.4 Il protocollo di comunicazione in JSON
Listato 4.2 - Esempio di messaggio scambiato tra server e client durante la macrofase online
msg = {
"method" : "edit" | "reply" | "check",
"error": null | "error_reason",
"content" : [
{"id": "obj_id",
"type": "<obj_type_as_listed_in_XML>",
"col" : {"r": 255, "g": 0, "b":100, "a": 1},
"pos" : {"x": 0, "y": 0, "z":0},
"rot" : {"x": 0, "y": 90, "z":0},
"size" : {"dx": 2, "dy": 2, "dz":2},
},
...
]
};
42
http://james.newtonking.com/json
86
Rosario Santoro
Modulo online: controllo della realtà virtuale
Una volta scelto JSON come formattazione dei messaggi scambiati, sono stati messi a
punto una serie di comandi comprensibili da tutti gli attori che partecipano alla
comunicazione. A tal proposito il candidato ha sviluppato un semplice protocollo di
comunicazione tra il server e i client nello scenario del progetto.
Il protocollo prevede che un messaggio scambiato abbia sempre i tre seguenti campi:

"method": è una stringa che indica lo scopo del messaggio ed è sempre presente. Può
assumere tre valori:
 "edit": il messaggio comporta una modifica alla configurazione dell'ambiente
virtuale. Il campo "content" non potrà essere vuoto e conterrà i dettagli di tale
modifica.
 "reply": il messaggio che temporalmente segue sempre un messaggio con
method "edit". Il suo scopo è di dare conferma dell'avvenuta modifica dei
parametri del mondo come indicato nell'ultimo comando di modifica.
 "check": serve a verificare la presenza di connessione ed è periodicamente
(~1min) inviato dal server a tutti i client. La risposta a tale messaggio ha
anch'essa method "check". Una sequenza di due check, il primo in un verso e il
secondo nell'altro, asserisce il corretto funzionamento della connessione tra il
server e uno dei client.

"error": stringa che indica l'eventuale presenza di un errore. Tipicamente, un errore
può aver luogo in risposta ad un messaggio "edit" con indicazioni di modifica che
portano il mondo in una configurazione errata, come per esempio la sovrapposizione
di due solidi o lo spostamento di una fonte luminosa al di fuori dei confini della casa.
In un messaggio di "reply" senza errori, tale campo non ha valore (null).

"content": è un vettore di oggetti istanze delle classi degli stimoli implementati,
come solido, audio o luce (si rimanda a 3.5 per l'elenco completo degli stimoli e
4.1.3 per le rispettive classi). È avvalorato solo in un messaggio di tipo "edit" e
contiene l'elenco degli stimoli da modificare: per ciascuno di questi, sono elencate
solo le proprietà da variare e il relativo nuovo valore. Quest'approccio permette
quindi di avere messaggi concisi, intendendo con ciò la non necessità di ritrasmettere
tutte quelle proprietà che durante una commit non cambiano valore e, in modo
simile, si evita anche di ritrasmettere i dettagli di quegli oggetti non coinvolti nella
modifica. Ciascun oggetto eventualmente presente in questo vettore dovrà avere al
87
Rosario Santoro
Modulo online: controllo della realtà virtuale
suo interno obbligatoriamente l'identificativo univoco dell'oggetto nel mondo virtuale
("id"), il tipo di oggetto di cui è istanza43 ("type") e almeno una delle proprietà
dell'oggetto con un valore associato, sempre in accordo alle associazioni oggettoproprietà modificabili elencate nel file .xml di configurazione (paragrafo 3.4.4).
43
In questo contesto, oggetto e istanza non sono usati nello slang della programmazione, ma in riferimento
ad oggetti rappresentati in Unity 3D.
88
Sviluppi futuri
Rosario Santoro
5 SVILUPPI FUTURI
5.1 Altri stimoli
Gli stimoli correntemente implementati nel sistema, cioè solido, audio e luce, non
rappresentano ovviamente l'intera gamma di oggetti su cui realmente si può agire per
osservare i cambiamenti di stati d'animo del paziente.
Potrebbero essere aggiunti stimoli i seguenti stimoli.

Finestra. Posizione fissa, colore e in particolare la trasparenza modificabili, meglio
se in funzione delle ore della giornata, in modo tale da adattarsi ai cambiamenti di
luce esterna.

Animazione. Potrebbe trattarsi del volo di un insetto o di una tenda mossa dal vento.
Se ne potrebbe impostare l'attivazione o meno oppure l'evidenza del movimento.

Percorsi luminosi. Per una certa tipologia di pazienti sarebbe opportuno tracciare
dei percorsi luminosi verso stanze dell'appartamento che rivestono particolare
importanza, come un bagno, la cucina o la camera da letto. Questi percorsi
dovrebbero essere disegnati lungo l'intero corridoio e dovrebbero essere collegati
fino all'infisso della stanza di destinazione; se ne potrebbe impostare la presenza o
meno, il colore e un qualche effetto luminoso come il lampeggio.
5.2 Maggiore attività da parte del paziente
Nella configurazione corrente del progetto il soggetto osservato assume un ruolo
prevalentemente statico, intendendo con ciò che durante l'esperienza virtuale non gli è
richiesto alcun movimento del corpo all'infuori della rotazione della testa per esplorare
l'ambiente tramite l'Oculus Rift.
89
Sviluppi futuri
Rosario Santoro
A seconda del degrado psico-motorio del paziente, possono essere previsti diversi livelli
di interazione con il mondo, partendo dal semplice movimento in avanti e indietro nel
mondo attraverso le freccette di una tastiera, fino all'interazione specializzata con diversi
oggetti (alzare tapparelle, chiudere porte, ...). Sia il movimento sia l'interazione possono
essere gestite attraverso il Leap Motion, quindi con movimenti o gesti delle mani.
Figura 5.1 - La piattaforma di movimento Virtuix Omni
Un elevato livello di attività del paziente può essere raggiunto mediante l'uso di apposite
bascule, vere e proprie pedane limitate da un cerchio dove l'utente può muoversi esattamente
come se stesse camminando, con la differenza che è il pavimento (una piccola superficie
mobile) a spostarsi rispetto a lui e non viceversa: queste pedane vanno interfacciate e gestite
in Unity o nel motore di gioco preferito per propagare il movimento al game object
dell'utente. In Figura 5.1 è rappresentata la piattaforma di movimento Virtuix Omni44
sviluppata da Jan Goetgeluk attraverso una raccolta fondi su Kickstarter, presentata al CES
di Las Vegas nel 2014 e attualmente in pre-ordine a 500$ (completa di accessori, come delle
scarpe con la suola ad attrito ridotto per il rilevamento del movimento delle gambe).
44
http://www.virtuix.com/
90
Rosario Santoro
Sviluppi futuri
5.3 Ingombro dell'Oculus VR
Il peso e l'ingombro dell'Oculus Rift non sono eccessivi se usato in maniera standalone,
ma nello scenario del presente progetto, e quindi considerando il caschetto con gli elettrodi
dell'encefalogramma, può risultare difficile la presenza di entrambi questi dispositivi sulla
testa del paziente. Non sono da sottovalutare anche eventuali fastidi o riluttanza da parte dei
pazienti stessi ad indossare un visore di realtà virtuale.
Ulteriore ricerche nell'ambito del progetto dovrebbero perciò portare alla scelta di visori
RV meno ingombranti: il Crystal Cove di Figura 3.39, riducendo le proprie dimensioni, si
candida a successore dell'Oculus Rift.
5.4 Il sistema come Web Service
La possibilità di collegare visualizzatori via TCP, l'architettura client/server e il
caricamento della descrizione degli stimoli per mezzo di un file XML indicano la strada per
un'eventuale evoluzione come web service.
Il candidato avrebbe infatti potuto usare esclusivamente JSON per la descrizione delle
scene, in quanto il formato dei messaggi era già stato progettato con quella notazione, ma
proprio per non precludersi questa strada è stato adottato anche l'XML come descrizione
degli stimoli. Converrebbe inoltre a quel punto che la descrizione XML non fosse limitata
esclusivamente agli stimoli ma coinvolgesse tutta la scena, dalle pareti agli oggetti (stimoli e
non).
Il servizio offerto potrebbe essere inizialmente quello di memorizzazione della
configurazione corrente di un ambiente (non solo in ambito medico, si veda il paragrafo 5.6)
per ciascun cliente registrato su quest'ipotetica piattaforma.
5.5 Descrizione delle scene 3D mediante X3D
Recentemente si è osservato un aumento delle estensioni di XML e, tra queste, ne è in
fase di standardizzazione una il cui compito è la definizione di scene tridimensionali, cioè
l'X3D.
91
Sviluppi futuri
Rosario Santoro
Figura 5.2 - Logo del formato X3D
L'X3D45 è diretto discendente del VRML46 ed è uno standard ISO47 per la
rappresentazione di computer grafica 3D. E' in grado di descrivere poligoni, punti, mesh e
texture UV. Inoltre, permette di specificare le caratteristiche della visuale, permettendo con
apposite proprietà di impostare una visualizzazione stereoscopica, pronta per essere fruita
mediante Oculus Rift.
L'X3D è un formato leggibile con apposite applicazioni (Instant Reality, per citarne una)
o con comuni strumenti di modeling (Blender, MeshLab). Per un file d'esempio si rimanda
all'Appendice 7.1. Questo formato potrebbe essere usato assieme all'architettura web service
esposta in 5.4.
5.6 Altri utilizzi del sistema
Il settore dove questo lavoro di tesi trova applicazione è a metà tra il medico e il
domotico.
Possono
essere
prese
in
considerazione
applicazioni
esclusivamente
architettoniche di questo sistema di realtà virtuale modificabile a runtime: infatti, uno studio
di architettura potrebbe servirsene per presentare ai propri clienti i risultati del proprio
lavoro in termini di strutturazioni e disegno di ambienti. L'esperienza e la soddisfazione del
cliente risulterebbe così aumentata.
45
www.web3d.org/x3d
Virtual Reality Modeling Language
47
ISO/IEC 19775/19776/19777
46
92
Sviluppi futuri
Rosario Santoro
5.7 Cronologia delle modifiche all'ambiente
L'interfaccia operatore del sistema può essere migliorata in termini estetici e in parte
anche
funzionali,
per
esempio
dotandola
dell'annullamento/ripetizione
dell'ultima
operazione e il ripristino di configurazioni del mondo virtuale salvate in precedenza.
93
Conclusioni
Rosario Santoro
6 CONCLUSIONI
In questo lavoro di tesi, il candidato ha progettato un prototipo di un sistema di realtà
virtuale il cui scopo è la modifica dei dettagli architettonici e di arredamento degli ambienti
vitali di un paziente affetto da un disturbo allo stadio iniziale, sulla base dell'individuazione
di una configurazione tale che generi il minor stress.
Questo sistema è dunque volto alla riqualificazione degli ambienti vitali di questa
categoria di soggetti e, data per certa l'esistenza di una configurazione di stress minimo, il
candidato ritiene possibile migliorare le condizioni di vita e di stato d'animo dei pazienti e
assisterli e monitorarli nel corso dell'evoluzione della malattia.
Le caratteristiche di questo sistema permettono l'adozione di altri tipi di architetture e
tecnologie e può altresì essere impiegato in ambiti diversi da quello della riqualificazione
architettonica.
Considerati gli avanzamenti tecnologici nel campo dei visori di realtà virtuale, con il
passare del tempo soluzioni sempre più innovative aumenteranno l'immersività e
l'esperienza utente.
94
Appendice
Rosario Santoro
7 APPENDICE
7.1 Contenuto X3D d'esempio
<X3D profile='Interchange' version='3.0'
xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance'
xsd:noNamespaceSchemaLocation='http://www.web3d.org/specifications/x3d3.0.xsd'>
<head>
...
</head>
<Scene>
<Viewpoint description='Front view, 4 inches above ground'
position='0 4 20'/>
<Viewpoint description='Side view, 6 inches above ground'
orientation='0 1 0 1.57' position='25 6 0'/>
<Viewpoint description='Top-down view, 20 inches above'
orientation='1 0 0 -1.57' position='0 28 0'/>
<Background groundAngle='1.309 1.571' groundColor='0.1 0.1 0 0.4
0.25 0.2 0.6 0.6 0.6' skyAngle='1.309 1.571' skyColor='0 0.2 0.7 0 0.5 1 1
1 1'/>
<Transform translation='0 8 0'>
<Group DEF='Road'>
<Shape>
<Box size='20 0.2 7'/>
<Appearance DEF='GreyAppearance'>
<Material diffuseColor='0.4 0.4 0.4'/>
</Appearance>
</Shape>
<Transform translation='0 0.2 0.3'>
<Shape DEF='WhiteLine'>
<Box size='20 0.01 0.4'/>
<Appearance DEF='WhiteAppearance'>
<Material diffuseColor='1 1 1' emissiveColor='0.5 0.5
0.5'/>
</Appearance>
</Shape>
</Transform>
<Transform translation='0 0.2 -0.3'>
<Shape USE='WhiteLine'/>
</Transform>
</Group>
</Transform>
<Transform rotation='0 1 0 1.57' translation='0 0.1 0'>
<Group USE='Road'/>
</Transform>
95
Rosario Santoro
Appendice
<Transform DEF='ColumnA' translation='-6 4 -2'>
<Shape DEF='Column'>
<Cylinder height='8' radius='1'/>
<Appearance USE='GreyAppearance'/>
</Shape>
</Transform>
<Transform DEF='ColumnB' translation='6 4 -2'>
<Shape USE='Column'/>
</Transform>
<Transform DEF='ColumnC' translation='-6 4 2'>
<Shape USE='Column'/>
</Transform>
<Transform DEF='ColumnD' translation='6 4 2'>
<Shape USE='Column'/>
</Transform>
</Scene>
</X3D>
96
<Bibliografia
Rosario Santoro
8 BIBLIOGRAFIA
[1]
Wikipedia, «Projection augmented model,» 2014. [Online]. Available:
http://en.wikipedia.org/w/index.php?title=Projection_augmented_model&oldid=59
0140280.
[2]
J. W. Burke, M. J. McNeill, D. K. Charles, P. J. Morrow, J. Crosbie e S. M.
McDonough, «Serious Games for Upper Limb Rehabilitation Following Stroke,»
in Games and Virtual Worlds for Serious Applications, 2009. VS-GAMES '09.
Conference in, Coventry, 2009.
[3]
D. A. Das, K. A. Grimmer, A. L. Sparnon, S. E. McRae e B. H. Thomas, «The
efficacy of playing a virtual reality game in modulating pain for children with acute
burn injuries: A randomized controlled trial,» BMC Pediatrics, 2005.
[4]
A. Innocenti, «La Toscana punta sulla ricerca: 26 progetti per oltre 14 milioni,»
17
Dicembre
2013.
[Online].
Available:
http://www.regione.toscana.it/documents/10180/23830/Regione17122013.pptx/41c
79005-0f6d-490f-bd83-48e7fe7c19a4. [Consultato il giorno 3 Aprile 2014].
[5]
J. W. Grier, «eHeart: an introduction to ECG/EKG (for students, teachers and
other
interested
persons),»
2008.
[Online].
Available:
http://www.ndsu.edu/pubweb/~grier/eheart.html. [Consultato il giorno 3 Aprile
2014].
[6]
W. O. Tatum, A. M. Husain, S. R. Benbadis e P. W. Kaplan, in EEG
interpretation, Demos, 2008.
[7]
J. Luc, «Electromyography: MedlinePlus Medical Encyclopedia,» 10 Settembre
2012.
[Online].
http://www.nlm.nih.gov/medlineplus/ency/article/003929.htm.
Available:
[Consultato
il
giorno 3 Aprile 2014].
97
<Bibliografia
Rosario Santoro
[8]
T. Musha, Y. Terasaki, H. A. Haque e G. A. Ivanitsky, «Feature extraction from
EEGs associated with emotions,» Artificial Life and Robotics, 1996.
[9]
R. Costin, C. Rotariu e A. Pasarica, «Mental stress detection using heart rate
variability and morphologic variability of EeG signals,» in Electrical and Power
Engineering (EPE), 2012 International Conference and Exposition on, Iasi, 2012.
[10]
D. McAllister, «Display technology: Stereo & 3D display technologies,» 2005.
[Online].
Available:
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.7.2388&rep=rep1&type
=pdf.
[11]
A. J. Woods e C. R. Harris, «Comparing levels of crosstalk with red/cyan,
blue/yellow, and green/magenta anaglyph 3D glasses,» in Stereoscopic Displays
and Applications XXI , San Jose, California, 2010.
[12]
P. Merkle, K. Muller e T. Wiegand, «3D video: acquisition, coding, and
display,» Consumer Electronics, IEEE Transactions on, 2010.
[13]
A. Smolic, K. Mueller, P. Merkle, C. Fehn, P. Kauff e T. Wiegand, «3D Video
and Free Viewpoint Video - Technologies, Applications and MPEG Standards,»
Multimedia and Expo, 2006 IEEE International Conference on, 2006.
[14]
Z. Liang e W. J. Tam, «Stereoscopic image generation based on depth images
for 3D TV,» Broadcasting, IEEE Transactions on, 2005.
[15]
S. Schuon, C. Theobalt, J. Davis e S. Thrun, «High-Quality Scanning Using
Time-Of-Flight Depth Superresolution,» IEEE Computer Society Conference on
Computer Vision and Pattern Recognition Workshops, 15 Luglio 2008.
[16]
D. C. Lee, A. Gupta, M. Herbert e T. Kanade, «Estimating spatial layout of
rooms using volumetric reasoning about objects and surfaces,» 2010.
[17]
G. Miller, «We Mapped Our Boss’ Office With This Slick New 3-D Camera,»
13 Marzo 2014. [Online]. Available: http://www.wired.com/2014/03/matterportoffice-map/. [Consultato il giorno 2 Aprile 2014].
[18]
N. Roli, «Project Tango: nuovi dettagli sulle 4 fotocamere presenti nel
prototipo,»
15
Marzo
2014.
[Online].
Available:
http://android.hdblog.it/2014/03/15/project-tango-nuovi-dettagli-sulle-4-
98
<Bibliografia
Rosario Santoro
fotocamere-presenti-nel-prototipo/. [Consultato il giorno 8 Aprile 2014].
[19]
M. Pesce, «CES 2014, prima prova di Oculus Rift Crystal Cove,» 13 Gennaio
2014. [Online]. Available: http://www.wired.it/gadget/videogiochi/2014/01/13/ces2014-prova-oculus-rift-crystal-cove/. [Consultato il giorno 11 Febbraio 2014].
[20]
S. Pennacchini, «Facebook ora punta alla realtà virtuale "social": rileva Oculus
per
2
miliardi
di
dollari,»
25
Marzo
2014.
[Online].
Available:
http://www.repubblica.it/tecnologia/2014/03/25/news/facebook_rileva_oculus_per
_2_miliardi_di_dollari-81895590/. [Consultato il giorno 25 Marzo 2014].
[21]
Google, «Richieste di geocodifica, Google Maps,» 2013. [Online]. Available:
https://developers.google.com/maps/documentation/geocoding/#GeocodingRequest
s.
[22]
ECMA, dicembre 1999. [Online]. Available: http://json.org/.
[23]
F. G. Yanowitz, «Introduction to ECG interpretation,» Luglio 2012. [Online].
Available: http://ecg.utah.edu/pdf/. [Consultato il giorno 2 Aprile 2014].
99
Ringraziamenti
In queste pagine con cui concludo la mia tesi e simbolicamente la mia carriera da studente,
desidero rivolgere dei ringraziamenti.
Ringrazio il prof. Vitoantonio Bevilacqua, preziosa e paziente guida nel mio lavoro di tesi e nel
mio periodo universitario finale, per avermi concesso fiducia dandomi l'occasione di mettermi alla
prova. Allo stesso modo ringrazio il dott. Michele Pantaleo per i consigli e le indicazioni che mi ha
pazientemente fornito. Un ringraziamento particolare va anche alla prof.ssa Marina De Tommaso.
Un grazie di cuore lo rivolgo ai miei genitori sempre presenti, alla mia famiglia, alle nonne e
agli zii, con un pensiero particolare per Michela a cui auguro di trovare presto la propria strada e
di seguirla con convinzione e perseveranza.
Ringrazio Gianpaolo con la certezza di non essere in grado di ridurre in poche righe la grande
stima, riconoscenza e affetto che nutro nei suoi confronti. Tra giornate e nottate sui progetti
accademici e non, serate filosofiche a discutere di passato, presente e futuro, viaggi di qualche
centinaio di km e qualche miliardo di anni luce, mi ha aiutato a conoscere me stesso.
Ringrazio Filippo, Stefano, Francesca e Sabrina per le serate e le risate nei weekend foggiani.
Ringrazio le persone con cui ho condiviso un tetto in questi anni in casa Marasha, casa
Pizzigallo e casa Vannella. Grazie a Daniele, Massimo, Danilo e Davide che dopo tanto tempo
trascorso assieme, tante mangiate, bevute e discussioni mi hanno insegnato, fatto capire molto ed
aiutato a crescere. Grazie a Francesco, Fabrizio, Michele e Benedetto per la loro gentilezza e
disponibilità, a cui auguro che "rimanga sempre un po' di rispetto" e che "le macchine continuino a
fare altre macchine". Grazie a Gabriele, Danilo e Antonello, persone in cui ho scorto in pochi mesi
più educazione e rispetto che molta altra gente in diversi anni.
Ringrazio gli amici e colleghi del laboratorio di informatica industriale, Gianluca, Marco,
Davide, Donato, Domenico P., Domenico C., Nicola N., Gianluca, Vito, Angelo e Carlo persone che
stimo sul lato personale e professionale, dalla cui semplice vicinanza ho imparato e sto imparando
molto. Un ringraziamento particolare lo rivolgo a Dario, disponibile, sempre gentile e prodigo di
consigli. Un grazie a Nicola L. che ha lavorato assieme a me durante lo sviluppo iniziale di questo
progetto. Esprimo gratitudine anche a Silvia che mi ha aiutato e consigliato.
Un grazie speciale va ai colleghi di AMT Giulio, Francesco, Andrea, Gianluca, Duccio, Franco
e Mario sempre allegri e attivi.
Grazie a voi tutti.
Stanotte tira vento e cambia il tempo.