directx sdk

Transcript

directx sdk
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

Il problem solving e LabView Applicazioni possibili Prof. Raffaella FOLGIERI DEAS, Dipartimento di Scienze Economiche, Aziendali e Statistiche aa 2011/2012

Dettagli

ideal world

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:

Dettagli

Corel Draw 7

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...

Dettagli

MS ACCESS Corso base

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...

Dettagli