• Non ci sono risultati.

Questo paragrafo descrive cosa si può fare per migliorare il sistema e affrontare le principali problematiche aperte del prototipo corrente, incluse alcune attività sperimentali già programmate per meglio convalidare il dispositivo di cattura di movimento.

Grazie ai rapidi progressi tecnologici in ambito ICT, l’aumento della potenza dei computer, la possibilità di avere disponibili gigantesche quantità di dati grazie alle connessioni Internet, l’evoluzione in ambiti quale la robotica, l’analisi dei dati e l’intelligenza artificiale (AI), soprattutto nell’autoapprendimento della macchina, stiamo assistendo a cambiamenti di enorme portata che potrebbero avere profonde implicazioni per le imprese, per l’economia e, più in generale, per la società nel suo insieme. L’applicazione dell’intelligenza artificiale dovrebbe portare a far sì che gli strumenti tecnologici, hardware e software, siano sempre più in linea con le prestazioni umane in una serie di attività lavorative e di analisi, tra cui quelle che richiedono capacità cognitive, apprendimento, decisioni tacite, sensibilità emotiva, ovvero decisioni “simili” all’intelligenza dell’uomo.

106

Nel campo di analisi preso in considerazione in questa sperimentazione l’Intelligenza Artificiale potrebbe essere impiegata per future elaborazioni dei dati raccolti dai sensori e inviati al server, in modo da rendere facilmente interpretabili i comportamenti umani legati ai movimenti e correlarli con precisione ai sintomi della sindrome dei disturbi dello spettro autistico. Questo richiederà lo sviluppo di algoritmi che permettano l’apprendimento automatico del sistema, con la definizione di esempi reali per creare l’esperienza necessaria al sistema per condurre le sue valutazioni.

I comportamenti umani rilevati dai sensori di movimento potrebbero essere visualizzati dal medico o dal terapista con tecniche di Realtà Aumentata (AR), ovvero integrando immagini reali ai dati raccolti dal sistema di motion capture. Dovrà essere elaborato un apposito software che integri le immagini dell’ambiente dove il soggetto si è mosso con i dati raccolti dal server del sistema e rendere il tutto visibile per effettuare l’analisi dell’intero contesto, anche senza essere presente al momento in cui l’evento si è verificato.

107

Appendice

Algoritmo ottimizzato per la fusione dei dati da sensori realizzato per Photon in C++:

#define Kp 0.1l // Feedback gain per la retroazione negativa

double long q[4] = {1.l, 0.l, 0.l, 0.l}; // Variabile quaternioni qw, qx, qy, qz inizializzata con tutti gli angoli a zero

// Radice quadrata inversa veloce a doppia precisione

double invSqrt(const double &x) {

double y = x;

double xhalf = 0.5l * y;

long long i = *(long long*)(&y);

i = 0x5fe6ec85e7de30daLL - (i >> 1);

y = *(double*)(&i);

y = y * (1.5l - xhalf * y * y);

return y; }

// Aggiorna valori dei quaternioni con le misure fornite dai sensori

