directx sdk
Transcript
BCI LEZIONI DI LABORATORIO Come interfacciare BCI mindwave ed emotiv Neurosky Mindwave • Obiettivo: integrare Neurosky Mindwave in un ambiente grafico per la creazione di esperimenti/giochi rispondenti a comandi mentali • Proviamo prima con integrazione in C++ con un motore di gioco molto documentato su Internet • Trattiamo quindi l’esperimento come se si trattasse di un gioco Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Ambiente di sviluppo GUI • darkgdk.thegamecreators.com • scaricate ambiente di sviluppo Dark GDK per videogames in Visual C++ – insieme di librerie e oggetti grafici – utilizzano Microsoft DirectX • installare Microsoft Visual C++ 2008 (o 2010) • installare Microsoft DirectX 9.0c SDK • installare Dark GDK • Microsoft’s DirectX 9.0c SDK è reperibile qui: http://download.microsoft.com/download/3/3/f/33f1af6ec61b-4f14-a0de-3e9096ed4b3a/dxsdk_aug2007.exe Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Risultato dell’installazione • Tutorials: progetti Visual C++ di esempio e modello. • Samples: progetti più complicati. Es. Sample Viewer • Media: alcuni oggetti musicali e grafici da utilizzare nei videogames. • Documentation: file di Help con descrizione di tutte le funzioni • Al primo tentativo di compilare un progetto, potremmo avere messaggi di errore da parte del sistema. Occorrerà allora impostare manualmente i percorsi delle directory VC++, come mostrato nella slide successiva Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Percorsi delle directory • Strumenti>Opzioni Bottone per aggiungere un percorso percorsi • Impostare anche i percorsi delle librerie (file .lib) • Ora la compilazione non darà errori Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Creare un’interfaccia gioco/esperimento (1) • Si possono ora creare oggetti da poter poi muovere con il mindset • Vediamo un programma per creare un cubo rotante void DarkGDK ( void ) { // this is the entry point for the program // switch on sync rate and set the maximum // refresh rate to 60 frames per second dbSyncOn ( ); dbSyncRate ( 60 ); // make our cube, load the effect and apply // it to our object dbMakeObjectCube ( 1, 1 ); dbLoadEffect ( "DetailMapping.dbs", 1, 1 ); dbSetObjectEffect ( 1, 1 ); dbSetEffectConstantFloat ( 1, "detailScale", 1 ); Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Creare un’interfaccia gioco/esperimento (2) // main program loop while ( LoopGDK ( ) ) Anche qui c'è la struttura di ripetizione { // rotate the object dbTurnObjectLeft ( 1, 0.5 ); // update the screen dbSync ( ); } } Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Modello di programma vuoto // whenever using Dark GDK you must include the header file #include "DarkGDK.h" // the main entry point for the application is this function void DarkGDK ( void ) { // at the start of the program we will switch the sync rate on dbSyncOn ( ); dbSyncRate ( 60 ); // this is our main loop while ( LoopGDK ( ) ) { // inside our main loop we can control the logic of the program, // the final call in our main loop is to dbSync, this function will // update the screen and draw any graphics dbSync ( ); } // return back to windows return; } Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Come usare le funzioni di DarkGDK (1) file Dark GDK.hlp nella cartella Documentation. Categorie di comandi: 1. CORE COMMANDS 2. TEXT COMMANDS 3. INPUT COMMANDS 4. FILE COMMANDS 5. DISPLAY COMMANDS 6. BASIC2D COMMANDS 7. BITMAP COMMANDS 8. SOUND COMMANDS 9. MUSIC COMMANDS 10. SPRITE COMMANDS 11. IMAGE COMMANDS 12. LIGHT COMMANDS 13. CAMERA COMMANDS 14. BASIC3D COMMANDS 15. MATRIX COMMANDS 16. WORLD COMMANDS 17. PARTICLES COMMANDS 18. 3DMATHS COMMANDS 19. FTP COMMANDS 20. MEMBLOCKS COMMANDS 21. MULTIPLAYER COMMANDS 22. SYSTEM COMMANDS 23. TERRAIN COMMAND • funzioni i cui prototipi sono descritti nei corrispondenti file di inclusione che si trovano nella cartella INCLUDE. • Es funzioni che realizzano aggiornamento dello schermo (categoria CORE): dbSyncOn : void dbSyncOn ( void ) dbSyncOff : void dbSyncOff ( void ) dbSync : void dbSync ( void ) dbSyncRate : void dbSyncRate ( int iRate ) Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Come usare le funzioni di DarkGDK (2) blocco note – aprire il file DarkSDKCore.h in cui si trova la definizione dei prototipi delle funzioni: voiddbSyncOn ( void ); voiddbSyncOff ( void ); voiddbSync( void ); voiddbSyncRate ( int dbiRate ); categoria particolarmente interessante: • BASIC3D – contiene comandi per visualizzare, manipolare, muovere, far collidere oggetti tridimensionali – utilissimi nella creazione di videogames. • Personaggi creati in Blender possono essere utilizzati in DarkGDK Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Leggere i segnali rilevati da Mindwave • • • Per leggere i segnali EEG rilevati da Mindwave ho bisogno di installare i componenti del mindset development tool (MTD), reperibili gratuitamente qui: http://store.neurosky.com/products/mindset-development-tools MTD ha 3 livelli di interfaccia per comunicare con l’haedset Mindwave: 1. 2. 3. • ThinkGear Connector (TGC), eseguibile Windows e Mac OS ThinkGear Communications Drivers (TGCD), librerie per Windows, Windows Mobile, Mac OS X e J2ME (Symbian) ThinkGear Stream Parser, codice sorgente per ogni piattaforma C I primi due livelli più alti forniscono supporto per le più comuni piattaforme, quali Windows e Mac OS X, mentre il livello più basso, Stream Parser interface fornisce codice sorgente e specifiche per la comunicazione a basso livello che permettono l’interfaccia al mindwave virtualmente su ogni piattaforma che possa ricervere un stream dati seriale Bluetooth Prof. R. Folgieri Realtà Virtuali aa 2010/2011 ThinkGear • ThinkGear è la tecnologia che abilita i device NeuroSky ad interfacciare chi indossa un brain headset • ThinkGear include i sensori posti sullo scalpo, i punti di contatto e di riferimento posti sull’orecchio e sul lobo auricolare ed il chip posto sul BCI che processa i dati • Sia le onde cerebrali che gli “eSense Meters” (attenzione e meditazione) vengono lette dal chip • La tecnologia ThinkGear abilita i tool di sviluppo, i driver e le api dell’MDT Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Leggere il mindwave dalla porta adeguata (1) 1. 2. 3. Creiamo un nuovo progetto, con Visual Studio o Visual C++ (vanno entrambi bene) – Usiamo il template in "Visual C/C++ > Win32 > Win32 Console Application" – Chiamiamo il progetto "thinkgear_testapp" – Mettiamolo in una cartella “Solution” – Click OK. Quando compare il Win32 Application Wizard, selezioniamo "Application Settings": – in “Application type” selezioniamo "Console application” – nelle Additional options, assicuriamoci che sia selezionato solo “Empty project" – in common header files non deve essere selezionato nulla – click Finish Copiamo i file “thinkgear.h", "thinkgear.lib", e "thinkgear_testapp.c" files nella directory di progetto di thinkgear_testapp Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Leggere il mindwave dalla porta adeguata (2) 4. In Visual Studio, click con il tasto ds del mouse sul folder "Source Files": – Selezioniamo "Add" > "Existing Item..." – Selezioniamo il file "thinkgear_testapp.c" nel folder thinkgear_testapp 5. Click con il tsto ds del mouse sul folder "Header Files": – Selezioniamo "Add" > "Existing Item..." – Selezioniamo il file "thinkgear.h" nel folder thinkgear_testapp 6. Click con il tasto ds del mouse sul progetto "thinkgear_testapp": – Selezioniamo "Add" > "Existing Item..." – Selezioniamo il file "thinkgear.lib" nel folder thinkgear_testapp (probabilmente dovremo cambiare "Files of type" sotto "All Files", e ignorare ogni messaggio) 7. Costruiamo il progetto (Build) (il file "thinkgear_testapp.exe" dovrebbe apparire nel folder "SOLUTION\Debug\") Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Leggere il mindwave dalla porta adeguata (3) 8. Copiamo il file "thinkgear.dll" nello stesso folder del file "thinkgear_testapp.exe" ("SOLUTION\Debug\") 9. Assicuriamoci ora che l’headset sia connesso al computer alla COM corretta** 10. Eseguiamo il file "thinkgear_testapp.exe" e leggiamo i valori delle onde EEG 11. Ora possiamo leggere, comprendere ed adttare il codice del file thinkgear_testapp.cpp ai nostri progetti per collezionare i dati dall’Headsets 12. Nell’API documentation potete trovare tutti I dettagli relativi alle API ThinkGear ** modificare, se necessario, il numero della porta COM mediante il Device Manager Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Leggere il mindwave dalla porta adeguata (4) Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Leggere il mindwave dalla porta adeguata: il programma in Visual C ++ commentato (1) #include <stdlib.h> #include <stdio.h> #include "thinkgear.h" /** * Prompts and waits for the user to press ENTER. */ void wait() { printf( "\n" ); printf( "Press the ENTER key...\n" ); fflush( stdout ); getc( stdin ); } /** * Program which prints ThinkGear EEG_POWERS values to stdout. */ Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Leggere il mindwave dalla porta adeguata: il programma in Visual C ++ commentato (2) int main( void ) { char *comPortName = NULL; int dllVersion = 0; int connectionId = 0; int attPacketsRead = 0; int errCode = 0; int attention=0; /* Print driver version number */ dllVersion = TG_GetDriverVersion(); printf( "ThinkGear DLL version: %d\n", dllVersion ); /* Get a connection ID handle to ThinkGear */ connectionId = TG_GetNewConnectionId(); if( connectionId < 0 ) { fprintf( stderr, "ERROR: TG_GetNewConnectionId() returned %d.\n", connectionId ); wait(); exit( EXIT_FAILURE ); } Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Leggere il mindwave dalla porta adeguata: il programma in Visual C ++ commentato (3) /* Set/open stream (raw bytes) log file for connection */ errCode = TG_SetStreamLog( connectionId, "streamLog.txt" ); if( errCode < 0 ) { fprintf( stderr, "ERROR: TG_SetStreamLog() returned %d.\n", errCode ); wait(); exit( EXIT_FAILURE ); } /* Set/open data (ThinkGear values) log file for connection */ errCode = TG_SetDataLog( connectionId, "dataLog.txt" ); if( errCode < 0 ) { fprintf( stderr, "ERROR: TG_SetDataLog() returned %d.\n", errCode ); wait(); exit( EXIT_FAILURE ); } Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Leggere il mindwave dalla porta adeguata: il programma in Visual C ++ commentato (4) /* Attempt to connect the connection ID handle to serial port "COM5" */ comPortName = "\\\\.\\COM17"; errCode = TG_Connect( connectionId, comPortName, TG_BAUD_9600, TG_STREAM_PACKETS ); if( errCode < 0 ) { fprintf( stderr, "ERROR: TG_Connect() returned %d.\n", errCode ); wait(); exit( EXIT_FAILURE ); } Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Leggere il mindwave dalla porta adeguata: il programma in Visual C ++ commentato (5) /* Read 10 ThinkGear Packets from the connection, 1 Packet at a time */ attPacketsRead = 0; while( attPacketsRead < 100 ) { /* Attempt to read a Packet of data from the connection errCode = TG_ReadPackets( connectionId, -1 );*/ int packetsRead = TG_ReadPackets(connectionId, -1); /* If TG_ReadPackets() was able to read a complete Packet of data... */ if( packetsRead > 0 ) { /* If attention value has been updated by TG_ReadPackets()... if( TG_GetValueStatus(connectionId, TG_DATA_ATTENTION) != 0 ) */ if(TG_GetValueStatus(connectionId, 2) != 0){ attention = TG_GetValue(connectionId, 2); attPacketsRead++; /* Get and print out the updated attention value */ fprintf( stdout, "New attention value: %d\n",attention ); fflush( stdout ); } /* end "If attention value has been updated..." */ } /* end "If a Packet of data was read..." */ } /* end "Read 10 Packets of data from connection..." */ /* Clean up */ TG_FreeConnection( connectionId ); /* End program */ wait(); return( EXIT_SUCCESS ); } Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Integrare Mindwave: segnali, controlli e oggetti grafici • Ora che sappiamo come leggere i segnali del mindwave, dobbiamo: – Creare un ambiente grafico per l’esperimento – Collegare l’oggetto(i) grafico creato ai controlli • Ecco un esempio (Visual C ++), in cui – Viene creato uno sprite rappresentante un cubo – Si resta in ascolto dei segnali EEG – A seconda dei livelli di attenzione raggiunti, lo sprite ruota Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Integrare Mindwave in applicazione: esempio (1) // Dark GDK - The Game Creators - www.thegamecreators.com // include DarkGDK header file #include "DarkGDK.h" #include <stdlib.h> #include <stdio.h> #include "thinkgear.h" void DarkGDK ( void ) { inizio programma // settaggio del refresh rate a 60 frames per secondo // parte inizializzazione porte char *comPortName = NULL; int dllVersion = 0; int connectionId = 0; int attPacketsRead = 0; int errCode = 0; int attention=0; dbSyncOn ( ); dbSyncRate ( 60 ); Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Integrare Mindwave in applicazione: esempio (2) // caricamento dell’oggetto cubo e applicazione del layer desiderato dbMakeObjectCube ( 1, 1 ); dbLoadEffect ( "DetailMapping.dbs", 1, 1 ); dbSetObjectEffect ( 1, 1 ); dbSetEffectConstantFloat ( 1, "detailScale", 1 ); // verifica versione drivers installati e loro presenza nel sistema dllVersion = TG_GetDriverVersion(); // inizializzazione id di sessione e configurazione del bus di ascolto sulla porta //16 (quella che risulta essere utilizzata dal mindset) connectionId = TG_GetNewConnectionId(); comPortName = "\\\\.\\COM16"; errCode = TG_Connect( connectionId, comPortName, TG_BAUD_9600, TG_STREAM_PACKETS ); attPacketsRead = 0; Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Integrare Mindwave in applicazione: esempio (3) // main program loop while ( LoopGDK ( ) ) { // lettura pacchetto dati dalla porta com int packetsRead = TG_ReadPackets(connectionId, -1); if( packetsRead > 0 ) { // se il valore letto relativo all’attenzione è diverso da 0 if(TG_GetValueStatus(connectionId, 2) != 0){ attention = TG_GetValue(connectionId, 2); // se il valore attenzione è superiore a 40, rotazione del cubo if(attention > 40){ dbSetCursor(10,10); dbPrint(double(attention)); // rotazione oggetto dbTurnObjectLeft ( 1, 0.5 ); } attPacketsRead++; } } // forzatura refresh dello schermo dbSync ( ); } } Realtà Virtuali aa 2010/2011 Prof. R. Folgieri ThinkGear in python • • • • In Blender è incluso un motore python disponibile un modulo python che fa il parser del protocollo ThinkGear Funziona sia in Linux che in Windows A questo link si trova il modulo (al momento la porta com deve essere impostata a mano): http://github.com/groner/pythinkgear/ Prof. R. Folgieri Realtà Virtuali aa 2010/2011 ThinkGear in python: getting start • • • Serve python 2.6 Per download e install del modulo pythinkgear: easy_install thinkgear (add on per scaricare e installare facilmente che si scarica dal Python Package index (pypi.python.org), e precisamente da http://peak.telecommunity.com/dist/ez_setup.py ora dalla shell python (avvio python in console mode), lanciare rfcomm_device=raw_input(‘num porta del mindwave (e.g. COM1)? ') import logging import thinkgear logging.basicConfig(level=logging.DEBUG) for pkt in thinkgear.ThinkGearProtocol(rfcomm_device).get_packets(): packet_log.append(pkt) • alla fine deve esserci una riga vuota. Questa serie di comandi comincerà ad inviare il log con i pacchetti attention/meditation/poor signal/eeg che riceve dal mindset Prof. R. Folgieri Realtà Virtuali aa 2010/2011 ThinkGear in python: getting start • Dopo tante prove e bipbip…. Serve anche http://sourceforge.net/projects/pyserial/ • Purtroppo la documentazione non è delle più chiare e non si trovano esempi • Occorre andare per tentativi • Pyton – Blender può leggere i segnali Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Leggere Epoc Emotiv in python (1) • L’headset Emotiv Epoc ha 14 sensori EEG • Esiste un SDK a disposizione per scopi di ricerca, acquistabile a $750, per ambiente Windows e totalmente proprietario. • Cody Brocious ha però avviato l’Emokit project, una interfaccia open source per l’EPOC. • Il codice è disponibile su github nel repository daeken/Emokit • Contiene una libreria Python per interagire con l’EPOC e per mostrare graficamente I dati rilevati dai sensori https://github.com/daeken/Emokit • La libreria consente di accedere ai dati Eeg da Emotiv EPOC su Windows, Linux, e OS X con Python. Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Leggere Epoc Emotiv in python (3) Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Leggere Epoc Emotiv in python (4) Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Neurosky Mindwave ed Epoc Emotiv in Blender con Python • Blender ha un motore python incorporato • attraverso il quale è possibile, dunque, utilizzare le librerie viste sia con Neurosky mindwave, sia con Emotiv Epoc • Vedremo – Come programmare in python – Come utilizzare python e includere librerie in blender Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Open VIBE – Open-Source Software Platform for Brain-Computer Interfaces and Virtual Reality • http://openvibe.inria.fr • Documentazione: http://openvibe.inria.fr/documentation/unstable • Sistema modulare per organizzare velocemente ambienti sperimentali SOGGETTO • Più punti di vista OPERATORE Prof. R. Folgieri AUTORE Realtà Virtuali aa 2010/2011 Open VIBE – funzionalità • Piattaforma per analisi e processing real time di dati cerebrali (EEG, ECoG, MEG...) : – Acquisizione, pre-processing, processing e display • Forum: http://openvibe.inria.fr/forum Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Open VIBE – Scenario designer • Graphical User Interface – Non necessario programmare – User-friendly – WYSIWYG – Per creare, monitorare e raffinare scenari BCI • Supporta più device – anche neurosky e epoc Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Open VIBE – tool di visualizzazione Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Open VIBE – presentazione stimuli Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Open VIBE – presentazione stimuli Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Open VIBE – presentazione stimuli Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Open VIBE – presentazione stimuli Prof. R. Folgieri Realtà Virtuali aa 2010/2011 Open VIBE – presentazione stimuli Prof. R. Folgieri Realtà Virtuali aa 2010/2011 BCI2000: tool per esperimenti • http://www.bci2000.org/wiki/index.php/Programming_Howto:Quick start_Guide • Occorre creare un account • Per chi è interessato: segnalare, perché l’account può essere creato come lab • Brain-controlled word processor: http://www.youtube.com/watch?v=J4Qw-iY6OGk Prof. R. Folgieri Realtà Virtuali aa 2010/2011 BCI2000: tool per esperimenti • Occorre sempre lanciare moduli per: – Signal source – Signal processing – Application » Prof. R. Folgieri un aiuto: BCI2000Launcer.exe Realtà Virtuali aa 2010/2011
Documenti analoghi
Il problem solving e LabView Applicazioni possibili
Prof. Raffaella FOLGIERI
DEAS, Dipartimento di Scienze Economiche, Aziendali e Statistiche
aa 2011/2012
ideal world
Storytelling: campi di applicazione (2)
A livello internazionale, disciplina di per sé ampia e
articolata. Spesso applica all’Impresa i principi di
narrazione per diverse funzioni aziendali. Es:
Corel Draw 7
assumendo la forma di una doppia freccia. Tenendo premuto il pulsante sinistro (del mouse) e
trascinando il puntatore lungo la direzione indicata, l'oggetto selezionato verrà ridimensionato
(allarg...
MS ACCESS Corso base
Il disegno di un database basato sul modello entity-relationship passa
attraverso varie fasi. Ricordiamo che perché un database sia ottimizzato, cioé
non presenti ridondanze (per semplificare: dati...