void update(const double long *dt, double long gx, double long gy,

double long gz, double long ax = 0.l, double long ay = 0.l, double long az = 0.l, double long mx = 0.l, double long my = 0.l, double long mz = 0.l) {

double long invMagnitude, *b, *v;

bool feedback = false;

double long *s = new double long[4];

// Esegue il calcolo dall'accelerometro solo se i dati in in- gresso sono validi evitando come risultato NaN

if (ax != 0.l || ay != 0.l || az != 0.l) {

b = new double long[3];

v = new double long[3];

// Normalizzazione del vettore di accelerazione

invMagnitude = invSqrt(ax * ax + ay * ay + az * az);

ax *= invMagnitude;

ay *= invMagnitude;

az *= invMagnitude;

// Matrice per la rotazione del vettore di accelerazione

b[0] = q[0] * q[0] * ax + 2.0l * q[2] * q[0] * az - 2.0l * q[3] * q[0] * ay + q[1] * q[1] * ax + 2.0l * q[2] * q[1] * ay + 2.0l * q[3] * q[1] * az - q[3] * q[3] * ax - q[2] * q[2] * ax; b[1] = 2.0l * q[1] * q[2] * ax + q[2] * q[2] * ay + 2.0l * q[3] * q[2] * az + 2.0l * q[0] * q[3] * ax - q[3] * q[3] * ay + q[0] * q[0] * ay - 2.0l * q[1] * q[0] * az - q[1] * q[1] * ay; b[2] = 2.0l * q[1] * q[3] * ax + 2.0l * q[2] * q[3] * ay + q[3] * q[3] * az - 2.0l * q[0] * q[2] * ax - q[2] * q[2] * az + 2.0l * q[0] * q[1] * ay - q[1] * q[1] * az + q[0] * q[0] * az; // Stima gravità v[0] = 2.0l * (q[1] * q[3] - q[0] * q[2]) - ax; v[1] = 2.0l * (q[2] * q[3] + q[0] * q[1]) - ay; v[2] = (q[0] * q[0] - q[1] * q[1] - q[2] * q[2] + q[3] * q[3]) - az;

108 // Matrice jacobiana s[0] = v[0] * ( 2.0l * b[0] * q[0] + 2.0l * b[1] * q[3] - 2.0l * b[2] * q[2]) + v[1] * (-2.0l * b[0] * q[3] + 2.0l * b[1] * q[0] + 2.0l * b[2] * q[1]) + v[2] * (2.0l * b[0] * q[2] - 2.0l * b[1] * q[1] + 2.0l * b[2] * q[0]); s[1] = v[0] * ( 2.0l * b[0] * q[1] + 2.0l * b[1] * q[2] + 2.0l * b[2] * q[3]) + v[1] * ( 2.0l * b[0] * q[2] - 2.0l * b[1] * q[1] + 2.0l * b[2] * q[0]) + v[2] * (2.0l * b[0] * q[3] - 2.0l * b[1] * q[0] - 2.0l * b[2] * q[1]); s[2] = v[0] * (-2.0l * b[0] * q[2] + 2.0l * b[1] * q[1] - 2.0l * b[2] * q[0]) + v[1] * ( 2.0l * b[0] * q[1] + 2.0l * b[1] * q[2] + 2.0l * b[2] * q[3]) + v[2] * (2.0l * b[0] * q[0] + 2.0l * b[1] * q[3] - 2.0l * b[2] * q[2]); s[3] = v[0] * (-2.0l * b[0] * q[3] + 2.0l * b[1] * q[0] + 2.0l * b[2] * q[1]) + v[1] * (-2.0l * b[0] * q[0] - 2.0l * b[1] * q[3] + 2.0l * b[2] * q[2]) + v[2] * (2.0l * b[0] * q[1] + 2.0l * b[1] * q[2] + 2.0l * b[2] * q[3]); delete [] b; delete [] v; feedback = true; }

// Esegue il calcolo dal magnetometro solo se i dati in ingresso sono validi evitando come risultato NaN

if (mx != 0.l || my != 0.l || mz != 0.l) {

b = new double long[3];

v = new double long[3];

// Normalizzazione del vettore del campo magnetico

invMagnitude = invSqrt(mx * mx + my * my + mz * mz);

mx *= invMagnitude;

my *= invMagnitude;

mz *= invMagnitude;

// Matrice di rotazione del vettore del campo magnetico

b[0] = q[0] * q[0] * mx + 2.0l * q[2] * q[0] * mz - 2.0l * q[3] * q[0] * my + q[1] * q[1] * mx + 2.0l * q[2] * q[1] * my + 2.0l * q[3] * q[1] * mz - q[3] * q[3] * mx - q[2] * q[2] * mx; b[1] = 2.0l * q[1] * q[2] * mx + q[2] * q[2] * my + 2.0l * q[3] * q[2] * mz + 2.0l * q[0] * q[3] * mx - q[3] * q[3] * my + q[0] * q[0] * my - 2.0l * q[1] * q[0] * mz - q[1] * q[1] * my; b[2] = 2.0l * q[1] * q[3] * mx + 2.0l * q[2] * q[3] * my + q[3] * q[3] * mz - 2.0l * q[0] * q[2] * mx - q[2] * q[2] * mz + 2.0l * q[0] * q[1] * my - q[1] * q[1] * mz + q[0] * q[0] * mz;

// Stima campo magnetico

v[0] = b[0] * (q[0] * q[0] + q[1] * q[1] - q[2] * q[2] - q[3] * q[3]) + b[1] * 2.0l * (q[1] * q[2] + q[0] * q[3]) + b[2] * 2.0l * (q[1] * q[3] - q[0] * q[2]) - mx; v[1] = b[0] * 2.0l * (q[1] * q[2] - q[0] * q[3]) + b[1] * (q[0] * q[0] - q[1] * q[1] + q[2] * q[2] - q[3] * q[3]) + b[2] * 2.0l * (q[2] * q[3] + q[0] * q[1]) - my; v[2] = b[0] * 2.0l * (q[1] * q[3] + q[0] * q[2]) + b[1] * 2.0l * (q[2] * q[3] - q[0] * q[1]) + b[2] * (q[0] * q[0] - q[1] * q[1] - q[2] * q[2] + q[3] * q[3]) - mz; // Matrice jacobiana s[0] += v[0] * ( 2.0l * b[0] * q[0] + 2.0l * b[1] * q[3] - 2.0l * b[2] * q[2]) + v[1] * (-2.0l * b[0] * q[3] + 2.0l * b[1] *

109 q[0] + 2.0l * b[2] * q[1]) + v[2] * (2.0l * b[0] * q[2] - 2.0l * b[1] * q[1] + 2.0l * b[2] * q[0]); s[1] += v[0] * ( 2.0l * b[0] * q[1] + 2.0l * b[1] * q[2] + 2.0l * b[2] * q[3]) + v[1] * ( 2.0l * b[0] * q[2] - 2.0l * b[1] * q[1] + 2.0l * b[2] * q[0]) + v[2] * (2.0l * b[0] * q[3] - 2.0l * b[1] * q[0] - 2.0l * b[2] * q[1]); s[2] += v[0] * (-2.0l * b[0] * q[2] + 2.0l * b[1] * q[1] - 2.0l * b[2] * q[0]) + v[1] * ( 2.0l * b[0] * q[1] + 2.0l * b[1] * q[2] + 2.0l * b[2] * q[3]) + v[2] * (2.0l * b[0] * q[0] + 2.0l * b[1] * q[3] - 2.0l * b[2] * q[2]); s[3] += v[0] * (-2.0l * b[0] * q[3] + 2.0l * b[1] * q[0] + 2.0l * b[2] * q[1]) + v[1] * (-2.0l * b[0] * q[0] - 2.0l * b[1] * q[3] + 2.0l * b[2] * q[2]) + v[2] * (2.0l * b[0] * q[1] + 2.0l * b[1] * q[2] + 2.0l * b[2] * q[3]); delete [] b; delete [] v; feedback = true; } if (feedback) {

// Normalizzazione dei quaternioni di feedback

invMagnitude = invSqrt(s[0] * s[0] + s[1] * s[1] + s[2] * s[2] + s[3] * s[3]); s[0] *= invMagnitude; s[1] *= invMagnitude; s[2] *= invMagnitude; s[3] *= invMagnitude;

// Compensazione del drift nella velocità angolare del giro- scopio gx -= 2.0l * (q[0] * s[1] - q[1] * s[0] - q[2] * s[3] + q[3] * s[2]) * *dt; gy -= 2.0l * (q[0] * s[2] + q[1] * s[3] - q[2] * s[0] - q[3] * s[1]) * *dt; gz -= 2.0l * (q[0] * s[3] - q[1] * s[2] + q[2] * s[1] - q[3] * s[0]) * *dt;

// Integrazione della velocità angolare da giroscopio e sot- trazione del feedback con i quaternioni ottenuti da accelerometro e magnetometro s[0] = (0.5l * (-q[1] * gx - q[2] * gy - q[3] * gz) - s[0] * Kp) * *dt; s[1] = (0.5l * ( q[0] * gx + q[2] * gz - q[3] * gy) - s[1] * Kp) * *dt; s[2] = (0.5l * ( q[0] * gy - q[1] * gz + q[3] * gx) - s[2] * Kp) * *dt; s[3] = (0.5l * ( q[0] * gz + q[1] * gy - q[2] * gx) - s[3] * Kp) * *dt; } else {

// Integrazione della sola velocità angolare da giroscopio se non è stato possibile utilizzare i valori da accelerometro e ma- gnetometro s[0] = 0.5l * (-q[1] * gx - q[2] * gy - q[3] * gz) * *dt; s[1] = 0.5l * ( q[0] * gx + q[2] * gz - q[3] * gy) * *dt; s[2] = 0.5l * ( q[0] * gy - q[1] * gz + q[3] * gx) * *dt; s[3] = 0.5l * ( q[0] * gz + q[1] * gy - q[2] * gx) * *dt; }

110 q[0] += s[0]; q[1] += s[1]; q[2] += s[2]; q[3] += s[3]; delete [] s;

// Normalizzazione dei quaternioni

invMagnitude = invSqrt(q[0] * q[0] + q[1] * q[1] + q[2] * q[2] + q[3] * q[3]); q[0] *= invMagnitude; q[1] *= invMagnitude; q[2] *= invMagnitude; q[3] *= invMagnitude; }

111

Indice delle figure e tabelle

Figura 1.1: Stephen Wiltshire ... 13

Figura 2.1: Particle Photon ... 36

Figura 2.2: Interfaccia browser programmazione Photon ... 37

Figura 2.3: Scheda sensori MEMS ... 38

Figura 2.4: Misurazione angoli dalla gravità ... 42

Figura 2.5: Sezione di un giroscopio MEMS ... 43

Figura 2.6: Rappresentazione angoli di Eulero ... 47

Figura 2.7: Componenti della matrice di rotazione ... 49

Figura 2.8: Rotazioni spaziali ... 51

Figura 2.9: Coordinate polari nello spazio e cartesiane ... 57

Figura 2.10: Modello di comunicazione publish/subscribe ... 59

Figura 2.11: Raspberry PI ... 64

Figura 2.12: Comparazione tra modello sincrono e asincrono ... 66

Figura 3.1: Autocarro con betoniera... 74

Figura 3.2: Super Wings ... 75

Figura 3.3: Sensore di movimento e Photon ... 76

Figura 3.4: Posizionamento del dispositivo per l’acquisizione del movimento (sensore più Particle Photon) ... 76

Figura 3.5: Batteria... 77

Figura 3.6: Assemblaggio elettronica e batteria ... 77

Figura 3.7: Posizionamento cartesiano del sensore... 78

Figura 3.8: Algoritmo per l’estrapolazione dei gradi di libertà dai sensori ... 80

Figura 3.9: Struttura TCP/IP MQTT ... 81

Figura 3.10: Struttura di comunicazione ... 83

Figura 3.11: Pagina HOME ... 87

Figura 3.12: Pagina PAZIENTI ... 88

Figura 3.13: Pagina SESSIONE ... 88

Figura 3.14: Pagina DATABASE ... 89

Figura 3.15: Esempio di dati acquisiti ... 90

Figura 3.16: Visione del movimento in tempo reale ... 91

Figura 3.17: Grafico volo aeroplanino ... 92

Figura 3.18: Rullaggio ... 93

Figura 3.19: Decollo... 93

Figura 3.20: Volo ... 94

Figura 3.21: Atterraggio ... 94

Figura 4.1: Stanza ambulatoriale di svolgimento della sperimentazione ... 96

Figura 4.2: Maschera di selezione del paziente ... 98

Figura 4.3: Maschera di selezione del giocattolo ... 99

Figura 4.4: Bambino 1 gioca con autocarro ... 100

Figura 4.5: Bambino 2 gioca con autocarro ... 100

Figura 4.6: Bambino 1 gioca con Super Wings... 101

Figura 4.7: Particolare da “Bambino 1 gioca con Super Wings” ... 101

Figura 4.8: Estratto dal data base “Bambino 1 gioca con Super Wings” ... 102

Figura 4.9: Bambino 2 gioca con Super Wings... 102

Tabella 1.1: Classificazione dei disturbi dello spettro autistico ... 17

112

Tabella 2.2: MQTT message type ... 61

Bibliografia

[1] Jerome S. Bruner, 2000. Prime fasi dello sviluppo cognitivo, Roma, Armando editore.

[2] Kats, Yefim, 2016. Supporting the Education of Children with Autism Spectrum Disorders. A cura di Chestnut Hill College, USA.

[3] Baio, 2014. Prevalence of Autism Spectrum Disorder Among Children Aged 8 Years - Autism and Developmental Disabilities Monitoring Network, 11 Sites, United States, Centers for Disease Control and Prevention - Morbidity and Mortality Weekly Report - Surveillance Summaries 63, No.2, 2014.

[4] Autori vari. 2012. The NICE Guideline on Recognition, Referral, Diagnosis and Management of Adults on the Autism Spectrum: A cura di National Collaborating Centre for Mental Health (The British Psychological Society & Section of The Royal College of Psychiatrists), United Kingdom.

[5] Ardiana Sula, Evjola Spaho, Using Assistive Technologies in Autism Care Centers to Support Children, Academic Journal of Interdisciplinary Studies, Roma, MCSER Publishing, Vol 3 No 1 pag. 203, 2014, ISSN 2281-3993

[6] First, 2014. DSM-5 Handbook of Differential Diagnosis. American Psychiatric Publishing, Washington D.C.: APA. pp. 57-60

[7] Autori vari, 2013. Autismo a scuola: Strategie efficaci per gli insegnanti. Trento, Centro studi Erickson.

[8] Trevarthen, Delafield-Butt, 2013. Autism as a developmental disorder in intentional movement and affective engagement. US, National Library of Medicine

[9] Ardiana Sula, 2014. Academic Journal of Interdisciplinary Studies. Vol 3 No 1 pag. 203. Roma. MCSER Publishing.

[10] Autori vari. 2017. Augmented Reality, Virtual Reality, and Computer Graphics. A cura di De Paolis, Bourdot, Mongelli. Germany. Springer International Publishing AG.

[11] Chianese, Moscato, Picariello, Sansone. 2015. Sistemi di basi di dati e applicazioni. Milano, Apogeo Education.

113

[12] Siciliano, Sciavicco, Villani, Oriolo. 2008. Robotica, modellistica pianificazione e controllo, 3rd ed. Milano. McGraw-Hill.

[13] Bolzern, Scattolini, Schiavoni. 2015. Fondamenti di controlli automatici, Milano. McGraw-Hill.

[14] Guinard. 2011. A Web of Things Application Architecture - Integrating the Real- World into the Web. Zurich, ETH

[15] Fantacci. 2014. Reti di Telecomunicazioni: Fondamenti e Tecnologie Internet. Bologna. Editrice Esculapio

[16] Nastro. 2004. Navigazione inerziale e integrata. Napoli. Alfredo Guida Editore [17] Choudhary, Iniewski. 2016. MEMS: Fundamental Technology and Applications.

US. CRC Press

[18] Biscari, Ruggeri, Saccomandi, Vianello. 2015. Meccanica Razionale. Milano. Springer Verlag Italia.

[19] Guerriero. 2003. Funzioni di due variabili, continuità, derivabilità, differenziabilità. Milano. Alpha Test.

[20] Korvink, Paul. 2006. MEMS: A practical guide to design, analysis and applications. Germany. Springer International Publishing AG.

[21] Acar, Shkel. 2008. MEMS Vibratory Gyroscopes Structural Approaches to Improve Robustness. Germany. Springer International Publishing AG. [22] Kaajakari. 2009. Practical MEMS: Design of microsystems, accelerometers,

gyroscopes, RF MEMS, optical MEMS, and microfluidic systems. US. Small Gear Publishing.

[23] Pervin, Webb. 1982. Quaternions in Computer Vision and Robotics. US. Carnegie-Mellon University.

[24] Dirksen. 2015. Learning Three.js - the JavaScript 3D Library for WebGL - Second Edition. Birmingham. Packt publishing

[25] Galeotti. 2014. Sviluppo di filtri di Kalman per la realizzazione di tre AHRS. Germania. Edizioni Accademiche Italiane

[26] Kingston, Beard. 2004. Real-time attitude and position estimation for small UAVs using low-cost sensors. “Journal of Aerospace Computing Information and Communication”. US. American Institute of Aeronautics and Astronautics. [27] Liu, Zhou, X.Fu. 2008. Attitude determination for mavs using a kalman filter.

“Tsinghua Science and Technology, vol. 13, no. 5, pp. 593 –597.

114

Sitografia

[1] IRCCS STELLA MARIS. Voce Home. http://www.irccs-stellamaris.it (visitato il 10 aprile 2017)

[2] Autismo. Voce Autismservice Home. http://www.autismservice.org, (visitato il 23 maggio 2017).

[3] Centers for Disease Control and Prevention. Voce Autism,

https://www.cdc.gov/ncbddd/autism/index.html (visitato il 11 febbraio 2017). [4] Research autism. Voce Assistive and Adaptive Technology and Autism,

http://researchautism.net/autism-interventions/types/assistive-and-adaptive- technology (visitato il 4 gennaio 2017).

[5] Isasi-Cnr. Voce Sistemi intelligenti per la ricerca sull’autismo, http://www.isasi.cnr.it/?p=1469 (visitato il 4 marzo 2017).

[6] Indiana University Bloomington. Voce The use of technology in treatment of autisms spectrum disorders, https://www.iidc.indiana.edu/pages/the-use-of- technology-in-treatment-of-autism-spectrum-disorders (visitato il 14 marzo 2017) [7] Harmonia Mentis. Voce Un gioco per tablet a supporto della diagnosi precoce

di autismo, http://www.harmoniamentis.it/cont/news/articles/4097/gioco-tablet- supporto-della-diagnosi-precoce-autismo.asp (visitato il 29 marzo 2017). [8] Internet of Things. Voce Standards and Guidance from the IETF,

https://www.internetsociety.org/publications/ietf-journal-april-2016/internet- things-standards-and-guidance-ietf (visitato il 23 maggio 2017).

[9] MEMS. Voce Intro MEMS, http://memscyclopedia.org/introMEMS.html. (visitato il 15 gennaio 2017).

[10] MQTT. Voce MQTT Org. http://mqtt.org/ (visitato il 29 marzo 2017). [11] MQTT. Voce building-facebook-messenger.

https://www.facebook.com/notes/facebook-engineering/building-facebook- messenger/10150259350998920. (visitato il 29 marzo 2017).

[12] MQTT. Voce MQTT Essentials Part 5. http://www.hivemq.com/blog/mqtt- essentials-part-5-mqtt-topics-best-practices. (visitato il 29 marzo 2017). [13] Node.Js. Voce Node. Js. https://nodejs.org. (visitato il 10 marzo 2017).

[14] MongoDB. Voce manual https://docs.mongodb.com/manual/. (visitato il 15 maggio 2017)

115

it/library/dn479430(v=vs.85).aspx. (visitato il 10 marzo 2017).

[16] Raspberry. Voce Home. https://www.raspberrypi.org/. (visitato il 10 marzo 2017).

Documenti correlati