Universidade de Brasília -...

80

Transcript of Universidade de Brasília -...

Page 1: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Universidade de BrasiacuteliaInstituto de Ciecircncias Exatas

Departamento de Ciecircncia da Computaccedilatildeo

Um Estudo sobre Interface Ceacuterebro-Computador

Renato Carrasco Costa

Vanessa Mendes de Oliveira

Monograa apresentada como requisito parcial

para conclusatildeo do Bacharelado em Ciecircncia da Computaccedilatildeo

Orientador

Prof Dr Pedro de Azevedo Berger

Brasiacutelia

2012

Universidade de Brasiacutelia UnB

Instituto de Ciecircncias Exatas

Departamento de Ciecircncia da Computaccedilatildeo

Bacharelado em Ciecircncia da Computaccedilatildeo

Coordenador Prof Dr Alexandre Zaghetto

Banca examinadora composta por

Prof Dr Pedro de Azevedo Berger (Orientador) CICUnB

Prof Dr Professor George Freitas von Borries PhD ESTUnB

Prof Dr Professor Cristiano Jacques Miosso PhD FGAUnB

CIP Catalogaccedilatildeo Internacional na Publicaccedilatildeo

Costa Renato Carrasco

Um Estudo sobre Interface Ceacuterebro-Computador Renato Carrasco

Costa Vanessa Mendes de Oliveira Brasiacutelia UnB 2012

157 p il 295 cm

Monograa (Graduaccedilatildeo) Universidade de Brasiacutelia Brasiacutelia 2012

1 Interface Ceacuterebro Maacutequina 2 Interface Ceacuterebro Computador

3 BCI 4 BMI 5 EEG 6 Eletroencefalograa 7 Imageacutetica Motora

8 OpenVibe 9 Emotiv Epoc Headset

CDU 0044

Endereccedilo Universidade de Brasiacutelia

Campus Universitaacuterio Darcy Ribeiro Asa Norte

CEP 70910-900

BrasiacuteliaDF Brasil

Universidade de BrasiacuteliaInstituto de Ciecircncias Exatas

Departamento de Ciecircncia da Computaccedilatildeo

Um Estudo sobre Interface Ceacuterebro-Computador

Renato Carrasco Costa

Vanessa Mendes de Oliveira

Monograa apresentada como requisito parcial

para conclusatildeo do Bacharelado em Ciecircncia da Computaccedilatildeo

Prof Dr Pedro de Azevedo Berger (Orientador)

CICUnB

Prof Dr Professor George Freitas von Borries PhD Prof Dr Professor Cristiano Jacques Miosso PhD

ESTUnB FGAUnB

Prof Dr Alexandre Zaghetto

Coordenador do Bacharelado em Ciecircncia da Computaccedilatildeo

Brasiacutelia 07 de julho de 2012

Dedicatoacuteria

Dedicamos ao grupo de BMI da UnB aos professores e interessados no assunto

i

Agradecimentos

Considero que na vida todas as accedilotildees satildeo iniciadas por uma ideia Essa ideia pode serimplantada por uma grande accedilatildeo um conselho uma sugestatildeo ou ateacute um simples gestoEacute o que chamamos de inspiraccedilatildeo

Em minha vida tive muitas pessoas que me inspiraram me ajudando a ser o que souhoje

A primeira delas eacute minha matildee que teve um aacuterduo trabalho e se esforccedilou muito para mecriar como matildee solteira me afastando dos maus caminhos me ensinando valores moraise eacuteticos Me tornei a pessoa que sou hoje graccedilas a seu esforccedilo sobrehumano para mantera nossa famiacutelia unida Eacute nela que me inspiro para me tornar cada dia melhor

Em seguida gostaria de agradecer a minha irmatilde que sempre me inspirou com seuesforccedilo e inteligecircncia nos estudos e a minha voacute que considero a minha primeira professorade matemaacutetica Agradeccedilo a meu irmatildeo Marcelo por ter me iniciado nos estudos dealgoritmos o que me inuenciou bastante na escolha do meu curso de graduaccedilatildeo e aminha namorada que sempre me apoiou nos estudos

Acho que os amigos e colegas de escola satildeo as primeiras inspiraccedilotildees que temos fora dafamiacutelia Satildeo as primeiras ideias diferentes do nosso nuacutecleo familiar Por isso gostaria deagradecer a todos os amigos e colegas que tive durante os anos de estudo do preacute-escolarateacute a graduaccedilatildeo mas em especial gostaria de agradecer ao meu amigo que considero umirmatildeo Murilo que me inspirou a fazer meu trabalho de graduaccedilatildeo relacionado a InterfaceCeacuterebro Maacutequina e me deu um enorme apoio natildeo somente com o projeto mas tambeacutemem minha vida Gostaria tambeacutem de agradecer ao Emerson por toda a ajuda fornecidadurante o projeto Sei que sem ele esta monograa teria sido muito mais complicada dese fazer

Para nalizar gostaria tambeacutem de agradecer aos professores que tive por tentarem mepassar todo o conhecimento que me eacute necessaacuterio para a vida acadecircmica e prossional

Renato Carrasco Costa

ii

Agradecimentos

Ao longo dos anos pude conhecer diversas pessoas que me ajudaram a ser quem souhoje A elas devo todo o agradecimento

Primeiramente agradeccedilo a Deus que foi a quem me apeguei em todos os momentosdifiacuteceis Em todas as horas em que vontade de desistir era grande era Nele que euencontrava forccedilas para continuar trilhando pelos bons caminhos

Em seguida gostaria de agradecer agraves pessoas mais importantes de minha vida meupai e minha matildee A meu pai por sempre ter me inspirado a buscar diculdades e querervencecirc-las Por ter inuenciado meu interesse pela aacuterea de Exatas e por todo o apoio dadoao longo desses anos custeando meus estudos Agrave minha matildee por todo o carinho e amorincondicional demonstrados em toda minha vida Por sempre estar ao meu lado quandoeu precisei Por me chamar a atenccedilatildeo quando eu comeccedilava a desviar do caminho corretoPor me aguentar com toda a paciecircncia do mundo nos meus piores dias sejam de estressesejam de tristeza E por ser a melhor amiga do mundo com quem eu pude compartilhardiversos momentos de muita alegria e ateacute alguns ruins estes que logo passaram com todoo seu apoio Realmente a base da vida eacute a famiacutelia Algo que noacutes soacute conseguimos entenderapoacutes adquirir um pouco de maturidade

Agradeccedilo tambeacutem aos professores do Ensino Meacutedio que me zeram ter certeza docaminho que eu queria seguir na faculdade Aos da UnB e ao Emerson que foram defundamental apoio nesse trabalho e principalmente por terem ajudado na construccedilatildeodiaacuteria de conhecimento para a vida prossional

Gostaria de agradecer aos colegas de curso com os quais pude compartilhar de horasmuito difiacuteceis nos dias anteriores agrave apresentaccedilatildeo de trabalhos e realizaccedilotildees de provasassim como tambeacutem de dias muito alegres e festivos

Ao pessoal do trabalho com os quais pude aprimorar meus conhecimentos e princi-palmente ao Nogueira Este me inspirou a seguir o rumo da Interface Ceacuterebro MaacutequinaSempre me apoiando mandando artigos e revistas para ampliar meu conhecimento

Finalmente aos amigos pois esses satildeo realmente a famiacutelia que noacutes natildeo escolhemosEles nos apoiam fora de casa quando noacutes somos obrigados a encarar o mundo laacute fora Den-tre eles natildeo posso deixar de citar alguns nomes muito importantes algumas de amizadesde muitos anos Joana grande amiga e irmatilde agrave qual devo muitos aprendizados Kaacuteritagrande companheira de trabalho que sempre me inspirou com a literatura e o portuguecircsRenato colega de curso amigo e grande inspirador da minha escolha pelo projeto Liacutegiapelas noites que passamos acordadas estudando para as piores provas sempre me dandoforccedilas e me alegrando Luiz meu grande amigo e namorado que esteve ao meu lado emqualquer momento me apoiando a passar pelas diculdades no projeto e na vida

Vanessa Mendes de Oliveira

iii

Resumo

Este trabalho consiste em um estudo sobre Interface Ceacuterebro Computador (ICC) e davalidaccedilatildeo desse conhecimento por meio do desenvolvimento de um jogo A blibliograafoi composta de leitura de livros artigos e monograas relativos agrave ICC O programadesenvolvido foi um jogo simulador de tecircnis de mesa controlado pela interpretaccedilatildeo dossinais obtidos por um capacete neural Aleacutem disso foi utilizado o programa OpenViBEpara desenvolver a aquisiccedilatildeo e classicaccedilatildeo de dados Para anaacutelise da implementaccedilatildeo foifeito um experimento com a participaccedilatildeo de 10 indiviacuteduos que alcanccedilou uma taxa declassicaccedilatildeo em torno de 70 Os dados resultantes mostraram que mesmo simulando ouso do capacete em situaccedilotildees reais com a incidecircncia de muito ruiacutedo eacute possiacutevel obter-seuma boa taxa classicaccedilatildeo

Palavras-chave Interface Ceacuterebro Maacutequina Interface Ceacuterebro Computador BCI BMIEEG Eletroencefalograa Imageacutetica Motora OpenVibe Emotiv Epoc Headset

iv

Abstract

This work consists of a study about Brain Machine Interface (BMI) and validationof this knowledge with the development of a game The bibliography was composed byreading books articles and undergraduate works about BMI The developed software wasa game of table tenis controlled by the interpretation of signals obtained by a neural-headset Futhermore the OpenViBE application was used to develop the aquisition andclassication of the data For analysis of the implementation an experiment was madewith the participation of some subjects in which the classication rate reached around70 The resultant data shows that even simulating the usage of the headset in realsituations with a high quantity of noise it is possible to obtain a good classication rate

Keywords Brain Machine Interface Brain Computer Interface BCI BMI EEG Elec-troencephalography Motor Imagery OpenVibe Emotiv Epoc Headset

v

Sumaacuterio

1 Introduccedilatildeo 1

11 Contextualizaccedilatildeo 112 Foco do trabalho 313 Objetivo 314 Justicativa 415 Organizaccedilatildeo dos Capiacutetulos 4

2 Fundamentaccedilatildeo 5

21 A Biologia por traacutes do EEG 5211 Estrutura e funccedilatildeo do neurocircnio 5212 Como funciona a troca de potenciais 6213 O sinal de EEG 6

22 Artefatos bioloacutegicos 8221 Eletrooculograma 8222 Eletrocardiograma 10223 Eletromiograa 10

23 Artefatos teacutecnicos 11231 Frequecircncia de 5060 Hz 11232 Artefato do amplicador 11

24 Imageacutetica Motora 1225 Emotiv Epoc 13

251 Posicionamento de eletrodos 13252 Emotiv Epoc Headset 14

26 OpenViBE 1827 Classicadores 1828 Extraccedilatildeo de sinais utilizando a energia de banda 18

3 Trabalhos relacionados 19

31 Carro controlado pelo ceacuterebro 1932 NeuroPhone 2033 Controle para o Second Life 2134 Controle do braccedilo de um robocirc 2235 BrainTalk 23

vi

4 Processo de desenvolvimento 24

41 Aquisiccedilatildeo de Sinais de EEG 2442 O Experimento 2643 Cenaacuterios 26

431 Monitoramento de Sinais 26432 Aquisiccedilatildeo de Sinais 27433 Treinamento dos Classicadores 28434 Online 32435 Replay 34436 Caacutelculo da porcentagem de acertos 35

44 Aplicativo desenvolvido 37441 Comunicaccedilatildeo do OpenViBE com o aplicativo 37442 Classes principais do aplicativo 38

5 Resultados e anaacutelise 39

51 Comparaccedilatildeo entre resultados de classicadores utilizados 39

6 Conclusatildeo 41

A Anexos 42

A1 Spriteh 42A2 Spritecpp 42A3 Barrah 45A4 Barracpp 46A5 GameManagerh 49A6 GameManagercpp 49A7 InputManagerh 54A8 InputManagercpp 55A9 Maincpp 58A10 Pongh 59A11 Pongcpp 60

Referecircncias 64

vii

Lista de Figuras

11 Preccedilos e comparaccedilotildees de custo-benefiacutecio de capacetes apenas dos maisbaratos (0-1000 doacutelares) (Adapatado de [37]) 2

21 Estrutura do neurocircnio (Adaptado de [39]) 522 Potencial de accedilatildeo de um neurocircnio [40] 623 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectados

pelo eletrodo do capacete [42] 724 Eletroencefalograa claacutessica (Adapatado de [9]) 825 Estrutura do olho e suas partes nomeadas (Adaptado de [3]) 926 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3]) 927 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5]) 1028 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada do

artefato de ECG (Adaptado de [35]) 1029 Sinal de EMG [2]) 11210 Artefato do amplicador analisado em graacuteco (Adaptado de [34]) 12211 Modelo 10-20 para ateacute 21 eletrodos [33] 14212 Modelo 10-20 para ateacute 75 eletrodos [33] 14213 Emotiv EPOC antes de ser montado (Adaptado de [23]) 15214 Vericando o estado dos eletrodos 16215 Detecccedilatildeo de movimentos da face do usuaacuterio 16216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo 17217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento 17218 Controlador de mouse 17

31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da uti-lizaccedilatildeo do Emotiv EPOC [30] 19

32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildeestelefocircnicas [25] 20

33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8] 2134 Exemplo de tela do Second Life com os possiacuteveis movimentos de um jogador[18] 2235 Braccedilo de um robocirc sendo controlado pelo capacete neural [43] 2236 Teclado virtual do sistema Brain talk[21] 23

41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc He-adset [28] 24

42 Tentativa sem feedback [28] 2543 Tentativa que contava com feedback [28] 2644 Cenaacuterio de monitoramento 27

viii

45 Cenaacuterio de aquisiccedilatildeo de sinais 2846 Cenaacuterio de treinamento 2947 Cenaacuterio de treinamento do ltro espacial CSP 3048 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM 3149 Cenaacuterio de treinamento do classicador usando o ltro CSP 32410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utiliza-

ccedilatildeo da barra azul como feedback 33411 Cenaacuterio de utilizaccedilatildeo online 33412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP 34413 Cenaacuterio de replay 35414 Cenaacuterio de caacutelculo de porcentagem de acertos 36415 Cenaacuterio de caacutelculo de porcentagem de acertos 36416 Jogo implementado 37

ix

Lista de Tabelas

11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvan-tagens (Adapatado de [19]) 2

21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22]) 13

31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8] 21

51 Tabela de porcentagem de acertos dos diferentes classicadores citados 40

x

Capiacutetulo 1

Introduccedilatildeo

11 Contextualizaccedilatildeo

No ano de 1929 Hans Berger [4] psiquiatra alematildeo publicou as primeiras paacuteginas deseu trabalho o eletroencefalograma (EEG) [22] Ele foi o primeiro a identicar ondas alfa(8-12 Hz) que satildeo atividades oscilatoacuterias no ceacuterebro Antes do registro dessas atividadesno ceacuterebro humano pesquisas jaacute haviam sido feitas em animais Entretanto foi apoacutesHans Berger que a quantidade de pesquisa feita sobre este oacutergatildeo cresceu bastante

O EEG eacute o registro da sincronizaccedilatildeo de milhares de sinais de neurocircnios em conjuntoDessa forma a localizaccedilatildeo exata da atividade de um neurocircnio eacute impossiacutevel de ser feitasomente com o EEG No entanto o registro de EEG associado a outras formas de registropermite resolver esse impasse Na Tabela 11 satildeo mostradas outras formas de se mensuraratividades neurais e suas respectivas desvantagens Devido ao alto custo envolvido nastecnologias apresentadas na Tabela 11 e principalmente agraves desvantagens como por exem-plo a exposiccedilatildeo agrave radiaccedilatildeo que outras tecnologias exigem o EEG tem sido o sinal maisutilizado para o desenvolvimento de pesquisa em Interface Ceacuterebro Computador (ICC)Aleacutem de ter bom custo-benefiacutecio sua utilizaccedilatildeo eacute bastante praacutetica

A ICC eacute uma teacutecnica que tenta interpretar os sinais eleacutetricos da superfiacutecie corticalou subcortical do ceacuterebro para interagir com o ambiente externo por meio de maacutequinasbuscando assim interpretar pensamentos referentes a movimento sem a necessidade domovimento real Por exemplo se um indiviacuteduo utilizador de ICC quiser mover o mousede um computador a tecnologia entenderia isso e realizaacute-la-ia sem o movimento das matildeosdo humano Essa tecnologia eacute um meio de comunicaccedilatildeo alternativo uacutetil para muitosobjetivos entre eles a possibilidade de ajudar um paciente impossibilitado de atividadesmotoras como um tetrapleacutegico a movimentar objetos

Para que seja possiacutevel a aplicaccedilatildeo da tecnologia ICC eacute necessaacuterio um aparelho que sejacapaz de captar as ondas emitidas pelo ceacuterebro um capacete neural Diante da grandequantidade de aparelhos o que se destacou foi o Emotiv Epoc como se pode observar deacordo com a Figura 11 A Figura 11a mostra alguns equipamentos com suas respectivasfaixas de preccedilo e algumas de suas funcionalidades Para efeitos de comparaccedilatildeo a Figura11b exibe a nota recebida por cada equipamento devido ao custo-benefiacutecio O destaquedo capacete Emotiv Epoc se deve ao melhor custo-benefiacutecio e agrave praticidade de utilizaccedilatildeoEle se acopla facilmente agrave cabeccedila e sua manipulaccedilatildeo eacute muito simples

1

Tecnologia Desvantagem

Electrocorticogram (ECoG) Exige cirurgiaMagneto-encephalography (MEG) Alto custoComputed Tomography (CT) Somente dados anatocircmicos

e exposiccedilatildeo agrave radiaccedilatildeoSingle Photon Emission Computerized Tomography (SPECT) Exposiccedilatildeo agrave radiaccedilatildeoPositron Emission Tomography (PET) Exposiccedilatildeo agrave radiaccedilatildeoMagnetic Resonance Imaging (MRI) CaraFunctional Magnetic Resonance Imaging (fMRI) CaraEvent-Related Optical Signal (EROS) Cara

Tabela 11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvanta-gens (Adapatado de [19])

(a) Capacetes neurais de baixo custo (b) Relaccedilatildeo custo-benefiacutecio

Figura 11 Preccedilos e comparaccedilotildees de custo-benefiacutecio de capacetes apenas dos mais baratos(0-1000 doacutelares) (Adapatado de [37])

2

O primeiro passo no processo eacute a aquisiccedilatildeo dos sinais cerebrais Para isso na literaturahaacute diversas teacutecnicas que se dividem em trecircs categorias as invasivas as semi-invasivas eas natildeo invasivas cada uma com suas devidas vantagens e desvantagens

A utilizaccedilatildeo da teacutecnica invasiva eacute uma oacutetima opccedilatildeo quando o foco eacute na captaccedilatildeo dedados com o miacutenimo de ruiacutedo Essa teacutecnica possibilita a diminuiccedilatildeo de ruiacutedos apesarde possuir como desvantagem a cirurgia que eacute necessaacuteria Nesta o cracircnio do indiviacuteduo eacuteaberto e eacute colocado no ceacuterebro eletrodos para captar os dados Tambeacutem como desvantagempode-se citar a faacutecil oxidaccedilatildeo dos eletrodos quando entram em contato com o sangue Ateacutecnica semi-invasiva eacute um pouco menos invasiva do que a primeira No entanto tambeacutemeacute necessaacuterio cirurgia Apesar disso a aquisiccedilatildeo de sinalruiacutedo eacute boa Jaacute a terceira teacutecnicacitada a natildeo-invasiva eacute a pior das trecircs em questatildeo de robustez ao ruiacutedo poreacutem eacute a demais faacutecil adaptaccedilatildeo agrave qualquer indiviacuteduo que tenha intenccedilatildeo de utilizaacute-la

Devido agraves caracteristicas destacadas este trabalho utiliza a teacutecnica natildeo invasiva comofonte de captaccedilatildeo de dados de EEG Com o uso do capacete Emotiv Epoc essa teacutecnicaeacute possibilitada De posse do aparelho comeccedilamos entatildeo fazendo essa aquisiccedilatildeo O se-gundo passo eacute o processamento do sinal e o reconhecimento de padrotildees atraveacutes do uso declassicadores Por uacuteltimo eacute necessaacuterio associar os dados obtidos agrave intenccedilatildeo do indiviacuteduo

Os estudos sobre ICC procuram adaptaacute-la ao uso no cotidiano Para avanccedilar nessaaacuterea eacute necessaacuterio o desenvolvimento de sistemas com elevada acuraacutecia e praticidade Paraaumentar a qualidade dos sistemas busca-se a implementaccedilatildeo de novos algoritmos para aaquisiccedilatildeo e a classicaccedilatildeo de sinais A cada dia novas aplicaccedilotildees estatildeo surgindo baseadasnessa tecnologia tanto de uso biomeacutedico quanto para jogos e outras aacutereas

12 Foco do trabalho

A imageacutetica motora eacute o processo mental no qual o indiviacuteduo imagina um determinadomovimento como por exemplo movimentar o braccedilo esquerdo ou direito A intenccedilatildeodo movimento que foi mandada pelo ceacuterebro eacute analisada e classicada de acordo como membro correspondente O resultado pode ser usado como comando para diversasaplicaccedilotildees como por exemplo o controle de um jogo

Dentro de ICC seraacute trabalhado o desenvolvimento de uma aplicaccedilatildeo online que utilizaduas classes de movimentos com as matildeos para a direita e a outra para a esquerda Estaaplicaccedilatildeo seraacute o jogo de ping-pong

13 Objetivo

Este trabalho possui dois objetivos principais O primeiro consiste em fazer um estudorelacionado agrave imageacutetica motora incluindo um levantamento dos trabalhos existentes naliteratura de forma a sumarizaacute-los O segundo objetivo eacute propor implementar e analisaruma aplicaccedilotildees que realiza a interaccedilatildeo ceacuterebro computador atraveacutes da imageacutetica motorao jogo de Ping Pong

3

14 Justicativa

O tema abordado neste trabalho eacute de grande relevacircncia social A ICC pode ser usadacomo soluccedilatildeo para a inclusccedilatildeo social de indiviacuteduos com diversos tipos de patologias quelimitam seus movimentos Aleacutem disso a ICC pode ser usada como uma alternativa paraa interface de jogos que representam um mercado de bilhotildees de doacutelares Pode-se porexemplo desenvolver melhorias para seres humanos decientes como a construccedilatildeo debraccedilos biocircnicos com o uso da imageacutetica motora ou talvez o controle de uma cadeira derodas para um indiviacuteduo tetrapleacutegico Tambeacutem se justica o estudo do tema am defacilitar tarefas mais simples como realizar uma ligaccedilatildeo atraveacutes de um telefone celular

15 Organizaccedilatildeo dos Capiacutetulos

O presente trabalho eacute dividio em seis capiacutetulos e anexos No primeiro capiacutetulo satildeoapresentados a contextualizaccedilatildeo do tema foco do trabalho objetivo e justicativas OCapiacutetulo 2 abrange os conceitos baacutesicos necessaacuterios ao entendimento da proposta do tra-balho O capiacutetulo seguinte conteacutem a descriccedilatildeo das trabalhos anteriores relacionados agraveICC encontradas na literatura O quarto capiacutetulo descreve o processo de desenvolvimentoda aplicaccedilatildeo propostas desde a idealizaccedilatildeo ateacute o desenvolvimento de fato O Capiacutetulo5 apresenta a descriccedilatildeo da fase de testes da implantaccedilatildeo da aplicaccedilatildeo bem como dosresultados obtidos desse processo com posterior anaacutelise deles O uacuteltimo eacute o capiacutetulo con-cludente sobre os resultados obtidos e que conta com sugestotildees de trabalhos futuros Porm o texto ainda conta com anexos

4

Capiacutetulo 2

Fundamentaccedilatildeo

21 A Biologia por traacutes do EEG

Estaacute entendido pela bibliograa que o sinal de EEG eacute bastante uacutetil e com ele conse-guimos produzir diversos trabalhos mas para entender o que se passa por traacutes do EEGde onde esse sinal vem e como eacute tratado temos que procurar nos interar melhor com abiologia do neurocircnio sua estrutura e funccedilatildeo

211 Estrutura e funccedilatildeo do neurocircnio

Como se pode ver na Figura 21 o neurocircnio eacute constituiacutedo de

1 Corpo celular

2 Dendritos

3 Axocircnio

Mas como ocorre a comunicaccedilatildeo entre duas ceacutelulas Qual o meio fiacutesico Os dendritossatildeo responsaacuteveis por receber sinais e passaacute-los para um axocircnio vide Figura 21 que remetea mesma para os outros neurocircnios

Figura 21 Estrutura do neurocircnio (Adaptado de [39])

5

212 Como funciona a troca de potenciais

Com o sinal recebido o neurocircnio tenta passar os impulsos eleacutetricos agrave frente atraveacutesde troca de potenciais a membrana celular envolta ao neurocircnio eacute carregada de iacuteons desoacutedio (Na+) e potaacutessio (K+) que cam se movimentando para dentro e fora da ceacutelulaInicialmente o interior da ceacutelula se encontra a -70mV em comparaccedilatildeo ao lado externoQuando algum sinal eacute recebido pelo dendrito ela ca menos negativa Se essa despola-rizaccedilatildeo chegar a -55mV a membrana se abre para iacuteons de soacutedio que entram na ceacutelulaIsto faz com que ela que cada vez menos negativa [40] Quando a ceacutelula atingir umpotencial positivo ela se abre para a saiacuteda de iacuteons de potaacutessio que agora causam a raacutepidarepolarizaccedilatildeo da membrana que chega a um potencial menor que -70mV como podemosver na Figura 22

Figura 22 Potencial de accedilatildeo de um neurocircnio [40]

213 O sinal de EEG

Os eletrodos do capacete Emotiv Epoc natildeo conseguem captar sinais de amplitudemuito pequena Este capacete e os demais relacionados apenas conseguem analisar sinaisde maior amplitude e a consequecircncia disso eacute que um uacutenico neurocircnio natildeo produz um sinalamplo o suciente para ser detectado sozinho Portanto o sinal soacute pode ser medidoconsiderando uma regiatildeo com vaacuterios neurocircnios Juntos levam aproximadamente 03s paraacumular a energia suciente para serem detectados [17] Como saber entatildeo quandoos neurocircnios tem sinal sucientemente forte para ser detectado Atraveacutes de dois preacute-requisitos

1 Muitos neurocircnios devem ser acionados ao mesmo tempo

2 Eles precisam estar alinhados em paralelo

6

Figura 23 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectadospelo eletrodo do capacete [42]

A ativaccedilatildeo de neurotransmissores do axocircnio terminal para as sinapses ocorre quandoum potencial de accedilatildeo atinge o m de um axocircnio Existem dois tipos de neurotransmissores

1 o primeiro causa um inuxo

2 o segundo causa um escoamento de iacuteons positivos

Assim os neurotransmissores ativados conseguem inuenciar a mudanccedila de potencialdo neurocircnio subsequente agrave sinapse mudando a permeabilidade da sua membrana Onome dado a essa mudanccedila de potencial do neurocircnio subsequente eacute potencial poacutes-sinaacutepticoexcitatoacuterio quando for uma mudanccedila positiva e potencial poacutes-sinaacuteptico inibitoacuterio quandonegativa Esses potenciais duram em meacutedia 100ms e variam sua amplitude entre 50e 100mV Na Figura 24 podemos ver um salto quacircntico de potencial de accedilatildeo de umneurocircnio para sinal de EEG

7

Figura 24 Eletroencefalograa claacutessica (Adapatado de [9])

22 Artefatos bioloacutegicos

Artefatos bioloacutegicos satildeo atividades causadas pelo sujeito mas natildeo ligadas agrave atividadecerebral de fato Agraves vezes satildeo chamados de artefatos sioloacutegicos [2] Os artefatos tecircm atendecircncia de ter uma amplitude mais forte que a de um sinal de EEG puro sendo assimum componente signicante obtido no EEG pois pode vir a atrapalhar sua mediccedilatildeotornando-a ineciente Eacute considerado como um ruiacutedo Desse modo se torna necessaacuteriofazer consideraccedilotildees especiais sobre os artefatos

221 Eletrooculograma

O EOG eacute um tipo de artefato relacionado agrave estrutura ocular do indiviacuteduo Ele vemdo movimento dos olhos para os lados ou para cima e das possiacuteveis piscadas pois essesmovimentos causam alteraccedilatildeo do campo eleacutetrico ocular Na Figura 25 mostramos doque eacute feito o olho humano

8

Figura 25 Estrutura do olho e suas partes nomeadas (Adaptado de [3])

O campo eleacutetrico do olho se origina da diferenccedila de potencial causada entre a coacuterneaque eacute carregada positivamente e a retina que eacute carregada negativamente Um esquemade como funciona esse dipolo pode ser visto na Figura 26

Figura 26 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3])

Como funciona a mediccedilatildeo do EOG

Dois eletrodos satildeo posicionados em cada lado esquerdo e direito de cada olho Amovimentaccedilatildeo dos olhos vai causar a diferenccedila de potencial fazendo a coacuternea carregadapositivamente car mais proacutexima de um dos eletrodos e consequentemente a retina car-regada negativamente car mais distante de um dos eletrodos Entatildeo cresce a tensatildeoeleacutetrica de um lado e decresce do outro O piscar de olhos provoca uma diferenccedila de po-tencial e tambeacutem inuencia o sinal de EEG A Figura 27 mostra como satildeo posicionadosesses eletrodos para medir a diferenccedila de potencial

9

Figura 27 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5])

No trabalho em questatildeo natildeo foi possiacutevel medir a diferenccedila de potencial ocasionadapelo movimentar dos olhos portanto esse eacute um ruiacutedo que natildeo foi tratado

222 Eletrocardiograma

Um exame bastante interessante eacute o eletrocardiograma (ECG) A cada batida docoraccedilatildeo o electrocardioacutegrafo grava a diferenccedila de potencial no muacutesculo cardiacuteaco causadapela sua despolarizaccedilatildeo Ou seja ele registra a variaccedilatildeo eleacutetrica da atividade do coraccedilatildeo

Essa atividade do coraccedilatildeo pode vir a atrapalhar os sinais de EEG como pode-se notarna Figura 28 Em azul tem-se o sinal do EEG puro antes de ser retirado o ECG Emverde tem-se o sinal do ECG e em vermelho notamos a diferenccedila que acontece no sinalde EEG quando o artefato ECG eacute retirado

Figura 28 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada doartefato de ECG (Adaptado de [35])

223 Eletromiograa

O sinal eletromiograacuteco (EMG) eacute a soma algeacutebrica de todos os sinais detectados emcerta aacuterea podendo ser afetado por propriedades musculares anatocircmicas e sioloacutegicasassim como pelo controle do sistema nervoso perifeacuterico e a instrumentaccedilatildeo utilizada paraa aquisiccedilatildeo dos sinais [13] O eletromioacutegrafo eacute um aparelho que adquire o sinal EMG

10

possibilitando o exame da eletromiograa (ver Figura 29) Ele fornece informaccedilotildees rele-vantes sobre a ativaccedilatildeo da musculatura envolvida em um movimento e a intensidade desua ativaccedilatildeo Qualquer movimentaccedilatildeo ou contraccedilatildeo dos muacutesculos da face afeta o sinal deEEG como por exemplo apertar os dentes contrair a testa etc

Figura 29 Sinal de EMG [2])

23 Artefatos teacutecnicos

Satildeo os tambeacutem chamados artefatos extrasioloacutegicos Natildeo dependem do ser humanomas sim do ambiente em que o usuaacuterio se encontra ou dos possiacuteveis eventos que ocorram

231 Frequecircncia de 5060 Hz

Um dos artefatos mais comuns existentes eacute o da interferecircncia causada pela correnteeleacutetrica Estatildeo indicadas duas frequecircncias pois a faixa normal de interferecircncia variade local para local no mundo Por exemplo na Ameacuterica do Norte eacute em torno de 60Hzenquanto na maioria dos outros paiacuteses ca em torno de 50 Hz Para tratar deste artefatousualmente coloca-se um ltro notch nessa faixa de frequecircncia e em seus respectivosharmocircnicos como por exemplo para o Brasil 60Hz 120Hz 180Hz etc

232 Artefato do amplicador

Eacute uma interferecircncia com pequena amplitude mas que tambeacutem merece alguma atenccedilatildeoNa Figura 210 em azul temos o sinal do EEG e em verde pode-se notar a pequenaamplitude do artefato gerado pelo amplicador

11

Figura 210 Artefato do amplicador analisado em graacuteco (Adaptado de [34])

24 Imageacutetica Motora

Depois de entender melhor como funciona todo o processo por traacutes da mediccedilatildeo doEEG torna-se interessante saber como isso se relaciona agrave praacutetica produzindo ao naldo processo o efeito esperado que eacute o deslocamento virtual de objetos usando apenas ainterpretaccedilatildeo dos sinais gerados pelo pensamento

O centro desse processo eacute a imageacutetica motora Ela pode ser denida como um estadodinacircmico durante a imaginaccedilatildeo que um indiviacuteduo faz de uma determinada accedilatildeo intenci-onada Este fenocircmeno implica que o sujeito sinta que realmente estaacute realizando a accedilatildeoimaginada sicamente seja ela de movimentar um braccedilo ou talvez empurrar um objeto[10]

A imageacutetica motora vem mostrando vaacuterios bons resultados em sua aplicaccedilatildeo Comoexemplo temos a ocorrecircncia do fenocircmeno na teacutecnica de aprendizado motor Os atletasutilizam a imaginaccedilatildeo de movimentos que seratildeo executados nos exerciacutecios de fato assimtrazem benefiacutecios no aquecimento relaxamento e concentraccedilatildeo [38] Outro exemplo in-teressante eacute o dos muacutesicos que ao utilizaacute-la possibilitam o aprendizado de partituras demaneira mais eciente [20]

Segundo o siologista sueco Hesslow [15] para o ceacuterebro a simulaccedilatildeo hipoteacutetica deestados consiste em trecircs premissas fundamentais

1 Imaginaccedilatildeo de accedilotildees ativa as estruturas motoras do ceacuterebro de tal forma que elasremetam agrave atividade que ocorre durante uma accedilatildeo normal de movimento entretantosem nenhum movimento evidente

2 Imaginaccedilatildeo de percepccedilatildeo a imaginaccedilatildeo de estar percebendo uma atividade eacute omesmo que realmente estar percebendo algo Em sua essecircncia a atividade de per-cepccedilatildeo eacute gerada pelo proacuteprio ceacuterebro em depreciaccedilatildeo de estiacutemulos externos

12

Letra Localizaccedilatildeo

A Loacutebulo da orelhaC CentralP ParietalF FrontalFp Frontal polarO OcipitalT Temporal

Tabela 21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22])

3 Antecipaccedilatildeo uma accedilatildeo simulada pode provocar a atividade perceptiva que remeteagravequela que deveria ter acontecido se a accedilatildeo fosse executada de fato

Devido a esses fatores a simulaccedilatildeo mental pode ser utilizada como uma ferramentarepresentativa para o entendimento da mente Isso permite que os diversos estados mentaispossam ser explorados possibilitando relacionar as aacutereas especiacutecas do ceacuterebro que satildeomais ativadas devido a certos sentimentos desejos ou talvez intenccedilotildees Assim a simulaccedilatildeomental contribui para o avanccedilo em diversas aacutereas tais como a psicologia e outras

25 Emotiv Epoc

A m de analisar a imaginaccedilatildeo e os efeitos que ela tem sobre o nosso corpo e mentecientistas atraveacutes da busca constante de avanccedilos chegaram agrave utilizaccedilatildeo de um capaceteneural para mediccedilatildeo efetiva de estiacutemulos demonstrados pela captaccedilatildeo do sinal de EEGComo ilustrado na Figura 11a o custo-benefiacutecio de capacete que melhor atendeu o grupono projeto de pesquisa foi o do Emotiv Epoc Seus detalhes de organizaccedilatildeo e funcionamentosatildeo mostrados a seguir

251 Posicionamento de eletrodos

A Federaccedilatildeo Internacional de Neuropsicologia recomenda a utilizaccedilatildeo do modelo 10-20para ateacute 21 eletrodos [11] de acordo com a Figura 211 Nesse modelo todos os eletrodosse encontram a uma distacircncia de seus eletrodos vizinhos de 10 ou 20 da distacircncia totalda cabeccedila A cada posiccedilatildeo eacute dado um identicador de uma ou duas letras e um nuacutemerode acordo com sua proximidade a alguma parte do ceacuterebro (veja tabela 21) Nuacutemerospares estatildeo agrave direita e nuacutemeros iacutempares agrave esquerda

A sociedade Americana de EEG sugeriu nos seus guias [16] que novos eletrodos sejamcolocados de maneira equidistante dos 21 eletrodos jaacute denidos na Figura 212 caso sejanecessaacuterio um nuacutemero maior de eletrodos

13

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 2: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Universidade de Brasiacutelia UnB

Instituto de Ciecircncias Exatas

Departamento de Ciecircncia da Computaccedilatildeo

Bacharelado em Ciecircncia da Computaccedilatildeo

Coordenador Prof Dr Alexandre Zaghetto

Banca examinadora composta por

Prof Dr Pedro de Azevedo Berger (Orientador) CICUnB

Prof Dr Professor George Freitas von Borries PhD ESTUnB

Prof Dr Professor Cristiano Jacques Miosso PhD FGAUnB

CIP Catalogaccedilatildeo Internacional na Publicaccedilatildeo

Costa Renato Carrasco

Um Estudo sobre Interface Ceacuterebro-Computador Renato Carrasco

Costa Vanessa Mendes de Oliveira Brasiacutelia UnB 2012

157 p il 295 cm

Monograa (Graduaccedilatildeo) Universidade de Brasiacutelia Brasiacutelia 2012

1 Interface Ceacuterebro Maacutequina 2 Interface Ceacuterebro Computador

3 BCI 4 BMI 5 EEG 6 Eletroencefalograa 7 Imageacutetica Motora

8 OpenVibe 9 Emotiv Epoc Headset

CDU 0044

Endereccedilo Universidade de Brasiacutelia

Campus Universitaacuterio Darcy Ribeiro Asa Norte

CEP 70910-900

BrasiacuteliaDF Brasil

Universidade de BrasiacuteliaInstituto de Ciecircncias Exatas

Departamento de Ciecircncia da Computaccedilatildeo

Um Estudo sobre Interface Ceacuterebro-Computador

Renato Carrasco Costa

Vanessa Mendes de Oliveira

Monograa apresentada como requisito parcial

para conclusatildeo do Bacharelado em Ciecircncia da Computaccedilatildeo

Prof Dr Pedro de Azevedo Berger (Orientador)

CICUnB

Prof Dr Professor George Freitas von Borries PhD Prof Dr Professor Cristiano Jacques Miosso PhD

ESTUnB FGAUnB

Prof Dr Alexandre Zaghetto

Coordenador do Bacharelado em Ciecircncia da Computaccedilatildeo

Brasiacutelia 07 de julho de 2012

Dedicatoacuteria

Dedicamos ao grupo de BMI da UnB aos professores e interessados no assunto

i

Agradecimentos

Considero que na vida todas as accedilotildees satildeo iniciadas por uma ideia Essa ideia pode serimplantada por uma grande accedilatildeo um conselho uma sugestatildeo ou ateacute um simples gestoEacute o que chamamos de inspiraccedilatildeo

Em minha vida tive muitas pessoas que me inspiraram me ajudando a ser o que souhoje

A primeira delas eacute minha matildee que teve um aacuterduo trabalho e se esforccedilou muito para mecriar como matildee solteira me afastando dos maus caminhos me ensinando valores moraise eacuteticos Me tornei a pessoa que sou hoje graccedilas a seu esforccedilo sobrehumano para mantera nossa famiacutelia unida Eacute nela que me inspiro para me tornar cada dia melhor

Em seguida gostaria de agradecer a minha irmatilde que sempre me inspirou com seuesforccedilo e inteligecircncia nos estudos e a minha voacute que considero a minha primeira professorade matemaacutetica Agradeccedilo a meu irmatildeo Marcelo por ter me iniciado nos estudos dealgoritmos o que me inuenciou bastante na escolha do meu curso de graduaccedilatildeo e aminha namorada que sempre me apoiou nos estudos

Acho que os amigos e colegas de escola satildeo as primeiras inspiraccedilotildees que temos fora dafamiacutelia Satildeo as primeiras ideias diferentes do nosso nuacutecleo familiar Por isso gostaria deagradecer a todos os amigos e colegas que tive durante os anos de estudo do preacute-escolarateacute a graduaccedilatildeo mas em especial gostaria de agradecer ao meu amigo que considero umirmatildeo Murilo que me inspirou a fazer meu trabalho de graduaccedilatildeo relacionado a InterfaceCeacuterebro Maacutequina e me deu um enorme apoio natildeo somente com o projeto mas tambeacutemem minha vida Gostaria tambeacutem de agradecer ao Emerson por toda a ajuda fornecidadurante o projeto Sei que sem ele esta monograa teria sido muito mais complicada dese fazer

Para nalizar gostaria tambeacutem de agradecer aos professores que tive por tentarem mepassar todo o conhecimento que me eacute necessaacuterio para a vida acadecircmica e prossional

Renato Carrasco Costa

ii

Agradecimentos

Ao longo dos anos pude conhecer diversas pessoas que me ajudaram a ser quem souhoje A elas devo todo o agradecimento

Primeiramente agradeccedilo a Deus que foi a quem me apeguei em todos os momentosdifiacuteceis Em todas as horas em que vontade de desistir era grande era Nele que euencontrava forccedilas para continuar trilhando pelos bons caminhos

Em seguida gostaria de agradecer agraves pessoas mais importantes de minha vida meupai e minha matildee A meu pai por sempre ter me inspirado a buscar diculdades e querervencecirc-las Por ter inuenciado meu interesse pela aacuterea de Exatas e por todo o apoio dadoao longo desses anos custeando meus estudos Agrave minha matildee por todo o carinho e amorincondicional demonstrados em toda minha vida Por sempre estar ao meu lado quandoeu precisei Por me chamar a atenccedilatildeo quando eu comeccedilava a desviar do caminho corretoPor me aguentar com toda a paciecircncia do mundo nos meus piores dias sejam de estressesejam de tristeza E por ser a melhor amiga do mundo com quem eu pude compartilhardiversos momentos de muita alegria e ateacute alguns ruins estes que logo passaram com todoo seu apoio Realmente a base da vida eacute a famiacutelia Algo que noacutes soacute conseguimos entenderapoacutes adquirir um pouco de maturidade

Agradeccedilo tambeacutem aos professores do Ensino Meacutedio que me zeram ter certeza docaminho que eu queria seguir na faculdade Aos da UnB e ao Emerson que foram defundamental apoio nesse trabalho e principalmente por terem ajudado na construccedilatildeodiaacuteria de conhecimento para a vida prossional

Gostaria de agradecer aos colegas de curso com os quais pude compartilhar de horasmuito difiacuteceis nos dias anteriores agrave apresentaccedilatildeo de trabalhos e realizaccedilotildees de provasassim como tambeacutem de dias muito alegres e festivos

Ao pessoal do trabalho com os quais pude aprimorar meus conhecimentos e princi-palmente ao Nogueira Este me inspirou a seguir o rumo da Interface Ceacuterebro MaacutequinaSempre me apoiando mandando artigos e revistas para ampliar meu conhecimento

Finalmente aos amigos pois esses satildeo realmente a famiacutelia que noacutes natildeo escolhemosEles nos apoiam fora de casa quando noacutes somos obrigados a encarar o mundo laacute fora Den-tre eles natildeo posso deixar de citar alguns nomes muito importantes algumas de amizadesde muitos anos Joana grande amiga e irmatilde agrave qual devo muitos aprendizados Kaacuteritagrande companheira de trabalho que sempre me inspirou com a literatura e o portuguecircsRenato colega de curso amigo e grande inspirador da minha escolha pelo projeto Liacutegiapelas noites que passamos acordadas estudando para as piores provas sempre me dandoforccedilas e me alegrando Luiz meu grande amigo e namorado que esteve ao meu lado emqualquer momento me apoiando a passar pelas diculdades no projeto e na vida

Vanessa Mendes de Oliveira

iii

Resumo

Este trabalho consiste em um estudo sobre Interface Ceacuterebro Computador (ICC) e davalidaccedilatildeo desse conhecimento por meio do desenvolvimento de um jogo A blibliograafoi composta de leitura de livros artigos e monograas relativos agrave ICC O programadesenvolvido foi um jogo simulador de tecircnis de mesa controlado pela interpretaccedilatildeo dossinais obtidos por um capacete neural Aleacutem disso foi utilizado o programa OpenViBEpara desenvolver a aquisiccedilatildeo e classicaccedilatildeo de dados Para anaacutelise da implementaccedilatildeo foifeito um experimento com a participaccedilatildeo de 10 indiviacuteduos que alcanccedilou uma taxa declassicaccedilatildeo em torno de 70 Os dados resultantes mostraram que mesmo simulando ouso do capacete em situaccedilotildees reais com a incidecircncia de muito ruiacutedo eacute possiacutevel obter-seuma boa taxa classicaccedilatildeo

Palavras-chave Interface Ceacuterebro Maacutequina Interface Ceacuterebro Computador BCI BMIEEG Eletroencefalograa Imageacutetica Motora OpenVibe Emotiv Epoc Headset

iv

Abstract

This work consists of a study about Brain Machine Interface (BMI) and validationof this knowledge with the development of a game The bibliography was composed byreading books articles and undergraduate works about BMI The developed software wasa game of table tenis controlled by the interpretation of signals obtained by a neural-headset Futhermore the OpenViBE application was used to develop the aquisition andclassication of the data For analysis of the implementation an experiment was madewith the participation of some subjects in which the classication rate reached around70 The resultant data shows that even simulating the usage of the headset in realsituations with a high quantity of noise it is possible to obtain a good classication rate

Keywords Brain Machine Interface Brain Computer Interface BCI BMI EEG Elec-troencephalography Motor Imagery OpenVibe Emotiv Epoc Headset

v

Sumaacuterio

1 Introduccedilatildeo 1

11 Contextualizaccedilatildeo 112 Foco do trabalho 313 Objetivo 314 Justicativa 415 Organizaccedilatildeo dos Capiacutetulos 4

2 Fundamentaccedilatildeo 5

21 A Biologia por traacutes do EEG 5211 Estrutura e funccedilatildeo do neurocircnio 5212 Como funciona a troca de potenciais 6213 O sinal de EEG 6

22 Artefatos bioloacutegicos 8221 Eletrooculograma 8222 Eletrocardiograma 10223 Eletromiograa 10

23 Artefatos teacutecnicos 11231 Frequecircncia de 5060 Hz 11232 Artefato do amplicador 11

24 Imageacutetica Motora 1225 Emotiv Epoc 13

251 Posicionamento de eletrodos 13252 Emotiv Epoc Headset 14

26 OpenViBE 1827 Classicadores 1828 Extraccedilatildeo de sinais utilizando a energia de banda 18

3 Trabalhos relacionados 19

31 Carro controlado pelo ceacuterebro 1932 NeuroPhone 2033 Controle para o Second Life 2134 Controle do braccedilo de um robocirc 2235 BrainTalk 23

vi

4 Processo de desenvolvimento 24

41 Aquisiccedilatildeo de Sinais de EEG 2442 O Experimento 2643 Cenaacuterios 26

431 Monitoramento de Sinais 26432 Aquisiccedilatildeo de Sinais 27433 Treinamento dos Classicadores 28434 Online 32435 Replay 34436 Caacutelculo da porcentagem de acertos 35

44 Aplicativo desenvolvido 37441 Comunicaccedilatildeo do OpenViBE com o aplicativo 37442 Classes principais do aplicativo 38

5 Resultados e anaacutelise 39

51 Comparaccedilatildeo entre resultados de classicadores utilizados 39

6 Conclusatildeo 41

A Anexos 42

A1 Spriteh 42A2 Spritecpp 42A3 Barrah 45A4 Barracpp 46A5 GameManagerh 49A6 GameManagercpp 49A7 InputManagerh 54A8 InputManagercpp 55A9 Maincpp 58A10 Pongh 59A11 Pongcpp 60

Referecircncias 64

vii

Lista de Figuras

11 Preccedilos e comparaccedilotildees de custo-benefiacutecio de capacetes apenas dos maisbaratos (0-1000 doacutelares) (Adapatado de [37]) 2

21 Estrutura do neurocircnio (Adaptado de [39]) 522 Potencial de accedilatildeo de um neurocircnio [40] 623 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectados

pelo eletrodo do capacete [42] 724 Eletroencefalograa claacutessica (Adapatado de [9]) 825 Estrutura do olho e suas partes nomeadas (Adaptado de [3]) 926 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3]) 927 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5]) 1028 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada do

artefato de ECG (Adaptado de [35]) 1029 Sinal de EMG [2]) 11210 Artefato do amplicador analisado em graacuteco (Adaptado de [34]) 12211 Modelo 10-20 para ateacute 21 eletrodos [33] 14212 Modelo 10-20 para ateacute 75 eletrodos [33] 14213 Emotiv EPOC antes de ser montado (Adaptado de [23]) 15214 Vericando o estado dos eletrodos 16215 Detecccedilatildeo de movimentos da face do usuaacuterio 16216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo 17217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento 17218 Controlador de mouse 17

31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da uti-lizaccedilatildeo do Emotiv EPOC [30] 19

32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildeestelefocircnicas [25] 20

33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8] 2134 Exemplo de tela do Second Life com os possiacuteveis movimentos de um jogador[18] 2235 Braccedilo de um robocirc sendo controlado pelo capacete neural [43] 2236 Teclado virtual do sistema Brain talk[21] 23

41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc He-adset [28] 24

42 Tentativa sem feedback [28] 2543 Tentativa que contava com feedback [28] 2644 Cenaacuterio de monitoramento 27

viii

45 Cenaacuterio de aquisiccedilatildeo de sinais 2846 Cenaacuterio de treinamento 2947 Cenaacuterio de treinamento do ltro espacial CSP 3048 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM 3149 Cenaacuterio de treinamento do classicador usando o ltro CSP 32410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utiliza-

ccedilatildeo da barra azul como feedback 33411 Cenaacuterio de utilizaccedilatildeo online 33412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP 34413 Cenaacuterio de replay 35414 Cenaacuterio de caacutelculo de porcentagem de acertos 36415 Cenaacuterio de caacutelculo de porcentagem de acertos 36416 Jogo implementado 37

ix

Lista de Tabelas

11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvan-tagens (Adapatado de [19]) 2

21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22]) 13

31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8] 21

51 Tabela de porcentagem de acertos dos diferentes classicadores citados 40

x

Capiacutetulo 1

Introduccedilatildeo

11 Contextualizaccedilatildeo

No ano de 1929 Hans Berger [4] psiquiatra alematildeo publicou as primeiras paacuteginas deseu trabalho o eletroencefalograma (EEG) [22] Ele foi o primeiro a identicar ondas alfa(8-12 Hz) que satildeo atividades oscilatoacuterias no ceacuterebro Antes do registro dessas atividadesno ceacuterebro humano pesquisas jaacute haviam sido feitas em animais Entretanto foi apoacutesHans Berger que a quantidade de pesquisa feita sobre este oacutergatildeo cresceu bastante

O EEG eacute o registro da sincronizaccedilatildeo de milhares de sinais de neurocircnios em conjuntoDessa forma a localizaccedilatildeo exata da atividade de um neurocircnio eacute impossiacutevel de ser feitasomente com o EEG No entanto o registro de EEG associado a outras formas de registropermite resolver esse impasse Na Tabela 11 satildeo mostradas outras formas de se mensuraratividades neurais e suas respectivas desvantagens Devido ao alto custo envolvido nastecnologias apresentadas na Tabela 11 e principalmente agraves desvantagens como por exem-plo a exposiccedilatildeo agrave radiaccedilatildeo que outras tecnologias exigem o EEG tem sido o sinal maisutilizado para o desenvolvimento de pesquisa em Interface Ceacuterebro Computador (ICC)Aleacutem de ter bom custo-benefiacutecio sua utilizaccedilatildeo eacute bastante praacutetica

A ICC eacute uma teacutecnica que tenta interpretar os sinais eleacutetricos da superfiacutecie corticalou subcortical do ceacuterebro para interagir com o ambiente externo por meio de maacutequinasbuscando assim interpretar pensamentos referentes a movimento sem a necessidade domovimento real Por exemplo se um indiviacuteduo utilizador de ICC quiser mover o mousede um computador a tecnologia entenderia isso e realizaacute-la-ia sem o movimento das matildeosdo humano Essa tecnologia eacute um meio de comunicaccedilatildeo alternativo uacutetil para muitosobjetivos entre eles a possibilidade de ajudar um paciente impossibilitado de atividadesmotoras como um tetrapleacutegico a movimentar objetos

Para que seja possiacutevel a aplicaccedilatildeo da tecnologia ICC eacute necessaacuterio um aparelho que sejacapaz de captar as ondas emitidas pelo ceacuterebro um capacete neural Diante da grandequantidade de aparelhos o que se destacou foi o Emotiv Epoc como se pode observar deacordo com a Figura 11 A Figura 11a mostra alguns equipamentos com suas respectivasfaixas de preccedilo e algumas de suas funcionalidades Para efeitos de comparaccedilatildeo a Figura11b exibe a nota recebida por cada equipamento devido ao custo-benefiacutecio O destaquedo capacete Emotiv Epoc se deve ao melhor custo-benefiacutecio e agrave praticidade de utilizaccedilatildeoEle se acopla facilmente agrave cabeccedila e sua manipulaccedilatildeo eacute muito simples

1

Tecnologia Desvantagem

Electrocorticogram (ECoG) Exige cirurgiaMagneto-encephalography (MEG) Alto custoComputed Tomography (CT) Somente dados anatocircmicos

e exposiccedilatildeo agrave radiaccedilatildeoSingle Photon Emission Computerized Tomography (SPECT) Exposiccedilatildeo agrave radiaccedilatildeoPositron Emission Tomography (PET) Exposiccedilatildeo agrave radiaccedilatildeoMagnetic Resonance Imaging (MRI) CaraFunctional Magnetic Resonance Imaging (fMRI) CaraEvent-Related Optical Signal (EROS) Cara

Tabela 11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvanta-gens (Adapatado de [19])

(a) Capacetes neurais de baixo custo (b) Relaccedilatildeo custo-benefiacutecio

Figura 11 Preccedilos e comparaccedilotildees de custo-benefiacutecio de capacetes apenas dos mais baratos(0-1000 doacutelares) (Adapatado de [37])

2

O primeiro passo no processo eacute a aquisiccedilatildeo dos sinais cerebrais Para isso na literaturahaacute diversas teacutecnicas que se dividem em trecircs categorias as invasivas as semi-invasivas eas natildeo invasivas cada uma com suas devidas vantagens e desvantagens

A utilizaccedilatildeo da teacutecnica invasiva eacute uma oacutetima opccedilatildeo quando o foco eacute na captaccedilatildeo dedados com o miacutenimo de ruiacutedo Essa teacutecnica possibilita a diminuiccedilatildeo de ruiacutedos apesarde possuir como desvantagem a cirurgia que eacute necessaacuteria Nesta o cracircnio do indiviacuteduo eacuteaberto e eacute colocado no ceacuterebro eletrodos para captar os dados Tambeacutem como desvantagempode-se citar a faacutecil oxidaccedilatildeo dos eletrodos quando entram em contato com o sangue Ateacutecnica semi-invasiva eacute um pouco menos invasiva do que a primeira No entanto tambeacutemeacute necessaacuterio cirurgia Apesar disso a aquisiccedilatildeo de sinalruiacutedo eacute boa Jaacute a terceira teacutecnicacitada a natildeo-invasiva eacute a pior das trecircs em questatildeo de robustez ao ruiacutedo poreacutem eacute a demais faacutecil adaptaccedilatildeo agrave qualquer indiviacuteduo que tenha intenccedilatildeo de utilizaacute-la

Devido agraves caracteristicas destacadas este trabalho utiliza a teacutecnica natildeo invasiva comofonte de captaccedilatildeo de dados de EEG Com o uso do capacete Emotiv Epoc essa teacutecnicaeacute possibilitada De posse do aparelho comeccedilamos entatildeo fazendo essa aquisiccedilatildeo O se-gundo passo eacute o processamento do sinal e o reconhecimento de padrotildees atraveacutes do uso declassicadores Por uacuteltimo eacute necessaacuterio associar os dados obtidos agrave intenccedilatildeo do indiviacuteduo

Os estudos sobre ICC procuram adaptaacute-la ao uso no cotidiano Para avanccedilar nessaaacuterea eacute necessaacuterio o desenvolvimento de sistemas com elevada acuraacutecia e praticidade Paraaumentar a qualidade dos sistemas busca-se a implementaccedilatildeo de novos algoritmos para aaquisiccedilatildeo e a classicaccedilatildeo de sinais A cada dia novas aplicaccedilotildees estatildeo surgindo baseadasnessa tecnologia tanto de uso biomeacutedico quanto para jogos e outras aacutereas

12 Foco do trabalho

A imageacutetica motora eacute o processo mental no qual o indiviacuteduo imagina um determinadomovimento como por exemplo movimentar o braccedilo esquerdo ou direito A intenccedilatildeodo movimento que foi mandada pelo ceacuterebro eacute analisada e classicada de acordo como membro correspondente O resultado pode ser usado como comando para diversasaplicaccedilotildees como por exemplo o controle de um jogo

Dentro de ICC seraacute trabalhado o desenvolvimento de uma aplicaccedilatildeo online que utilizaduas classes de movimentos com as matildeos para a direita e a outra para a esquerda Estaaplicaccedilatildeo seraacute o jogo de ping-pong

13 Objetivo

Este trabalho possui dois objetivos principais O primeiro consiste em fazer um estudorelacionado agrave imageacutetica motora incluindo um levantamento dos trabalhos existentes naliteratura de forma a sumarizaacute-los O segundo objetivo eacute propor implementar e analisaruma aplicaccedilotildees que realiza a interaccedilatildeo ceacuterebro computador atraveacutes da imageacutetica motorao jogo de Ping Pong

3

14 Justicativa

O tema abordado neste trabalho eacute de grande relevacircncia social A ICC pode ser usadacomo soluccedilatildeo para a inclusccedilatildeo social de indiviacuteduos com diversos tipos de patologias quelimitam seus movimentos Aleacutem disso a ICC pode ser usada como uma alternativa paraa interface de jogos que representam um mercado de bilhotildees de doacutelares Pode-se porexemplo desenvolver melhorias para seres humanos decientes como a construccedilatildeo debraccedilos biocircnicos com o uso da imageacutetica motora ou talvez o controle de uma cadeira derodas para um indiviacuteduo tetrapleacutegico Tambeacutem se justica o estudo do tema am defacilitar tarefas mais simples como realizar uma ligaccedilatildeo atraveacutes de um telefone celular

15 Organizaccedilatildeo dos Capiacutetulos

O presente trabalho eacute dividio em seis capiacutetulos e anexos No primeiro capiacutetulo satildeoapresentados a contextualizaccedilatildeo do tema foco do trabalho objetivo e justicativas OCapiacutetulo 2 abrange os conceitos baacutesicos necessaacuterios ao entendimento da proposta do tra-balho O capiacutetulo seguinte conteacutem a descriccedilatildeo das trabalhos anteriores relacionados agraveICC encontradas na literatura O quarto capiacutetulo descreve o processo de desenvolvimentoda aplicaccedilatildeo propostas desde a idealizaccedilatildeo ateacute o desenvolvimento de fato O Capiacutetulo5 apresenta a descriccedilatildeo da fase de testes da implantaccedilatildeo da aplicaccedilatildeo bem como dosresultados obtidos desse processo com posterior anaacutelise deles O uacuteltimo eacute o capiacutetulo con-cludente sobre os resultados obtidos e que conta com sugestotildees de trabalhos futuros Porm o texto ainda conta com anexos

4

Capiacutetulo 2

Fundamentaccedilatildeo

21 A Biologia por traacutes do EEG

Estaacute entendido pela bibliograa que o sinal de EEG eacute bastante uacutetil e com ele conse-guimos produzir diversos trabalhos mas para entender o que se passa por traacutes do EEGde onde esse sinal vem e como eacute tratado temos que procurar nos interar melhor com abiologia do neurocircnio sua estrutura e funccedilatildeo

211 Estrutura e funccedilatildeo do neurocircnio

Como se pode ver na Figura 21 o neurocircnio eacute constituiacutedo de

1 Corpo celular

2 Dendritos

3 Axocircnio

Mas como ocorre a comunicaccedilatildeo entre duas ceacutelulas Qual o meio fiacutesico Os dendritossatildeo responsaacuteveis por receber sinais e passaacute-los para um axocircnio vide Figura 21 que remetea mesma para os outros neurocircnios

Figura 21 Estrutura do neurocircnio (Adaptado de [39])

5

212 Como funciona a troca de potenciais

Com o sinal recebido o neurocircnio tenta passar os impulsos eleacutetricos agrave frente atraveacutesde troca de potenciais a membrana celular envolta ao neurocircnio eacute carregada de iacuteons desoacutedio (Na+) e potaacutessio (K+) que cam se movimentando para dentro e fora da ceacutelulaInicialmente o interior da ceacutelula se encontra a -70mV em comparaccedilatildeo ao lado externoQuando algum sinal eacute recebido pelo dendrito ela ca menos negativa Se essa despola-rizaccedilatildeo chegar a -55mV a membrana se abre para iacuteons de soacutedio que entram na ceacutelulaIsto faz com que ela que cada vez menos negativa [40] Quando a ceacutelula atingir umpotencial positivo ela se abre para a saiacuteda de iacuteons de potaacutessio que agora causam a raacutepidarepolarizaccedilatildeo da membrana que chega a um potencial menor que -70mV como podemosver na Figura 22

Figura 22 Potencial de accedilatildeo de um neurocircnio [40]

213 O sinal de EEG

Os eletrodos do capacete Emotiv Epoc natildeo conseguem captar sinais de amplitudemuito pequena Este capacete e os demais relacionados apenas conseguem analisar sinaisde maior amplitude e a consequecircncia disso eacute que um uacutenico neurocircnio natildeo produz um sinalamplo o suciente para ser detectado sozinho Portanto o sinal soacute pode ser medidoconsiderando uma regiatildeo com vaacuterios neurocircnios Juntos levam aproximadamente 03s paraacumular a energia suciente para serem detectados [17] Como saber entatildeo quandoos neurocircnios tem sinal sucientemente forte para ser detectado Atraveacutes de dois preacute-requisitos

1 Muitos neurocircnios devem ser acionados ao mesmo tempo

2 Eles precisam estar alinhados em paralelo

6

Figura 23 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectadospelo eletrodo do capacete [42]

A ativaccedilatildeo de neurotransmissores do axocircnio terminal para as sinapses ocorre quandoum potencial de accedilatildeo atinge o m de um axocircnio Existem dois tipos de neurotransmissores

1 o primeiro causa um inuxo

2 o segundo causa um escoamento de iacuteons positivos

Assim os neurotransmissores ativados conseguem inuenciar a mudanccedila de potencialdo neurocircnio subsequente agrave sinapse mudando a permeabilidade da sua membrana Onome dado a essa mudanccedila de potencial do neurocircnio subsequente eacute potencial poacutes-sinaacutepticoexcitatoacuterio quando for uma mudanccedila positiva e potencial poacutes-sinaacuteptico inibitoacuterio quandonegativa Esses potenciais duram em meacutedia 100ms e variam sua amplitude entre 50e 100mV Na Figura 24 podemos ver um salto quacircntico de potencial de accedilatildeo de umneurocircnio para sinal de EEG

7

Figura 24 Eletroencefalograa claacutessica (Adapatado de [9])

22 Artefatos bioloacutegicos

Artefatos bioloacutegicos satildeo atividades causadas pelo sujeito mas natildeo ligadas agrave atividadecerebral de fato Agraves vezes satildeo chamados de artefatos sioloacutegicos [2] Os artefatos tecircm atendecircncia de ter uma amplitude mais forte que a de um sinal de EEG puro sendo assimum componente signicante obtido no EEG pois pode vir a atrapalhar sua mediccedilatildeotornando-a ineciente Eacute considerado como um ruiacutedo Desse modo se torna necessaacuteriofazer consideraccedilotildees especiais sobre os artefatos

221 Eletrooculograma

O EOG eacute um tipo de artefato relacionado agrave estrutura ocular do indiviacuteduo Ele vemdo movimento dos olhos para os lados ou para cima e das possiacuteveis piscadas pois essesmovimentos causam alteraccedilatildeo do campo eleacutetrico ocular Na Figura 25 mostramos doque eacute feito o olho humano

8

Figura 25 Estrutura do olho e suas partes nomeadas (Adaptado de [3])

O campo eleacutetrico do olho se origina da diferenccedila de potencial causada entre a coacuterneaque eacute carregada positivamente e a retina que eacute carregada negativamente Um esquemade como funciona esse dipolo pode ser visto na Figura 26

Figura 26 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3])

Como funciona a mediccedilatildeo do EOG

Dois eletrodos satildeo posicionados em cada lado esquerdo e direito de cada olho Amovimentaccedilatildeo dos olhos vai causar a diferenccedila de potencial fazendo a coacuternea carregadapositivamente car mais proacutexima de um dos eletrodos e consequentemente a retina car-regada negativamente car mais distante de um dos eletrodos Entatildeo cresce a tensatildeoeleacutetrica de um lado e decresce do outro O piscar de olhos provoca uma diferenccedila de po-tencial e tambeacutem inuencia o sinal de EEG A Figura 27 mostra como satildeo posicionadosesses eletrodos para medir a diferenccedila de potencial

9

Figura 27 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5])

No trabalho em questatildeo natildeo foi possiacutevel medir a diferenccedila de potencial ocasionadapelo movimentar dos olhos portanto esse eacute um ruiacutedo que natildeo foi tratado

222 Eletrocardiograma

Um exame bastante interessante eacute o eletrocardiograma (ECG) A cada batida docoraccedilatildeo o electrocardioacutegrafo grava a diferenccedila de potencial no muacutesculo cardiacuteaco causadapela sua despolarizaccedilatildeo Ou seja ele registra a variaccedilatildeo eleacutetrica da atividade do coraccedilatildeo

Essa atividade do coraccedilatildeo pode vir a atrapalhar os sinais de EEG como pode-se notarna Figura 28 Em azul tem-se o sinal do EEG puro antes de ser retirado o ECG Emverde tem-se o sinal do ECG e em vermelho notamos a diferenccedila que acontece no sinalde EEG quando o artefato ECG eacute retirado

Figura 28 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada doartefato de ECG (Adaptado de [35])

223 Eletromiograa

O sinal eletromiograacuteco (EMG) eacute a soma algeacutebrica de todos os sinais detectados emcerta aacuterea podendo ser afetado por propriedades musculares anatocircmicas e sioloacutegicasassim como pelo controle do sistema nervoso perifeacuterico e a instrumentaccedilatildeo utilizada paraa aquisiccedilatildeo dos sinais [13] O eletromioacutegrafo eacute um aparelho que adquire o sinal EMG

10

possibilitando o exame da eletromiograa (ver Figura 29) Ele fornece informaccedilotildees rele-vantes sobre a ativaccedilatildeo da musculatura envolvida em um movimento e a intensidade desua ativaccedilatildeo Qualquer movimentaccedilatildeo ou contraccedilatildeo dos muacutesculos da face afeta o sinal deEEG como por exemplo apertar os dentes contrair a testa etc

Figura 29 Sinal de EMG [2])

23 Artefatos teacutecnicos

Satildeo os tambeacutem chamados artefatos extrasioloacutegicos Natildeo dependem do ser humanomas sim do ambiente em que o usuaacuterio se encontra ou dos possiacuteveis eventos que ocorram

231 Frequecircncia de 5060 Hz

Um dos artefatos mais comuns existentes eacute o da interferecircncia causada pela correnteeleacutetrica Estatildeo indicadas duas frequecircncias pois a faixa normal de interferecircncia variade local para local no mundo Por exemplo na Ameacuterica do Norte eacute em torno de 60Hzenquanto na maioria dos outros paiacuteses ca em torno de 50 Hz Para tratar deste artefatousualmente coloca-se um ltro notch nessa faixa de frequecircncia e em seus respectivosharmocircnicos como por exemplo para o Brasil 60Hz 120Hz 180Hz etc

232 Artefato do amplicador

Eacute uma interferecircncia com pequena amplitude mas que tambeacutem merece alguma atenccedilatildeoNa Figura 210 em azul temos o sinal do EEG e em verde pode-se notar a pequenaamplitude do artefato gerado pelo amplicador

11

Figura 210 Artefato do amplicador analisado em graacuteco (Adaptado de [34])

24 Imageacutetica Motora

Depois de entender melhor como funciona todo o processo por traacutes da mediccedilatildeo doEEG torna-se interessante saber como isso se relaciona agrave praacutetica produzindo ao naldo processo o efeito esperado que eacute o deslocamento virtual de objetos usando apenas ainterpretaccedilatildeo dos sinais gerados pelo pensamento

O centro desse processo eacute a imageacutetica motora Ela pode ser denida como um estadodinacircmico durante a imaginaccedilatildeo que um indiviacuteduo faz de uma determinada accedilatildeo intenci-onada Este fenocircmeno implica que o sujeito sinta que realmente estaacute realizando a accedilatildeoimaginada sicamente seja ela de movimentar um braccedilo ou talvez empurrar um objeto[10]

A imageacutetica motora vem mostrando vaacuterios bons resultados em sua aplicaccedilatildeo Comoexemplo temos a ocorrecircncia do fenocircmeno na teacutecnica de aprendizado motor Os atletasutilizam a imaginaccedilatildeo de movimentos que seratildeo executados nos exerciacutecios de fato assimtrazem benefiacutecios no aquecimento relaxamento e concentraccedilatildeo [38] Outro exemplo in-teressante eacute o dos muacutesicos que ao utilizaacute-la possibilitam o aprendizado de partituras demaneira mais eciente [20]

Segundo o siologista sueco Hesslow [15] para o ceacuterebro a simulaccedilatildeo hipoteacutetica deestados consiste em trecircs premissas fundamentais

1 Imaginaccedilatildeo de accedilotildees ativa as estruturas motoras do ceacuterebro de tal forma que elasremetam agrave atividade que ocorre durante uma accedilatildeo normal de movimento entretantosem nenhum movimento evidente

2 Imaginaccedilatildeo de percepccedilatildeo a imaginaccedilatildeo de estar percebendo uma atividade eacute omesmo que realmente estar percebendo algo Em sua essecircncia a atividade de per-cepccedilatildeo eacute gerada pelo proacuteprio ceacuterebro em depreciaccedilatildeo de estiacutemulos externos

12

Letra Localizaccedilatildeo

A Loacutebulo da orelhaC CentralP ParietalF FrontalFp Frontal polarO OcipitalT Temporal

Tabela 21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22])

3 Antecipaccedilatildeo uma accedilatildeo simulada pode provocar a atividade perceptiva que remeteagravequela que deveria ter acontecido se a accedilatildeo fosse executada de fato

Devido a esses fatores a simulaccedilatildeo mental pode ser utilizada como uma ferramentarepresentativa para o entendimento da mente Isso permite que os diversos estados mentaispossam ser explorados possibilitando relacionar as aacutereas especiacutecas do ceacuterebro que satildeomais ativadas devido a certos sentimentos desejos ou talvez intenccedilotildees Assim a simulaccedilatildeomental contribui para o avanccedilo em diversas aacutereas tais como a psicologia e outras

25 Emotiv Epoc

A m de analisar a imaginaccedilatildeo e os efeitos que ela tem sobre o nosso corpo e mentecientistas atraveacutes da busca constante de avanccedilos chegaram agrave utilizaccedilatildeo de um capaceteneural para mediccedilatildeo efetiva de estiacutemulos demonstrados pela captaccedilatildeo do sinal de EEGComo ilustrado na Figura 11a o custo-benefiacutecio de capacete que melhor atendeu o grupono projeto de pesquisa foi o do Emotiv Epoc Seus detalhes de organizaccedilatildeo e funcionamentosatildeo mostrados a seguir

251 Posicionamento de eletrodos

A Federaccedilatildeo Internacional de Neuropsicologia recomenda a utilizaccedilatildeo do modelo 10-20para ateacute 21 eletrodos [11] de acordo com a Figura 211 Nesse modelo todos os eletrodosse encontram a uma distacircncia de seus eletrodos vizinhos de 10 ou 20 da distacircncia totalda cabeccedila A cada posiccedilatildeo eacute dado um identicador de uma ou duas letras e um nuacutemerode acordo com sua proximidade a alguma parte do ceacuterebro (veja tabela 21) Nuacutemerospares estatildeo agrave direita e nuacutemeros iacutempares agrave esquerda

A sociedade Americana de EEG sugeriu nos seus guias [16] que novos eletrodos sejamcolocados de maneira equidistante dos 21 eletrodos jaacute denidos na Figura 212 caso sejanecessaacuterio um nuacutemero maior de eletrodos

13

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 3: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Universidade de BrasiacuteliaInstituto de Ciecircncias Exatas

Departamento de Ciecircncia da Computaccedilatildeo

Um Estudo sobre Interface Ceacuterebro-Computador

Renato Carrasco Costa

Vanessa Mendes de Oliveira

Monograa apresentada como requisito parcial

para conclusatildeo do Bacharelado em Ciecircncia da Computaccedilatildeo

Prof Dr Pedro de Azevedo Berger (Orientador)

CICUnB

Prof Dr Professor George Freitas von Borries PhD Prof Dr Professor Cristiano Jacques Miosso PhD

ESTUnB FGAUnB

Prof Dr Alexandre Zaghetto

Coordenador do Bacharelado em Ciecircncia da Computaccedilatildeo

Brasiacutelia 07 de julho de 2012

Dedicatoacuteria

Dedicamos ao grupo de BMI da UnB aos professores e interessados no assunto

i

Agradecimentos

Considero que na vida todas as accedilotildees satildeo iniciadas por uma ideia Essa ideia pode serimplantada por uma grande accedilatildeo um conselho uma sugestatildeo ou ateacute um simples gestoEacute o que chamamos de inspiraccedilatildeo

Em minha vida tive muitas pessoas que me inspiraram me ajudando a ser o que souhoje

A primeira delas eacute minha matildee que teve um aacuterduo trabalho e se esforccedilou muito para mecriar como matildee solteira me afastando dos maus caminhos me ensinando valores moraise eacuteticos Me tornei a pessoa que sou hoje graccedilas a seu esforccedilo sobrehumano para mantera nossa famiacutelia unida Eacute nela que me inspiro para me tornar cada dia melhor

Em seguida gostaria de agradecer a minha irmatilde que sempre me inspirou com seuesforccedilo e inteligecircncia nos estudos e a minha voacute que considero a minha primeira professorade matemaacutetica Agradeccedilo a meu irmatildeo Marcelo por ter me iniciado nos estudos dealgoritmos o que me inuenciou bastante na escolha do meu curso de graduaccedilatildeo e aminha namorada que sempre me apoiou nos estudos

Acho que os amigos e colegas de escola satildeo as primeiras inspiraccedilotildees que temos fora dafamiacutelia Satildeo as primeiras ideias diferentes do nosso nuacutecleo familiar Por isso gostaria deagradecer a todos os amigos e colegas que tive durante os anos de estudo do preacute-escolarateacute a graduaccedilatildeo mas em especial gostaria de agradecer ao meu amigo que considero umirmatildeo Murilo que me inspirou a fazer meu trabalho de graduaccedilatildeo relacionado a InterfaceCeacuterebro Maacutequina e me deu um enorme apoio natildeo somente com o projeto mas tambeacutemem minha vida Gostaria tambeacutem de agradecer ao Emerson por toda a ajuda fornecidadurante o projeto Sei que sem ele esta monograa teria sido muito mais complicada dese fazer

Para nalizar gostaria tambeacutem de agradecer aos professores que tive por tentarem mepassar todo o conhecimento que me eacute necessaacuterio para a vida acadecircmica e prossional

Renato Carrasco Costa

ii

Agradecimentos

Ao longo dos anos pude conhecer diversas pessoas que me ajudaram a ser quem souhoje A elas devo todo o agradecimento

Primeiramente agradeccedilo a Deus que foi a quem me apeguei em todos os momentosdifiacuteceis Em todas as horas em que vontade de desistir era grande era Nele que euencontrava forccedilas para continuar trilhando pelos bons caminhos

Em seguida gostaria de agradecer agraves pessoas mais importantes de minha vida meupai e minha matildee A meu pai por sempre ter me inspirado a buscar diculdades e querervencecirc-las Por ter inuenciado meu interesse pela aacuterea de Exatas e por todo o apoio dadoao longo desses anos custeando meus estudos Agrave minha matildee por todo o carinho e amorincondicional demonstrados em toda minha vida Por sempre estar ao meu lado quandoeu precisei Por me chamar a atenccedilatildeo quando eu comeccedilava a desviar do caminho corretoPor me aguentar com toda a paciecircncia do mundo nos meus piores dias sejam de estressesejam de tristeza E por ser a melhor amiga do mundo com quem eu pude compartilhardiversos momentos de muita alegria e ateacute alguns ruins estes que logo passaram com todoo seu apoio Realmente a base da vida eacute a famiacutelia Algo que noacutes soacute conseguimos entenderapoacutes adquirir um pouco de maturidade

Agradeccedilo tambeacutem aos professores do Ensino Meacutedio que me zeram ter certeza docaminho que eu queria seguir na faculdade Aos da UnB e ao Emerson que foram defundamental apoio nesse trabalho e principalmente por terem ajudado na construccedilatildeodiaacuteria de conhecimento para a vida prossional

Gostaria de agradecer aos colegas de curso com os quais pude compartilhar de horasmuito difiacuteceis nos dias anteriores agrave apresentaccedilatildeo de trabalhos e realizaccedilotildees de provasassim como tambeacutem de dias muito alegres e festivos

Ao pessoal do trabalho com os quais pude aprimorar meus conhecimentos e princi-palmente ao Nogueira Este me inspirou a seguir o rumo da Interface Ceacuterebro MaacutequinaSempre me apoiando mandando artigos e revistas para ampliar meu conhecimento

Finalmente aos amigos pois esses satildeo realmente a famiacutelia que noacutes natildeo escolhemosEles nos apoiam fora de casa quando noacutes somos obrigados a encarar o mundo laacute fora Den-tre eles natildeo posso deixar de citar alguns nomes muito importantes algumas de amizadesde muitos anos Joana grande amiga e irmatilde agrave qual devo muitos aprendizados Kaacuteritagrande companheira de trabalho que sempre me inspirou com a literatura e o portuguecircsRenato colega de curso amigo e grande inspirador da minha escolha pelo projeto Liacutegiapelas noites que passamos acordadas estudando para as piores provas sempre me dandoforccedilas e me alegrando Luiz meu grande amigo e namorado que esteve ao meu lado emqualquer momento me apoiando a passar pelas diculdades no projeto e na vida

Vanessa Mendes de Oliveira

iii

Resumo

Este trabalho consiste em um estudo sobre Interface Ceacuterebro Computador (ICC) e davalidaccedilatildeo desse conhecimento por meio do desenvolvimento de um jogo A blibliograafoi composta de leitura de livros artigos e monograas relativos agrave ICC O programadesenvolvido foi um jogo simulador de tecircnis de mesa controlado pela interpretaccedilatildeo dossinais obtidos por um capacete neural Aleacutem disso foi utilizado o programa OpenViBEpara desenvolver a aquisiccedilatildeo e classicaccedilatildeo de dados Para anaacutelise da implementaccedilatildeo foifeito um experimento com a participaccedilatildeo de 10 indiviacuteduos que alcanccedilou uma taxa declassicaccedilatildeo em torno de 70 Os dados resultantes mostraram que mesmo simulando ouso do capacete em situaccedilotildees reais com a incidecircncia de muito ruiacutedo eacute possiacutevel obter-seuma boa taxa classicaccedilatildeo

Palavras-chave Interface Ceacuterebro Maacutequina Interface Ceacuterebro Computador BCI BMIEEG Eletroencefalograa Imageacutetica Motora OpenVibe Emotiv Epoc Headset

iv

Abstract

This work consists of a study about Brain Machine Interface (BMI) and validationof this knowledge with the development of a game The bibliography was composed byreading books articles and undergraduate works about BMI The developed software wasa game of table tenis controlled by the interpretation of signals obtained by a neural-headset Futhermore the OpenViBE application was used to develop the aquisition andclassication of the data For analysis of the implementation an experiment was madewith the participation of some subjects in which the classication rate reached around70 The resultant data shows that even simulating the usage of the headset in realsituations with a high quantity of noise it is possible to obtain a good classication rate

Keywords Brain Machine Interface Brain Computer Interface BCI BMI EEG Elec-troencephalography Motor Imagery OpenVibe Emotiv Epoc Headset

v

Sumaacuterio

1 Introduccedilatildeo 1

11 Contextualizaccedilatildeo 112 Foco do trabalho 313 Objetivo 314 Justicativa 415 Organizaccedilatildeo dos Capiacutetulos 4

2 Fundamentaccedilatildeo 5

21 A Biologia por traacutes do EEG 5211 Estrutura e funccedilatildeo do neurocircnio 5212 Como funciona a troca de potenciais 6213 O sinal de EEG 6

22 Artefatos bioloacutegicos 8221 Eletrooculograma 8222 Eletrocardiograma 10223 Eletromiograa 10

23 Artefatos teacutecnicos 11231 Frequecircncia de 5060 Hz 11232 Artefato do amplicador 11

24 Imageacutetica Motora 1225 Emotiv Epoc 13

251 Posicionamento de eletrodos 13252 Emotiv Epoc Headset 14

26 OpenViBE 1827 Classicadores 1828 Extraccedilatildeo de sinais utilizando a energia de banda 18

3 Trabalhos relacionados 19

31 Carro controlado pelo ceacuterebro 1932 NeuroPhone 2033 Controle para o Second Life 2134 Controle do braccedilo de um robocirc 2235 BrainTalk 23

vi

4 Processo de desenvolvimento 24

41 Aquisiccedilatildeo de Sinais de EEG 2442 O Experimento 2643 Cenaacuterios 26

431 Monitoramento de Sinais 26432 Aquisiccedilatildeo de Sinais 27433 Treinamento dos Classicadores 28434 Online 32435 Replay 34436 Caacutelculo da porcentagem de acertos 35

44 Aplicativo desenvolvido 37441 Comunicaccedilatildeo do OpenViBE com o aplicativo 37442 Classes principais do aplicativo 38

5 Resultados e anaacutelise 39

51 Comparaccedilatildeo entre resultados de classicadores utilizados 39

6 Conclusatildeo 41

A Anexos 42

A1 Spriteh 42A2 Spritecpp 42A3 Barrah 45A4 Barracpp 46A5 GameManagerh 49A6 GameManagercpp 49A7 InputManagerh 54A8 InputManagercpp 55A9 Maincpp 58A10 Pongh 59A11 Pongcpp 60

Referecircncias 64

vii

Lista de Figuras

11 Preccedilos e comparaccedilotildees de custo-benefiacutecio de capacetes apenas dos maisbaratos (0-1000 doacutelares) (Adapatado de [37]) 2

21 Estrutura do neurocircnio (Adaptado de [39]) 522 Potencial de accedilatildeo de um neurocircnio [40] 623 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectados

pelo eletrodo do capacete [42] 724 Eletroencefalograa claacutessica (Adapatado de [9]) 825 Estrutura do olho e suas partes nomeadas (Adaptado de [3]) 926 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3]) 927 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5]) 1028 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada do

artefato de ECG (Adaptado de [35]) 1029 Sinal de EMG [2]) 11210 Artefato do amplicador analisado em graacuteco (Adaptado de [34]) 12211 Modelo 10-20 para ateacute 21 eletrodos [33] 14212 Modelo 10-20 para ateacute 75 eletrodos [33] 14213 Emotiv EPOC antes de ser montado (Adaptado de [23]) 15214 Vericando o estado dos eletrodos 16215 Detecccedilatildeo de movimentos da face do usuaacuterio 16216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo 17217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento 17218 Controlador de mouse 17

31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da uti-lizaccedilatildeo do Emotiv EPOC [30] 19

32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildeestelefocircnicas [25] 20

33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8] 2134 Exemplo de tela do Second Life com os possiacuteveis movimentos de um jogador[18] 2235 Braccedilo de um robocirc sendo controlado pelo capacete neural [43] 2236 Teclado virtual do sistema Brain talk[21] 23

41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc He-adset [28] 24

42 Tentativa sem feedback [28] 2543 Tentativa que contava com feedback [28] 2644 Cenaacuterio de monitoramento 27

viii

45 Cenaacuterio de aquisiccedilatildeo de sinais 2846 Cenaacuterio de treinamento 2947 Cenaacuterio de treinamento do ltro espacial CSP 3048 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM 3149 Cenaacuterio de treinamento do classicador usando o ltro CSP 32410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utiliza-

ccedilatildeo da barra azul como feedback 33411 Cenaacuterio de utilizaccedilatildeo online 33412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP 34413 Cenaacuterio de replay 35414 Cenaacuterio de caacutelculo de porcentagem de acertos 36415 Cenaacuterio de caacutelculo de porcentagem de acertos 36416 Jogo implementado 37

ix

Lista de Tabelas

11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvan-tagens (Adapatado de [19]) 2

21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22]) 13

31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8] 21

51 Tabela de porcentagem de acertos dos diferentes classicadores citados 40

x

Capiacutetulo 1

Introduccedilatildeo

11 Contextualizaccedilatildeo

No ano de 1929 Hans Berger [4] psiquiatra alematildeo publicou as primeiras paacuteginas deseu trabalho o eletroencefalograma (EEG) [22] Ele foi o primeiro a identicar ondas alfa(8-12 Hz) que satildeo atividades oscilatoacuterias no ceacuterebro Antes do registro dessas atividadesno ceacuterebro humano pesquisas jaacute haviam sido feitas em animais Entretanto foi apoacutesHans Berger que a quantidade de pesquisa feita sobre este oacutergatildeo cresceu bastante

O EEG eacute o registro da sincronizaccedilatildeo de milhares de sinais de neurocircnios em conjuntoDessa forma a localizaccedilatildeo exata da atividade de um neurocircnio eacute impossiacutevel de ser feitasomente com o EEG No entanto o registro de EEG associado a outras formas de registropermite resolver esse impasse Na Tabela 11 satildeo mostradas outras formas de se mensuraratividades neurais e suas respectivas desvantagens Devido ao alto custo envolvido nastecnologias apresentadas na Tabela 11 e principalmente agraves desvantagens como por exem-plo a exposiccedilatildeo agrave radiaccedilatildeo que outras tecnologias exigem o EEG tem sido o sinal maisutilizado para o desenvolvimento de pesquisa em Interface Ceacuterebro Computador (ICC)Aleacutem de ter bom custo-benefiacutecio sua utilizaccedilatildeo eacute bastante praacutetica

A ICC eacute uma teacutecnica que tenta interpretar os sinais eleacutetricos da superfiacutecie corticalou subcortical do ceacuterebro para interagir com o ambiente externo por meio de maacutequinasbuscando assim interpretar pensamentos referentes a movimento sem a necessidade domovimento real Por exemplo se um indiviacuteduo utilizador de ICC quiser mover o mousede um computador a tecnologia entenderia isso e realizaacute-la-ia sem o movimento das matildeosdo humano Essa tecnologia eacute um meio de comunicaccedilatildeo alternativo uacutetil para muitosobjetivos entre eles a possibilidade de ajudar um paciente impossibilitado de atividadesmotoras como um tetrapleacutegico a movimentar objetos

Para que seja possiacutevel a aplicaccedilatildeo da tecnologia ICC eacute necessaacuterio um aparelho que sejacapaz de captar as ondas emitidas pelo ceacuterebro um capacete neural Diante da grandequantidade de aparelhos o que se destacou foi o Emotiv Epoc como se pode observar deacordo com a Figura 11 A Figura 11a mostra alguns equipamentos com suas respectivasfaixas de preccedilo e algumas de suas funcionalidades Para efeitos de comparaccedilatildeo a Figura11b exibe a nota recebida por cada equipamento devido ao custo-benefiacutecio O destaquedo capacete Emotiv Epoc se deve ao melhor custo-benefiacutecio e agrave praticidade de utilizaccedilatildeoEle se acopla facilmente agrave cabeccedila e sua manipulaccedilatildeo eacute muito simples

1

Tecnologia Desvantagem

Electrocorticogram (ECoG) Exige cirurgiaMagneto-encephalography (MEG) Alto custoComputed Tomography (CT) Somente dados anatocircmicos

e exposiccedilatildeo agrave radiaccedilatildeoSingle Photon Emission Computerized Tomography (SPECT) Exposiccedilatildeo agrave radiaccedilatildeoPositron Emission Tomography (PET) Exposiccedilatildeo agrave radiaccedilatildeoMagnetic Resonance Imaging (MRI) CaraFunctional Magnetic Resonance Imaging (fMRI) CaraEvent-Related Optical Signal (EROS) Cara

Tabela 11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvanta-gens (Adapatado de [19])

(a) Capacetes neurais de baixo custo (b) Relaccedilatildeo custo-benefiacutecio

Figura 11 Preccedilos e comparaccedilotildees de custo-benefiacutecio de capacetes apenas dos mais baratos(0-1000 doacutelares) (Adapatado de [37])

2

O primeiro passo no processo eacute a aquisiccedilatildeo dos sinais cerebrais Para isso na literaturahaacute diversas teacutecnicas que se dividem em trecircs categorias as invasivas as semi-invasivas eas natildeo invasivas cada uma com suas devidas vantagens e desvantagens

A utilizaccedilatildeo da teacutecnica invasiva eacute uma oacutetima opccedilatildeo quando o foco eacute na captaccedilatildeo dedados com o miacutenimo de ruiacutedo Essa teacutecnica possibilita a diminuiccedilatildeo de ruiacutedos apesarde possuir como desvantagem a cirurgia que eacute necessaacuteria Nesta o cracircnio do indiviacuteduo eacuteaberto e eacute colocado no ceacuterebro eletrodos para captar os dados Tambeacutem como desvantagempode-se citar a faacutecil oxidaccedilatildeo dos eletrodos quando entram em contato com o sangue Ateacutecnica semi-invasiva eacute um pouco menos invasiva do que a primeira No entanto tambeacutemeacute necessaacuterio cirurgia Apesar disso a aquisiccedilatildeo de sinalruiacutedo eacute boa Jaacute a terceira teacutecnicacitada a natildeo-invasiva eacute a pior das trecircs em questatildeo de robustez ao ruiacutedo poreacutem eacute a demais faacutecil adaptaccedilatildeo agrave qualquer indiviacuteduo que tenha intenccedilatildeo de utilizaacute-la

Devido agraves caracteristicas destacadas este trabalho utiliza a teacutecnica natildeo invasiva comofonte de captaccedilatildeo de dados de EEG Com o uso do capacete Emotiv Epoc essa teacutecnicaeacute possibilitada De posse do aparelho comeccedilamos entatildeo fazendo essa aquisiccedilatildeo O se-gundo passo eacute o processamento do sinal e o reconhecimento de padrotildees atraveacutes do uso declassicadores Por uacuteltimo eacute necessaacuterio associar os dados obtidos agrave intenccedilatildeo do indiviacuteduo

Os estudos sobre ICC procuram adaptaacute-la ao uso no cotidiano Para avanccedilar nessaaacuterea eacute necessaacuterio o desenvolvimento de sistemas com elevada acuraacutecia e praticidade Paraaumentar a qualidade dos sistemas busca-se a implementaccedilatildeo de novos algoritmos para aaquisiccedilatildeo e a classicaccedilatildeo de sinais A cada dia novas aplicaccedilotildees estatildeo surgindo baseadasnessa tecnologia tanto de uso biomeacutedico quanto para jogos e outras aacutereas

12 Foco do trabalho

A imageacutetica motora eacute o processo mental no qual o indiviacuteduo imagina um determinadomovimento como por exemplo movimentar o braccedilo esquerdo ou direito A intenccedilatildeodo movimento que foi mandada pelo ceacuterebro eacute analisada e classicada de acordo como membro correspondente O resultado pode ser usado como comando para diversasaplicaccedilotildees como por exemplo o controle de um jogo

Dentro de ICC seraacute trabalhado o desenvolvimento de uma aplicaccedilatildeo online que utilizaduas classes de movimentos com as matildeos para a direita e a outra para a esquerda Estaaplicaccedilatildeo seraacute o jogo de ping-pong

13 Objetivo

Este trabalho possui dois objetivos principais O primeiro consiste em fazer um estudorelacionado agrave imageacutetica motora incluindo um levantamento dos trabalhos existentes naliteratura de forma a sumarizaacute-los O segundo objetivo eacute propor implementar e analisaruma aplicaccedilotildees que realiza a interaccedilatildeo ceacuterebro computador atraveacutes da imageacutetica motorao jogo de Ping Pong

3

14 Justicativa

O tema abordado neste trabalho eacute de grande relevacircncia social A ICC pode ser usadacomo soluccedilatildeo para a inclusccedilatildeo social de indiviacuteduos com diversos tipos de patologias quelimitam seus movimentos Aleacutem disso a ICC pode ser usada como uma alternativa paraa interface de jogos que representam um mercado de bilhotildees de doacutelares Pode-se porexemplo desenvolver melhorias para seres humanos decientes como a construccedilatildeo debraccedilos biocircnicos com o uso da imageacutetica motora ou talvez o controle de uma cadeira derodas para um indiviacuteduo tetrapleacutegico Tambeacutem se justica o estudo do tema am defacilitar tarefas mais simples como realizar uma ligaccedilatildeo atraveacutes de um telefone celular

15 Organizaccedilatildeo dos Capiacutetulos

O presente trabalho eacute dividio em seis capiacutetulos e anexos No primeiro capiacutetulo satildeoapresentados a contextualizaccedilatildeo do tema foco do trabalho objetivo e justicativas OCapiacutetulo 2 abrange os conceitos baacutesicos necessaacuterios ao entendimento da proposta do tra-balho O capiacutetulo seguinte conteacutem a descriccedilatildeo das trabalhos anteriores relacionados agraveICC encontradas na literatura O quarto capiacutetulo descreve o processo de desenvolvimentoda aplicaccedilatildeo propostas desde a idealizaccedilatildeo ateacute o desenvolvimento de fato O Capiacutetulo5 apresenta a descriccedilatildeo da fase de testes da implantaccedilatildeo da aplicaccedilatildeo bem como dosresultados obtidos desse processo com posterior anaacutelise deles O uacuteltimo eacute o capiacutetulo con-cludente sobre os resultados obtidos e que conta com sugestotildees de trabalhos futuros Porm o texto ainda conta com anexos

4

Capiacutetulo 2

Fundamentaccedilatildeo

21 A Biologia por traacutes do EEG

Estaacute entendido pela bibliograa que o sinal de EEG eacute bastante uacutetil e com ele conse-guimos produzir diversos trabalhos mas para entender o que se passa por traacutes do EEGde onde esse sinal vem e como eacute tratado temos que procurar nos interar melhor com abiologia do neurocircnio sua estrutura e funccedilatildeo

211 Estrutura e funccedilatildeo do neurocircnio

Como se pode ver na Figura 21 o neurocircnio eacute constituiacutedo de

1 Corpo celular

2 Dendritos

3 Axocircnio

Mas como ocorre a comunicaccedilatildeo entre duas ceacutelulas Qual o meio fiacutesico Os dendritossatildeo responsaacuteveis por receber sinais e passaacute-los para um axocircnio vide Figura 21 que remetea mesma para os outros neurocircnios

Figura 21 Estrutura do neurocircnio (Adaptado de [39])

5

212 Como funciona a troca de potenciais

Com o sinal recebido o neurocircnio tenta passar os impulsos eleacutetricos agrave frente atraveacutesde troca de potenciais a membrana celular envolta ao neurocircnio eacute carregada de iacuteons desoacutedio (Na+) e potaacutessio (K+) que cam se movimentando para dentro e fora da ceacutelulaInicialmente o interior da ceacutelula se encontra a -70mV em comparaccedilatildeo ao lado externoQuando algum sinal eacute recebido pelo dendrito ela ca menos negativa Se essa despola-rizaccedilatildeo chegar a -55mV a membrana se abre para iacuteons de soacutedio que entram na ceacutelulaIsto faz com que ela que cada vez menos negativa [40] Quando a ceacutelula atingir umpotencial positivo ela se abre para a saiacuteda de iacuteons de potaacutessio que agora causam a raacutepidarepolarizaccedilatildeo da membrana que chega a um potencial menor que -70mV como podemosver na Figura 22

Figura 22 Potencial de accedilatildeo de um neurocircnio [40]

213 O sinal de EEG

Os eletrodos do capacete Emotiv Epoc natildeo conseguem captar sinais de amplitudemuito pequena Este capacete e os demais relacionados apenas conseguem analisar sinaisde maior amplitude e a consequecircncia disso eacute que um uacutenico neurocircnio natildeo produz um sinalamplo o suciente para ser detectado sozinho Portanto o sinal soacute pode ser medidoconsiderando uma regiatildeo com vaacuterios neurocircnios Juntos levam aproximadamente 03s paraacumular a energia suciente para serem detectados [17] Como saber entatildeo quandoos neurocircnios tem sinal sucientemente forte para ser detectado Atraveacutes de dois preacute-requisitos

1 Muitos neurocircnios devem ser acionados ao mesmo tempo

2 Eles precisam estar alinhados em paralelo

6

Figura 23 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectadospelo eletrodo do capacete [42]

A ativaccedilatildeo de neurotransmissores do axocircnio terminal para as sinapses ocorre quandoum potencial de accedilatildeo atinge o m de um axocircnio Existem dois tipos de neurotransmissores

1 o primeiro causa um inuxo

2 o segundo causa um escoamento de iacuteons positivos

Assim os neurotransmissores ativados conseguem inuenciar a mudanccedila de potencialdo neurocircnio subsequente agrave sinapse mudando a permeabilidade da sua membrana Onome dado a essa mudanccedila de potencial do neurocircnio subsequente eacute potencial poacutes-sinaacutepticoexcitatoacuterio quando for uma mudanccedila positiva e potencial poacutes-sinaacuteptico inibitoacuterio quandonegativa Esses potenciais duram em meacutedia 100ms e variam sua amplitude entre 50e 100mV Na Figura 24 podemos ver um salto quacircntico de potencial de accedilatildeo de umneurocircnio para sinal de EEG

7

Figura 24 Eletroencefalograa claacutessica (Adapatado de [9])

22 Artefatos bioloacutegicos

Artefatos bioloacutegicos satildeo atividades causadas pelo sujeito mas natildeo ligadas agrave atividadecerebral de fato Agraves vezes satildeo chamados de artefatos sioloacutegicos [2] Os artefatos tecircm atendecircncia de ter uma amplitude mais forte que a de um sinal de EEG puro sendo assimum componente signicante obtido no EEG pois pode vir a atrapalhar sua mediccedilatildeotornando-a ineciente Eacute considerado como um ruiacutedo Desse modo se torna necessaacuteriofazer consideraccedilotildees especiais sobre os artefatos

221 Eletrooculograma

O EOG eacute um tipo de artefato relacionado agrave estrutura ocular do indiviacuteduo Ele vemdo movimento dos olhos para os lados ou para cima e das possiacuteveis piscadas pois essesmovimentos causam alteraccedilatildeo do campo eleacutetrico ocular Na Figura 25 mostramos doque eacute feito o olho humano

8

Figura 25 Estrutura do olho e suas partes nomeadas (Adaptado de [3])

O campo eleacutetrico do olho se origina da diferenccedila de potencial causada entre a coacuterneaque eacute carregada positivamente e a retina que eacute carregada negativamente Um esquemade como funciona esse dipolo pode ser visto na Figura 26

Figura 26 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3])

Como funciona a mediccedilatildeo do EOG

Dois eletrodos satildeo posicionados em cada lado esquerdo e direito de cada olho Amovimentaccedilatildeo dos olhos vai causar a diferenccedila de potencial fazendo a coacuternea carregadapositivamente car mais proacutexima de um dos eletrodos e consequentemente a retina car-regada negativamente car mais distante de um dos eletrodos Entatildeo cresce a tensatildeoeleacutetrica de um lado e decresce do outro O piscar de olhos provoca uma diferenccedila de po-tencial e tambeacutem inuencia o sinal de EEG A Figura 27 mostra como satildeo posicionadosesses eletrodos para medir a diferenccedila de potencial

9

Figura 27 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5])

No trabalho em questatildeo natildeo foi possiacutevel medir a diferenccedila de potencial ocasionadapelo movimentar dos olhos portanto esse eacute um ruiacutedo que natildeo foi tratado

222 Eletrocardiograma

Um exame bastante interessante eacute o eletrocardiograma (ECG) A cada batida docoraccedilatildeo o electrocardioacutegrafo grava a diferenccedila de potencial no muacutesculo cardiacuteaco causadapela sua despolarizaccedilatildeo Ou seja ele registra a variaccedilatildeo eleacutetrica da atividade do coraccedilatildeo

Essa atividade do coraccedilatildeo pode vir a atrapalhar os sinais de EEG como pode-se notarna Figura 28 Em azul tem-se o sinal do EEG puro antes de ser retirado o ECG Emverde tem-se o sinal do ECG e em vermelho notamos a diferenccedila que acontece no sinalde EEG quando o artefato ECG eacute retirado

Figura 28 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada doartefato de ECG (Adaptado de [35])

223 Eletromiograa

O sinal eletromiograacuteco (EMG) eacute a soma algeacutebrica de todos os sinais detectados emcerta aacuterea podendo ser afetado por propriedades musculares anatocircmicas e sioloacutegicasassim como pelo controle do sistema nervoso perifeacuterico e a instrumentaccedilatildeo utilizada paraa aquisiccedilatildeo dos sinais [13] O eletromioacutegrafo eacute um aparelho que adquire o sinal EMG

10

possibilitando o exame da eletromiograa (ver Figura 29) Ele fornece informaccedilotildees rele-vantes sobre a ativaccedilatildeo da musculatura envolvida em um movimento e a intensidade desua ativaccedilatildeo Qualquer movimentaccedilatildeo ou contraccedilatildeo dos muacutesculos da face afeta o sinal deEEG como por exemplo apertar os dentes contrair a testa etc

Figura 29 Sinal de EMG [2])

23 Artefatos teacutecnicos

Satildeo os tambeacutem chamados artefatos extrasioloacutegicos Natildeo dependem do ser humanomas sim do ambiente em que o usuaacuterio se encontra ou dos possiacuteveis eventos que ocorram

231 Frequecircncia de 5060 Hz

Um dos artefatos mais comuns existentes eacute o da interferecircncia causada pela correnteeleacutetrica Estatildeo indicadas duas frequecircncias pois a faixa normal de interferecircncia variade local para local no mundo Por exemplo na Ameacuterica do Norte eacute em torno de 60Hzenquanto na maioria dos outros paiacuteses ca em torno de 50 Hz Para tratar deste artefatousualmente coloca-se um ltro notch nessa faixa de frequecircncia e em seus respectivosharmocircnicos como por exemplo para o Brasil 60Hz 120Hz 180Hz etc

232 Artefato do amplicador

Eacute uma interferecircncia com pequena amplitude mas que tambeacutem merece alguma atenccedilatildeoNa Figura 210 em azul temos o sinal do EEG e em verde pode-se notar a pequenaamplitude do artefato gerado pelo amplicador

11

Figura 210 Artefato do amplicador analisado em graacuteco (Adaptado de [34])

24 Imageacutetica Motora

Depois de entender melhor como funciona todo o processo por traacutes da mediccedilatildeo doEEG torna-se interessante saber como isso se relaciona agrave praacutetica produzindo ao naldo processo o efeito esperado que eacute o deslocamento virtual de objetos usando apenas ainterpretaccedilatildeo dos sinais gerados pelo pensamento

O centro desse processo eacute a imageacutetica motora Ela pode ser denida como um estadodinacircmico durante a imaginaccedilatildeo que um indiviacuteduo faz de uma determinada accedilatildeo intenci-onada Este fenocircmeno implica que o sujeito sinta que realmente estaacute realizando a accedilatildeoimaginada sicamente seja ela de movimentar um braccedilo ou talvez empurrar um objeto[10]

A imageacutetica motora vem mostrando vaacuterios bons resultados em sua aplicaccedilatildeo Comoexemplo temos a ocorrecircncia do fenocircmeno na teacutecnica de aprendizado motor Os atletasutilizam a imaginaccedilatildeo de movimentos que seratildeo executados nos exerciacutecios de fato assimtrazem benefiacutecios no aquecimento relaxamento e concentraccedilatildeo [38] Outro exemplo in-teressante eacute o dos muacutesicos que ao utilizaacute-la possibilitam o aprendizado de partituras demaneira mais eciente [20]

Segundo o siologista sueco Hesslow [15] para o ceacuterebro a simulaccedilatildeo hipoteacutetica deestados consiste em trecircs premissas fundamentais

1 Imaginaccedilatildeo de accedilotildees ativa as estruturas motoras do ceacuterebro de tal forma que elasremetam agrave atividade que ocorre durante uma accedilatildeo normal de movimento entretantosem nenhum movimento evidente

2 Imaginaccedilatildeo de percepccedilatildeo a imaginaccedilatildeo de estar percebendo uma atividade eacute omesmo que realmente estar percebendo algo Em sua essecircncia a atividade de per-cepccedilatildeo eacute gerada pelo proacuteprio ceacuterebro em depreciaccedilatildeo de estiacutemulos externos

12

Letra Localizaccedilatildeo

A Loacutebulo da orelhaC CentralP ParietalF FrontalFp Frontal polarO OcipitalT Temporal

Tabela 21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22])

3 Antecipaccedilatildeo uma accedilatildeo simulada pode provocar a atividade perceptiva que remeteagravequela que deveria ter acontecido se a accedilatildeo fosse executada de fato

Devido a esses fatores a simulaccedilatildeo mental pode ser utilizada como uma ferramentarepresentativa para o entendimento da mente Isso permite que os diversos estados mentaispossam ser explorados possibilitando relacionar as aacutereas especiacutecas do ceacuterebro que satildeomais ativadas devido a certos sentimentos desejos ou talvez intenccedilotildees Assim a simulaccedilatildeomental contribui para o avanccedilo em diversas aacutereas tais como a psicologia e outras

25 Emotiv Epoc

A m de analisar a imaginaccedilatildeo e os efeitos que ela tem sobre o nosso corpo e mentecientistas atraveacutes da busca constante de avanccedilos chegaram agrave utilizaccedilatildeo de um capaceteneural para mediccedilatildeo efetiva de estiacutemulos demonstrados pela captaccedilatildeo do sinal de EEGComo ilustrado na Figura 11a o custo-benefiacutecio de capacete que melhor atendeu o grupono projeto de pesquisa foi o do Emotiv Epoc Seus detalhes de organizaccedilatildeo e funcionamentosatildeo mostrados a seguir

251 Posicionamento de eletrodos

A Federaccedilatildeo Internacional de Neuropsicologia recomenda a utilizaccedilatildeo do modelo 10-20para ateacute 21 eletrodos [11] de acordo com a Figura 211 Nesse modelo todos os eletrodosse encontram a uma distacircncia de seus eletrodos vizinhos de 10 ou 20 da distacircncia totalda cabeccedila A cada posiccedilatildeo eacute dado um identicador de uma ou duas letras e um nuacutemerode acordo com sua proximidade a alguma parte do ceacuterebro (veja tabela 21) Nuacutemerospares estatildeo agrave direita e nuacutemeros iacutempares agrave esquerda

A sociedade Americana de EEG sugeriu nos seus guias [16] que novos eletrodos sejamcolocados de maneira equidistante dos 21 eletrodos jaacute denidos na Figura 212 caso sejanecessaacuterio um nuacutemero maior de eletrodos

13

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 4: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Dedicatoacuteria

Dedicamos ao grupo de BMI da UnB aos professores e interessados no assunto

i

Agradecimentos

Considero que na vida todas as accedilotildees satildeo iniciadas por uma ideia Essa ideia pode serimplantada por uma grande accedilatildeo um conselho uma sugestatildeo ou ateacute um simples gestoEacute o que chamamos de inspiraccedilatildeo

Em minha vida tive muitas pessoas que me inspiraram me ajudando a ser o que souhoje

A primeira delas eacute minha matildee que teve um aacuterduo trabalho e se esforccedilou muito para mecriar como matildee solteira me afastando dos maus caminhos me ensinando valores moraise eacuteticos Me tornei a pessoa que sou hoje graccedilas a seu esforccedilo sobrehumano para mantera nossa famiacutelia unida Eacute nela que me inspiro para me tornar cada dia melhor

Em seguida gostaria de agradecer a minha irmatilde que sempre me inspirou com seuesforccedilo e inteligecircncia nos estudos e a minha voacute que considero a minha primeira professorade matemaacutetica Agradeccedilo a meu irmatildeo Marcelo por ter me iniciado nos estudos dealgoritmos o que me inuenciou bastante na escolha do meu curso de graduaccedilatildeo e aminha namorada que sempre me apoiou nos estudos

Acho que os amigos e colegas de escola satildeo as primeiras inspiraccedilotildees que temos fora dafamiacutelia Satildeo as primeiras ideias diferentes do nosso nuacutecleo familiar Por isso gostaria deagradecer a todos os amigos e colegas que tive durante os anos de estudo do preacute-escolarateacute a graduaccedilatildeo mas em especial gostaria de agradecer ao meu amigo que considero umirmatildeo Murilo que me inspirou a fazer meu trabalho de graduaccedilatildeo relacionado a InterfaceCeacuterebro Maacutequina e me deu um enorme apoio natildeo somente com o projeto mas tambeacutemem minha vida Gostaria tambeacutem de agradecer ao Emerson por toda a ajuda fornecidadurante o projeto Sei que sem ele esta monograa teria sido muito mais complicada dese fazer

Para nalizar gostaria tambeacutem de agradecer aos professores que tive por tentarem mepassar todo o conhecimento que me eacute necessaacuterio para a vida acadecircmica e prossional

Renato Carrasco Costa

ii

Agradecimentos

Ao longo dos anos pude conhecer diversas pessoas que me ajudaram a ser quem souhoje A elas devo todo o agradecimento

Primeiramente agradeccedilo a Deus que foi a quem me apeguei em todos os momentosdifiacuteceis Em todas as horas em que vontade de desistir era grande era Nele que euencontrava forccedilas para continuar trilhando pelos bons caminhos

Em seguida gostaria de agradecer agraves pessoas mais importantes de minha vida meupai e minha matildee A meu pai por sempre ter me inspirado a buscar diculdades e querervencecirc-las Por ter inuenciado meu interesse pela aacuterea de Exatas e por todo o apoio dadoao longo desses anos custeando meus estudos Agrave minha matildee por todo o carinho e amorincondicional demonstrados em toda minha vida Por sempre estar ao meu lado quandoeu precisei Por me chamar a atenccedilatildeo quando eu comeccedilava a desviar do caminho corretoPor me aguentar com toda a paciecircncia do mundo nos meus piores dias sejam de estressesejam de tristeza E por ser a melhor amiga do mundo com quem eu pude compartilhardiversos momentos de muita alegria e ateacute alguns ruins estes que logo passaram com todoo seu apoio Realmente a base da vida eacute a famiacutelia Algo que noacutes soacute conseguimos entenderapoacutes adquirir um pouco de maturidade

Agradeccedilo tambeacutem aos professores do Ensino Meacutedio que me zeram ter certeza docaminho que eu queria seguir na faculdade Aos da UnB e ao Emerson que foram defundamental apoio nesse trabalho e principalmente por terem ajudado na construccedilatildeodiaacuteria de conhecimento para a vida prossional

Gostaria de agradecer aos colegas de curso com os quais pude compartilhar de horasmuito difiacuteceis nos dias anteriores agrave apresentaccedilatildeo de trabalhos e realizaccedilotildees de provasassim como tambeacutem de dias muito alegres e festivos

Ao pessoal do trabalho com os quais pude aprimorar meus conhecimentos e princi-palmente ao Nogueira Este me inspirou a seguir o rumo da Interface Ceacuterebro MaacutequinaSempre me apoiando mandando artigos e revistas para ampliar meu conhecimento

Finalmente aos amigos pois esses satildeo realmente a famiacutelia que noacutes natildeo escolhemosEles nos apoiam fora de casa quando noacutes somos obrigados a encarar o mundo laacute fora Den-tre eles natildeo posso deixar de citar alguns nomes muito importantes algumas de amizadesde muitos anos Joana grande amiga e irmatilde agrave qual devo muitos aprendizados Kaacuteritagrande companheira de trabalho que sempre me inspirou com a literatura e o portuguecircsRenato colega de curso amigo e grande inspirador da minha escolha pelo projeto Liacutegiapelas noites que passamos acordadas estudando para as piores provas sempre me dandoforccedilas e me alegrando Luiz meu grande amigo e namorado que esteve ao meu lado emqualquer momento me apoiando a passar pelas diculdades no projeto e na vida

Vanessa Mendes de Oliveira

iii

Resumo

Este trabalho consiste em um estudo sobre Interface Ceacuterebro Computador (ICC) e davalidaccedilatildeo desse conhecimento por meio do desenvolvimento de um jogo A blibliograafoi composta de leitura de livros artigos e monograas relativos agrave ICC O programadesenvolvido foi um jogo simulador de tecircnis de mesa controlado pela interpretaccedilatildeo dossinais obtidos por um capacete neural Aleacutem disso foi utilizado o programa OpenViBEpara desenvolver a aquisiccedilatildeo e classicaccedilatildeo de dados Para anaacutelise da implementaccedilatildeo foifeito um experimento com a participaccedilatildeo de 10 indiviacuteduos que alcanccedilou uma taxa declassicaccedilatildeo em torno de 70 Os dados resultantes mostraram que mesmo simulando ouso do capacete em situaccedilotildees reais com a incidecircncia de muito ruiacutedo eacute possiacutevel obter-seuma boa taxa classicaccedilatildeo

Palavras-chave Interface Ceacuterebro Maacutequina Interface Ceacuterebro Computador BCI BMIEEG Eletroencefalograa Imageacutetica Motora OpenVibe Emotiv Epoc Headset

iv

Abstract

This work consists of a study about Brain Machine Interface (BMI) and validationof this knowledge with the development of a game The bibliography was composed byreading books articles and undergraduate works about BMI The developed software wasa game of table tenis controlled by the interpretation of signals obtained by a neural-headset Futhermore the OpenViBE application was used to develop the aquisition andclassication of the data For analysis of the implementation an experiment was madewith the participation of some subjects in which the classication rate reached around70 The resultant data shows that even simulating the usage of the headset in realsituations with a high quantity of noise it is possible to obtain a good classication rate

Keywords Brain Machine Interface Brain Computer Interface BCI BMI EEG Elec-troencephalography Motor Imagery OpenVibe Emotiv Epoc Headset

v

Sumaacuterio

1 Introduccedilatildeo 1

11 Contextualizaccedilatildeo 112 Foco do trabalho 313 Objetivo 314 Justicativa 415 Organizaccedilatildeo dos Capiacutetulos 4

2 Fundamentaccedilatildeo 5

21 A Biologia por traacutes do EEG 5211 Estrutura e funccedilatildeo do neurocircnio 5212 Como funciona a troca de potenciais 6213 O sinal de EEG 6

22 Artefatos bioloacutegicos 8221 Eletrooculograma 8222 Eletrocardiograma 10223 Eletromiograa 10

23 Artefatos teacutecnicos 11231 Frequecircncia de 5060 Hz 11232 Artefato do amplicador 11

24 Imageacutetica Motora 1225 Emotiv Epoc 13

251 Posicionamento de eletrodos 13252 Emotiv Epoc Headset 14

26 OpenViBE 1827 Classicadores 1828 Extraccedilatildeo de sinais utilizando a energia de banda 18

3 Trabalhos relacionados 19

31 Carro controlado pelo ceacuterebro 1932 NeuroPhone 2033 Controle para o Second Life 2134 Controle do braccedilo de um robocirc 2235 BrainTalk 23

vi

4 Processo de desenvolvimento 24

41 Aquisiccedilatildeo de Sinais de EEG 2442 O Experimento 2643 Cenaacuterios 26

431 Monitoramento de Sinais 26432 Aquisiccedilatildeo de Sinais 27433 Treinamento dos Classicadores 28434 Online 32435 Replay 34436 Caacutelculo da porcentagem de acertos 35

44 Aplicativo desenvolvido 37441 Comunicaccedilatildeo do OpenViBE com o aplicativo 37442 Classes principais do aplicativo 38

5 Resultados e anaacutelise 39

51 Comparaccedilatildeo entre resultados de classicadores utilizados 39

6 Conclusatildeo 41

A Anexos 42

A1 Spriteh 42A2 Spritecpp 42A3 Barrah 45A4 Barracpp 46A5 GameManagerh 49A6 GameManagercpp 49A7 InputManagerh 54A8 InputManagercpp 55A9 Maincpp 58A10 Pongh 59A11 Pongcpp 60

Referecircncias 64

vii

Lista de Figuras

11 Preccedilos e comparaccedilotildees de custo-benefiacutecio de capacetes apenas dos maisbaratos (0-1000 doacutelares) (Adapatado de [37]) 2

21 Estrutura do neurocircnio (Adaptado de [39]) 522 Potencial de accedilatildeo de um neurocircnio [40] 623 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectados

pelo eletrodo do capacete [42] 724 Eletroencefalograa claacutessica (Adapatado de [9]) 825 Estrutura do olho e suas partes nomeadas (Adaptado de [3]) 926 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3]) 927 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5]) 1028 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada do

artefato de ECG (Adaptado de [35]) 1029 Sinal de EMG [2]) 11210 Artefato do amplicador analisado em graacuteco (Adaptado de [34]) 12211 Modelo 10-20 para ateacute 21 eletrodos [33] 14212 Modelo 10-20 para ateacute 75 eletrodos [33] 14213 Emotiv EPOC antes de ser montado (Adaptado de [23]) 15214 Vericando o estado dos eletrodos 16215 Detecccedilatildeo de movimentos da face do usuaacuterio 16216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo 17217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento 17218 Controlador de mouse 17

31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da uti-lizaccedilatildeo do Emotiv EPOC [30] 19

32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildeestelefocircnicas [25] 20

33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8] 2134 Exemplo de tela do Second Life com os possiacuteveis movimentos de um jogador[18] 2235 Braccedilo de um robocirc sendo controlado pelo capacete neural [43] 2236 Teclado virtual do sistema Brain talk[21] 23

41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc He-adset [28] 24

42 Tentativa sem feedback [28] 2543 Tentativa que contava com feedback [28] 2644 Cenaacuterio de monitoramento 27

viii

45 Cenaacuterio de aquisiccedilatildeo de sinais 2846 Cenaacuterio de treinamento 2947 Cenaacuterio de treinamento do ltro espacial CSP 3048 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM 3149 Cenaacuterio de treinamento do classicador usando o ltro CSP 32410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utiliza-

ccedilatildeo da barra azul como feedback 33411 Cenaacuterio de utilizaccedilatildeo online 33412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP 34413 Cenaacuterio de replay 35414 Cenaacuterio de caacutelculo de porcentagem de acertos 36415 Cenaacuterio de caacutelculo de porcentagem de acertos 36416 Jogo implementado 37

ix

Lista de Tabelas

11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvan-tagens (Adapatado de [19]) 2

21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22]) 13

31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8] 21

51 Tabela de porcentagem de acertos dos diferentes classicadores citados 40

x

Capiacutetulo 1

Introduccedilatildeo

11 Contextualizaccedilatildeo

No ano de 1929 Hans Berger [4] psiquiatra alematildeo publicou as primeiras paacuteginas deseu trabalho o eletroencefalograma (EEG) [22] Ele foi o primeiro a identicar ondas alfa(8-12 Hz) que satildeo atividades oscilatoacuterias no ceacuterebro Antes do registro dessas atividadesno ceacuterebro humano pesquisas jaacute haviam sido feitas em animais Entretanto foi apoacutesHans Berger que a quantidade de pesquisa feita sobre este oacutergatildeo cresceu bastante

O EEG eacute o registro da sincronizaccedilatildeo de milhares de sinais de neurocircnios em conjuntoDessa forma a localizaccedilatildeo exata da atividade de um neurocircnio eacute impossiacutevel de ser feitasomente com o EEG No entanto o registro de EEG associado a outras formas de registropermite resolver esse impasse Na Tabela 11 satildeo mostradas outras formas de se mensuraratividades neurais e suas respectivas desvantagens Devido ao alto custo envolvido nastecnologias apresentadas na Tabela 11 e principalmente agraves desvantagens como por exem-plo a exposiccedilatildeo agrave radiaccedilatildeo que outras tecnologias exigem o EEG tem sido o sinal maisutilizado para o desenvolvimento de pesquisa em Interface Ceacuterebro Computador (ICC)Aleacutem de ter bom custo-benefiacutecio sua utilizaccedilatildeo eacute bastante praacutetica

A ICC eacute uma teacutecnica que tenta interpretar os sinais eleacutetricos da superfiacutecie corticalou subcortical do ceacuterebro para interagir com o ambiente externo por meio de maacutequinasbuscando assim interpretar pensamentos referentes a movimento sem a necessidade domovimento real Por exemplo se um indiviacuteduo utilizador de ICC quiser mover o mousede um computador a tecnologia entenderia isso e realizaacute-la-ia sem o movimento das matildeosdo humano Essa tecnologia eacute um meio de comunicaccedilatildeo alternativo uacutetil para muitosobjetivos entre eles a possibilidade de ajudar um paciente impossibilitado de atividadesmotoras como um tetrapleacutegico a movimentar objetos

Para que seja possiacutevel a aplicaccedilatildeo da tecnologia ICC eacute necessaacuterio um aparelho que sejacapaz de captar as ondas emitidas pelo ceacuterebro um capacete neural Diante da grandequantidade de aparelhos o que se destacou foi o Emotiv Epoc como se pode observar deacordo com a Figura 11 A Figura 11a mostra alguns equipamentos com suas respectivasfaixas de preccedilo e algumas de suas funcionalidades Para efeitos de comparaccedilatildeo a Figura11b exibe a nota recebida por cada equipamento devido ao custo-benefiacutecio O destaquedo capacete Emotiv Epoc se deve ao melhor custo-benefiacutecio e agrave praticidade de utilizaccedilatildeoEle se acopla facilmente agrave cabeccedila e sua manipulaccedilatildeo eacute muito simples

1

Tecnologia Desvantagem

Electrocorticogram (ECoG) Exige cirurgiaMagneto-encephalography (MEG) Alto custoComputed Tomography (CT) Somente dados anatocircmicos

e exposiccedilatildeo agrave radiaccedilatildeoSingle Photon Emission Computerized Tomography (SPECT) Exposiccedilatildeo agrave radiaccedilatildeoPositron Emission Tomography (PET) Exposiccedilatildeo agrave radiaccedilatildeoMagnetic Resonance Imaging (MRI) CaraFunctional Magnetic Resonance Imaging (fMRI) CaraEvent-Related Optical Signal (EROS) Cara

Tabela 11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvanta-gens (Adapatado de [19])

(a) Capacetes neurais de baixo custo (b) Relaccedilatildeo custo-benefiacutecio

Figura 11 Preccedilos e comparaccedilotildees de custo-benefiacutecio de capacetes apenas dos mais baratos(0-1000 doacutelares) (Adapatado de [37])

2

O primeiro passo no processo eacute a aquisiccedilatildeo dos sinais cerebrais Para isso na literaturahaacute diversas teacutecnicas que se dividem em trecircs categorias as invasivas as semi-invasivas eas natildeo invasivas cada uma com suas devidas vantagens e desvantagens

A utilizaccedilatildeo da teacutecnica invasiva eacute uma oacutetima opccedilatildeo quando o foco eacute na captaccedilatildeo dedados com o miacutenimo de ruiacutedo Essa teacutecnica possibilita a diminuiccedilatildeo de ruiacutedos apesarde possuir como desvantagem a cirurgia que eacute necessaacuteria Nesta o cracircnio do indiviacuteduo eacuteaberto e eacute colocado no ceacuterebro eletrodos para captar os dados Tambeacutem como desvantagempode-se citar a faacutecil oxidaccedilatildeo dos eletrodos quando entram em contato com o sangue Ateacutecnica semi-invasiva eacute um pouco menos invasiva do que a primeira No entanto tambeacutemeacute necessaacuterio cirurgia Apesar disso a aquisiccedilatildeo de sinalruiacutedo eacute boa Jaacute a terceira teacutecnicacitada a natildeo-invasiva eacute a pior das trecircs em questatildeo de robustez ao ruiacutedo poreacutem eacute a demais faacutecil adaptaccedilatildeo agrave qualquer indiviacuteduo que tenha intenccedilatildeo de utilizaacute-la

Devido agraves caracteristicas destacadas este trabalho utiliza a teacutecnica natildeo invasiva comofonte de captaccedilatildeo de dados de EEG Com o uso do capacete Emotiv Epoc essa teacutecnicaeacute possibilitada De posse do aparelho comeccedilamos entatildeo fazendo essa aquisiccedilatildeo O se-gundo passo eacute o processamento do sinal e o reconhecimento de padrotildees atraveacutes do uso declassicadores Por uacuteltimo eacute necessaacuterio associar os dados obtidos agrave intenccedilatildeo do indiviacuteduo

Os estudos sobre ICC procuram adaptaacute-la ao uso no cotidiano Para avanccedilar nessaaacuterea eacute necessaacuterio o desenvolvimento de sistemas com elevada acuraacutecia e praticidade Paraaumentar a qualidade dos sistemas busca-se a implementaccedilatildeo de novos algoritmos para aaquisiccedilatildeo e a classicaccedilatildeo de sinais A cada dia novas aplicaccedilotildees estatildeo surgindo baseadasnessa tecnologia tanto de uso biomeacutedico quanto para jogos e outras aacutereas

12 Foco do trabalho

A imageacutetica motora eacute o processo mental no qual o indiviacuteduo imagina um determinadomovimento como por exemplo movimentar o braccedilo esquerdo ou direito A intenccedilatildeodo movimento que foi mandada pelo ceacuterebro eacute analisada e classicada de acordo como membro correspondente O resultado pode ser usado como comando para diversasaplicaccedilotildees como por exemplo o controle de um jogo

Dentro de ICC seraacute trabalhado o desenvolvimento de uma aplicaccedilatildeo online que utilizaduas classes de movimentos com as matildeos para a direita e a outra para a esquerda Estaaplicaccedilatildeo seraacute o jogo de ping-pong

13 Objetivo

Este trabalho possui dois objetivos principais O primeiro consiste em fazer um estudorelacionado agrave imageacutetica motora incluindo um levantamento dos trabalhos existentes naliteratura de forma a sumarizaacute-los O segundo objetivo eacute propor implementar e analisaruma aplicaccedilotildees que realiza a interaccedilatildeo ceacuterebro computador atraveacutes da imageacutetica motorao jogo de Ping Pong

3

14 Justicativa

O tema abordado neste trabalho eacute de grande relevacircncia social A ICC pode ser usadacomo soluccedilatildeo para a inclusccedilatildeo social de indiviacuteduos com diversos tipos de patologias quelimitam seus movimentos Aleacutem disso a ICC pode ser usada como uma alternativa paraa interface de jogos que representam um mercado de bilhotildees de doacutelares Pode-se porexemplo desenvolver melhorias para seres humanos decientes como a construccedilatildeo debraccedilos biocircnicos com o uso da imageacutetica motora ou talvez o controle de uma cadeira derodas para um indiviacuteduo tetrapleacutegico Tambeacutem se justica o estudo do tema am defacilitar tarefas mais simples como realizar uma ligaccedilatildeo atraveacutes de um telefone celular

15 Organizaccedilatildeo dos Capiacutetulos

O presente trabalho eacute dividio em seis capiacutetulos e anexos No primeiro capiacutetulo satildeoapresentados a contextualizaccedilatildeo do tema foco do trabalho objetivo e justicativas OCapiacutetulo 2 abrange os conceitos baacutesicos necessaacuterios ao entendimento da proposta do tra-balho O capiacutetulo seguinte conteacutem a descriccedilatildeo das trabalhos anteriores relacionados agraveICC encontradas na literatura O quarto capiacutetulo descreve o processo de desenvolvimentoda aplicaccedilatildeo propostas desde a idealizaccedilatildeo ateacute o desenvolvimento de fato O Capiacutetulo5 apresenta a descriccedilatildeo da fase de testes da implantaccedilatildeo da aplicaccedilatildeo bem como dosresultados obtidos desse processo com posterior anaacutelise deles O uacuteltimo eacute o capiacutetulo con-cludente sobre os resultados obtidos e que conta com sugestotildees de trabalhos futuros Porm o texto ainda conta com anexos

4

Capiacutetulo 2

Fundamentaccedilatildeo

21 A Biologia por traacutes do EEG

Estaacute entendido pela bibliograa que o sinal de EEG eacute bastante uacutetil e com ele conse-guimos produzir diversos trabalhos mas para entender o que se passa por traacutes do EEGde onde esse sinal vem e como eacute tratado temos que procurar nos interar melhor com abiologia do neurocircnio sua estrutura e funccedilatildeo

211 Estrutura e funccedilatildeo do neurocircnio

Como se pode ver na Figura 21 o neurocircnio eacute constituiacutedo de

1 Corpo celular

2 Dendritos

3 Axocircnio

Mas como ocorre a comunicaccedilatildeo entre duas ceacutelulas Qual o meio fiacutesico Os dendritossatildeo responsaacuteveis por receber sinais e passaacute-los para um axocircnio vide Figura 21 que remetea mesma para os outros neurocircnios

Figura 21 Estrutura do neurocircnio (Adaptado de [39])

5

212 Como funciona a troca de potenciais

Com o sinal recebido o neurocircnio tenta passar os impulsos eleacutetricos agrave frente atraveacutesde troca de potenciais a membrana celular envolta ao neurocircnio eacute carregada de iacuteons desoacutedio (Na+) e potaacutessio (K+) que cam se movimentando para dentro e fora da ceacutelulaInicialmente o interior da ceacutelula se encontra a -70mV em comparaccedilatildeo ao lado externoQuando algum sinal eacute recebido pelo dendrito ela ca menos negativa Se essa despola-rizaccedilatildeo chegar a -55mV a membrana se abre para iacuteons de soacutedio que entram na ceacutelulaIsto faz com que ela que cada vez menos negativa [40] Quando a ceacutelula atingir umpotencial positivo ela se abre para a saiacuteda de iacuteons de potaacutessio que agora causam a raacutepidarepolarizaccedilatildeo da membrana que chega a um potencial menor que -70mV como podemosver na Figura 22

Figura 22 Potencial de accedilatildeo de um neurocircnio [40]

213 O sinal de EEG

Os eletrodos do capacete Emotiv Epoc natildeo conseguem captar sinais de amplitudemuito pequena Este capacete e os demais relacionados apenas conseguem analisar sinaisde maior amplitude e a consequecircncia disso eacute que um uacutenico neurocircnio natildeo produz um sinalamplo o suciente para ser detectado sozinho Portanto o sinal soacute pode ser medidoconsiderando uma regiatildeo com vaacuterios neurocircnios Juntos levam aproximadamente 03s paraacumular a energia suciente para serem detectados [17] Como saber entatildeo quandoos neurocircnios tem sinal sucientemente forte para ser detectado Atraveacutes de dois preacute-requisitos

1 Muitos neurocircnios devem ser acionados ao mesmo tempo

2 Eles precisam estar alinhados em paralelo

6

Figura 23 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectadospelo eletrodo do capacete [42]

A ativaccedilatildeo de neurotransmissores do axocircnio terminal para as sinapses ocorre quandoum potencial de accedilatildeo atinge o m de um axocircnio Existem dois tipos de neurotransmissores

1 o primeiro causa um inuxo

2 o segundo causa um escoamento de iacuteons positivos

Assim os neurotransmissores ativados conseguem inuenciar a mudanccedila de potencialdo neurocircnio subsequente agrave sinapse mudando a permeabilidade da sua membrana Onome dado a essa mudanccedila de potencial do neurocircnio subsequente eacute potencial poacutes-sinaacutepticoexcitatoacuterio quando for uma mudanccedila positiva e potencial poacutes-sinaacuteptico inibitoacuterio quandonegativa Esses potenciais duram em meacutedia 100ms e variam sua amplitude entre 50e 100mV Na Figura 24 podemos ver um salto quacircntico de potencial de accedilatildeo de umneurocircnio para sinal de EEG

7

Figura 24 Eletroencefalograa claacutessica (Adapatado de [9])

22 Artefatos bioloacutegicos

Artefatos bioloacutegicos satildeo atividades causadas pelo sujeito mas natildeo ligadas agrave atividadecerebral de fato Agraves vezes satildeo chamados de artefatos sioloacutegicos [2] Os artefatos tecircm atendecircncia de ter uma amplitude mais forte que a de um sinal de EEG puro sendo assimum componente signicante obtido no EEG pois pode vir a atrapalhar sua mediccedilatildeotornando-a ineciente Eacute considerado como um ruiacutedo Desse modo se torna necessaacuteriofazer consideraccedilotildees especiais sobre os artefatos

221 Eletrooculograma

O EOG eacute um tipo de artefato relacionado agrave estrutura ocular do indiviacuteduo Ele vemdo movimento dos olhos para os lados ou para cima e das possiacuteveis piscadas pois essesmovimentos causam alteraccedilatildeo do campo eleacutetrico ocular Na Figura 25 mostramos doque eacute feito o olho humano

8

Figura 25 Estrutura do olho e suas partes nomeadas (Adaptado de [3])

O campo eleacutetrico do olho se origina da diferenccedila de potencial causada entre a coacuterneaque eacute carregada positivamente e a retina que eacute carregada negativamente Um esquemade como funciona esse dipolo pode ser visto na Figura 26

Figura 26 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3])

Como funciona a mediccedilatildeo do EOG

Dois eletrodos satildeo posicionados em cada lado esquerdo e direito de cada olho Amovimentaccedilatildeo dos olhos vai causar a diferenccedila de potencial fazendo a coacuternea carregadapositivamente car mais proacutexima de um dos eletrodos e consequentemente a retina car-regada negativamente car mais distante de um dos eletrodos Entatildeo cresce a tensatildeoeleacutetrica de um lado e decresce do outro O piscar de olhos provoca uma diferenccedila de po-tencial e tambeacutem inuencia o sinal de EEG A Figura 27 mostra como satildeo posicionadosesses eletrodos para medir a diferenccedila de potencial

9

Figura 27 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5])

No trabalho em questatildeo natildeo foi possiacutevel medir a diferenccedila de potencial ocasionadapelo movimentar dos olhos portanto esse eacute um ruiacutedo que natildeo foi tratado

222 Eletrocardiograma

Um exame bastante interessante eacute o eletrocardiograma (ECG) A cada batida docoraccedilatildeo o electrocardioacutegrafo grava a diferenccedila de potencial no muacutesculo cardiacuteaco causadapela sua despolarizaccedilatildeo Ou seja ele registra a variaccedilatildeo eleacutetrica da atividade do coraccedilatildeo

Essa atividade do coraccedilatildeo pode vir a atrapalhar os sinais de EEG como pode-se notarna Figura 28 Em azul tem-se o sinal do EEG puro antes de ser retirado o ECG Emverde tem-se o sinal do ECG e em vermelho notamos a diferenccedila que acontece no sinalde EEG quando o artefato ECG eacute retirado

Figura 28 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada doartefato de ECG (Adaptado de [35])

223 Eletromiograa

O sinal eletromiograacuteco (EMG) eacute a soma algeacutebrica de todos os sinais detectados emcerta aacuterea podendo ser afetado por propriedades musculares anatocircmicas e sioloacutegicasassim como pelo controle do sistema nervoso perifeacuterico e a instrumentaccedilatildeo utilizada paraa aquisiccedilatildeo dos sinais [13] O eletromioacutegrafo eacute um aparelho que adquire o sinal EMG

10

possibilitando o exame da eletromiograa (ver Figura 29) Ele fornece informaccedilotildees rele-vantes sobre a ativaccedilatildeo da musculatura envolvida em um movimento e a intensidade desua ativaccedilatildeo Qualquer movimentaccedilatildeo ou contraccedilatildeo dos muacutesculos da face afeta o sinal deEEG como por exemplo apertar os dentes contrair a testa etc

Figura 29 Sinal de EMG [2])

23 Artefatos teacutecnicos

Satildeo os tambeacutem chamados artefatos extrasioloacutegicos Natildeo dependem do ser humanomas sim do ambiente em que o usuaacuterio se encontra ou dos possiacuteveis eventos que ocorram

231 Frequecircncia de 5060 Hz

Um dos artefatos mais comuns existentes eacute o da interferecircncia causada pela correnteeleacutetrica Estatildeo indicadas duas frequecircncias pois a faixa normal de interferecircncia variade local para local no mundo Por exemplo na Ameacuterica do Norte eacute em torno de 60Hzenquanto na maioria dos outros paiacuteses ca em torno de 50 Hz Para tratar deste artefatousualmente coloca-se um ltro notch nessa faixa de frequecircncia e em seus respectivosharmocircnicos como por exemplo para o Brasil 60Hz 120Hz 180Hz etc

232 Artefato do amplicador

Eacute uma interferecircncia com pequena amplitude mas que tambeacutem merece alguma atenccedilatildeoNa Figura 210 em azul temos o sinal do EEG e em verde pode-se notar a pequenaamplitude do artefato gerado pelo amplicador

11

Figura 210 Artefato do amplicador analisado em graacuteco (Adaptado de [34])

24 Imageacutetica Motora

Depois de entender melhor como funciona todo o processo por traacutes da mediccedilatildeo doEEG torna-se interessante saber como isso se relaciona agrave praacutetica produzindo ao naldo processo o efeito esperado que eacute o deslocamento virtual de objetos usando apenas ainterpretaccedilatildeo dos sinais gerados pelo pensamento

O centro desse processo eacute a imageacutetica motora Ela pode ser denida como um estadodinacircmico durante a imaginaccedilatildeo que um indiviacuteduo faz de uma determinada accedilatildeo intenci-onada Este fenocircmeno implica que o sujeito sinta que realmente estaacute realizando a accedilatildeoimaginada sicamente seja ela de movimentar um braccedilo ou talvez empurrar um objeto[10]

A imageacutetica motora vem mostrando vaacuterios bons resultados em sua aplicaccedilatildeo Comoexemplo temos a ocorrecircncia do fenocircmeno na teacutecnica de aprendizado motor Os atletasutilizam a imaginaccedilatildeo de movimentos que seratildeo executados nos exerciacutecios de fato assimtrazem benefiacutecios no aquecimento relaxamento e concentraccedilatildeo [38] Outro exemplo in-teressante eacute o dos muacutesicos que ao utilizaacute-la possibilitam o aprendizado de partituras demaneira mais eciente [20]

Segundo o siologista sueco Hesslow [15] para o ceacuterebro a simulaccedilatildeo hipoteacutetica deestados consiste em trecircs premissas fundamentais

1 Imaginaccedilatildeo de accedilotildees ativa as estruturas motoras do ceacuterebro de tal forma que elasremetam agrave atividade que ocorre durante uma accedilatildeo normal de movimento entretantosem nenhum movimento evidente

2 Imaginaccedilatildeo de percepccedilatildeo a imaginaccedilatildeo de estar percebendo uma atividade eacute omesmo que realmente estar percebendo algo Em sua essecircncia a atividade de per-cepccedilatildeo eacute gerada pelo proacuteprio ceacuterebro em depreciaccedilatildeo de estiacutemulos externos

12

Letra Localizaccedilatildeo

A Loacutebulo da orelhaC CentralP ParietalF FrontalFp Frontal polarO OcipitalT Temporal

Tabela 21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22])

3 Antecipaccedilatildeo uma accedilatildeo simulada pode provocar a atividade perceptiva que remeteagravequela que deveria ter acontecido se a accedilatildeo fosse executada de fato

Devido a esses fatores a simulaccedilatildeo mental pode ser utilizada como uma ferramentarepresentativa para o entendimento da mente Isso permite que os diversos estados mentaispossam ser explorados possibilitando relacionar as aacutereas especiacutecas do ceacuterebro que satildeomais ativadas devido a certos sentimentos desejos ou talvez intenccedilotildees Assim a simulaccedilatildeomental contribui para o avanccedilo em diversas aacutereas tais como a psicologia e outras

25 Emotiv Epoc

A m de analisar a imaginaccedilatildeo e os efeitos que ela tem sobre o nosso corpo e mentecientistas atraveacutes da busca constante de avanccedilos chegaram agrave utilizaccedilatildeo de um capaceteneural para mediccedilatildeo efetiva de estiacutemulos demonstrados pela captaccedilatildeo do sinal de EEGComo ilustrado na Figura 11a o custo-benefiacutecio de capacete que melhor atendeu o grupono projeto de pesquisa foi o do Emotiv Epoc Seus detalhes de organizaccedilatildeo e funcionamentosatildeo mostrados a seguir

251 Posicionamento de eletrodos

A Federaccedilatildeo Internacional de Neuropsicologia recomenda a utilizaccedilatildeo do modelo 10-20para ateacute 21 eletrodos [11] de acordo com a Figura 211 Nesse modelo todos os eletrodosse encontram a uma distacircncia de seus eletrodos vizinhos de 10 ou 20 da distacircncia totalda cabeccedila A cada posiccedilatildeo eacute dado um identicador de uma ou duas letras e um nuacutemerode acordo com sua proximidade a alguma parte do ceacuterebro (veja tabela 21) Nuacutemerospares estatildeo agrave direita e nuacutemeros iacutempares agrave esquerda

A sociedade Americana de EEG sugeriu nos seus guias [16] que novos eletrodos sejamcolocados de maneira equidistante dos 21 eletrodos jaacute denidos na Figura 212 caso sejanecessaacuterio um nuacutemero maior de eletrodos

13

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 5: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Agradecimentos

Considero que na vida todas as accedilotildees satildeo iniciadas por uma ideia Essa ideia pode serimplantada por uma grande accedilatildeo um conselho uma sugestatildeo ou ateacute um simples gestoEacute o que chamamos de inspiraccedilatildeo

Em minha vida tive muitas pessoas que me inspiraram me ajudando a ser o que souhoje

A primeira delas eacute minha matildee que teve um aacuterduo trabalho e se esforccedilou muito para mecriar como matildee solteira me afastando dos maus caminhos me ensinando valores moraise eacuteticos Me tornei a pessoa que sou hoje graccedilas a seu esforccedilo sobrehumano para mantera nossa famiacutelia unida Eacute nela que me inspiro para me tornar cada dia melhor

Em seguida gostaria de agradecer a minha irmatilde que sempre me inspirou com seuesforccedilo e inteligecircncia nos estudos e a minha voacute que considero a minha primeira professorade matemaacutetica Agradeccedilo a meu irmatildeo Marcelo por ter me iniciado nos estudos dealgoritmos o que me inuenciou bastante na escolha do meu curso de graduaccedilatildeo e aminha namorada que sempre me apoiou nos estudos

Acho que os amigos e colegas de escola satildeo as primeiras inspiraccedilotildees que temos fora dafamiacutelia Satildeo as primeiras ideias diferentes do nosso nuacutecleo familiar Por isso gostaria deagradecer a todos os amigos e colegas que tive durante os anos de estudo do preacute-escolarateacute a graduaccedilatildeo mas em especial gostaria de agradecer ao meu amigo que considero umirmatildeo Murilo que me inspirou a fazer meu trabalho de graduaccedilatildeo relacionado a InterfaceCeacuterebro Maacutequina e me deu um enorme apoio natildeo somente com o projeto mas tambeacutemem minha vida Gostaria tambeacutem de agradecer ao Emerson por toda a ajuda fornecidadurante o projeto Sei que sem ele esta monograa teria sido muito mais complicada dese fazer

Para nalizar gostaria tambeacutem de agradecer aos professores que tive por tentarem mepassar todo o conhecimento que me eacute necessaacuterio para a vida acadecircmica e prossional

Renato Carrasco Costa

ii

Agradecimentos

Ao longo dos anos pude conhecer diversas pessoas que me ajudaram a ser quem souhoje A elas devo todo o agradecimento

Primeiramente agradeccedilo a Deus que foi a quem me apeguei em todos os momentosdifiacuteceis Em todas as horas em que vontade de desistir era grande era Nele que euencontrava forccedilas para continuar trilhando pelos bons caminhos

Em seguida gostaria de agradecer agraves pessoas mais importantes de minha vida meupai e minha matildee A meu pai por sempre ter me inspirado a buscar diculdades e querervencecirc-las Por ter inuenciado meu interesse pela aacuterea de Exatas e por todo o apoio dadoao longo desses anos custeando meus estudos Agrave minha matildee por todo o carinho e amorincondicional demonstrados em toda minha vida Por sempre estar ao meu lado quandoeu precisei Por me chamar a atenccedilatildeo quando eu comeccedilava a desviar do caminho corretoPor me aguentar com toda a paciecircncia do mundo nos meus piores dias sejam de estressesejam de tristeza E por ser a melhor amiga do mundo com quem eu pude compartilhardiversos momentos de muita alegria e ateacute alguns ruins estes que logo passaram com todoo seu apoio Realmente a base da vida eacute a famiacutelia Algo que noacutes soacute conseguimos entenderapoacutes adquirir um pouco de maturidade

Agradeccedilo tambeacutem aos professores do Ensino Meacutedio que me zeram ter certeza docaminho que eu queria seguir na faculdade Aos da UnB e ao Emerson que foram defundamental apoio nesse trabalho e principalmente por terem ajudado na construccedilatildeodiaacuteria de conhecimento para a vida prossional

Gostaria de agradecer aos colegas de curso com os quais pude compartilhar de horasmuito difiacuteceis nos dias anteriores agrave apresentaccedilatildeo de trabalhos e realizaccedilotildees de provasassim como tambeacutem de dias muito alegres e festivos

Ao pessoal do trabalho com os quais pude aprimorar meus conhecimentos e princi-palmente ao Nogueira Este me inspirou a seguir o rumo da Interface Ceacuterebro MaacutequinaSempre me apoiando mandando artigos e revistas para ampliar meu conhecimento

Finalmente aos amigos pois esses satildeo realmente a famiacutelia que noacutes natildeo escolhemosEles nos apoiam fora de casa quando noacutes somos obrigados a encarar o mundo laacute fora Den-tre eles natildeo posso deixar de citar alguns nomes muito importantes algumas de amizadesde muitos anos Joana grande amiga e irmatilde agrave qual devo muitos aprendizados Kaacuteritagrande companheira de trabalho que sempre me inspirou com a literatura e o portuguecircsRenato colega de curso amigo e grande inspirador da minha escolha pelo projeto Liacutegiapelas noites que passamos acordadas estudando para as piores provas sempre me dandoforccedilas e me alegrando Luiz meu grande amigo e namorado que esteve ao meu lado emqualquer momento me apoiando a passar pelas diculdades no projeto e na vida

Vanessa Mendes de Oliveira

iii

Resumo

Este trabalho consiste em um estudo sobre Interface Ceacuterebro Computador (ICC) e davalidaccedilatildeo desse conhecimento por meio do desenvolvimento de um jogo A blibliograafoi composta de leitura de livros artigos e monograas relativos agrave ICC O programadesenvolvido foi um jogo simulador de tecircnis de mesa controlado pela interpretaccedilatildeo dossinais obtidos por um capacete neural Aleacutem disso foi utilizado o programa OpenViBEpara desenvolver a aquisiccedilatildeo e classicaccedilatildeo de dados Para anaacutelise da implementaccedilatildeo foifeito um experimento com a participaccedilatildeo de 10 indiviacuteduos que alcanccedilou uma taxa declassicaccedilatildeo em torno de 70 Os dados resultantes mostraram que mesmo simulando ouso do capacete em situaccedilotildees reais com a incidecircncia de muito ruiacutedo eacute possiacutevel obter-seuma boa taxa classicaccedilatildeo

Palavras-chave Interface Ceacuterebro Maacutequina Interface Ceacuterebro Computador BCI BMIEEG Eletroencefalograa Imageacutetica Motora OpenVibe Emotiv Epoc Headset

iv

Abstract

This work consists of a study about Brain Machine Interface (BMI) and validationof this knowledge with the development of a game The bibliography was composed byreading books articles and undergraduate works about BMI The developed software wasa game of table tenis controlled by the interpretation of signals obtained by a neural-headset Futhermore the OpenViBE application was used to develop the aquisition andclassication of the data For analysis of the implementation an experiment was madewith the participation of some subjects in which the classication rate reached around70 The resultant data shows that even simulating the usage of the headset in realsituations with a high quantity of noise it is possible to obtain a good classication rate

Keywords Brain Machine Interface Brain Computer Interface BCI BMI EEG Elec-troencephalography Motor Imagery OpenVibe Emotiv Epoc Headset

v

Sumaacuterio

1 Introduccedilatildeo 1

11 Contextualizaccedilatildeo 112 Foco do trabalho 313 Objetivo 314 Justicativa 415 Organizaccedilatildeo dos Capiacutetulos 4

2 Fundamentaccedilatildeo 5

21 A Biologia por traacutes do EEG 5211 Estrutura e funccedilatildeo do neurocircnio 5212 Como funciona a troca de potenciais 6213 O sinal de EEG 6

22 Artefatos bioloacutegicos 8221 Eletrooculograma 8222 Eletrocardiograma 10223 Eletromiograa 10

23 Artefatos teacutecnicos 11231 Frequecircncia de 5060 Hz 11232 Artefato do amplicador 11

24 Imageacutetica Motora 1225 Emotiv Epoc 13

251 Posicionamento de eletrodos 13252 Emotiv Epoc Headset 14

26 OpenViBE 1827 Classicadores 1828 Extraccedilatildeo de sinais utilizando a energia de banda 18

3 Trabalhos relacionados 19

31 Carro controlado pelo ceacuterebro 1932 NeuroPhone 2033 Controle para o Second Life 2134 Controle do braccedilo de um robocirc 2235 BrainTalk 23

vi

4 Processo de desenvolvimento 24

41 Aquisiccedilatildeo de Sinais de EEG 2442 O Experimento 2643 Cenaacuterios 26

431 Monitoramento de Sinais 26432 Aquisiccedilatildeo de Sinais 27433 Treinamento dos Classicadores 28434 Online 32435 Replay 34436 Caacutelculo da porcentagem de acertos 35

44 Aplicativo desenvolvido 37441 Comunicaccedilatildeo do OpenViBE com o aplicativo 37442 Classes principais do aplicativo 38

5 Resultados e anaacutelise 39

51 Comparaccedilatildeo entre resultados de classicadores utilizados 39

6 Conclusatildeo 41

A Anexos 42

A1 Spriteh 42A2 Spritecpp 42A3 Barrah 45A4 Barracpp 46A5 GameManagerh 49A6 GameManagercpp 49A7 InputManagerh 54A8 InputManagercpp 55A9 Maincpp 58A10 Pongh 59A11 Pongcpp 60

Referecircncias 64

vii

Lista de Figuras

11 Preccedilos e comparaccedilotildees de custo-benefiacutecio de capacetes apenas dos maisbaratos (0-1000 doacutelares) (Adapatado de [37]) 2

21 Estrutura do neurocircnio (Adaptado de [39]) 522 Potencial de accedilatildeo de um neurocircnio [40] 623 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectados

pelo eletrodo do capacete [42] 724 Eletroencefalograa claacutessica (Adapatado de [9]) 825 Estrutura do olho e suas partes nomeadas (Adaptado de [3]) 926 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3]) 927 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5]) 1028 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada do

artefato de ECG (Adaptado de [35]) 1029 Sinal de EMG [2]) 11210 Artefato do amplicador analisado em graacuteco (Adaptado de [34]) 12211 Modelo 10-20 para ateacute 21 eletrodos [33] 14212 Modelo 10-20 para ateacute 75 eletrodos [33] 14213 Emotiv EPOC antes de ser montado (Adaptado de [23]) 15214 Vericando o estado dos eletrodos 16215 Detecccedilatildeo de movimentos da face do usuaacuterio 16216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo 17217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento 17218 Controlador de mouse 17

31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da uti-lizaccedilatildeo do Emotiv EPOC [30] 19

32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildeestelefocircnicas [25] 20

33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8] 2134 Exemplo de tela do Second Life com os possiacuteveis movimentos de um jogador[18] 2235 Braccedilo de um robocirc sendo controlado pelo capacete neural [43] 2236 Teclado virtual do sistema Brain talk[21] 23

41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc He-adset [28] 24

42 Tentativa sem feedback [28] 2543 Tentativa que contava com feedback [28] 2644 Cenaacuterio de monitoramento 27

viii

45 Cenaacuterio de aquisiccedilatildeo de sinais 2846 Cenaacuterio de treinamento 2947 Cenaacuterio de treinamento do ltro espacial CSP 3048 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM 3149 Cenaacuterio de treinamento do classicador usando o ltro CSP 32410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utiliza-

ccedilatildeo da barra azul como feedback 33411 Cenaacuterio de utilizaccedilatildeo online 33412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP 34413 Cenaacuterio de replay 35414 Cenaacuterio de caacutelculo de porcentagem de acertos 36415 Cenaacuterio de caacutelculo de porcentagem de acertos 36416 Jogo implementado 37

ix

Lista de Tabelas

11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvan-tagens (Adapatado de [19]) 2

21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22]) 13

31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8] 21

51 Tabela de porcentagem de acertos dos diferentes classicadores citados 40

x

Capiacutetulo 1

Introduccedilatildeo

11 Contextualizaccedilatildeo

No ano de 1929 Hans Berger [4] psiquiatra alematildeo publicou as primeiras paacuteginas deseu trabalho o eletroencefalograma (EEG) [22] Ele foi o primeiro a identicar ondas alfa(8-12 Hz) que satildeo atividades oscilatoacuterias no ceacuterebro Antes do registro dessas atividadesno ceacuterebro humano pesquisas jaacute haviam sido feitas em animais Entretanto foi apoacutesHans Berger que a quantidade de pesquisa feita sobre este oacutergatildeo cresceu bastante

O EEG eacute o registro da sincronizaccedilatildeo de milhares de sinais de neurocircnios em conjuntoDessa forma a localizaccedilatildeo exata da atividade de um neurocircnio eacute impossiacutevel de ser feitasomente com o EEG No entanto o registro de EEG associado a outras formas de registropermite resolver esse impasse Na Tabela 11 satildeo mostradas outras formas de se mensuraratividades neurais e suas respectivas desvantagens Devido ao alto custo envolvido nastecnologias apresentadas na Tabela 11 e principalmente agraves desvantagens como por exem-plo a exposiccedilatildeo agrave radiaccedilatildeo que outras tecnologias exigem o EEG tem sido o sinal maisutilizado para o desenvolvimento de pesquisa em Interface Ceacuterebro Computador (ICC)Aleacutem de ter bom custo-benefiacutecio sua utilizaccedilatildeo eacute bastante praacutetica

A ICC eacute uma teacutecnica que tenta interpretar os sinais eleacutetricos da superfiacutecie corticalou subcortical do ceacuterebro para interagir com o ambiente externo por meio de maacutequinasbuscando assim interpretar pensamentos referentes a movimento sem a necessidade domovimento real Por exemplo se um indiviacuteduo utilizador de ICC quiser mover o mousede um computador a tecnologia entenderia isso e realizaacute-la-ia sem o movimento das matildeosdo humano Essa tecnologia eacute um meio de comunicaccedilatildeo alternativo uacutetil para muitosobjetivos entre eles a possibilidade de ajudar um paciente impossibilitado de atividadesmotoras como um tetrapleacutegico a movimentar objetos

Para que seja possiacutevel a aplicaccedilatildeo da tecnologia ICC eacute necessaacuterio um aparelho que sejacapaz de captar as ondas emitidas pelo ceacuterebro um capacete neural Diante da grandequantidade de aparelhos o que se destacou foi o Emotiv Epoc como se pode observar deacordo com a Figura 11 A Figura 11a mostra alguns equipamentos com suas respectivasfaixas de preccedilo e algumas de suas funcionalidades Para efeitos de comparaccedilatildeo a Figura11b exibe a nota recebida por cada equipamento devido ao custo-benefiacutecio O destaquedo capacete Emotiv Epoc se deve ao melhor custo-benefiacutecio e agrave praticidade de utilizaccedilatildeoEle se acopla facilmente agrave cabeccedila e sua manipulaccedilatildeo eacute muito simples

1

Tecnologia Desvantagem

Electrocorticogram (ECoG) Exige cirurgiaMagneto-encephalography (MEG) Alto custoComputed Tomography (CT) Somente dados anatocircmicos

e exposiccedilatildeo agrave radiaccedilatildeoSingle Photon Emission Computerized Tomography (SPECT) Exposiccedilatildeo agrave radiaccedilatildeoPositron Emission Tomography (PET) Exposiccedilatildeo agrave radiaccedilatildeoMagnetic Resonance Imaging (MRI) CaraFunctional Magnetic Resonance Imaging (fMRI) CaraEvent-Related Optical Signal (EROS) Cara

Tabela 11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvanta-gens (Adapatado de [19])

(a) Capacetes neurais de baixo custo (b) Relaccedilatildeo custo-benefiacutecio

Figura 11 Preccedilos e comparaccedilotildees de custo-benefiacutecio de capacetes apenas dos mais baratos(0-1000 doacutelares) (Adapatado de [37])

2

O primeiro passo no processo eacute a aquisiccedilatildeo dos sinais cerebrais Para isso na literaturahaacute diversas teacutecnicas que se dividem em trecircs categorias as invasivas as semi-invasivas eas natildeo invasivas cada uma com suas devidas vantagens e desvantagens

A utilizaccedilatildeo da teacutecnica invasiva eacute uma oacutetima opccedilatildeo quando o foco eacute na captaccedilatildeo dedados com o miacutenimo de ruiacutedo Essa teacutecnica possibilita a diminuiccedilatildeo de ruiacutedos apesarde possuir como desvantagem a cirurgia que eacute necessaacuteria Nesta o cracircnio do indiviacuteduo eacuteaberto e eacute colocado no ceacuterebro eletrodos para captar os dados Tambeacutem como desvantagempode-se citar a faacutecil oxidaccedilatildeo dos eletrodos quando entram em contato com o sangue Ateacutecnica semi-invasiva eacute um pouco menos invasiva do que a primeira No entanto tambeacutemeacute necessaacuterio cirurgia Apesar disso a aquisiccedilatildeo de sinalruiacutedo eacute boa Jaacute a terceira teacutecnicacitada a natildeo-invasiva eacute a pior das trecircs em questatildeo de robustez ao ruiacutedo poreacutem eacute a demais faacutecil adaptaccedilatildeo agrave qualquer indiviacuteduo que tenha intenccedilatildeo de utilizaacute-la

Devido agraves caracteristicas destacadas este trabalho utiliza a teacutecnica natildeo invasiva comofonte de captaccedilatildeo de dados de EEG Com o uso do capacete Emotiv Epoc essa teacutecnicaeacute possibilitada De posse do aparelho comeccedilamos entatildeo fazendo essa aquisiccedilatildeo O se-gundo passo eacute o processamento do sinal e o reconhecimento de padrotildees atraveacutes do uso declassicadores Por uacuteltimo eacute necessaacuterio associar os dados obtidos agrave intenccedilatildeo do indiviacuteduo

Os estudos sobre ICC procuram adaptaacute-la ao uso no cotidiano Para avanccedilar nessaaacuterea eacute necessaacuterio o desenvolvimento de sistemas com elevada acuraacutecia e praticidade Paraaumentar a qualidade dos sistemas busca-se a implementaccedilatildeo de novos algoritmos para aaquisiccedilatildeo e a classicaccedilatildeo de sinais A cada dia novas aplicaccedilotildees estatildeo surgindo baseadasnessa tecnologia tanto de uso biomeacutedico quanto para jogos e outras aacutereas

12 Foco do trabalho

A imageacutetica motora eacute o processo mental no qual o indiviacuteduo imagina um determinadomovimento como por exemplo movimentar o braccedilo esquerdo ou direito A intenccedilatildeodo movimento que foi mandada pelo ceacuterebro eacute analisada e classicada de acordo como membro correspondente O resultado pode ser usado como comando para diversasaplicaccedilotildees como por exemplo o controle de um jogo

Dentro de ICC seraacute trabalhado o desenvolvimento de uma aplicaccedilatildeo online que utilizaduas classes de movimentos com as matildeos para a direita e a outra para a esquerda Estaaplicaccedilatildeo seraacute o jogo de ping-pong

13 Objetivo

Este trabalho possui dois objetivos principais O primeiro consiste em fazer um estudorelacionado agrave imageacutetica motora incluindo um levantamento dos trabalhos existentes naliteratura de forma a sumarizaacute-los O segundo objetivo eacute propor implementar e analisaruma aplicaccedilotildees que realiza a interaccedilatildeo ceacuterebro computador atraveacutes da imageacutetica motorao jogo de Ping Pong

3

14 Justicativa

O tema abordado neste trabalho eacute de grande relevacircncia social A ICC pode ser usadacomo soluccedilatildeo para a inclusccedilatildeo social de indiviacuteduos com diversos tipos de patologias quelimitam seus movimentos Aleacutem disso a ICC pode ser usada como uma alternativa paraa interface de jogos que representam um mercado de bilhotildees de doacutelares Pode-se porexemplo desenvolver melhorias para seres humanos decientes como a construccedilatildeo debraccedilos biocircnicos com o uso da imageacutetica motora ou talvez o controle de uma cadeira derodas para um indiviacuteduo tetrapleacutegico Tambeacutem se justica o estudo do tema am defacilitar tarefas mais simples como realizar uma ligaccedilatildeo atraveacutes de um telefone celular

15 Organizaccedilatildeo dos Capiacutetulos

O presente trabalho eacute dividio em seis capiacutetulos e anexos No primeiro capiacutetulo satildeoapresentados a contextualizaccedilatildeo do tema foco do trabalho objetivo e justicativas OCapiacutetulo 2 abrange os conceitos baacutesicos necessaacuterios ao entendimento da proposta do tra-balho O capiacutetulo seguinte conteacutem a descriccedilatildeo das trabalhos anteriores relacionados agraveICC encontradas na literatura O quarto capiacutetulo descreve o processo de desenvolvimentoda aplicaccedilatildeo propostas desde a idealizaccedilatildeo ateacute o desenvolvimento de fato O Capiacutetulo5 apresenta a descriccedilatildeo da fase de testes da implantaccedilatildeo da aplicaccedilatildeo bem como dosresultados obtidos desse processo com posterior anaacutelise deles O uacuteltimo eacute o capiacutetulo con-cludente sobre os resultados obtidos e que conta com sugestotildees de trabalhos futuros Porm o texto ainda conta com anexos

4

Capiacutetulo 2

Fundamentaccedilatildeo

21 A Biologia por traacutes do EEG

Estaacute entendido pela bibliograa que o sinal de EEG eacute bastante uacutetil e com ele conse-guimos produzir diversos trabalhos mas para entender o que se passa por traacutes do EEGde onde esse sinal vem e como eacute tratado temos que procurar nos interar melhor com abiologia do neurocircnio sua estrutura e funccedilatildeo

211 Estrutura e funccedilatildeo do neurocircnio

Como se pode ver na Figura 21 o neurocircnio eacute constituiacutedo de

1 Corpo celular

2 Dendritos

3 Axocircnio

Mas como ocorre a comunicaccedilatildeo entre duas ceacutelulas Qual o meio fiacutesico Os dendritossatildeo responsaacuteveis por receber sinais e passaacute-los para um axocircnio vide Figura 21 que remetea mesma para os outros neurocircnios

Figura 21 Estrutura do neurocircnio (Adaptado de [39])

5

212 Como funciona a troca de potenciais

Com o sinal recebido o neurocircnio tenta passar os impulsos eleacutetricos agrave frente atraveacutesde troca de potenciais a membrana celular envolta ao neurocircnio eacute carregada de iacuteons desoacutedio (Na+) e potaacutessio (K+) que cam se movimentando para dentro e fora da ceacutelulaInicialmente o interior da ceacutelula se encontra a -70mV em comparaccedilatildeo ao lado externoQuando algum sinal eacute recebido pelo dendrito ela ca menos negativa Se essa despola-rizaccedilatildeo chegar a -55mV a membrana se abre para iacuteons de soacutedio que entram na ceacutelulaIsto faz com que ela que cada vez menos negativa [40] Quando a ceacutelula atingir umpotencial positivo ela se abre para a saiacuteda de iacuteons de potaacutessio que agora causam a raacutepidarepolarizaccedilatildeo da membrana que chega a um potencial menor que -70mV como podemosver na Figura 22

Figura 22 Potencial de accedilatildeo de um neurocircnio [40]

213 O sinal de EEG

Os eletrodos do capacete Emotiv Epoc natildeo conseguem captar sinais de amplitudemuito pequena Este capacete e os demais relacionados apenas conseguem analisar sinaisde maior amplitude e a consequecircncia disso eacute que um uacutenico neurocircnio natildeo produz um sinalamplo o suciente para ser detectado sozinho Portanto o sinal soacute pode ser medidoconsiderando uma regiatildeo com vaacuterios neurocircnios Juntos levam aproximadamente 03s paraacumular a energia suciente para serem detectados [17] Como saber entatildeo quandoos neurocircnios tem sinal sucientemente forte para ser detectado Atraveacutes de dois preacute-requisitos

1 Muitos neurocircnios devem ser acionados ao mesmo tempo

2 Eles precisam estar alinhados em paralelo

6

Figura 23 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectadospelo eletrodo do capacete [42]

A ativaccedilatildeo de neurotransmissores do axocircnio terminal para as sinapses ocorre quandoum potencial de accedilatildeo atinge o m de um axocircnio Existem dois tipos de neurotransmissores

1 o primeiro causa um inuxo

2 o segundo causa um escoamento de iacuteons positivos

Assim os neurotransmissores ativados conseguem inuenciar a mudanccedila de potencialdo neurocircnio subsequente agrave sinapse mudando a permeabilidade da sua membrana Onome dado a essa mudanccedila de potencial do neurocircnio subsequente eacute potencial poacutes-sinaacutepticoexcitatoacuterio quando for uma mudanccedila positiva e potencial poacutes-sinaacuteptico inibitoacuterio quandonegativa Esses potenciais duram em meacutedia 100ms e variam sua amplitude entre 50e 100mV Na Figura 24 podemos ver um salto quacircntico de potencial de accedilatildeo de umneurocircnio para sinal de EEG

7

Figura 24 Eletroencefalograa claacutessica (Adapatado de [9])

22 Artefatos bioloacutegicos

Artefatos bioloacutegicos satildeo atividades causadas pelo sujeito mas natildeo ligadas agrave atividadecerebral de fato Agraves vezes satildeo chamados de artefatos sioloacutegicos [2] Os artefatos tecircm atendecircncia de ter uma amplitude mais forte que a de um sinal de EEG puro sendo assimum componente signicante obtido no EEG pois pode vir a atrapalhar sua mediccedilatildeotornando-a ineciente Eacute considerado como um ruiacutedo Desse modo se torna necessaacuteriofazer consideraccedilotildees especiais sobre os artefatos

221 Eletrooculograma

O EOG eacute um tipo de artefato relacionado agrave estrutura ocular do indiviacuteduo Ele vemdo movimento dos olhos para os lados ou para cima e das possiacuteveis piscadas pois essesmovimentos causam alteraccedilatildeo do campo eleacutetrico ocular Na Figura 25 mostramos doque eacute feito o olho humano

8

Figura 25 Estrutura do olho e suas partes nomeadas (Adaptado de [3])

O campo eleacutetrico do olho se origina da diferenccedila de potencial causada entre a coacuterneaque eacute carregada positivamente e a retina que eacute carregada negativamente Um esquemade como funciona esse dipolo pode ser visto na Figura 26

Figura 26 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3])

Como funciona a mediccedilatildeo do EOG

Dois eletrodos satildeo posicionados em cada lado esquerdo e direito de cada olho Amovimentaccedilatildeo dos olhos vai causar a diferenccedila de potencial fazendo a coacuternea carregadapositivamente car mais proacutexima de um dos eletrodos e consequentemente a retina car-regada negativamente car mais distante de um dos eletrodos Entatildeo cresce a tensatildeoeleacutetrica de um lado e decresce do outro O piscar de olhos provoca uma diferenccedila de po-tencial e tambeacutem inuencia o sinal de EEG A Figura 27 mostra como satildeo posicionadosesses eletrodos para medir a diferenccedila de potencial

9

Figura 27 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5])

No trabalho em questatildeo natildeo foi possiacutevel medir a diferenccedila de potencial ocasionadapelo movimentar dos olhos portanto esse eacute um ruiacutedo que natildeo foi tratado

222 Eletrocardiograma

Um exame bastante interessante eacute o eletrocardiograma (ECG) A cada batida docoraccedilatildeo o electrocardioacutegrafo grava a diferenccedila de potencial no muacutesculo cardiacuteaco causadapela sua despolarizaccedilatildeo Ou seja ele registra a variaccedilatildeo eleacutetrica da atividade do coraccedilatildeo

Essa atividade do coraccedilatildeo pode vir a atrapalhar os sinais de EEG como pode-se notarna Figura 28 Em azul tem-se o sinal do EEG puro antes de ser retirado o ECG Emverde tem-se o sinal do ECG e em vermelho notamos a diferenccedila que acontece no sinalde EEG quando o artefato ECG eacute retirado

Figura 28 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada doartefato de ECG (Adaptado de [35])

223 Eletromiograa

O sinal eletromiograacuteco (EMG) eacute a soma algeacutebrica de todos os sinais detectados emcerta aacuterea podendo ser afetado por propriedades musculares anatocircmicas e sioloacutegicasassim como pelo controle do sistema nervoso perifeacuterico e a instrumentaccedilatildeo utilizada paraa aquisiccedilatildeo dos sinais [13] O eletromioacutegrafo eacute um aparelho que adquire o sinal EMG

10

possibilitando o exame da eletromiograa (ver Figura 29) Ele fornece informaccedilotildees rele-vantes sobre a ativaccedilatildeo da musculatura envolvida em um movimento e a intensidade desua ativaccedilatildeo Qualquer movimentaccedilatildeo ou contraccedilatildeo dos muacutesculos da face afeta o sinal deEEG como por exemplo apertar os dentes contrair a testa etc

Figura 29 Sinal de EMG [2])

23 Artefatos teacutecnicos

Satildeo os tambeacutem chamados artefatos extrasioloacutegicos Natildeo dependem do ser humanomas sim do ambiente em que o usuaacuterio se encontra ou dos possiacuteveis eventos que ocorram

231 Frequecircncia de 5060 Hz

Um dos artefatos mais comuns existentes eacute o da interferecircncia causada pela correnteeleacutetrica Estatildeo indicadas duas frequecircncias pois a faixa normal de interferecircncia variade local para local no mundo Por exemplo na Ameacuterica do Norte eacute em torno de 60Hzenquanto na maioria dos outros paiacuteses ca em torno de 50 Hz Para tratar deste artefatousualmente coloca-se um ltro notch nessa faixa de frequecircncia e em seus respectivosharmocircnicos como por exemplo para o Brasil 60Hz 120Hz 180Hz etc

232 Artefato do amplicador

Eacute uma interferecircncia com pequena amplitude mas que tambeacutem merece alguma atenccedilatildeoNa Figura 210 em azul temos o sinal do EEG e em verde pode-se notar a pequenaamplitude do artefato gerado pelo amplicador

11

Figura 210 Artefato do amplicador analisado em graacuteco (Adaptado de [34])

24 Imageacutetica Motora

Depois de entender melhor como funciona todo o processo por traacutes da mediccedilatildeo doEEG torna-se interessante saber como isso se relaciona agrave praacutetica produzindo ao naldo processo o efeito esperado que eacute o deslocamento virtual de objetos usando apenas ainterpretaccedilatildeo dos sinais gerados pelo pensamento

O centro desse processo eacute a imageacutetica motora Ela pode ser denida como um estadodinacircmico durante a imaginaccedilatildeo que um indiviacuteduo faz de uma determinada accedilatildeo intenci-onada Este fenocircmeno implica que o sujeito sinta que realmente estaacute realizando a accedilatildeoimaginada sicamente seja ela de movimentar um braccedilo ou talvez empurrar um objeto[10]

A imageacutetica motora vem mostrando vaacuterios bons resultados em sua aplicaccedilatildeo Comoexemplo temos a ocorrecircncia do fenocircmeno na teacutecnica de aprendizado motor Os atletasutilizam a imaginaccedilatildeo de movimentos que seratildeo executados nos exerciacutecios de fato assimtrazem benefiacutecios no aquecimento relaxamento e concentraccedilatildeo [38] Outro exemplo in-teressante eacute o dos muacutesicos que ao utilizaacute-la possibilitam o aprendizado de partituras demaneira mais eciente [20]

Segundo o siologista sueco Hesslow [15] para o ceacuterebro a simulaccedilatildeo hipoteacutetica deestados consiste em trecircs premissas fundamentais

1 Imaginaccedilatildeo de accedilotildees ativa as estruturas motoras do ceacuterebro de tal forma que elasremetam agrave atividade que ocorre durante uma accedilatildeo normal de movimento entretantosem nenhum movimento evidente

2 Imaginaccedilatildeo de percepccedilatildeo a imaginaccedilatildeo de estar percebendo uma atividade eacute omesmo que realmente estar percebendo algo Em sua essecircncia a atividade de per-cepccedilatildeo eacute gerada pelo proacuteprio ceacuterebro em depreciaccedilatildeo de estiacutemulos externos

12

Letra Localizaccedilatildeo

A Loacutebulo da orelhaC CentralP ParietalF FrontalFp Frontal polarO OcipitalT Temporal

Tabela 21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22])

3 Antecipaccedilatildeo uma accedilatildeo simulada pode provocar a atividade perceptiva que remeteagravequela que deveria ter acontecido se a accedilatildeo fosse executada de fato

Devido a esses fatores a simulaccedilatildeo mental pode ser utilizada como uma ferramentarepresentativa para o entendimento da mente Isso permite que os diversos estados mentaispossam ser explorados possibilitando relacionar as aacutereas especiacutecas do ceacuterebro que satildeomais ativadas devido a certos sentimentos desejos ou talvez intenccedilotildees Assim a simulaccedilatildeomental contribui para o avanccedilo em diversas aacutereas tais como a psicologia e outras

25 Emotiv Epoc

A m de analisar a imaginaccedilatildeo e os efeitos que ela tem sobre o nosso corpo e mentecientistas atraveacutes da busca constante de avanccedilos chegaram agrave utilizaccedilatildeo de um capaceteneural para mediccedilatildeo efetiva de estiacutemulos demonstrados pela captaccedilatildeo do sinal de EEGComo ilustrado na Figura 11a o custo-benefiacutecio de capacete que melhor atendeu o grupono projeto de pesquisa foi o do Emotiv Epoc Seus detalhes de organizaccedilatildeo e funcionamentosatildeo mostrados a seguir

251 Posicionamento de eletrodos

A Federaccedilatildeo Internacional de Neuropsicologia recomenda a utilizaccedilatildeo do modelo 10-20para ateacute 21 eletrodos [11] de acordo com a Figura 211 Nesse modelo todos os eletrodosse encontram a uma distacircncia de seus eletrodos vizinhos de 10 ou 20 da distacircncia totalda cabeccedila A cada posiccedilatildeo eacute dado um identicador de uma ou duas letras e um nuacutemerode acordo com sua proximidade a alguma parte do ceacuterebro (veja tabela 21) Nuacutemerospares estatildeo agrave direita e nuacutemeros iacutempares agrave esquerda

A sociedade Americana de EEG sugeriu nos seus guias [16] que novos eletrodos sejamcolocados de maneira equidistante dos 21 eletrodos jaacute denidos na Figura 212 caso sejanecessaacuterio um nuacutemero maior de eletrodos

13

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 6: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Agradecimentos

Ao longo dos anos pude conhecer diversas pessoas que me ajudaram a ser quem souhoje A elas devo todo o agradecimento

Primeiramente agradeccedilo a Deus que foi a quem me apeguei em todos os momentosdifiacuteceis Em todas as horas em que vontade de desistir era grande era Nele que euencontrava forccedilas para continuar trilhando pelos bons caminhos

Em seguida gostaria de agradecer agraves pessoas mais importantes de minha vida meupai e minha matildee A meu pai por sempre ter me inspirado a buscar diculdades e querervencecirc-las Por ter inuenciado meu interesse pela aacuterea de Exatas e por todo o apoio dadoao longo desses anos custeando meus estudos Agrave minha matildee por todo o carinho e amorincondicional demonstrados em toda minha vida Por sempre estar ao meu lado quandoeu precisei Por me chamar a atenccedilatildeo quando eu comeccedilava a desviar do caminho corretoPor me aguentar com toda a paciecircncia do mundo nos meus piores dias sejam de estressesejam de tristeza E por ser a melhor amiga do mundo com quem eu pude compartilhardiversos momentos de muita alegria e ateacute alguns ruins estes que logo passaram com todoo seu apoio Realmente a base da vida eacute a famiacutelia Algo que noacutes soacute conseguimos entenderapoacutes adquirir um pouco de maturidade

Agradeccedilo tambeacutem aos professores do Ensino Meacutedio que me zeram ter certeza docaminho que eu queria seguir na faculdade Aos da UnB e ao Emerson que foram defundamental apoio nesse trabalho e principalmente por terem ajudado na construccedilatildeodiaacuteria de conhecimento para a vida prossional

Gostaria de agradecer aos colegas de curso com os quais pude compartilhar de horasmuito difiacuteceis nos dias anteriores agrave apresentaccedilatildeo de trabalhos e realizaccedilotildees de provasassim como tambeacutem de dias muito alegres e festivos

Ao pessoal do trabalho com os quais pude aprimorar meus conhecimentos e princi-palmente ao Nogueira Este me inspirou a seguir o rumo da Interface Ceacuterebro MaacutequinaSempre me apoiando mandando artigos e revistas para ampliar meu conhecimento

Finalmente aos amigos pois esses satildeo realmente a famiacutelia que noacutes natildeo escolhemosEles nos apoiam fora de casa quando noacutes somos obrigados a encarar o mundo laacute fora Den-tre eles natildeo posso deixar de citar alguns nomes muito importantes algumas de amizadesde muitos anos Joana grande amiga e irmatilde agrave qual devo muitos aprendizados Kaacuteritagrande companheira de trabalho que sempre me inspirou com a literatura e o portuguecircsRenato colega de curso amigo e grande inspirador da minha escolha pelo projeto Liacutegiapelas noites que passamos acordadas estudando para as piores provas sempre me dandoforccedilas e me alegrando Luiz meu grande amigo e namorado que esteve ao meu lado emqualquer momento me apoiando a passar pelas diculdades no projeto e na vida

Vanessa Mendes de Oliveira

iii

Resumo

Este trabalho consiste em um estudo sobre Interface Ceacuterebro Computador (ICC) e davalidaccedilatildeo desse conhecimento por meio do desenvolvimento de um jogo A blibliograafoi composta de leitura de livros artigos e monograas relativos agrave ICC O programadesenvolvido foi um jogo simulador de tecircnis de mesa controlado pela interpretaccedilatildeo dossinais obtidos por um capacete neural Aleacutem disso foi utilizado o programa OpenViBEpara desenvolver a aquisiccedilatildeo e classicaccedilatildeo de dados Para anaacutelise da implementaccedilatildeo foifeito um experimento com a participaccedilatildeo de 10 indiviacuteduos que alcanccedilou uma taxa declassicaccedilatildeo em torno de 70 Os dados resultantes mostraram que mesmo simulando ouso do capacete em situaccedilotildees reais com a incidecircncia de muito ruiacutedo eacute possiacutevel obter-seuma boa taxa classicaccedilatildeo

Palavras-chave Interface Ceacuterebro Maacutequina Interface Ceacuterebro Computador BCI BMIEEG Eletroencefalograa Imageacutetica Motora OpenVibe Emotiv Epoc Headset

iv

Abstract

This work consists of a study about Brain Machine Interface (BMI) and validationof this knowledge with the development of a game The bibliography was composed byreading books articles and undergraduate works about BMI The developed software wasa game of table tenis controlled by the interpretation of signals obtained by a neural-headset Futhermore the OpenViBE application was used to develop the aquisition andclassication of the data For analysis of the implementation an experiment was madewith the participation of some subjects in which the classication rate reached around70 The resultant data shows that even simulating the usage of the headset in realsituations with a high quantity of noise it is possible to obtain a good classication rate

Keywords Brain Machine Interface Brain Computer Interface BCI BMI EEG Elec-troencephalography Motor Imagery OpenVibe Emotiv Epoc Headset

v

Sumaacuterio

1 Introduccedilatildeo 1

11 Contextualizaccedilatildeo 112 Foco do trabalho 313 Objetivo 314 Justicativa 415 Organizaccedilatildeo dos Capiacutetulos 4

2 Fundamentaccedilatildeo 5

21 A Biologia por traacutes do EEG 5211 Estrutura e funccedilatildeo do neurocircnio 5212 Como funciona a troca de potenciais 6213 O sinal de EEG 6

22 Artefatos bioloacutegicos 8221 Eletrooculograma 8222 Eletrocardiograma 10223 Eletromiograa 10

23 Artefatos teacutecnicos 11231 Frequecircncia de 5060 Hz 11232 Artefato do amplicador 11

24 Imageacutetica Motora 1225 Emotiv Epoc 13

251 Posicionamento de eletrodos 13252 Emotiv Epoc Headset 14

26 OpenViBE 1827 Classicadores 1828 Extraccedilatildeo de sinais utilizando a energia de banda 18

3 Trabalhos relacionados 19

31 Carro controlado pelo ceacuterebro 1932 NeuroPhone 2033 Controle para o Second Life 2134 Controle do braccedilo de um robocirc 2235 BrainTalk 23

vi

4 Processo de desenvolvimento 24

41 Aquisiccedilatildeo de Sinais de EEG 2442 O Experimento 2643 Cenaacuterios 26

431 Monitoramento de Sinais 26432 Aquisiccedilatildeo de Sinais 27433 Treinamento dos Classicadores 28434 Online 32435 Replay 34436 Caacutelculo da porcentagem de acertos 35

44 Aplicativo desenvolvido 37441 Comunicaccedilatildeo do OpenViBE com o aplicativo 37442 Classes principais do aplicativo 38

5 Resultados e anaacutelise 39

51 Comparaccedilatildeo entre resultados de classicadores utilizados 39

6 Conclusatildeo 41

A Anexos 42

A1 Spriteh 42A2 Spritecpp 42A3 Barrah 45A4 Barracpp 46A5 GameManagerh 49A6 GameManagercpp 49A7 InputManagerh 54A8 InputManagercpp 55A9 Maincpp 58A10 Pongh 59A11 Pongcpp 60

Referecircncias 64

vii

Lista de Figuras

11 Preccedilos e comparaccedilotildees de custo-benefiacutecio de capacetes apenas dos maisbaratos (0-1000 doacutelares) (Adapatado de [37]) 2

21 Estrutura do neurocircnio (Adaptado de [39]) 522 Potencial de accedilatildeo de um neurocircnio [40] 623 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectados

pelo eletrodo do capacete [42] 724 Eletroencefalograa claacutessica (Adapatado de [9]) 825 Estrutura do olho e suas partes nomeadas (Adaptado de [3]) 926 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3]) 927 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5]) 1028 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada do

artefato de ECG (Adaptado de [35]) 1029 Sinal de EMG [2]) 11210 Artefato do amplicador analisado em graacuteco (Adaptado de [34]) 12211 Modelo 10-20 para ateacute 21 eletrodos [33] 14212 Modelo 10-20 para ateacute 75 eletrodos [33] 14213 Emotiv EPOC antes de ser montado (Adaptado de [23]) 15214 Vericando o estado dos eletrodos 16215 Detecccedilatildeo de movimentos da face do usuaacuterio 16216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo 17217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento 17218 Controlador de mouse 17

31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da uti-lizaccedilatildeo do Emotiv EPOC [30] 19

32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildeestelefocircnicas [25] 20

33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8] 2134 Exemplo de tela do Second Life com os possiacuteveis movimentos de um jogador[18] 2235 Braccedilo de um robocirc sendo controlado pelo capacete neural [43] 2236 Teclado virtual do sistema Brain talk[21] 23

41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc He-adset [28] 24

42 Tentativa sem feedback [28] 2543 Tentativa que contava com feedback [28] 2644 Cenaacuterio de monitoramento 27

viii

45 Cenaacuterio de aquisiccedilatildeo de sinais 2846 Cenaacuterio de treinamento 2947 Cenaacuterio de treinamento do ltro espacial CSP 3048 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM 3149 Cenaacuterio de treinamento do classicador usando o ltro CSP 32410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utiliza-

ccedilatildeo da barra azul como feedback 33411 Cenaacuterio de utilizaccedilatildeo online 33412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP 34413 Cenaacuterio de replay 35414 Cenaacuterio de caacutelculo de porcentagem de acertos 36415 Cenaacuterio de caacutelculo de porcentagem de acertos 36416 Jogo implementado 37

ix

Lista de Tabelas

11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvan-tagens (Adapatado de [19]) 2

21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22]) 13

31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8] 21

51 Tabela de porcentagem de acertos dos diferentes classicadores citados 40

x

Capiacutetulo 1

Introduccedilatildeo

11 Contextualizaccedilatildeo

No ano de 1929 Hans Berger [4] psiquiatra alematildeo publicou as primeiras paacuteginas deseu trabalho o eletroencefalograma (EEG) [22] Ele foi o primeiro a identicar ondas alfa(8-12 Hz) que satildeo atividades oscilatoacuterias no ceacuterebro Antes do registro dessas atividadesno ceacuterebro humano pesquisas jaacute haviam sido feitas em animais Entretanto foi apoacutesHans Berger que a quantidade de pesquisa feita sobre este oacutergatildeo cresceu bastante

O EEG eacute o registro da sincronizaccedilatildeo de milhares de sinais de neurocircnios em conjuntoDessa forma a localizaccedilatildeo exata da atividade de um neurocircnio eacute impossiacutevel de ser feitasomente com o EEG No entanto o registro de EEG associado a outras formas de registropermite resolver esse impasse Na Tabela 11 satildeo mostradas outras formas de se mensuraratividades neurais e suas respectivas desvantagens Devido ao alto custo envolvido nastecnologias apresentadas na Tabela 11 e principalmente agraves desvantagens como por exem-plo a exposiccedilatildeo agrave radiaccedilatildeo que outras tecnologias exigem o EEG tem sido o sinal maisutilizado para o desenvolvimento de pesquisa em Interface Ceacuterebro Computador (ICC)Aleacutem de ter bom custo-benefiacutecio sua utilizaccedilatildeo eacute bastante praacutetica

A ICC eacute uma teacutecnica que tenta interpretar os sinais eleacutetricos da superfiacutecie corticalou subcortical do ceacuterebro para interagir com o ambiente externo por meio de maacutequinasbuscando assim interpretar pensamentos referentes a movimento sem a necessidade domovimento real Por exemplo se um indiviacuteduo utilizador de ICC quiser mover o mousede um computador a tecnologia entenderia isso e realizaacute-la-ia sem o movimento das matildeosdo humano Essa tecnologia eacute um meio de comunicaccedilatildeo alternativo uacutetil para muitosobjetivos entre eles a possibilidade de ajudar um paciente impossibilitado de atividadesmotoras como um tetrapleacutegico a movimentar objetos

Para que seja possiacutevel a aplicaccedilatildeo da tecnologia ICC eacute necessaacuterio um aparelho que sejacapaz de captar as ondas emitidas pelo ceacuterebro um capacete neural Diante da grandequantidade de aparelhos o que se destacou foi o Emotiv Epoc como se pode observar deacordo com a Figura 11 A Figura 11a mostra alguns equipamentos com suas respectivasfaixas de preccedilo e algumas de suas funcionalidades Para efeitos de comparaccedilatildeo a Figura11b exibe a nota recebida por cada equipamento devido ao custo-benefiacutecio O destaquedo capacete Emotiv Epoc se deve ao melhor custo-benefiacutecio e agrave praticidade de utilizaccedilatildeoEle se acopla facilmente agrave cabeccedila e sua manipulaccedilatildeo eacute muito simples

1

Tecnologia Desvantagem

Electrocorticogram (ECoG) Exige cirurgiaMagneto-encephalography (MEG) Alto custoComputed Tomography (CT) Somente dados anatocircmicos

e exposiccedilatildeo agrave radiaccedilatildeoSingle Photon Emission Computerized Tomography (SPECT) Exposiccedilatildeo agrave radiaccedilatildeoPositron Emission Tomography (PET) Exposiccedilatildeo agrave radiaccedilatildeoMagnetic Resonance Imaging (MRI) CaraFunctional Magnetic Resonance Imaging (fMRI) CaraEvent-Related Optical Signal (EROS) Cara

Tabela 11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvanta-gens (Adapatado de [19])

(a) Capacetes neurais de baixo custo (b) Relaccedilatildeo custo-benefiacutecio

Figura 11 Preccedilos e comparaccedilotildees de custo-benefiacutecio de capacetes apenas dos mais baratos(0-1000 doacutelares) (Adapatado de [37])

2

O primeiro passo no processo eacute a aquisiccedilatildeo dos sinais cerebrais Para isso na literaturahaacute diversas teacutecnicas que se dividem em trecircs categorias as invasivas as semi-invasivas eas natildeo invasivas cada uma com suas devidas vantagens e desvantagens

A utilizaccedilatildeo da teacutecnica invasiva eacute uma oacutetima opccedilatildeo quando o foco eacute na captaccedilatildeo dedados com o miacutenimo de ruiacutedo Essa teacutecnica possibilita a diminuiccedilatildeo de ruiacutedos apesarde possuir como desvantagem a cirurgia que eacute necessaacuteria Nesta o cracircnio do indiviacuteduo eacuteaberto e eacute colocado no ceacuterebro eletrodos para captar os dados Tambeacutem como desvantagempode-se citar a faacutecil oxidaccedilatildeo dos eletrodos quando entram em contato com o sangue Ateacutecnica semi-invasiva eacute um pouco menos invasiva do que a primeira No entanto tambeacutemeacute necessaacuterio cirurgia Apesar disso a aquisiccedilatildeo de sinalruiacutedo eacute boa Jaacute a terceira teacutecnicacitada a natildeo-invasiva eacute a pior das trecircs em questatildeo de robustez ao ruiacutedo poreacutem eacute a demais faacutecil adaptaccedilatildeo agrave qualquer indiviacuteduo que tenha intenccedilatildeo de utilizaacute-la

Devido agraves caracteristicas destacadas este trabalho utiliza a teacutecnica natildeo invasiva comofonte de captaccedilatildeo de dados de EEG Com o uso do capacete Emotiv Epoc essa teacutecnicaeacute possibilitada De posse do aparelho comeccedilamos entatildeo fazendo essa aquisiccedilatildeo O se-gundo passo eacute o processamento do sinal e o reconhecimento de padrotildees atraveacutes do uso declassicadores Por uacuteltimo eacute necessaacuterio associar os dados obtidos agrave intenccedilatildeo do indiviacuteduo

Os estudos sobre ICC procuram adaptaacute-la ao uso no cotidiano Para avanccedilar nessaaacuterea eacute necessaacuterio o desenvolvimento de sistemas com elevada acuraacutecia e praticidade Paraaumentar a qualidade dos sistemas busca-se a implementaccedilatildeo de novos algoritmos para aaquisiccedilatildeo e a classicaccedilatildeo de sinais A cada dia novas aplicaccedilotildees estatildeo surgindo baseadasnessa tecnologia tanto de uso biomeacutedico quanto para jogos e outras aacutereas

12 Foco do trabalho

A imageacutetica motora eacute o processo mental no qual o indiviacuteduo imagina um determinadomovimento como por exemplo movimentar o braccedilo esquerdo ou direito A intenccedilatildeodo movimento que foi mandada pelo ceacuterebro eacute analisada e classicada de acordo como membro correspondente O resultado pode ser usado como comando para diversasaplicaccedilotildees como por exemplo o controle de um jogo

Dentro de ICC seraacute trabalhado o desenvolvimento de uma aplicaccedilatildeo online que utilizaduas classes de movimentos com as matildeos para a direita e a outra para a esquerda Estaaplicaccedilatildeo seraacute o jogo de ping-pong

13 Objetivo

Este trabalho possui dois objetivos principais O primeiro consiste em fazer um estudorelacionado agrave imageacutetica motora incluindo um levantamento dos trabalhos existentes naliteratura de forma a sumarizaacute-los O segundo objetivo eacute propor implementar e analisaruma aplicaccedilotildees que realiza a interaccedilatildeo ceacuterebro computador atraveacutes da imageacutetica motorao jogo de Ping Pong

3

14 Justicativa

O tema abordado neste trabalho eacute de grande relevacircncia social A ICC pode ser usadacomo soluccedilatildeo para a inclusccedilatildeo social de indiviacuteduos com diversos tipos de patologias quelimitam seus movimentos Aleacutem disso a ICC pode ser usada como uma alternativa paraa interface de jogos que representam um mercado de bilhotildees de doacutelares Pode-se porexemplo desenvolver melhorias para seres humanos decientes como a construccedilatildeo debraccedilos biocircnicos com o uso da imageacutetica motora ou talvez o controle de uma cadeira derodas para um indiviacuteduo tetrapleacutegico Tambeacutem se justica o estudo do tema am defacilitar tarefas mais simples como realizar uma ligaccedilatildeo atraveacutes de um telefone celular

15 Organizaccedilatildeo dos Capiacutetulos

O presente trabalho eacute dividio em seis capiacutetulos e anexos No primeiro capiacutetulo satildeoapresentados a contextualizaccedilatildeo do tema foco do trabalho objetivo e justicativas OCapiacutetulo 2 abrange os conceitos baacutesicos necessaacuterios ao entendimento da proposta do tra-balho O capiacutetulo seguinte conteacutem a descriccedilatildeo das trabalhos anteriores relacionados agraveICC encontradas na literatura O quarto capiacutetulo descreve o processo de desenvolvimentoda aplicaccedilatildeo propostas desde a idealizaccedilatildeo ateacute o desenvolvimento de fato O Capiacutetulo5 apresenta a descriccedilatildeo da fase de testes da implantaccedilatildeo da aplicaccedilatildeo bem como dosresultados obtidos desse processo com posterior anaacutelise deles O uacuteltimo eacute o capiacutetulo con-cludente sobre os resultados obtidos e que conta com sugestotildees de trabalhos futuros Porm o texto ainda conta com anexos

4

Capiacutetulo 2

Fundamentaccedilatildeo

21 A Biologia por traacutes do EEG

Estaacute entendido pela bibliograa que o sinal de EEG eacute bastante uacutetil e com ele conse-guimos produzir diversos trabalhos mas para entender o que se passa por traacutes do EEGde onde esse sinal vem e como eacute tratado temos que procurar nos interar melhor com abiologia do neurocircnio sua estrutura e funccedilatildeo

211 Estrutura e funccedilatildeo do neurocircnio

Como se pode ver na Figura 21 o neurocircnio eacute constituiacutedo de

1 Corpo celular

2 Dendritos

3 Axocircnio

Mas como ocorre a comunicaccedilatildeo entre duas ceacutelulas Qual o meio fiacutesico Os dendritossatildeo responsaacuteveis por receber sinais e passaacute-los para um axocircnio vide Figura 21 que remetea mesma para os outros neurocircnios

Figura 21 Estrutura do neurocircnio (Adaptado de [39])

5

212 Como funciona a troca de potenciais

Com o sinal recebido o neurocircnio tenta passar os impulsos eleacutetricos agrave frente atraveacutesde troca de potenciais a membrana celular envolta ao neurocircnio eacute carregada de iacuteons desoacutedio (Na+) e potaacutessio (K+) que cam se movimentando para dentro e fora da ceacutelulaInicialmente o interior da ceacutelula se encontra a -70mV em comparaccedilatildeo ao lado externoQuando algum sinal eacute recebido pelo dendrito ela ca menos negativa Se essa despola-rizaccedilatildeo chegar a -55mV a membrana se abre para iacuteons de soacutedio que entram na ceacutelulaIsto faz com que ela que cada vez menos negativa [40] Quando a ceacutelula atingir umpotencial positivo ela se abre para a saiacuteda de iacuteons de potaacutessio que agora causam a raacutepidarepolarizaccedilatildeo da membrana que chega a um potencial menor que -70mV como podemosver na Figura 22

Figura 22 Potencial de accedilatildeo de um neurocircnio [40]

213 O sinal de EEG

Os eletrodos do capacete Emotiv Epoc natildeo conseguem captar sinais de amplitudemuito pequena Este capacete e os demais relacionados apenas conseguem analisar sinaisde maior amplitude e a consequecircncia disso eacute que um uacutenico neurocircnio natildeo produz um sinalamplo o suciente para ser detectado sozinho Portanto o sinal soacute pode ser medidoconsiderando uma regiatildeo com vaacuterios neurocircnios Juntos levam aproximadamente 03s paraacumular a energia suciente para serem detectados [17] Como saber entatildeo quandoos neurocircnios tem sinal sucientemente forte para ser detectado Atraveacutes de dois preacute-requisitos

1 Muitos neurocircnios devem ser acionados ao mesmo tempo

2 Eles precisam estar alinhados em paralelo

6

Figura 23 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectadospelo eletrodo do capacete [42]

A ativaccedilatildeo de neurotransmissores do axocircnio terminal para as sinapses ocorre quandoum potencial de accedilatildeo atinge o m de um axocircnio Existem dois tipos de neurotransmissores

1 o primeiro causa um inuxo

2 o segundo causa um escoamento de iacuteons positivos

Assim os neurotransmissores ativados conseguem inuenciar a mudanccedila de potencialdo neurocircnio subsequente agrave sinapse mudando a permeabilidade da sua membrana Onome dado a essa mudanccedila de potencial do neurocircnio subsequente eacute potencial poacutes-sinaacutepticoexcitatoacuterio quando for uma mudanccedila positiva e potencial poacutes-sinaacuteptico inibitoacuterio quandonegativa Esses potenciais duram em meacutedia 100ms e variam sua amplitude entre 50e 100mV Na Figura 24 podemos ver um salto quacircntico de potencial de accedilatildeo de umneurocircnio para sinal de EEG

7

Figura 24 Eletroencefalograa claacutessica (Adapatado de [9])

22 Artefatos bioloacutegicos

Artefatos bioloacutegicos satildeo atividades causadas pelo sujeito mas natildeo ligadas agrave atividadecerebral de fato Agraves vezes satildeo chamados de artefatos sioloacutegicos [2] Os artefatos tecircm atendecircncia de ter uma amplitude mais forte que a de um sinal de EEG puro sendo assimum componente signicante obtido no EEG pois pode vir a atrapalhar sua mediccedilatildeotornando-a ineciente Eacute considerado como um ruiacutedo Desse modo se torna necessaacuteriofazer consideraccedilotildees especiais sobre os artefatos

221 Eletrooculograma

O EOG eacute um tipo de artefato relacionado agrave estrutura ocular do indiviacuteduo Ele vemdo movimento dos olhos para os lados ou para cima e das possiacuteveis piscadas pois essesmovimentos causam alteraccedilatildeo do campo eleacutetrico ocular Na Figura 25 mostramos doque eacute feito o olho humano

8

Figura 25 Estrutura do olho e suas partes nomeadas (Adaptado de [3])

O campo eleacutetrico do olho se origina da diferenccedila de potencial causada entre a coacuterneaque eacute carregada positivamente e a retina que eacute carregada negativamente Um esquemade como funciona esse dipolo pode ser visto na Figura 26

Figura 26 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3])

Como funciona a mediccedilatildeo do EOG

Dois eletrodos satildeo posicionados em cada lado esquerdo e direito de cada olho Amovimentaccedilatildeo dos olhos vai causar a diferenccedila de potencial fazendo a coacuternea carregadapositivamente car mais proacutexima de um dos eletrodos e consequentemente a retina car-regada negativamente car mais distante de um dos eletrodos Entatildeo cresce a tensatildeoeleacutetrica de um lado e decresce do outro O piscar de olhos provoca uma diferenccedila de po-tencial e tambeacutem inuencia o sinal de EEG A Figura 27 mostra como satildeo posicionadosesses eletrodos para medir a diferenccedila de potencial

9

Figura 27 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5])

No trabalho em questatildeo natildeo foi possiacutevel medir a diferenccedila de potencial ocasionadapelo movimentar dos olhos portanto esse eacute um ruiacutedo que natildeo foi tratado

222 Eletrocardiograma

Um exame bastante interessante eacute o eletrocardiograma (ECG) A cada batida docoraccedilatildeo o electrocardioacutegrafo grava a diferenccedila de potencial no muacutesculo cardiacuteaco causadapela sua despolarizaccedilatildeo Ou seja ele registra a variaccedilatildeo eleacutetrica da atividade do coraccedilatildeo

Essa atividade do coraccedilatildeo pode vir a atrapalhar os sinais de EEG como pode-se notarna Figura 28 Em azul tem-se o sinal do EEG puro antes de ser retirado o ECG Emverde tem-se o sinal do ECG e em vermelho notamos a diferenccedila que acontece no sinalde EEG quando o artefato ECG eacute retirado

Figura 28 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada doartefato de ECG (Adaptado de [35])

223 Eletromiograa

O sinal eletromiograacuteco (EMG) eacute a soma algeacutebrica de todos os sinais detectados emcerta aacuterea podendo ser afetado por propriedades musculares anatocircmicas e sioloacutegicasassim como pelo controle do sistema nervoso perifeacuterico e a instrumentaccedilatildeo utilizada paraa aquisiccedilatildeo dos sinais [13] O eletromioacutegrafo eacute um aparelho que adquire o sinal EMG

10

possibilitando o exame da eletromiograa (ver Figura 29) Ele fornece informaccedilotildees rele-vantes sobre a ativaccedilatildeo da musculatura envolvida em um movimento e a intensidade desua ativaccedilatildeo Qualquer movimentaccedilatildeo ou contraccedilatildeo dos muacutesculos da face afeta o sinal deEEG como por exemplo apertar os dentes contrair a testa etc

Figura 29 Sinal de EMG [2])

23 Artefatos teacutecnicos

Satildeo os tambeacutem chamados artefatos extrasioloacutegicos Natildeo dependem do ser humanomas sim do ambiente em que o usuaacuterio se encontra ou dos possiacuteveis eventos que ocorram

231 Frequecircncia de 5060 Hz

Um dos artefatos mais comuns existentes eacute o da interferecircncia causada pela correnteeleacutetrica Estatildeo indicadas duas frequecircncias pois a faixa normal de interferecircncia variade local para local no mundo Por exemplo na Ameacuterica do Norte eacute em torno de 60Hzenquanto na maioria dos outros paiacuteses ca em torno de 50 Hz Para tratar deste artefatousualmente coloca-se um ltro notch nessa faixa de frequecircncia e em seus respectivosharmocircnicos como por exemplo para o Brasil 60Hz 120Hz 180Hz etc

232 Artefato do amplicador

Eacute uma interferecircncia com pequena amplitude mas que tambeacutem merece alguma atenccedilatildeoNa Figura 210 em azul temos o sinal do EEG e em verde pode-se notar a pequenaamplitude do artefato gerado pelo amplicador

11

Figura 210 Artefato do amplicador analisado em graacuteco (Adaptado de [34])

24 Imageacutetica Motora

Depois de entender melhor como funciona todo o processo por traacutes da mediccedilatildeo doEEG torna-se interessante saber como isso se relaciona agrave praacutetica produzindo ao naldo processo o efeito esperado que eacute o deslocamento virtual de objetos usando apenas ainterpretaccedilatildeo dos sinais gerados pelo pensamento

O centro desse processo eacute a imageacutetica motora Ela pode ser denida como um estadodinacircmico durante a imaginaccedilatildeo que um indiviacuteduo faz de uma determinada accedilatildeo intenci-onada Este fenocircmeno implica que o sujeito sinta que realmente estaacute realizando a accedilatildeoimaginada sicamente seja ela de movimentar um braccedilo ou talvez empurrar um objeto[10]

A imageacutetica motora vem mostrando vaacuterios bons resultados em sua aplicaccedilatildeo Comoexemplo temos a ocorrecircncia do fenocircmeno na teacutecnica de aprendizado motor Os atletasutilizam a imaginaccedilatildeo de movimentos que seratildeo executados nos exerciacutecios de fato assimtrazem benefiacutecios no aquecimento relaxamento e concentraccedilatildeo [38] Outro exemplo in-teressante eacute o dos muacutesicos que ao utilizaacute-la possibilitam o aprendizado de partituras demaneira mais eciente [20]

Segundo o siologista sueco Hesslow [15] para o ceacuterebro a simulaccedilatildeo hipoteacutetica deestados consiste em trecircs premissas fundamentais

1 Imaginaccedilatildeo de accedilotildees ativa as estruturas motoras do ceacuterebro de tal forma que elasremetam agrave atividade que ocorre durante uma accedilatildeo normal de movimento entretantosem nenhum movimento evidente

2 Imaginaccedilatildeo de percepccedilatildeo a imaginaccedilatildeo de estar percebendo uma atividade eacute omesmo que realmente estar percebendo algo Em sua essecircncia a atividade de per-cepccedilatildeo eacute gerada pelo proacuteprio ceacuterebro em depreciaccedilatildeo de estiacutemulos externos

12

Letra Localizaccedilatildeo

A Loacutebulo da orelhaC CentralP ParietalF FrontalFp Frontal polarO OcipitalT Temporal

Tabela 21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22])

3 Antecipaccedilatildeo uma accedilatildeo simulada pode provocar a atividade perceptiva que remeteagravequela que deveria ter acontecido se a accedilatildeo fosse executada de fato

Devido a esses fatores a simulaccedilatildeo mental pode ser utilizada como uma ferramentarepresentativa para o entendimento da mente Isso permite que os diversos estados mentaispossam ser explorados possibilitando relacionar as aacutereas especiacutecas do ceacuterebro que satildeomais ativadas devido a certos sentimentos desejos ou talvez intenccedilotildees Assim a simulaccedilatildeomental contribui para o avanccedilo em diversas aacutereas tais como a psicologia e outras

25 Emotiv Epoc

A m de analisar a imaginaccedilatildeo e os efeitos que ela tem sobre o nosso corpo e mentecientistas atraveacutes da busca constante de avanccedilos chegaram agrave utilizaccedilatildeo de um capaceteneural para mediccedilatildeo efetiva de estiacutemulos demonstrados pela captaccedilatildeo do sinal de EEGComo ilustrado na Figura 11a o custo-benefiacutecio de capacete que melhor atendeu o grupono projeto de pesquisa foi o do Emotiv Epoc Seus detalhes de organizaccedilatildeo e funcionamentosatildeo mostrados a seguir

251 Posicionamento de eletrodos

A Federaccedilatildeo Internacional de Neuropsicologia recomenda a utilizaccedilatildeo do modelo 10-20para ateacute 21 eletrodos [11] de acordo com a Figura 211 Nesse modelo todos os eletrodosse encontram a uma distacircncia de seus eletrodos vizinhos de 10 ou 20 da distacircncia totalda cabeccedila A cada posiccedilatildeo eacute dado um identicador de uma ou duas letras e um nuacutemerode acordo com sua proximidade a alguma parte do ceacuterebro (veja tabela 21) Nuacutemerospares estatildeo agrave direita e nuacutemeros iacutempares agrave esquerda

A sociedade Americana de EEG sugeriu nos seus guias [16] que novos eletrodos sejamcolocados de maneira equidistante dos 21 eletrodos jaacute denidos na Figura 212 caso sejanecessaacuterio um nuacutemero maior de eletrodos

13

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 7: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Resumo

Este trabalho consiste em um estudo sobre Interface Ceacuterebro Computador (ICC) e davalidaccedilatildeo desse conhecimento por meio do desenvolvimento de um jogo A blibliograafoi composta de leitura de livros artigos e monograas relativos agrave ICC O programadesenvolvido foi um jogo simulador de tecircnis de mesa controlado pela interpretaccedilatildeo dossinais obtidos por um capacete neural Aleacutem disso foi utilizado o programa OpenViBEpara desenvolver a aquisiccedilatildeo e classicaccedilatildeo de dados Para anaacutelise da implementaccedilatildeo foifeito um experimento com a participaccedilatildeo de 10 indiviacuteduos que alcanccedilou uma taxa declassicaccedilatildeo em torno de 70 Os dados resultantes mostraram que mesmo simulando ouso do capacete em situaccedilotildees reais com a incidecircncia de muito ruiacutedo eacute possiacutevel obter-seuma boa taxa classicaccedilatildeo

Palavras-chave Interface Ceacuterebro Maacutequina Interface Ceacuterebro Computador BCI BMIEEG Eletroencefalograa Imageacutetica Motora OpenVibe Emotiv Epoc Headset

iv

Abstract

This work consists of a study about Brain Machine Interface (BMI) and validationof this knowledge with the development of a game The bibliography was composed byreading books articles and undergraduate works about BMI The developed software wasa game of table tenis controlled by the interpretation of signals obtained by a neural-headset Futhermore the OpenViBE application was used to develop the aquisition andclassication of the data For analysis of the implementation an experiment was madewith the participation of some subjects in which the classication rate reached around70 The resultant data shows that even simulating the usage of the headset in realsituations with a high quantity of noise it is possible to obtain a good classication rate

Keywords Brain Machine Interface Brain Computer Interface BCI BMI EEG Elec-troencephalography Motor Imagery OpenVibe Emotiv Epoc Headset

v

Sumaacuterio

1 Introduccedilatildeo 1

11 Contextualizaccedilatildeo 112 Foco do trabalho 313 Objetivo 314 Justicativa 415 Organizaccedilatildeo dos Capiacutetulos 4

2 Fundamentaccedilatildeo 5

21 A Biologia por traacutes do EEG 5211 Estrutura e funccedilatildeo do neurocircnio 5212 Como funciona a troca de potenciais 6213 O sinal de EEG 6

22 Artefatos bioloacutegicos 8221 Eletrooculograma 8222 Eletrocardiograma 10223 Eletromiograa 10

23 Artefatos teacutecnicos 11231 Frequecircncia de 5060 Hz 11232 Artefato do amplicador 11

24 Imageacutetica Motora 1225 Emotiv Epoc 13

251 Posicionamento de eletrodos 13252 Emotiv Epoc Headset 14

26 OpenViBE 1827 Classicadores 1828 Extraccedilatildeo de sinais utilizando a energia de banda 18

3 Trabalhos relacionados 19

31 Carro controlado pelo ceacuterebro 1932 NeuroPhone 2033 Controle para o Second Life 2134 Controle do braccedilo de um robocirc 2235 BrainTalk 23

vi

4 Processo de desenvolvimento 24

41 Aquisiccedilatildeo de Sinais de EEG 2442 O Experimento 2643 Cenaacuterios 26

431 Monitoramento de Sinais 26432 Aquisiccedilatildeo de Sinais 27433 Treinamento dos Classicadores 28434 Online 32435 Replay 34436 Caacutelculo da porcentagem de acertos 35

44 Aplicativo desenvolvido 37441 Comunicaccedilatildeo do OpenViBE com o aplicativo 37442 Classes principais do aplicativo 38

5 Resultados e anaacutelise 39

51 Comparaccedilatildeo entre resultados de classicadores utilizados 39

6 Conclusatildeo 41

A Anexos 42

A1 Spriteh 42A2 Spritecpp 42A3 Barrah 45A4 Barracpp 46A5 GameManagerh 49A6 GameManagercpp 49A7 InputManagerh 54A8 InputManagercpp 55A9 Maincpp 58A10 Pongh 59A11 Pongcpp 60

Referecircncias 64

vii

Lista de Figuras

11 Preccedilos e comparaccedilotildees de custo-benefiacutecio de capacetes apenas dos maisbaratos (0-1000 doacutelares) (Adapatado de [37]) 2

21 Estrutura do neurocircnio (Adaptado de [39]) 522 Potencial de accedilatildeo de um neurocircnio [40] 623 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectados

pelo eletrodo do capacete [42] 724 Eletroencefalograa claacutessica (Adapatado de [9]) 825 Estrutura do olho e suas partes nomeadas (Adaptado de [3]) 926 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3]) 927 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5]) 1028 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada do

artefato de ECG (Adaptado de [35]) 1029 Sinal de EMG [2]) 11210 Artefato do amplicador analisado em graacuteco (Adaptado de [34]) 12211 Modelo 10-20 para ateacute 21 eletrodos [33] 14212 Modelo 10-20 para ateacute 75 eletrodos [33] 14213 Emotiv EPOC antes de ser montado (Adaptado de [23]) 15214 Vericando o estado dos eletrodos 16215 Detecccedilatildeo de movimentos da face do usuaacuterio 16216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo 17217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento 17218 Controlador de mouse 17

31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da uti-lizaccedilatildeo do Emotiv EPOC [30] 19

32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildeestelefocircnicas [25] 20

33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8] 2134 Exemplo de tela do Second Life com os possiacuteveis movimentos de um jogador[18] 2235 Braccedilo de um robocirc sendo controlado pelo capacete neural [43] 2236 Teclado virtual do sistema Brain talk[21] 23

41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc He-adset [28] 24

42 Tentativa sem feedback [28] 2543 Tentativa que contava com feedback [28] 2644 Cenaacuterio de monitoramento 27

viii

45 Cenaacuterio de aquisiccedilatildeo de sinais 2846 Cenaacuterio de treinamento 2947 Cenaacuterio de treinamento do ltro espacial CSP 3048 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM 3149 Cenaacuterio de treinamento do classicador usando o ltro CSP 32410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utiliza-

ccedilatildeo da barra azul como feedback 33411 Cenaacuterio de utilizaccedilatildeo online 33412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP 34413 Cenaacuterio de replay 35414 Cenaacuterio de caacutelculo de porcentagem de acertos 36415 Cenaacuterio de caacutelculo de porcentagem de acertos 36416 Jogo implementado 37

ix

Lista de Tabelas

11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvan-tagens (Adapatado de [19]) 2

21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22]) 13

31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8] 21

51 Tabela de porcentagem de acertos dos diferentes classicadores citados 40

x

Capiacutetulo 1

Introduccedilatildeo

11 Contextualizaccedilatildeo

No ano de 1929 Hans Berger [4] psiquiatra alematildeo publicou as primeiras paacuteginas deseu trabalho o eletroencefalograma (EEG) [22] Ele foi o primeiro a identicar ondas alfa(8-12 Hz) que satildeo atividades oscilatoacuterias no ceacuterebro Antes do registro dessas atividadesno ceacuterebro humano pesquisas jaacute haviam sido feitas em animais Entretanto foi apoacutesHans Berger que a quantidade de pesquisa feita sobre este oacutergatildeo cresceu bastante

O EEG eacute o registro da sincronizaccedilatildeo de milhares de sinais de neurocircnios em conjuntoDessa forma a localizaccedilatildeo exata da atividade de um neurocircnio eacute impossiacutevel de ser feitasomente com o EEG No entanto o registro de EEG associado a outras formas de registropermite resolver esse impasse Na Tabela 11 satildeo mostradas outras formas de se mensuraratividades neurais e suas respectivas desvantagens Devido ao alto custo envolvido nastecnologias apresentadas na Tabela 11 e principalmente agraves desvantagens como por exem-plo a exposiccedilatildeo agrave radiaccedilatildeo que outras tecnologias exigem o EEG tem sido o sinal maisutilizado para o desenvolvimento de pesquisa em Interface Ceacuterebro Computador (ICC)Aleacutem de ter bom custo-benefiacutecio sua utilizaccedilatildeo eacute bastante praacutetica

A ICC eacute uma teacutecnica que tenta interpretar os sinais eleacutetricos da superfiacutecie corticalou subcortical do ceacuterebro para interagir com o ambiente externo por meio de maacutequinasbuscando assim interpretar pensamentos referentes a movimento sem a necessidade domovimento real Por exemplo se um indiviacuteduo utilizador de ICC quiser mover o mousede um computador a tecnologia entenderia isso e realizaacute-la-ia sem o movimento das matildeosdo humano Essa tecnologia eacute um meio de comunicaccedilatildeo alternativo uacutetil para muitosobjetivos entre eles a possibilidade de ajudar um paciente impossibilitado de atividadesmotoras como um tetrapleacutegico a movimentar objetos

Para que seja possiacutevel a aplicaccedilatildeo da tecnologia ICC eacute necessaacuterio um aparelho que sejacapaz de captar as ondas emitidas pelo ceacuterebro um capacete neural Diante da grandequantidade de aparelhos o que se destacou foi o Emotiv Epoc como se pode observar deacordo com a Figura 11 A Figura 11a mostra alguns equipamentos com suas respectivasfaixas de preccedilo e algumas de suas funcionalidades Para efeitos de comparaccedilatildeo a Figura11b exibe a nota recebida por cada equipamento devido ao custo-benefiacutecio O destaquedo capacete Emotiv Epoc se deve ao melhor custo-benefiacutecio e agrave praticidade de utilizaccedilatildeoEle se acopla facilmente agrave cabeccedila e sua manipulaccedilatildeo eacute muito simples

1

Tecnologia Desvantagem

Electrocorticogram (ECoG) Exige cirurgiaMagneto-encephalography (MEG) Alto custoComputed Tomography (CT) Somente dados anatocircmicos

e exposiccedilatildeo agrave radiaccedilatildeoSingle Photon Emission Computerized Tomography (SPECT) Exposiccedilatildeo agrave radiaccedilatildeoPositron Emission Tomography (PET) Exposiccedilatildeo agrave radiaccedilatildeoMagnetic Resonance Imaging (MRI) CaraFunctional Magnetic Resonance Imaging (fMRI) CaraEvent-Related Optical Signal (EROS) Cara

Tabela 11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvanta-gens (Adapatado de [19])

(a) Capacetes neurais de baixo custo (b) Relaccedilatildeo custo-benefiacutecio

Figura 11 Preccedilos e comparaccedilotildees de custo-benefiacutecio de capacetes apenas dos mais baratos(0-1000 doacutelares) (Adapatado de [37])

2

O primeiro passo no processo eacute a aquisiccedilatildeo dos sinais cerebrais Para isso na literaturahaacute diversas teacutecnicas que se dividem em trecircs categorias as invasivas as semi-invasivas eas natildeo invasivas cada uma com suas devidas vantagens e desvantagens

A utilizaccedilatildeo da teacutecnica invasiva eacute uma oacutetima opccedilatildeo quando o foco eacute na captaccedilatildeo dedados com o miacutenimo de ruiacutedo Essa teacutecnica possibilita a diminuiccedilatildeo de ruiacutedos apesarde possuir como desvantagem a cirurgia que eacute necessaacuteria Nesta o cracircnio do indiviacuteduo eacuteaberto e eacute colocado no ceacuterebro eletrodos para captar os dados Tambeacutem como desvantagempode-se citar a faacutecil oxidaccedilatildeo dos eletrodos quando entram em contato com o sangue Ateacutecnica semi-invasiva eacute um pouco menos invasiva do que a primeira No entanto tambeacutemeacute necessaacuterio cirurgia Apesar disso a aquisiccedilatildeo de sinalruiacutedo eacute boa Jaacute a terceira teacutecnicacitada a natildeo-invasiva eacute a pior das trecircs em questatildeo de robustez ao ruiacutedo poreacutem eacute a demais faacutecil adaptaccedilatildeo agrave qualquer indiviacuteduo que tenha intenccedilatildeo de utilizaacute-la

Devido agraves caracteristicas destacadas este trabalho utiliza a teacutecnica natildeo invasiva comofonte de captaccedilatildeo de dados de EEG Com o uso do capacete Emotiv Epoc essa teacutecnicaeacute possibilitada De posse do aparelho comeccedilamos entatildeo fazendo essa aquisiccedilatildeo O se-gundo passo eacute o processamento do sinal e o reconhecimento de padrotildees atraveacutes do uso declassicadores Por uacuteltimo eacute necessaacuterio associar os dados obtidos agrave intenccedilatildeo do indiviacuteduo

Os estudos sobre ICC procuram adaptaacute-la ao uso no cotidiano Para avanccedilar nessaaacuterea eacute necessaacuterio o desenvolvimento de sistemas com elevada acuraacutecia e praticidade Paraaumentar a qualidade dos sistemas busca-se a implementaccedilatildeo de novos algoritmos para aaquisiccedilatildeo e a classicaccedilatildeo de sinais A cada dia novas aplicaccedilotildees estatildeo surgindo baseadasnessa tecnologia tanto de uso biomeacutedico quanto para jogos e outras aacutereas

12 Foco do trabalho

A imageacutetica motora eacute o processo mental no qual o indiviacuteduo imagina um determinadomovimento como por exemplo movimentar o braccedilo esquerdo ou direito A intenccedilatildeodo movimento que foi mandada pelo ceacuterebro eacute analisada e classicada de acordo como membro correspondente O resultado pode ser usado como comando para diversasaplicaccedilotildees como por exemplo o controle de um jogo

Dentro de ICC seraacute trabalhado o desenvolvimento de uma aplicaccedilatildeo online que utilizaduas classes de movimentos com as matildeos para a direita e a outra para a esquerda Estaaplicaccedilatildeo seraacute o jogo de ping-pong

13 Objetivo

Este trabalho possui dois objetivos principais O primeiro consiste em fazer um estudorelacionado agrave imageacutetica motora incluindo um levantamento dos trabalhos existentes naliteratura de forma a sumarizaacute-los O segundo objetivo eacute propor implementar e analisaruma aplicaccedilotildees que realiza a interaccedilatildeo ceacuterebro computador atraveacutes da imageacutetica motorao jogo de Ping Pong

3

14 Justicativa

O tema abordado neste trabalho eacute de grande relevacircncia social A ICC pode ser usadacomo soluccedilatildeo para a inclusccedilatildeo social de indiviacuteduos com diversos tipos de patologias quelimitam seus movimentos Aleacutem disso a ICC pode ser usada como uma alternativa paraa interface de jogos que representam um mercado de bilhotildees de doacutelares Pode-se porexemplo desenvolver melhorias para seres humanos decientes como a construccedilatildeo debraccedilos biocircnicos com o uso da imageacutetica motora ou talvez o controle de uma cadeira derodas para um indiviacuteduo tetrapleacutegico Tambeacutem se justica o estudo do tema am defacilitar tarefas mais simples como realizar uma ligaccedilatildeo atraveacutes de um telefone celular

15 Organizaccedilatildeo dos Capiacutetulos

O presente trabalho eacute dividio em seis capiacutetulos e anexos No primeiro capiacutetulo satildeoapresentados a contextualizaccedilatildeo do tema foco do trabalho objetivo e justicativas OCapiacutetulo 2 abrange os conceitos baacutesicos necessaacuterios ao entendimento da proposta do tra-balho O capiacutetulo seguinte conteacutem a descriccedilatildeo das trabalhos anteriores relacionados agraveICC encontradas na literatura O quarto capiacutetulo descreve o processo de desenvolvimentoda aplicaccedilatildeo propostas desde a idealizaccedilatildeo ateacute o desenvolvimento de fato O Capiacutetulo5 apresenta a descriccedilatildeo da fase de testes da implantaccedilatildeo da aplicaccedilatildeo bem como dosresultados obtidos desse processo com posterior anaacutelise deles O uacuteltimo eacute o capiacutetulo con-cludente sobre os resultados obtidos e que conta com sugestotildees de trabalhos futuros Porm o texto ainda conta com anexos

4

Capiacutetulo 2

Fundamentaccedilatildeo

21 A Biologia por traacutes do EEG

Estaacute entendido pela bibliograa que o sinal de EEG eacute bastante uacutetil e com ele conse-guimos produzir diversos trabalhos mas para entender o que se passa por traacutes do EEGde onde esse sinal vem e como eacute tratado temos que procurar nos interar melhor com abiologia do neurocircnio sua estrutura e funccedilatildeo

211 Estrutura e funccedilatildeo do neurocircnio

Como se pode ver na Figura 21 o neurocircnio eacute constituiacutedo de

1 Corpo celular

2 Dendritos

3 Axocircnio

Mas como ocorre a comunicaccedilatildeo entre duas ceacutelulas Qual o meio fiacutesico Os dendritossatildeo responsaacuteveis por receber sinais e passaacute-los para um axocircnio vide Figura 21 que remetea mesma para os outros neurocircnios

Figura 21 Estrutura do neurocircnio (Adaptado de [39])

5

212 Como funciona a troca de potenciais

Com o sinal recebido o neurocircnio tenta passar os impulsos eleacutetricos agrave frente atraveacutesde troca de potenciais a membrana celular envolta ao neurocircnio eacute carregada de iacuteons desoacutedio (Na+) e potaacutessio (K+) que cam se movimentando para dentro e fora da ceacutelulaInicialmente o interior da ceacutelula se encontra a -70mV em comparaccedilatildeo ao lado externoQuando algum sinal eacute recebido pelo dendrito ela ca menos negativa Se essa despola-rizaccedilatildeo chegar a -55mV a membrana se abre para iacuteons de soacutedio que entram na ceacutelulaIsto faz com que ela que cada vez menos negativa [40] Quando a ceacutelula atingir umpotencial positivo ela se abre para a saiacuteda de iacuteons de potaacutessio que agora causam a raacutepidarepolarizaccedilatildeo da membrana que chega a um potencial menor que -70mV como podemosver na Figura 22

Figura 22 Potencial de accedilatildeo de um neurocircnio [40]

213 O sinal de EEG

Os eletrodos do capacete Emotiv Epoc natildeo conseguem captar sinais de amplitudemuito pequena Este capacete e os demais relacionados apenas conseguem analisar sinaisde maior amplitude e a consequecircncia disso eacute que um uacutenico neurocircnio natildeo produz um sinalamplo o suciente para ser detectado sozinho Portanto o sinal soacute pode ser medidoconsiderando uma regiatildeo com vaacuterios neurocircnios Juntos levam aproximadamente 03s paraacumular a energia suciente para serem detectados [17] Como saber entatildeo quandoos neurocircnios tem sinal sucientemente forte para ser detectado Atraveacutes de dois preacute-requisitos

1 Muitos neurocircnios devem ser acionados ao mesmo tempo

2 Eles precisam estar alinhados em paralelo

6

Figura 23 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectadospelo eletrodo do capacete [42]

A ativaccedilatildeo de neurotransmissores do axocircnio terminal para as sinapses ocorre quandoum potencial de accedilatildeo atinge o m de um axocircnio Existem dois tipos de neurotransmissores

1 o primeiro causa um inuxo

2 o segundo causa um escoamento de iacuteons positivos

Assim os neurotransmissores ativados conseguem inuenciar a mudanccedila de potencialdo neurocircnio subsequente agrave sinapse mudando a permeabilidade da sua membrana Onome dado a essa mudanccedila de potencial do neurocircnio subsequente eacute potencial poacutes-sinaacutepticoexcitatoacuterio quando for uma mudanccedila positiva e potencial poacutes-sinaacuteptico inibitoacuterio quandonegativa Esses potenciais duram em meacutedia 100ms e variam sua amplitude entre 50e 100mV Na Figura 24 podemos ver um salto quacircntico de potencial de accedilatildeo de umneurocircnio para sinal de EEG

7

Figura 24 Eletroencefalograa claacutessica (Adapatado de [9])

22 Artefatos bioloacutegicos

Artefatos bioloacutegicos satildeo atividades causadas pelo sujeito mas natildeo ligadas agrave atividadecerebral de fato Agraves vezes satildeo chamados de artefatos sioloacutegicos [2] Os artefatos tecircm atendecircncia de ter uma amplitude mais forte que a de um sinal de EEG puro sendo assimum componente signicante obtido no EEG pois pode vir a atrapalhar sua mediccedilatildeotornando-a ineciente Eacute considerado como um ruiacutedo Desse modo se torna necessaacuteriofazer consideraccedilotildees especiais sobre os artefatos

221 Eletrooculograma

O EOG eacute um tipo de artefato relacionado agrave estrutura ocular do indiviacuteduo Ele vemdo movimento dos olhos para os lados ou para cima e das possiacuteveis piscadas pois essesmovimentos causam alteraccedilatildeo do campo eleacutetrico ocular Na Figura 25 mostramos doque eacute feito o olho humano

8

Figura 25 Estrutura do olho e suas partes nomeadas (Adaptado de [3])

O campo eleacutetrico do olho se origina da diferenccedila de potencial causada entre a coacuterneaque eacute carregada positivamente e a retina que eacute carregada negativamente Um esquemade como funciona esse dipolo pode ser visto na Figura 26

Figura 26 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3])

Como funciona a mediccedilatildeo do EOG

Dois eletrodos satildeo posicionados em cada lado esquerdo e direito de cada olho Amovimentaccedilatildeo dos olhos vai causar a diferenccedila de potencial fazendo a coacuternea carregadapositivamente car mais proacutexima de um dos eletrodos e consequentemente a retina car-regada negativamente car mais distante de um dos eletrodos Entatildeo cresce a tensatildeoeleacutetrica de um lado e decresce do outro O piscar de olhos provoca uma diferenccedila de po-tencial e tambeacutem inuencia o sinal de EEG A Figura 27 mostra como satildeo posicionadosesses eletrodos para medir a diferenccedila de potencial

9

Figura 27 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5])

No trabalho em questatildeo natildeo foi possiacutevel medir a diferenccedila de potencial ocasionadapelo movimentar dos olhos portanto esse eacute um ruiacutedo que natildeo foi tratado

222 Eletrocardiograma

Um exame bastante interessante eacute o eletrocardiograma (ECG) A cada batida docoraccedilatildeo o electrocardioacutegrafo grava a diferenccedila de potencial no muacutesculo cardiacuteaco causadapela sua despolarizaccedilatildeo Ou seja ele registra a variaccedilatildeo eleacutetrica da atividade do coraccedilatildeo

Essa atividade do coraccedilatildeo pode vir a atrapalhar os sinais de EEG como pode-se notarna Figura 28 Em azul tem-se o sinal do EEG puro antes de ser retirado o ECG Emverde tem-se o sinal do ECG e em vermelho notamos a diferenccedila que acontece no sinalde EEG quando o artefato ECG eacute retirado

Figura 28 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada doartefato de ECG (Adaptado de [35])

223 Eletromiograa

O sinal eletromiograacuteco (EMG) eacute a soma algeacutebrica de todos os sinais detectados emcerta aacuterea podendo ser afetado por propriedades musculares anatocircmicas e sioloacutegicasassim como pelo controle do sistema nervoso perifeacuterico e a instrumentaccedilatildeo utilizada paraa aquisiccedilatildeo dos sinais [13] O eletromioacutegrafo eacute um aparelho que adquire o sinal EMG

10

possibilitando o exame da eletromiograa (ver Figura 29) Ele fornece informaccedilotildees rele-vantes sobre a ativaccedilatildeo da musculatura envolvida em um movimento e a intensidade desua ativaccedilatildeo Qualquer movimentaccedilatildeo ou contraccedilatildeo dos muacutesculos da face afeta o sinal deEEG como por exemplo apertar os dentes contrair a testa etc

Figura 29 Sinal de EMG [2])

23 Artefatos teacutecnicos

Satildeo os tambeacutem chamados artefatos extrasioloacutegicos Natildeo dependem do ser humanomas sim do ambiente em que o usuaacuterio se encontra ou dos possiacuteveis eventos que ocorram

231 Frequecircncia de 5060 Hz

Um dos artefatos mais comuns existentes eacute o da interferecircncia causada pela correnteeleacutetrica Estatildeo indicadas duas frequecircncias pois a faixa normal de interferecircncia variade local para local no mundo Por exemplo na Ameacuterica do Norte eacute em torno de 60Hzenquanto na maioria dos outros paiacuteses ca em torno de 50 Hz Para tratar deste artefatousualmente coloca-se um ltro notch nessa faixa de frequecircncia e em seus respectivosharmocircnicos como por exemplo para o Brasil 60Hz 120Hz 180Hz etc

232 Artefato do amplicador

Eacute uma interferecircncia com pequena amplitude mas que tambeacutem merece alguma atenccedilatildeoNa Figura 210 em azul temos o sinal do EEG e em verde pode-se notar a pequenaamplitude do artefato gerado pelo amplicador

11

Figura 210 Artefato do amplicador analisado em graacuteco (Adaptado de [34])

24 Imageacutetica Motora

Depois de entender melhor como funciona todo o processo por traacutes da mediccedilatildeo doEEG torna-se interessante saber como isso se relaciona agrave praacutetica produzindo ao naldo processo o efeito esperado que eacute o deslocamento virtual de objetos usando apenas ainterpretaccedilatildeo dos sinais gerados pelo pensamento

O centro desse processo eacute a imageacutetica motora Ela pode ser denida como um estadodinacircmico durante a imaginaccedilatildeo que um indiviacuteduo faz de uma determinada accedilatildeo intenci-onada Este fenocircmeno implica que o sujeito sinta que realmente estaacute realizando a accedilatildeoimaginada sicamente seja ela de movimentar um braccedilo ou talvez empurrar um objeto[10]

A imageacutetica motora vem mostrando vaacuterios bons resultados em sua aplicaccedilatildeo Comoexemplo temos a ocorrecircncia do fenocircmeno na teacutecnica de aprendizado motor Os atletasutilizam a imaginaccedilatildeo de movimentos que seratildeo executados nos exerciacutecios de fato assimtrazem benefiacutecios no aquecimento relaxamento e concentraccedilatildeo [38] Outro exemplo in-teressante eacute o dos muacutesicos que ao utilizaacute-la possibilitam o aprendizado de partituras demaneira mais eciente [20]

Segundo o siologista sueco Hesslow [15] para o ceacuterebro a simulaccedilatildeo hipoteacutetica deestados consiste em trecircs premissas fundamentais

1 Imaginaccedilatildeo de accedilotildees ativa as estruturas motoras do ceacuterebro de tal forma que elasremetam agrave atividade que ocorre durante uma accedilatildeo normal de movimento entretantosem nenhum movimento evidente

2 Imaginaccedilatildeo de percepccedilatildeo a imaginaccedilatildeo de estar percebendo uma atividade eacute omesmo que realmente estar percebendo algo Em sua essecircncia a atividade de per-cepccedilatildeo eacute gerada pelo proacuteprio ceacuterebro em depreciaccedilatildeo de estiacutemulos externos

12

Letra Localizaccedilatildeo

A Loacutebulo da orelhaC CentralP ParietalF FrontalFp Frontal polarO OcipitalT Temporal

Tabela 21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22])

3 Antecipaccedilatildeo uma accedilatildeo simulada pode provocar a atividade perceptiva que remeteagravequela que deveria ter acontecido se a accedilatildeo fosse executada de fato

Devido a esses fatores a simulaccedilatildeo mental pode ser utilizada como uma ferramentarepresentativa para o entendimento da mente Isso permite que os diversos estados mentaispossam ser explorados possibilitando relacionar as aacutereas especiacutecas do ceacuterebro que satildeomais ativadas devido a certos sentimentos desejos ou talvez intenccedilotildees Assim a simulaccedilatildeomental contribui para o avanccedilo em diversas aacutereas tais como a psicologia e outras

25 Emotiv Epoc

A m de analisar a imaginaccedilatildeo e os efeitos que ela tem sobre o nosso corpo e mentecientistas atraveacutes da busca constante de avanccedilos chegaram agrave utilizaccedilatildeo de um capaceteneural para mediccedilatildeo efetiva de estiacutemulos demonstrados pela captaccedilatildeo do sinal de EEGComo ilustrado na Figura 11a o custo-benefiacutecio de capacete que melhor atendeu o grupono projeto de pesquisa foi o do Emotiv Epoc Seus detalhes de organizaccedilatildeo e funcionamentosatildeo mostrados a seguir

251 Posicionamento de eletrodos

A Federaccedilatildeo Internacional de Neuropsicologia recomenda a utilizaccedilatildeo do modelo 10-20para ateacute 21 eletrodos [11] de acordo com a Figura 211 Nesse modelo todos os eletrodosse encontram a uma distacircncia de seus eletrodos vizinhos de 10 ou 20 da distacircncia totalda cabeccedila A cada posiccedilatildeo eacute dado um identicador de uma ou duas letras e um nuacutemerode acordo com sua proximidade a alguma parte do ceacuterebro (veja tabela 21) Nuacutemerospares estatildeo agrave direita e nuacutemeros iacutempares agrave esquerda

A sociedade Americana de EEG sugeriu nos seus guias [16] que novos eletrodos sejamcolocados de maneira equidistante dos 21 eletrodos jaacute denidos na Figura 212 caso sejanecessaacuterio um nuacutemero maior de eletrodos

13

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 8: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Abstract

This work consists of a study about Brain Machine Interface (BMI) and validationof this knowledge with the development of a game The bibliography was composed byreading books articles and undergraduate works about BMI The developed software wasa game of table tenis controlled by the interpretation of signals obtained by a neural-headset Futhermore the OpenViBE application was used to develop the aquisition andclassication of the data For analysis of the implementation an experiment was madewith the participation of some subjects in which the classication rate reached around70 The resultant data shows that even simulating the usage of the headset in realsituations with a high quantity of noise it is possible to obtain a good classication rate

Keywords Brain Machine Interface Brain Computer Interface BCI BMI EEG Elec-troencephalography Motor Imagery OpenVibe Emotiv Epoc Headset

v

Sumaacuterio

1 Introduccedilatildeo 1

11 Contextualizaccedilatildeo 112 Foco do trabalho 313 Objetivo 314 Justicativa 415 Organizaccedilatildeo dos Capiacutetulos 4

2 Fundamentaccedilatildeo 5

21 A Biologia por traacutes do EEG 5211 Estrutura e funccedilatildeo do neurocircnio 5212 Como funciona a troca de potenciais 6213 O sinal de EEG 6

22 Artefatos bioloacutegicos 8221 Eletrooculograma 8222 Eletrocardiograma 10223 Eletromiograa 10

23 Artefatos teacutecnicos 11231 Frequecircncia de 5060 Hz 11232 Artefato do amplicador 11

24 Imageacutetica Motora 1225 Emotiv Epoc 13

251 Posicionamento de eletrodos 13252 Emotiv Epoc Headset 14

26 OpenViBE 1827 Classicadores 1828 Extraccedilatildeo de sinais utilizando a energia de banda 18

3 Trabalhos relacionados 19

31 Carro controlado pelo ceacuterebro 1932 NeuroPhone 2033 Controle para o Second Life 2134 Controle do braccedilo de um robocirc 2235 BrainTalk 23

vi

4 Processo de desenvolvimento 24

41 Aquisiccedilatildeo de Sinais de EEG 2442 O Experimento 2643 Cenaacuterios 26

431 Monitoramento de Sinais 26432 Aquisiccedilatildeo de Sinais 27433 Treinamento dos Classicadores 28434 Online 32435 Replay 34436 Caacutelculo da porcentagem de acertos 35

44 Aplicativo desenvolvido 37441 Comunicaccedilatildeo do OpenViBE com o aplicativo 37442 Classes principais do aplicativo 38

5 Resultados e anaacutelise 39

51 Comparaccedilatildeo entre resultados de classicadores utilizados 39

6 Conclusatildeo 41

A Anexos 42

A1 Spriteh 42A2 Spritecpp 42A3 Barrah 45A4 Barracpp 46A5 GameManagerh 49A6 GameManagercpp 49A7 InputManagerh 54A8 InputManagercpp 55A9 Maincpp 58A10 Pongh 59A11 Pongcpp 60

Referecircncias 64

vii

Lista de Figuras

11 Preccedilos e comparaccedilotildees de custo-benefiacutecio de capacetes apenas dos maisbaratos (0-1000 doacutelares) (Adapatado de [37]) 2

21 Estrutura do neurocircnio (Adaptado de [39]) 522 Potencial de accedilatildeo de um neurocircnio [40] 623 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectados

pelo eletrodo do capacete [42] 724 Eletroencefalograa claacutessica (Adapatado de [9]) 825 Estrutura do olho e suas partes nomeadas (Adaptado de [3]) 926 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3]) 927 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5]) 1028 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada do

artefato de ECG (Adaptado de [35]) 1029 Sinal de EMG [2]) 11210 Artefato do amplicador analisado em graacuteco (Adaptado de [34]) 12211 Modelo 10-20 para ateacute 21 eletrodos [33] 14212 Modelo 10-20 para ateacute 75 eletrodos [33] 14213 Emotiv EPOC antes de ser montado (Adaptado de [23]) 15214 Vericando o estado dos eletrodos 16215 Detecccedilatildeo de movimentos da face do usuaacuterio 16216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo 17217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento 17218 Controlador de mouse 17

31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da uti-lizaccedilatildeo do Emotiv EPOC [30] 19

32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildeestelefocircnicas [25] 20

33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8] 2134 Exemplo de tela do Second Life com os possiacuteveis movimentos de um jogador[18] 2235 Braccedilo de um robocirc sendo controlado pelo capacete neural [43] 2236 Teclado virtual do sistema Brain talk[21] 23

41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc He-adset [28] 24

42 Tentativa sem feedback [28] 2543 Tentativa que contava com feedback [28] 2644 Cenaacuterio de monitoramento 27

viii

45 Cenaacuterio de aquisiccedilatildeo de sinais 2846 Cenaacuterio de treinamento 2947 Cenaacuterio de treinamento do ltro espacial CSP 3048 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM 3149 Cenaacuterio de treinamento do classicador usando o ltro CSP 32410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utiliza-

ccedilatildeo da barra azul como feedback 33411 Cenaacuterio de utilizaccedilatildeo online 33412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP 34413 Cenaacuterio de replay 35414 Cenaacuterio de caacutelculo de porcentagem de acertos 36415 Cenaacuterio de caacutelculo de porcentagem de acertos 36416 Jogo implementado 37

ix

Lista de Tabelas

11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvan-tagens (Adapatado de [19]) 2

21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22]) 13

31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8] 21

51 Tabela de porcentagem de acertos dos diferentes classicadores citados 40

x

Capiacutetulo 1

Introduccedilatildeo

11 Contextualizaccedilatildeo

No ano de 1929 Hans Berger [4] psiquiatra alematildeo publicou as primeiras paacuteginas deseu trabalho o eletroencefalograma (EEG) [22] Ele foi o primeiro a identicar ondas alfa(8-12 Hz) que satildeo atividades oscilatoacuterias no ceacuterebro Antes do registro dessas atividadesno ceacuterebro humano pesquisas jaacute haviam sido feitas em animais Entretanto foi apoacutesHans Berger que a quantidade de pesquisa feita sobre este oacutergatildeo cresceu bastante

O EEG eacute o registro da sincronizaccedilatildeo de milhares de sinais de neurocircnios em conjuntoDessa forma a localizaccedilatildeo exata da atividade de um neurocircnio eacute impossiacutevel de ser feitasomente com o EEG No entanto o registro de EEG associado a outras formas de registropermite resolver esse impasse Na Tabela 11 satildeo mostradas outras formas de se mensuraratividades neurais e suas respectivas desvantagens Devido ao alto custo envolvido nastecnologias apresentadas na Tabela 11 e principalmente agraves desvantagens como por exem-plo a exposiccedilatildeo agrave radiaccedilatildeo que outras tecnologias exigem o EEG tem sido o sinal maisutilizado para o desenvolvimento de pesquisa em Interface Ceacuterebro Computador (ICC)Aleacutem de ter bom custo-benefiacutecio sua utilizaccedilatildeo eacute bastante praacutetica

A ICC eacute uma teacutecnica que tenta interpretar os sinais eleacutetricos da superfiacutecie corticalou subcortical do ceacuterebro para interagir com o ambiente externo por meio de maacutequinasbuscando assim interpretar pensamentos referentes a movimento sem a necessidade domovimento real Por exemplo se um indiviacuteduo utilizador de ICC quiser mover o mousede um computador a tecnologia entenderia isso e realizaacute-la-ia sem o movimento das matildeosdo humano Essa tecnologia eacute um meio de comunicaccedilatildeo alternativo uacutetil para muitosobjetivos entre eles a possibilidade de ajudar um paciente impossibilitado de atividadesmotoras como um tetrapleacutegico a movimentar objetos

Para que seja possiacutevel a aplicaccedilatildeo da tecnologia ICC eacute necessaacuterio um aparelho que sejacapaz de captar as ondas emitidas pelo ceacuterebro um capacete neural Diante da grandequantidade de aparelhos o que se destacou foi o Emotiv Epoc como se pode observar deacordo com a Figura 11 A Figura 11a mostra alguns equipamentos com suas respectivasfaixas de preccedilo e algumas de suas funcionalidades Para efeitos de comparaccedilatildeo a Figura11b exibe a nota recebida por cada equipamento devido ao custo-benefiacutecio O destaquedo capacete Emotiv Epoc se deve ao melhor custo-benefiacutecio e agrave praticidade de utilizaccedilatildeoEle se acopla facilmente agrave cabeccedila e sua manipulaccedilatildeo eacute muito simples

1

Tecnologia Desvantagem

Electrocorticogram (ECoG) Exige cirurgiaMagneto-encephalography (MEG) Alto custoComputed Tomography (CT) Somente dados anatocircmicos

e exposiccedilatildeo agrave radiaccedilatildeoSingle Photon Emission Computerized Tomography (SPECT) Exposiccedilatildeo agrave radiaccedilatildeoPositron Emission Tomography (PET) Exposiccedilatildeo agrave radiaccedilatildeoMagnetic Resonance Imaging (MRI) CaraFunctional Magnetic Resonance Imaging (fMRI) CaraEvent-Related Optical Signal (EROS) Cara

Tabela 11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvanta-gens (Adapatado de [19])

(a) Capacetes neurais de baixo custo (b) Relaccedilatildeo custo-benefiacutecio

Figura 11 Preccedilos e comparaccedilotildees de custo-benefiacutecio de capacetes apenas dos mais baratos(0-1000 doacutelares) (Adapatado de [37])

2

O primeiro passo no processo eacute a aquisiccedilatildeo dos sinais cerebrais Para isso na literaturahaacute diversas teacutecnicas que se dividem em trecircs categorias as invasivas as semi-invasivas eas natildeo invasivas cada uma com suas devidas vantagens e desvantagens

A utilizaccedilatildeo da teacutecnica invasiva eacute uma oacutetima opccedilatildeo quando o foco eacute na captaccedilatildeo dedados com o miacutenimo de ruiacutedo Essa teacutecnica possibilita a diminuiccedilatildeo de ruiacutedos apesarde possuir como desvantagem a cirurgia que eacute necessaacuteria Nesta o cracircnio do indiviacuteduo eacuteaberto e eacute colocado no ceacuterebro eletrodos para captar os dados Tambeacutem como desvantagempode-se citar a faacutecil oxidaccedilatildeo dos eletrodos quando entram em contato com o sangue Ateacutecnica semi-invasiva eacute um pouco menos invasiva do que a primeira No entanto tambeacutemeacute necessaacuterio cirurgia Apesar disso a aquisiccedilatildeo de sinalruiacutedo eacute boa Jaacute a terceira teacutecnicacitada a natildeo-invasiva eacute a pior das trecircs em questatildeo de robustez ao ruiacutedo poreacutem eacute a demais faacutecil adaptaccedilatildeo agrave qualquer indiviacuteduo que tenha intenccedilatildeo de utilizaacute-la

Devido agraves caracteristicas destacadas este trabalho utiliza a teacutecnica natildeo invasiva comofonte de captaccedilatildeo de dados de EEG Com o uso do capacete Emotiv Epoc essa teacutecnicaeacute possibilitada De posse do aparelho comeccedilamos entatildeo fazendo essa aquisiccedilatildeo O se-gundo passo eacute o processamento do sinal e o reconhecimento de padrotildees atraveacutes do uso declassicadores Por uacuteltimo eacute necessaacuterio associar os dados obtidos agrave intenccedilatildeo do indiviacuteduo

Os estudos sobre ICC procuram adaptaacute-la ao uso no cotidiano Para avanccedilar nessaaacuterea eacute necessaacuterio o desenvolvimento de sistemas com elevada acuraacutecia e praticidade Paraaumentar a qualidade dos sistemas busca-se a implementaccedilatildeo de novos algoritmos para aaquisiccedilatildeo e a classicaccedilatildeo de sinais A cada dia novas aplicaccedilotildees estatildeo surgindo baseadasnessa tecnologia tanto de uso biomeacutedico quanto para jogos e outras aacutereas

12 Foco do trabalho

A imageacutetica motora eacute o processo mental no qual o indiviacuteduo imagina um determinadomovimento como por exemplo movimentar o braccedilo esquerdo ou direito A intenccedilatildeodo movimento que foi mandada pelo ceacuterebro eacute analisada e classicada de acordo como membro correspondente O resultado pode ser usado como comando para diversasaplicaccedilotildees como por exemplo o controle de um jogo

Dentro de ICC seraacute trabalhado o desenvolvimento de uma aplicaccedilatildeo online que utilizaduas classes de movimentos com as matildeos para a direita e a outra para a esquerda Estaaplicaccedilatildeo seraacute o jogo de ping-pong

13 Objetivo

Este trabalho possui dois objetivos principais O primeiro consiste em fazer um estudorelacionado agrave imageacutetica motora incluindo um levantamento dos trabalhos existentes naliteratura de forma a sumarizaacute-los O segundo objetivo eacute propor implementar e analisaruma aplicaccedilotildees que realiza a interaccedilatildeo ceacuterebro computador atraveacutes da imageacutetica motorao jogo de Ping Pong

3

14 Justicativa

O tema abordado neste trabalho eacute de grande relevacircncia social A ICC pode ser usadacomo soluccedilatildeo para a inclusccedilatildeo social de indiviacuteduos com diversos tipos de patologias quelimitam seus movimentos Aleacutem disso a ICC pode ser usada como uma alternativa paraa interface de jogos que representam um mercado de bilhotildees de doacutelares Pode-se porexemplo desenvolver melhorias para seres humanos decientes como a construccedilatildeo debraccedilos biocircnicos com o uso da imageacutetica motora ou talvez o controle de uma cadeira derodas para um indiviacuteduo tetrapleacutegico Tambeacutem se justica o estudo do tema am defacilitar tarefas mais simples como realizar uma ligaccedilatildeo atraveacutes de um telefone celular

15 Organizaccedilatildeo dos Capiacutetulos

O presente trabalho eacute dividio em seis capiacutetulos e anexos No primeiro capiacutetulo satildeoapresentados a contextualizaccedilatildeo do tema foco do trabalho objetivo e justicativas OCapiacutetulo 2 abrange os conceitos baacutesicos necessaacuterios ao entendimento da proposta do tra-balho O capiacutetulo seguinte conteacutem a descriccedilatildeo das trabalhos anteriores relacionados agraveICC encontradas na literatura O quarto capiacutetulo descreve o processo de desenvolvimentoda aplicaccedilatildeo propostas desde a idealizaccedilatildeo ateacute o desenvolvimento de fato O Capiacutetulo5 apresenta a descriccedilatildeo da fase de testes da implantaccedilatildeo da aplicaccedilatildeo bem como dosresultados obtidos desse processo com posterior anaacutelise deles O uacuteltimo eacute o capiacutetulo con-cludente sobre os resultados obtidos e que conta com sugestotildees de trabalhos futuros Porm o texto ainda conta com anexos

4

Capiacutetulo 2

Fundamentaccedilatildeo

21 A Biologia por traacutes do EEG

Estaacute entendido pela bibliograa que o sinal de EEG eacute bastante uacutetil e com ele conse-guimos produzir diversos trabalhos mas para entender o que se passa por traacutes do EEGde onde esse sinal vem e como eacute tratado temos que procurar nos interar melhor com abiologia do neurocircnio sua estrutura e funccedilatildeo

211 Estrutura e funccedilatildeo do neurocircnio

Como se pode ver na Figura 21 o neurocircnio eacute constituiacutedo de

1 Corpo celular

2 Dendritos

3 Axocircnio

Mas como ocorre a comunicaccedilatildeo entre duas ceacutelulas Qual o meio fiacutesico Os dendritossatildeo responsaacuteveis por receber sinais e passaacute-los para um axocircnio vide Figura 21 que remetea mesma para os outros neurocircnios

Figura 21 Estrutura do neurocircnio (Adaptado de [39])

5

212 Como funciona a troca de potenciais

Com o sinal recebido o neurocircnio tenta passar os impulsos eleacutetricos agrave frente atraveacutesde troca de potenciais a membrana celular envolta ao neurocircnio eacute carregada de iacuteons desoacutedio (Na+) e potaacutessio (K+) que cam se movimentando para dentro e fora da ceacutelulaInicialmente o interior da ceacutelula se encontra a -70mV em comparaccedilatildeo ao lado externoQuando algum sinal eacute recebido pelo dendrito ela ca menos negativa Se essa despola-rizaccedilatildeo chegar a -55mV a membrana se abre para iacuteons de soacutedio que entram na ceacutelulaIsto faz com que ela que cada vez menos negativa [40] Quando a ceacutelula atingir umpotencial positivo ela se abre para a saiacuteda de iacuteons de potaacutessio que agora causam a raacutepidarepolarizaccedilatildeo da membrana que chega a um potencial menor que -70mV como podemosver na Figura 22

Figura 22 Potencial de accedilatildeo de um neurocircnio [40]

213 O sinal de EEG

Os eletrodos do capacete Emotiv Epoc natildeo conseguem captar sinais de amplitudemuito pequena Este capacete e os demais relacionados apenas conseguem analisar sinaisde maior amplitude e a consequecircncia disso eacute que um uacutenico neurocircnio natildeo produz um sinalamplo o suciente para ser detectado sozinho Portanto o sinal soacute pode ser medidoconsiderando uma regiatildeo com vaacuterios neurocircnios Juntos levam aproximadamente 03s paraacumular a energia suciente para serem detectados [17] Como saber entatildeo quandoos neurocircnios tem sinal sucientemente forte para ser detectado Atraveacutes de dois preacute-requisitos

1 Muitos neurocircnios devem ser acionados ao mesmo tempo

2 Eles precisam estar alinhados em paralelo

6

Figura 23 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectadospelo eletrodo do capacete [42]

A ativaccedilatildeo de neurotransmissores do axocircnio terminal para as sinapses ocorre quandoum potencial de accedilatildeo atinge o m de um axocircnio Existem dois tipos de neurotransmissores

1 o primeiro causa um inuxo

2 o segundo causa um escoamento de iacuteons positivos

Assim os neurotransmissores ativados conseguem inuenciar a mudanccedila de potencialdo neurocircnio subsequente agrave sinapse mudando a permeabilidade da sua membrana Onome dado a essa mudanccedila de potencial do neurocircnio subsequente eacute potencial poacutes-sinaacutepticoexcitatoacuterio quando for uma mudanccedila positiva e potencial poacutes-sinaacuteptico inibitoacuterio quandonegativa Esses potenciais duram em meacutedia 100ms e variam sua amplitude entre 50e 100mV Na Figura 24 podemos ver um salto quacircntico de potencial de accedilatildeo de umneurocircnio para sinal de EEG

7

Figura 24 Eletroencefalograa claacutessica (Adapatado de [9])

22 Artefatos bioloacutegicos

Artefatos bioloacutegicos satildeo atividades causadas pelo sujeito mas natildeo ligadas agrave atividadecerebral de fato Agraves vezes satildeo chamados de artefatos sioloacutegicos [2] Os artefatos tecircm atendecircncia de ter uma amplitude mais forte que a de um sinal de EEG puro sendo assimum componente signicante obtido no EEG pois pode vir a atrapalhar sua mediccedilatildeotornando-a ineciente Eacute considerado como um ruiacutedo Desse modo se torna necessaacuteriofazer consideraccedilotildees especiais sobre os artefatos

221 Eletrooculograma

O EOG eacute um tipo de artefato relacionado agrave estrutura ocular do indiviacuteduo Ele vemdo movimento dos olhos para os lados ou para cima e das possiacuteveis piscadas pois essesmovimentos causam alteraccedilatildeo do campo eleacutetrico ocular Na Figura 25 mostramos doque eacute feito o olho humano

8

Figura 25 Estrutura do olho e suas partes nomeadas (Adaptado de [3])

O campo eleacutetrico do olho se origina da diferenccedila de potencial causada entre a coacuterneaque eacute carregada positivamente e a retina que eacute carregada negativamente Um esquemade como funciona esse dipolo pode ser visto na Figura 26

Figura 26 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3])

Como funciona a mediccedilatildeo do EOG

Dois eletrodos satildeo posicionados em cada lado esquerdo e direito de cada olho Amovimentaccedilatildeo dos olhos vai causar a diferenccedila de potencial fazendo a coacuternea carregadapositivamente car mais proacutexima de um dos eletrodos e consequentemente a retina car-regada negativamente car mais distante de um dos eletrodos Entatildeo cresce a tensatildeoeleacutetrica de um lado e decresce do outro O piscar de olhos provoca uma diferenccedila de po-tencial e tambeacutem inuencia o sinal de EEG A Figura 27 mostra como satildeo posicionadosesses eletrodos para medir a diferenccedila de potencial

9

Figura 27 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5])

No trabalho em questatildeo natildeo foi possiacutevel medir a diferenccedila de potencial ocasionadapelo movimentar dos olhos portanto esse eacute um ruiacutedo que natildeo foi tratado

222 Eletrocardiograma

Um exame bastante interessante eacute o eletrocardiograma (ECG) A cada batida docoraccedilatildeo o electrocardioacutegrafo grava a diferenccedila de potencial no muacutesculo cardiacuteaco causadapela sua despolarizaccedilatildeo Ou seja ele registra a variaccedilatildeo eleacutetrica da atividade do coraccedilatildeo

Essa atividade do coraccedilatildeo pode vir a atrapalhar os sinais de EEG como pode-se notarna Figura 28 Em azul tem-se o sinal do EEG puro antes de ser retirado o ECG Emverde tem-se o sinal do ECG e em vermelho notamos a diferenccedila que acontece no sinalde EEG quando o artefato ECG eacute retirado

Figura 28 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada doartefato de ECG (Adaptado de [35])

223 Eletromiograa

O sinal eletromiograacuteco (EMG) eacute a soma algeacutebrica de todos os sinais detectados emcerta aacuterea podendo ser afetado por propriedades musculares anatocircmicas e sioloacutegicasassim como pelo controle do sistema nervoso perifeacuterico e a instrumentaccedilatildeo utilizada paraa aquisiccedilatildeo dos sinais [13] O eletromioacutegrafo eacute um aparelho que adquire o sinal EMG

10

possibilitando o exame da eletromiograa (ver Figura 29) Ele fornece informaccedilotildees rele-vantes sobre a ativaccedilatildeo da musculatura envolvida em um movimento e a intensidade desua ativaccedilatildeo Qualquer movimentaccedilatildeo ou contraccedilatildeo dos muacutesculos da face afeta o sinal deEEG como por exemplo apertar os dentes contrair a testa etc

Figura 29 Sinal de EMG [2])

23 Artefatos teacutecnicos

Satildeo os tambeacutem chamados artefatos extrasioloacutegicos Natildeo dependem do ser humanomas sim do ambiente em que o usuaacuterio se encontra ou dos possiacuteveis eventos que ocorram

231 Frequecircncia de 5060 Hz

Um dos artefatos mais comuns existentes eacute o da interferecircncia causada pela correnteeleacutetrica Estatildeo indicadas duas frequecircncias pois a faixa normal de interferecircncia variade local para local no mundo Por exemplo na Ameacuterica do Norte eacute em torno de 60Hzenquanto na maioria dos outros paiacuteses ca em torno de 50 Hz Para tratar deste artefatousualmente coloca-se um ltro notch nessa faixa de frequecircncia e em seus respectivosharmocircnicos como por exemplo para o Brasil 60Hz 120Hz 180Hz etc

232 Artefato do amplicador

Eacute uma interferecircncia com pequena amplitude mas que tambeacutem merece alguma atenccedilatildeoNa Figura 210 em azul temos o sinal do EEG e em verde pode-se notar a pequenaamplitude do artefato gerado pelo amplicador

11

Figura 210 Artefato do amplicador analisado em graacuteco (Adaptado de [34])

24 Imageacutetica Motora

Depois de entender melhor como funciona todo o processo por traacutes da mediccedilatildeo doEEG torna-se interessante saber como isso se relaciona agrave praacutetica produzindo ao naldo processo o efeito esperado que eacute o deslocamento virtual de objetos usando apenas ainterpretaccedilatildeo dos sinais gerados pelo pensamento

O centro desse processo eacute a imageacutetica motora Ela pode ser denida como um estadodinacircmico durante a imaginaccedilatildeo que um indiviacuteduo faz de uma determinada accedilatildeo intenci-onada Este fenocircmeno implica que o sujeito sinta que realmente estaacute realizando a accedilatildeoimaginada sicamente seja ela de movimentar um braccedilo ou talvez empurrar um objeto[10]

A imageacutetica motora vem mostrando vaacuterios bons resultados em sua aplicaccedilatildeo Comoexemplo temos a ocorrecircncia do fenocircmeno na teacutecnica de aprendizado motor Os atletasutilizam a imaginaccedilatildeo de movimentos que seratildeo executados nos exerciacutecios de fato assimtrazem benefiacutecios no aquecimento relaxamento e concentraccedilatildeo [38] Outro exemplo in-teressante eacute o dos muacutesicos que ao utilizaacute-la possibilitam o aprendizado de partituras demaneira mais eciente [20]

Segundo o siologista sueco Hesslow [15] para o ceacuterebro a simulaccedilatildeo hipoteacutetica deestados consiste em trecircs premissas fundamentais

1 Imaginaccedilatildeo de accedilotildees ativa as estruturas motoras do ceacuterebro de tal forma que elasremetam agrave atividade que ocorre durante uma accedilatildeo normal de movimento entretantosem nenhum movimento evidente

2 Imaginaccedilatildeo de percepccedilatildeo a imaginaccedilatildeo de estar percebendo uma atividade eacute omesmo que realmente estar percebendo algo Em sua essecircncia a atividade de per-cepccedilatildeo eacute gerada pelo proacuteprio ceacuterebro em depreciaccedilatildeo de estiacutemulos externos

12

Letra Localizaccedilatildeo

A Loacutebulo da orelhaC CentralP ParietalF FrontalFp Frontal polarO OcipitalT Temporal

Tabela 21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22])

3 Antecipaccedilatildeo uma accedilatildeo simulada pode provocar a atividade perceptiva que remeteagravequela que deveria ter acontecido se a accedilatildeo fosse executada de fato

Devido a esses fatores a simulaccedilatildeo mental pode ser utilizada como uma ferramentarepresentativa para o entendimento da mente Isso permite que os diversos estados mentaispossam ser explorados possibilitando relacionar as aacutereas especiacutecas do ceacuterebro que satildeomais ativadas devido a certos sentimentos desejos ou talvez intenccedilotildees Assim a simulaccedilatildeomental contribui para o avanccedilo em diversas aacutereas tais como a psicologia e outras

25 Emotiv Epoc

A m de analisar a imaginaccedilatildeo e os efeitos que ela tem sobre o nosso corpo e mentecientistas atraveacutes da busca constante de avanccedilos chegaram agrave utilizaccedilatildeo de um capaceteneural para mediccedilatildeo efetiva de estiacutemulos demonstrados pela captaccedilatildeo do sinal de EEGComo ilustrado na Figura 11a o custo-benefiacutecio de capacete que melhor atendeu o grupono projeto de pesquisa foi o do Emotiv Epoc Seus detalhes de organizaccedilatildeo e funcionamentosatildeo mostrados a seguir

251 Posicionamento de eletrodos

A Federaccedilatildeo Internacional de Neuropsicologia recomenda a utilizaccedilatildeo do modelo 10-20para ateacute 21 eletrodos [11] de acordo com a Figura 211 Nesse modelo todos os eletrodosse encontram a uma distacircncia de seus eletrodos vizinhos de 10 ou 20 da distacircncia totalda cabeccedila A cada posiccedilatildeo eacute dado um identicador de uma ou duas letras e um nuacutemerode acordo com sua proximidade a alguma parte do ceacuterebro (veja tabela 21) Nuacutemerospares estatildeo agrave direita e nuacutemeros iacutempares agrave esquerda

A sociedade Americana de EEG sugeriu nos seus guias [16] que novos eletrodos sejamcolocados de maneira equidistante dos 21 eletrodos jaacute denidos na Figura 212 caso sejanecessaacuterio um nuacutemero maior de eletrodos

13

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 9: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Sumaacuterio

1 Introduccedilatildeo 1

11 Contextualizaccedilatildeo 112 Foco do trabalho 313 Objetivo 314 Justicativa 415 Organizaccedilatildeo dos Capiacutetulos 4

2 Fundamentaccedilatildeo 5

21 A Biologia por traacutes do EEG 5211 Estrutura e funccedilatildeo do neurocircnio 5212 Como funciona a troca de potenciais 6213 O sinal de EEG 6

22 Artefatos bioloacutegicos 8221 Eletrooculograma 8222 Eletrocardiograma 10223 Eletromiograa 10

23 Artefatos teacutecnicos 11231 Frequecircncia de 5060 Hz 11232 Artefato do amplicador 11

24 Imageacutetica Motora 1225 Emotiv Epoc 13

251 Posicionamento de eletrodos 13252 Emotiv Epoc Headset 14

26 OpenViBE 1827 Classicadores 1828 Extraccedilatildeo de sinais utilizando a energia de banda 18

3 Trabalhos relacionados 19

31 Carro controlado pelo ceacuterebro 1932 NeuroPhone 2033 Controle para o Second Life 2134 Controle do braccedilo de um robocirc 2235 BrainTalk 23

vi

4 Processo de desenvolvimento 24

41 Aquisiccedilatildeo de Sinais de EEG 2442 O Experimento 2643 Cenaacuterios 26

431 Monitoramento de Sinais 26432 Aquisiccedilatildeo de Sinais 27433 Treinamento dos Classicadores 28434 Online 32435 Replay 34436 Caacutelculo da porcentagem de acertos 35

44 Aplicativo desenvolvido 37441 Comunicaccedilatildeo do OpenViBE com o aplicativo 37442 Classes principais do aplicativo 38

5 Resultados e anaacutelise 39

51 Comparaccedilatildeo entre resultados de classicadores utilizados 39

6 Conclusatildeo 41

A Anexos 42

A1 Spriteh 42A2 Spritecpp 42A3 Barrah 45A4 Barracpp 46A5 GameManagerh 49A6 GameManagercpp 49A7 InputManagerh 54A8 InputManagercpp 55A9 Maincpp 58A10 Pongh 59A11 Pongcpp 60

Referecircncias 64

vii

Lista de Figuras

11 Preccedilos e comparaccedilotildees de custo-benefiacutecio de capacetes apenas dos maisbaratos (0-1000 doacutelares) (Adapatado de [37]) 2

21 Estrutura do neurocircnio (Adaptado de [39]) 522 Potencial de accedilatildeo de um neurocircnio [40] 623 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectados

pelo eletrodo do capacete [42] 724 Eletroencefalograa claacutessica (Adapatado de [9]) 825 Estrutura do olho e suas partes nomeadas (Adaptado de [3]) 926 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3]) 927 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5]) 1028 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada do

artefato de ECG (Adaptado de [35]) 1029 Sinal de EMG [2]) 11210 Artefato do amplicador analisado em graacuteco (Adaptado de [34]) 12211 Modelo 10-20 para ateacute 21 eletrodos [33] 14212 Modelo 10-20 para ateacute 75 eletrodos [33] 14213 Emotiv EPOC antes de ser montado (Adaptado de [23]) 15214 Vericando o estado dos eletrodos 16215 Detecccedilatildeo de movimentos da face do usuaacuterio 16216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo 17217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento 17218 Controlador de mouse 17

31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da uti-lizaccedilatildeo do Emotiv EPOC [30] 19

32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildeestelefocircnicas [25] 20

33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8] 2134 Exemplo de tela do Second Life com os possiacuteveis movimentos de um jogador[18] 2235 Braccedilo de um robocirc sendo controlado pelo capacete neural [43] 2236 Teclado virtual do sistema Brain talk[21] 23

41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc He-adset [28] 24

42 Tentativa sem feedback [28] 2543 Tentativa que contava com feedback [28] 2644 Cenaacuterio de monitoramento 27

viii

45 Cenaacuterio de aquisiccedilatildeo de sinais 2846 Cenaacuterio de treinamento 2947 Cenaacuterio de treinamento do ltro espacial CSP 3048 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM 3149 Cenaacuterio de treinamento do classicador usando o ltro CSP 32410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utiliza-

ccedilatildeo da barra azul como feedback 33411 Cenaacuterio de utilizaccedilatildeo online 33412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP 34413 Cenaacuterio de replay 35414 Cenaacuterio de caacutelculo de porcentagem de acertos 36415 Cenaacuterio de caacutelculo de porcentagem de acertos 36416 Jogo implementado 37

ix

Lista de Tabelas

11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvan-tagens (Adapatado de [19]) 2

21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22]) 13

31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8] 21

51 Tabela de porcentagem de acertos dos diferentes classicadores citados 40

x

Capiacutetulo 1

Introduccedilatildeo

11 Contextualizaccedilatildeo

No ano de 1929 Hans Berger [4] psiquiatra alematildeo publicou as primeiras paacuteginas deseu trabalho o eletroencefalograma (EEG) [22] Ele foi o primeiro a identicar ondas alfa(8-12 Hz) que satildeo atividades oscilatoacuterias no ceacuterebro Antes do registro dessas atividadesno ceacuterebro humano pesquisas jaacute haviam sido feitas em animais Entretanto foi apoacutesHans Berger que a quantidade de pesquisa feita sobre este oacutergatildeo cresceu bastante

O EEG eacute o registro da sincronizaccedilatildeo de milhares de sinais de neurocircnios em conjuntoDessa forma a localizaccedilatildeo exata da atividade de um neurocircnio eacute impossiacutevel de ser feitasomente com o EEG No entanto o registro de EEG associado a outras formas de registropermite resolver esse impasse Na Tabela 11 satildeo mostradas outras formas de se mensuraratividades neurais e suas respectivas desvantagens Devido ao alto custo envolvido nastecnologias apresentadas na Tabela 11 e principalmente agraves desvantagens como por exem-plo a exposiccedilatildeo agrave radiaccedilatildeo que outras tecnologias exigem o EEG tem sido o sinal maisutilizado para o desenvolvimento de pesquisa em Interface Ceacuterebro Computador (ICC)Aleacutem de ter bom custo-benefiacutecio sua utilizaccedilatildeo eacute bastante praacutetica

A ICC eacute uma teacutecnica que tenta interpretar os sinais eleacutetricos da superfiacutecie corticalou subcortical do ceacuterebro para interagir com o ambiente externo por meio de maacutequinasbuscando assim interpretar pensamentos referentes a movimento sem a necessidade domovimento real Por exemplo se um indiviacuteduo utilizador de ICC quiser mover o mousede um computador a tecnologia entenderia isso e realizaacute-la-ia sem o movimento das matildeosdo humano Essa tecnologia eacute um meio de comunicaccedilatildeo alternativo uacutetil para muitosobjetivos entre eles a possibilidade de ajudar um paciente impossibilitado de atividadesmotoras como um tetrapleacutegico a movimentar objetos

Para que seja possiacutevel a aplicaccedilatildeo da tecnologia ICC eacute necessaacuterio um aparelho que sejacapaz de captar as ondas emitidas pelo ceacuterebro um capacete neural Diante da grandequantidade de aparelhos o que se destacou foi o Emotiv Epoc como se pode observar deacordo com a Figura 11 A Figura 11a mostra alguns equipamentos com suas respectivasfaixas de preccedilo e algumas de suas funcionalidades Para efeitos de comparaccedilatildeo a Figura11b exibe a nota recebida por cada equipamento devido ao custo-benefiacutecio O destaquedo capacete Emotiv Epoc se deve ao melhor custo-benefiacutecio e agrave praticidade de utilizaccedilatildeoEle se acopla facilmente agrave cabeccedila e sua manipulaccedilatildeo eacute muito simples

1

Tecnologia Desvantagem

Electrocorticogram (ECoG) Exige cirurgiaMagneto-encephalography (MEG) Alto custoComputed Tomography (CT) Somente dados anatocircmicos

e exposiccedilatildeo agrave radiaccedilatildeoSingle Photon Emission Computerized Tomography (SPECT) Exposiccedilatildeo agrave radiaccedilatildeoPositron Emission Tomography (PET) Exposiccedilatildeo agrave radiaccedilatildeoMagnetic Resonance Imaging (MRI) CaraFunctional Magnetic Resonance Imaging (fMRI) CaraEvent-Related Optical Signal (EROS) Cara

Tabela 11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvanta-gens (Adapatado de [19])

(a) Capacetes neurais de baixo custo (b) Relaccedilatildeo custo-benefiacutecio

Figura 11 Preccedilos e comparaccedilotildees de custo-benefiacutecio de capacetes apenas dos mais baratos(0-1000 doacutelares) (Adapatado de [37])

2

O primeiro passo no processo eacute a aquisiccedilatildeo dos sinais cerebrais Para isso na literaturahaacute diversas teacutecnicas que se dividem em trecircs categorias as invasivas as semi-invasivas eas natildeo invasivas cada uma com suas devidas vantagens e desvantagens

A utilizaccedilatildeo da teacutecnica invasiva eacute uma oacutetima opccedilatildeo quando o foco eacute na captaccedilatildeo dedados com o miacutenimo de ruiacutedo Essa teacutecnica possibilita a diminuiccedilatildeo de ruiacutedos apesarde possuir como desvantagem a cirurgia que eacute necessaacuteria Nesta o cracircnio do indiviacuteduo eacuteaberto e eacute colocado no ceacuterebro eletrodos para captar os dados Tambeacutem como desvantagempode-se citar a faacutecil oxidaccedilatildeo dos eletrodos quando entram em contato com o sangue Ateacutecnica semi-invasiva eacute um pouco menos invasiva do que a primeira No entanto tambeacutemeacute necessaacuterio cirurgia Apesar disso a aquisiccedilatildeo de sinalruiacutedo eacute boa Jaacute a terceira teacutecnicacitada a natildeo-invasiva eacute a pior das trecircs em questatildeo de robustez ao ruiacutedo poreacutem eacute a demais faacutecil adaptaccedilatildeo agrave qualquer indiviacuteduo que tenha intenccedilatildeo de utilizaacute-la

Devido agraves caracteristicas destacadas este trabalho utiliza a teacutecnica natildeo invasiva comofonte de captaccedilatildeo de dados de EEG Com o uso do capacete Emotiv Epoc essa teacutecnicaeacute possibilitada De posse do aparelho comeccedilamos entatildeo fazendo essa aquisiccedilatildeo O se-gundo passo eacute o processamento do sinal e o reconhecimento de padrotildees atraveacutes do uso declassicadores Por uacuteltimo eacute necessaacuterio associar os dados obtidos agrave intenccedilatildeo do indiviacuteduo

Os estudos sobre ICC procuram adaptaacute-la ao uso no cotidiano Para avanccedilar nessaaacuterea eacute necessaacuterio o desenvolvimento de sistemas com elevada acuraacutecia e praticidade Paraaumentar a qualidade dos sistemas busca-se a implementaccedilatildeo de novos algoritmos para aaquisiccedilatildeo e a classicaccedilatildeo de sinais A cada dia novas aplicaccedilotildees estatildeo surgindo baseadasnessa tecnologia tanto de uso biomeacutedico quanto para jogos e outras aacutereas

12 Foco do trabalho

A imageacutetica motora eacute o processo mental no qual o indiviacuteduo imagina um determinadomovimento como por exemplo movimentar o braccedilo esquerdo ou direito A intenccedilatildeodo movimento que foi mandada pelo ceacuterebro eacute analisada e classicada de acordo como membro correspondente O resultado pode ser usado como comando para diversasaplicaccedilotildees como por exemplo o controle de um jogo

Dentro de ICC seraacute trabalhado o desenvolvimento de uma aplicaccedilatildeo online que utilizaduas classes de movimentos com as matildeos para a direita e a outra para a esquerda Estaaplicaccedilatildeo seraacute o jogo de ping-pong

13 Objetivo

Este trabalho possui dois objetivos principais O primeiro consiste em fazer um estudorelacionado agrave imageacutetica motora incluindo um levantamento dos trabalhos existentes naliteratura de forma a sumarizaacute-los O segundo objetivo eacute propor implementar e analisaruma aplicaccedilotildees que realiza a interaccedilatildeo ceacuterebro computador atraveacutes da imageacutetica motorao jogo de Ping Pong

3

14 Justicativa

O tema abordado neste trabalho eacute de grande relevacircncia social A ICC pode ser usadacomo soluccedilatildeo para a inclusccedilatildeo social de indiviacuteduos com diversos tipos de patologias quelimitam seus movimentos Aleacutem disso a ICC pode ser usada como uma alternativa paraa interface de jogos que representam um mercado de bilhotildees de doacutelares Pode-se porexemplo desenvolver melhorias para seres humanos decientes como a construccedilatildeo debraccedilos biocircnicos com o uso da imageacutetica motora ou talvez o controle de uma cadeira derodas para um indiviacuteduo tetrapleacutegico Tambeacutem se justica o estudo do tema am defacilitar tarefas mais simples como realizar uma ligaccedilatildeo atraveacutes de um telefone celular

15 Organizaccedilatildeo dos Capiacutetulos

O presente trabalho eacute dividio em seis capiacutetulos e anexos No primeiro capiacutetulo satildeoapresentados a contextualizaccedilatildeo do tema foco do trabalho objetivo e justicativas OCapiacutetulo 2 abrange os conceitos baacutesicos necessaacuterios ao entendimento da proposta do tra-balho O capiacutetulo seguinte conteacutem a descriccedilatildeo das trabalhos anteriores relacionados agraveICC encontradas na literatura O quarto capiacutetulo descreve o processo de desenvolvimentoda aplicaccedilatildeo propostas desde a idealizaccedilatildeo ateacute o desenvolvimento de fato O Capiacutetulo5 apresenta a descriccedilatildeo da fase de testes da implantaccedilatildeo da aplicaccedilatildeo bem como dosresultados obtidos desse processo com posterior anaacutelise deles O uacuteltimo eacute o capiacutetulo con-cludente sobre os resultados obtidos e que conta com sugestotildees de trabalhos futuros Porm o texto ainda conta com anexos

4

Capiacutetulo 2

Fundamentaccedilatildeo

21 A Biologia por traacutes do EEG

Estaacute entendido pela bibliograa que o sinal de EEG eacute bastante uacutetil e com ele conse-guimos produzir diversos trabalhos mas para entender o que se passa por traacutes do EEGde onde esse sinal vem e como eacute tratado temos que procurar nos interar melhor com abiologia do neurocircnio sua estrutura e funccedilatildeo

211 Estrutura e funccedilatildeo do neurocircnio

Como se pode ver na Figura 21 o neurocircnio eacute constituiacutedo de

1 Corpo celular

2 Dendritos

3 Axocircnio

Mas como ocorre a comunicaccedilatildeo entre duas ceacutelulas Qual o meio fiacutesico Os dendritossatildeo responsaacuteveis por receber sinais e passaacute-los para um axocircnio vide Figura 21 que remetea mesma para os outros neurocircnios

Figura 21 Estrutura do neurocircnio (Adaptado de [39])

5

212 Como funciona a troca de potenciais

Com o sinal recebido o neurocircnio tenta passar os impulsos eleacutetricos agrave frente atraveacutesde troca de potenciais a membrana celular envolta ao neurocircnio eacute carregada de iacuteons desoacutedio (Na+) e potaacutessio (K+) que cam se movimentando para dentro e fora da ceacutelulaInicialmente o interior da ceacutelula se encontra a -70mV em comparaccedilatildeo ao lado externoQuando algum sinal eacute recebido pelo dendrito ela ca menos negativa Se essa despola-rizaccedilatildeo chegar a -55mV a membrana se abre para iacuteons de soacutedio que entram na ceacutelulaIsto faz com que ela que cada vez menos negativa [40] Quando a ceacutelula atingir umpotencial positivo ela se abre para a saiacuteda de iacuteons de potaacutessio que agora causam a raacutepidarepolarizaccedilatildeo da membrana que chega a um potencial menor que -70mV como podemosver na Figura 22

Figura 22 Potencial de accedilatildeo de um neurocircnio [40]

213 O sinal de EEG

Os eletrodos do capacete Emotiv Epoc natildeo conseguem captar sinais de amplitudemuito pequena Este capacete e os demais relacionados apenas conseguem analisar sinaisde maior amplitude e a consequecircncia disso eacute que um uacutenico neurocircnio natildeo produz um sinalamplo o suciente para ser detectado sozinho Portanto o sinal soacute pode ser medidoconsiderando uma regiatildeo com vaacuterios neurocircnios Juntos levam aproximadamente 03s paraacumular a energia suciente para serem detectados [17] Como saber entatildeo quandoos neurocircnios tem sinal sucientemente forte para ser detectado Atraveacutes de dois preacute-requisitos

1 Muitos neurocircnios devem ser acionados ao mesmo tempo

2 Eles precisam estar alinhados em paralelo

6

Figura 23 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectadospelo eletrodo do capacete [42]

A ativaccedilatildeo de neurotransmissores do axocircnio terminal para as sinapses ocorre quandoum potencial de accedilatildeo atinge o m de um axocircnio Existem dois tipos de neurotransmissores

1 o primeiro causa um inuxo

2 o segundo causa um escoamento de iacuteons positivos

Assim os neurotransmissores ativados conseguem inuenciar a mudanccedila de potencialdo neurocircnio subsequente agrave sinapse mudando a permeabilidade da sua membrana Onome dado a essa mudanccedila de potencial do neurocircnio subsequente eacute potencial poacutes-sinaacutepticoexcitatoacuterio quando for uma mudanccedila positiva e potencial poacutes-sinaacuteptico inibitoacuterio quandonegativa Esses potenciais duram em meacutedia 100ms e variam sua amplitude entre 50e 100mV Na Figura 24 podemos ver um salto quacircntico de potencial de accedilatildeo de umneurocircnio para sinal de EEG

7

Figura 24 Eletroencefalograa claacutessica (Adapatado de [9])

22 Artefatos bioloacutegicos

Artefatos bioloacutegicos satildeo atividades causadas pelo sujeito mas natildeo ligadas agrave atividadecerebral de fato Agraves vezes satildeo chamados de artefatos sioloacutegicos [2] Os artefatos tecircm atendecircncia de ter uma amplitude mais forte que a de um sinal de EEG puro sendo assimum componente signicante obtido no EEG pois pode vir a atrapalhar sua mediccedilatildeotornando-a ineciente Eacute considerado como um ruiacutedo Desse modo se torna necessaacuteriofazer consideraccedilotildees especiais sobre os artefatos

221 Eletrooculograma

O EOG eacute um tipo de artefato relacionado agrave estrutura ocular do indiviacuteduo Ele vemdo movimento dos olhos para os lados ou para cima e das possiacuteveis piscadas pois essesmovimentos causam alteraccedilatildeo do campo eleacutetrico ocular Na Figura 25 mostramos doque eacute feito o olho humano

8

Figura 25 Estrutura do olho e suas partes nomeadas (Adaptado de [3])

O campo eleacutetrico do olho se origina da diferenccedila de potencial causada entre a coacuterneaque eacute carregada positivamente e a retina que eacute carregada negativamente Um esquemade como funciona esse dipolo pode ser visto na Figura 26

Figura 26 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3])

Como funciona a mediccedilatildeo do EOG

Dois eletrodos satildeo posicionados em cada lado esquerdo e direito de cada olho Amovimentaccedilatildeo dos olhos vai causar a diferenccedila de potencial fazendo a coacuternea carregadapositivamente car mais proacutexima de um dos eletrodos e consequentemente a retina car-regada negativamente car mais distante de um dos eletrodos Entatildeo cresce a tensatildeoeleacutetrica de um lado e decresce do outro O piscar de olhos provoca uma diferenccedila de po-tencial e tambeacutem inuencia o sinal de EEG A Figura 27 mostra como satildeo posicionadosesses eletrodos para medir a diferenccedila de potencial

9

Figura 27 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5])

No trabalho em questatildeo natildeo foi possiacutevel medir a diferenccedila de potencial ocasionadapelo movimentar dos olhos portanto esse eacute um ruiacutedo que natildeo foi tratado

222 Eletrocardiograma

Um exame bastante interessante eacute o eletrocardiograma (ECG) A cada batida docoraccedilatildeo o electrocardioacutegrafo grava a diferenccedila de potencial no muacutesculo cardiacuteaco causadapela sua despolarizaccedilatildeo Ou seja ele registra a variaccedilatildeo eleacutetrica da atividade do coraccedilatildeo

Essa atividade do coraccedilatildeo pode vir a atrapalhar os sinais de EEG como pode-se notarna Figura 28 Em azul tem-se o sinal do EEG puro antes de ser retirado o ECG Emverde tem-se o sinal do ECG e em vermelho notamos a diferenccedila que acontece no sinalde EEG quando o artefato ECG eacute retirado

Figura 28 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada doartefato de ECG (Adaptado de [35])

223 Eletromiograa

O sinal eletromiograacuteco (EMG) eacute a soma algeacutebrica de todos os sinais detectados emcerta aacuterea podendo ser afetado por propriedades musculares anatocircmicas e sioloacutegicasassim como pelo controle do sistema nervoso perifeacuterico e a instrumentaccedilatildeo utilizada paraa aquisiccedilatildeo dos sinais [13] O eletromioacutegrafo eacute um aparelho que adquire o sinal EMG

10

possibilitando o exame da eletromiograa (ver Figura 29) Ele fornece informaccedilotildees rele-vantes sobre a ativaccedilatildeo da musculatura envolvida em um movimento e a intensidade desua ativaccedilatildeo Qualquer movimentaccedilatildeo ou contraccedilatildeo dos muacutesculos da face afeta o sinal deEEG como por exemplo apertar os dentes contrair a testa etc

Figura 29 Sinal de EMG [2])

23 Artefatos teacutecnicos

Satildeo os tambeacutem chamados artefatos extrasioloacutegicos Natildeo dependem do ser humanomas sim do ambiente em que o usuaacuterio se encontra ou dos possiacuteveis eventos que ocorram

231 Frequecircncia de 5060 Hz

Um dos artefatos mais comuns existentes eacute o da interferecircncia causada pela correnteeleacutetrica Estatildeo indicadas duas frequecircncias pois a faixa normal de interferecircncia variade local para local no mundo Por exemplo na Ameacuterica do Norte eacute em torno de 60Hzenquanto na maioria dos outros paiacuteses ca em torno de 50 Hz Para tratar deste artefatousualmente coloca-se um ltro notch nessa faixa de frequecircncia e em seus respectivosharmocircnicos como por exemplo para o Brasil 60Hz 120Hz 180Hz etc

232 Artefato do amplicador

Eacute uma interferecircncia com pequena amplitude mas que tambeacutem merece alguma atenccedilatildeoNa Figura 210 em azul temos o sinal do EEG e em verde pode-se notar a pequenaamplitude do artefato gerado pelo amplicador

11

Figura 210 Artefato do amplicador analisado em graacuteco (Adaptado de [34])

24 Imageacutetica Motora

Depois de entender melhor como funciona todo o processo por traacutes da mediccedilatildeo doEEG torna-se interessante saber como isso se relaciona agrave praacutetica produzindo ao naldo processo o efeito esperado que eacute o deslocamento virtual de objetos usando apenas ainterpretaccedilatildeo dos sinais gerados pelo pensamento

O centro desse processo eacute a imageacutetica motora Ela pode ser denida como um estadodinacircmico durante a imaginaccedilatildeo que um indiviacuteduo faz de uma determinada accedilatildeo intenci-onada Este fenocircmeno implica que o sujeito sinta que realmente estaacute realizando a accedilatildeoimaginada sicamente seja ela de movimentar um braccedilo ou talvez empurrar um objeto[10]

A imageacutetica motora vem mostrando vaacuterios bons resultados em sua aplicaccedilatildeo Comoexemplo temos a ocorrecircncia do fenocircmeno na teacutecnica de aprendizado motor Os atletasutilizam a imaginaccedilatildeo de movimentos que seratildeo executados nos exerciacutecios de fato assimtrazem benefiacutecios no aquecimento relaxamento e concentraccedilatildeo [38] Outro exemplo in-teressante eacute o dos muacutesicos que ao utilizaacute-la possibilitam o aprendizado de partituras demaneira mais eciente [20]

Segundo o siologista sueco Hesslow [15] para o ceacuterebro a simulaccedilatildeo hipoteacutetica deestados consiste em trecircs premissas fundamentais

1 Imaginaccedilatildeo de accedilotildees ativa as estruturas motoras do ceacuterebro de tal forma que elasremetam agrave atividade que ocorre durante uma accedilatildeo normal de movimento entretantosem nenhum movimento evidente

2 Imaginaccedilatildeo de percepccedilatildeo a imaginaccedilatildeo de estar percebendo uma atividade eacute omesmo que realmente estar percebendo algo Em sua essecircncia a atividade de per-cepccedilatildeo eacute gerada pelo proacuteprio ceacuterebro em depreciaccedilatildeo de estiacutemulos externos

12

Letra Localizaccedilatildeo

A Loacutebulo da orelhaC CentralP ParietalF FrontalFp Frontal polarO OcipitalT Temporal

Tabela 21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22])

3 Antecipaccedilatildeo uma accedilatildeo simulada pode provocar a atividade perceptiva que remeteagravequela que deveria ter acontecido se a accedilatildeo fosse executada de fato

Devido a esses fatores a simulaccedilatildeo mental pode ser utilizada como uma ferramentarepresentativa para o entendimento da mente Isso permite que os diversos estados mentaispossam ser explorados possibilitando relacionar as aacutereas especiacutecas do ceacuterebro que satildeomais ativadas devido a certos sentimentos desejos ou talvez intenccedilotildees Assim a simulaccedilatildeomental contribui para o avanccedilo em diversas aacutereas tais como a psicologia e outras

25 Emotiv Epoc

A m de analisar a imaginaccedilatildeo e os efeitos que ela tem sobre o nosso corpo e mentecientistas atraveacutes da busca constante de avanccedilos chegaram agrave utilizaccedilatildeo de um capaceteneural para mediccedilatildeo efetiva de estiacutemulos demonstrados pela captaccedilatildeo do sinal de EEGComo ilustrado na Figura 11a o custo-benefiacutecio de capacete que melhor atendeu o grupono projeto de pesquisa foi o do Emotiv Epoc Seus detalhes de organizaccedilatildeo e funcionamentosatildeo mostrados a seguir

251 Posicionamento de eletrodos

A Federaccedilatildeo Internacional de Neuropsicologia recomenda a utilizaccedilatildeo do modelo 10-20para ateacute 21 eletrodos [11] de acordo com a Figura 211 Nesse modelo todos os eletrodosse encontram a uma distacircncia de seus eletrodos vizinhos de 10 ou 20 da distacircncia totalda cabeccedila A cada posiccedilatildeo eacute dado um identicador de uma ou duas letras e um nuacutemerode acordo com sua proximidade a alguma parte do ceacuterebro (veja tabela 21) Nuacutemerospares estatildeo agrave direita e nuacutemeros iacutempares agrave esquerda

A sociedade Americana de EEG sugeriu nos seus guias [16] que novos eletrodos sejamcolocados de maneira equidistante dos 21 eletrodos jaacute denidos na Figura 212 caso sejanecessaacuterio um nuacutemero maior de eletrodos

13

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 10: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

4 Processo de desenvolvimento 24

41 Aquisiccedilatildeo de Sinais de EEG 2442 O Experimento 2643 Cenaacuterios 26

431 Monitoramento de Sinais 26432 Aquisiccedilatildeo de Sinais 27433 Treinamento dos Classicadores 28434 Online 32435 Replay 34436 Caacutelculo da porcentagem de acertos 35

44 Aplicativo desenvolvido 37441 Comunicaccedilatildeo do OpenViBE com o aplicativo 37442 Classes principais do aplicativo 38

5 Resultados e anaacutelise 39

51 Comparaccedilatildeo entre resultados de classicadores utilizados 39

6 Conclusatildeo 41

A Anexos 42

A1 Spriteh 42A2 Spritecpp 42A3 Barrah 45A4 Barracpp 46A5 GameManagerh 49A6 GameManagercpp 49A7 InputManagerh 54A8 InputManagercpp 55A9 Maincpp 58A10 Pongh 59A11 Pongcpp 60

Referecircncias 64

vii

Lista de Figuras

11 Preccedilos e comparaccedilotildees de custo-benefiacutecio de capacetes apenas dos maisbaratos (0-1000 doacutelares) (Adapatado de [37]) 2

21 Estrutura do neurocircnio (Adaptado de [39]) 522 Potencial de accedilatildeo de um neurocircnio [40] 623 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectados

pelo eletrodo do capacete [42] 724 Eletroencefalograa claacutessica (Adapatado de [9]) 825 Estrutura do olho e suas partes nomeadas (Adaptado de [3]) 926 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3]) 927 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5]) 1028 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada do

artefato de ECG (Adaptado de [35]) 1029 Sinal de EMG [2]) 11210 Artefato do amplicador analisado em graacuteco (Adaptado de [34]) 12211 Modelo 10-20 para ateacute 21 eletrodos [33] 14212 Modelo 10-20 para ateacute 75 eletrodos [33] 14213 Emotiv EPOC antes de ser montado (Adaptado de [23]) 15214 Vericando o estado dos eletrodos 16215 Detecccedilatildeo de movimentos da face do usuaacuterio 16216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo 17217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento 17218 Controlador de mouse 17

31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da uti-lizaccedilatildeo do Emotiv EPOC [30] 19

32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildeestelefocircnicas [25] 20

33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8] 2134 Exemplo de tela do Second Life com os possiacuteveis movimentos de um jogador[18] 2235 Braccedilo de um robocirc sendo controlado pelo capacete neural [43] 2236 Teclado virtual do sistema Brain talk[21] 23

41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc He-adset [28] 24

42 Tentativa sem feedback [28] 2543 Tentativa que contava com feedback [28] 2644 Cenaacuterio de monitoramento 27

viii

45 Cenaacuterio de aquisiccedilatildeo de sinais 2846 Cenaacuterio de treinamento 2947 Cenaacuterio de treinamento do ltro espacial CSP 3048 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM 3149 Cenaacuterio de treinamento do classicador usando o ltro CSP 32410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utiliza-

ccedilatildeo da barra azul como feedback 33411 Cenaacuterio de utilizaccedilatildeo online 33412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP 34413 Cenaacuterio de replay 35414 Cenaacuterio de caacutelculo de porcentagem de acertos 36415 Cenaacuterio de caacutelculo de porcentagem de acertos 36416 Jogo implementado 37

ix

Lista de Tabelas

11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvan-tagens (Adapatado de [19]) 2

21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22]) 13

31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8] 21

51 Tabela de porcentagem de acertos dos diferentes classicadores citados 40

x

Capiacutetulo 1

Introduccedilatildeo

11 Contextualizaccedilatildeo

No ano de 1929 Hans Berger [4] psiquiatra alematildeo publicou as primeiras paacuteginas deseu trabalho o eletroencefalograma (EEG) [22] Ele foi o primeiro a identicar ondas alfa(8-12 Hz) que satildeo atividades oscilatoacuterias no ceacuterebro Antes do registro dessas atividadesno ceacuterebro humano pesquisas jaacute haviam sido feitas em animais Entretanto foi apoacutesHans Berger que a quantidade de pesquisa feita sobre este oacutergatildeo cresceu bastante

O EEG eacute o registro da sincronizaccedilatildeo de milhares de sinais de neurocircnios em conjuntoDessa forma a localizaccedilatildeo exata da atividade de um neurocircnio eacute impossiacutevel de ser feitasomente com o EEG No entanto o registro de EEG associado a outras formas de registropermite resolver esse impasse Na Tabela 11 satildeo mostradas outras formas de se mensuraratividades neurais e suas respectivas desvantagens Devido ao alto custo envolvido nastecnologias apresentadas na Tabela 11 e principalmente agraves desvantagens como por exem-plo a exposiccedilatildeo agrave radiaccedilatildeo que outras tecnologias exigem o EEG tem sido o sinal maisutilizado para o desenvolvimento de pesquisa em Interface Ceacuterebro Computador (ICC)Aleacutem de ter bom custo-benefiacutecio sua utilizaccedilatildeo eacute bastante praacutetica

A ICC eacute uma teacutecnica que tenta interpretar os sinais eleacutetricos da superfiacutecie corticalou subcortical do ceacuterebro para interagir com o ambiente externo por meio de maacutequinasbuscando assim interpretar pensamentos referentes a movimento sem a necessidade domovimento real Por exemplo se um indiviacuteduo utilizador de ICC quiser mover o mousede um computador a tecnologia entenderia isso e realizaacute-la-ia sem o movimento das matildeosdo humano Essa tecnologia eacute um meio de comunicaccedilatildeo alternativo uacutetil para muitosobjetivos entre eles a possibilidade de ajudar um paciente impossibilitado de atividadesmotoras como um tetrapleacutegico a movimentar objetos

Para que seja possiacutevel a aplicaccedilatildeo da tecnologia ICC eacute necessaacuterio um aparelho que sejacapaz de captar as ondas emitidas pelo ceacuterebro um capacete neural Diante da grandequantidade de aparelhos o que se destacou foi o Emotiv Epoc como se pode observar deacordo com a Figura 11 A Figura 11a mostra alguns equipamentos com suas respectivasfaixas de preccedilo e algumas de suas funcionalidades Para efeitos de comparaccedilatildeo a Figura11b exibe a nota recebida por cada equipamento devido ao custo-benefiacutecio O destaquedo capacete Emotiv Epoc se deve ao melhor custo-benefiacutecio e agrave praticidade de utilizaccedilatildeoEle se acopla facilmente agrave cabeccedila e sua manipulaccedilatildeo eacute muito simples

1

Tecnologia Desvantagem

Electrocorticogram (ECoG) Exige cirurgiaMagneto-encephalography (MEG) Alto custoComputed Tomography (CT) Somente dados anatocircmicos

e exposiccedilatildeo agrave radiaccedilatildeoSingle Photon Emission Computerized Tomography (SPECT) Exposiccedilatildeo agrave radiaccedilatildeoPositron Emission Tomography (PET) Exposiccedilatildeo agrave radiaccedilatildeoMagnetic Resonance Imaging (MRI) CaraFunctional Magnetic Resonance Imaging (fMRI) CaraEvent-Related Optical Signal (EROS) Cara

Tabela 11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvanta-gens (Adapatado de [19])

(a) Capacetes neurais de baixo custo (b) Relaccedilatildeo custo-benefiacutecio

Figura 11 Preccedilos e comparaccedilotildees de custo-benefiacutecio de capacetes apenas dos mais baratos(0-1000 doacutelares) (Adapatado de [37])

2

O primeiro passo no processo eacute a aquisiccedilatildeo dos sinais cerebrais Para isso na literaturahaacute diversas teacutecnicas que se dividem em trecircs categorias as invasivas as semi-invasivas eas natildeo invasivas cada uma com suas devidas vantagens e desvantagens

A utilizaccedilatildeo da teacutecnica invasiva eacute uma oacutetima opccedilatildeo quando o foco eacute na captaccedilatildeo dedados com o miacutenimo de ruiacutedo Essa teacutecnica possibilita a diminuiccedilatildeo de ruiacutedos apesarde possuir como desvantagem a cirurgia que eacute necessaacuteria Nesta o cracircnio do indiviacuteduo eacuteaberto e eacute colocado no ceacuterebro eletrodos para captar os dados Tambeacutem como desvantagempode-se citar a faacutecil oxidaccedilatildeo dos eletrodos quando entram em contato com o sangue Ateacutecnica semi-invasiva eacute um pouco menos invasiva do que a primeira No entanto tambeacutemeacute necessaacuterio cirurgia Apesar disso a aquisiccedilatildeo de sinalruiacutedo eacute boa Jaacute a terceira teacutecnicacitada a natildeo-invasiva eacute a pior das trecircs em questatildeo de robustez ao ruiacutedo poreacutem eacute a demais faacutecil adaptaccedilatildeo agrave qualquer indiviacuteduo que tenha intenccedilatildeo de utilizaacute-la

Devido agraves caracteristicas destacadas este trabalho utiliza a teacutecnica natildeo invasiva comofonte de captaccedilatildeo de dados de EEG Com o uso do capacete Emotiv Epoc essa teacutecnicaeacute possibilitada De posse do aparelho comeccedilamos entatildeo fazendo essa aquisiccedilatildeo O se-gundo passo eacute o processamento do sinal e o reconhecimento de padrotildees atraveacutes do uso declassicadores Por uacuteltimo eacute necessaacuterio associar os dados obtidos agrave intenccedilatildeo do indiviacuteduo

Os estudos sobre ICC procuram adaptaacute-la ao uso no cotidiano Para avanccedilar nessaaacuterea eacute necessaacuterio o desenvolvimento de sistemas com elevada acuraacutecia e praticidade Paraaumentar a qualidade dos sistemas busca-se a implementaccedilatildeo de novos algoritmos para aaquisiccedilatildeo e a classicaccedilatildeo de sinais A cada dia novas aplicaccedilotildees estatildeo surgindo baseadasnessa tecnologia tanto de uso biomeacutedico quanto para jogos e outras aacutereas

12 Foco do trabalho

A imageacutetica motora eacute o processo mental no qual o indiviacuteduo imagina um determinadomovimento como por exemplo movimentar o braccedilo esquerdo ou direito A intenccedilatildeodo movimento que foi mandada pelo ceacuterebro eacute analisada e classicada de acordo como membro correspondente O resultado pode ser usado como comando para diversasaplicaccedilotildees como por exemplo o controle de um jogo

Dentro de ICC seraacute trabalhado o desenvolvimento de uma aplicaccedilatildeo online que utilizaduas classes de movimentos com as matildeos para a direita e a outra para a esquerda Estaaplicaccedilatildeo seraacute o jogo de ping-pong

13 Objetivo

Este trabalho possui dois objetivos principais O primeiro consiste em fazer um estudorelacionado agrave imageacutetica motora incluindo um levantamento dos trabalhos existentes naliteratura de forma a sumarizaacute-los O segundo objetivo eacute propor implementar e analisaruma aplicaccedilotildees que realiza a interaccedilatildeo ceacuterebro computador atraveacutes da imageacutetica motorao jogo de Ping Pong

3

14 Justicativa

O tema abordado neste trabalho eacute de grande relevacircncia social A ICC pode ser usadacomo soluccedilatildeo para a inclusccedilatildeo social de indiviacuteduos com diversos tipos de patologias quelimitam seus movimentos Aleacutem disso a ICC pode ser usada como uma alternativa paraa interface de jogos que representam um mercado de bilhotildees de doacutelares Pode-se porexemplo desenvolver melhorias para seres humanos decientes como a construccedilatildeo debraccedilos biocircnicos com o uso da imageacutetica motora ou talvez o controle de uma cadeira derodas para um indiviacuteduo tetrapleacutegico Tambeacutem se justica o estudo do tema am defacilitar tarefas mais simples como realizar uma ligaccedilatildeo atraveacutes de um telefone celular

15 Organizaccedilatildeo dos Capiacutetulos

O presente trabalho eacute dividio em seis capiacutetulos e anexos No primeiro capiacutetulo satildeoapresentados a contextualizaccedilatildeo do tema foco do trabalho objetivo e justicativas OCapiacutetulo 2 abrange os conceitos baacutesicos necessaacuterios ao entendimento da proposta do tra-balho O capiacutetulo seguinte conteacutem a descriccedilatildeo das trabalhos anteriores relacionados agraveICC encontradas na literatura O quarto capiacutetulo descreve o processo de desenvolvimentoda aplicaccedilatildeo propostas desde a idealizaccedilatildeo ateacute o desenvolvimento de fato O Capiacutetulo5 apresenta a descriccedilatildeo da fase de testes da implantaccedilatildeo da aplicaccedilatildeo bem como dosresultados obtidos desse processo com posterior anaacutelise deles O uacuteltimo eacute o capiacutetulo con-cludente sobre os resultados obtidos e que conta com sugestotildees de trabalhos futuros Porm o texto ainda conta com anexos

4

Capiacutetulo 2

Fundamentaccedilatildeo

21 A Biologia por traacutes do EEG

Estaacute entendido pela bibliograa que o sinal de EEG eacute bastante uacutetil e com ele conse-guimos produzir diversos trabalhos mas para entender o que se passa por traacutes do EEGde onde esse sinal vem e como eacute tratado temos que procurar nos interar melhor com abiologia do neurocircnio sua estrutura e funccedilatildeo

211 Estrutura e funccedilatildeo do neurocircnio

Como se pode ver na Figura 21 o neurocircnio eacute constituiacutedo de

1 Corpo celular

2 Dendritos

3 Axocircnio

Mas como ocorre a comunicaccedilatildeo entre duas ceacutelulas Qual o meio fiacutesico Os dendritossatildeo responsaacuteveis por receber sinais e passaacute-los para um axocircnio vide Figura 21 que remetea mesma para os outros neurocircnios

Figura 21 Estrutura do neurocircnio (Adaptado de [39])

5

212 Como funciona a troca de potenciais

Com o sinal recebido o neurocircnio tenta passar os impulsos eleacutetricos agrave frente atraveacutesde troca de potenciais a membrana celular envolta ao neurocircnio eacute carregada de iacuteons desoacutedio (Na+) e potaacutessio (K+) que cam se movimentando para dentro e fora da ceacutelulaInicialmente o interior da ceacutelula se encontra a -70mV em comparaccedilatildeo ao lado externoQuando algum sinal eacute recebido pelo dendrito ela ca menos negativa Se essa despola-rizaccedilatildeo chegar a -55mV a membrana se abre para iacuteons de soacutedio que entram na ceacutelulaIsto faz com que ela que cada vez menos negativa [40] Quando a ceacutelula atingir umpotencial positivo ela se abre para a saiacuteda de iacuteons de potaacutessio que agora causam a raacutepidarepolarizaccedilatildeo da membrana que chega a um potencial menor que -70mV como podemosver na Figura 22

Figura 22 Potencial de accedilatildeo de um neurocircnio [40]

213 O sinal de EEG

Os eletrodos do capacete Emotiv Epoc natildeo conseguem captar sinais de amplitudemuito pequena Este capacete e os demais relacionados apenas conseguem analisar sinaisde maior amplitude e a consequecircncia disso eacute que um uacutenico neurocircnio natildeo produz um sinalamplo o suciente para ser detectado sozinho Portanto o sinal soacute pode ser medidoconsiderando uma regiatildeo com vaacuterios neurocircnios Juntos levam aproximadamente 03s paraacumular a energia suciente para serem detectados [17] Como saber entatildeo quandoos neurocircnios tem sinal sucientemente forte para ser detectado Atraveacutes de dois preacute-requisitos

1 Muitos neurocircnios devem ser acionados ao mesmo tempo

2 Eles precisam estar alinhados em paralelo

6

Figura 23 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectadospelo eletrodo do capacete [42]

A ativaccedilatildeo de neurotransmissores do axocircnio terminal para as sinapses ocorre quandoum potencial de accedilatildeo atinge o m de um axocircnio Existem dois tipos de neurotransmissores

1 o primeiro causa um inuxo

2 o segundo causa um escoamento de iacuteons positivos

Assim os neurotransmissores ativados conseguem inuenciar a mudanccedila de potencialdo neurocircnio subsequente agrave sinapse mudando a permeabilidade da sua membrana Onome dado a essa mudanccedila de potencial do neurocircnio subsequente eacute potencial poacutes-sinaacutepticoexcitatoacuterio quando for uma mudanccedila positiva e potencial poacutes-sinaacuteptico inibitoacuterio quandonegativa Esses potenciais duram em meacutedia 100ms e variam sua amplitude entre 50e 100mV Na Figura 24 podemos ver um salto quacircntico de potencial de accedilatildeo de umneurocircnio para sinal de EEG

7

Figura 24 Eletroencefalograa claacutessica (Adapatado de [9])

22 Artefatos bioloacutegicos

Artefatos bioloacutegicos satildeo atividades causadas pelo sujeito mas natildeo ligadas agrave atividadecerebral de fato Agraves vezes satildeo chamados de artefatos sioloacutegicos [2] Os artefatos tecircm atendecircncia de ter uma amplitude mais forte que a de um sinal de EEG puro sendo assimum componente signicante obtido no EEG pois pode vir a atrapalhar sua mediccedilatildeotornando-a ineciente Eacute considerado como um ruiacutedo Desse modo se torna necessaacuteriofazer consideraccedilotildees especiais sobre os artefatos

221 Eletrooculograma

O EOG eacute um tipo de artefato relacionado agrave estrutura ocular do indiviacuteduo Ele vemdo movimento dos olhos para os lados ou para cima e das possiacuteveis piscadas pois essesmovimentos causam alteraccedilatildeo do campo eleacutetrico ocular Na Figura 25 mostramos doque eacute feito o olho humano

8

Figura 25 Estrutura do olho e suas partes nomeadas (Adaptado de [3])

O campo eleacutetrico do olho se origina da diferenccedila de potencial causada entre a coacuterneaque eacute carregada positivamente e a retina que eacute carregada negativamente Um esquemade como funciona esse dipolo pode ser visto na Figura 26

Figura 26 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3])

Como funciona a mediccedilatildeo do EOG

Dois eletrodos satildeo posicionados em cada lado esquerdo e direito de cada olho Amovimentaccedilatildeo dos olhos vai causar a diferenccedila de potencial fazendo a coacuternea carregadapositivamente car mais proacutexima de um dos eletrodos e consequentemente a retina car-regada negativamente car mais distante de um dos eletrodos Entatildeo cresce a tensatildeoeleacutetrica de um lado e decresce do outro O piscar de olhos provoca uma diferenccedila de po-tencial e tambeacutem inuencia o sinal de EEG A Figura 27 mostra como satildeo posicionadosesses eletrodos para medir a diferenccedila de potencial

9

Figura 27 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5])

No trabalho em questatildeo natildeo foi possiacutevel medir a diferenccedila de potencial ocasionadapelo movimentar dos olhos portanto esse eacute um ruiacutedo que natildeo foi tratado

222 Eletrocardiograma

Um exame bastante interessante eacute o eletrocardiograma (ECG) A cada batida docoraccedilatildeo o electrocardioacutegrafo grava a diferenccedila de potencial no muacutesculo cardiacuteaco causadapela sua despolarizaccedilatildeo Ou seja ele registra a variaccedilatildeo eleacutetrica da atividade do coraccedilatildeo

Essa atividade do coraccedilatildeo pode vir a atrapalhar os sinais de EEG como pode-se notarna Figura 28 Em azul tem-se o sinal do EEG puro antes de ser retirado o ECG Emverde tem-se o sinal do ECG e em vermelho notamos a diferenccedila que acontece no sinalde EEG quando o artefato ECG eacute retirado

Figura 28 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada doartefato de ECG (Adaptado de [35])

223 Eletromiograa

O sinal eletromiograacuteco (EMG) eacute a soma algeacutebrica de todos os sinais detectados emcerta aacuterea podendo ser afetado por propriedades musculares anatocircmicas e sioloacutegicasassim como pelo controle do sistema nervoso perifeacuterico e a instrumentaccedilatildeo utilizada paraa aquisiccedilatildeo dos sinais [13] O eletromioacutegrafo eacute um aparelho que adquire o sinal EMG

10

possibilitando o exame da eletromiograa (ver Figura 29) Ele fornece informaccedilotildees rele-vantes sobre a ativaccedilatildeo da musculatura envolvida em um movimento e a intensidade desua ativaccedilatildeo Qualquer movimentaccedilatildeo ou contraccedilatildeo dos muacutesculos da face afeta o sinal deEEG como por exemplo apertar os dentes contrair a testa etc

Figura 29 Sinal de EMG [2])

23 Artefatos teacutecnicos

Satildeo os tambeacutem chamados artefatos extrasioloacutegicos Natildeo dependem do ser humanomas sim do ambiente em que o usuaacuterio se encontra ou dos possiacuteveis eventos que ocorram

231 Frequecircncia de 5060 Hz

Um dos artefatos mais comuns existentes eacute o da interferecircncia causada pela correnteeleacutetrica Estatildeo indicadas duas frequecircncias pois a faixa normal de interferecircncia variade local para local no mundo Por exemplo na Ameacuterica do Norte eacute em torno de 60Hzenquanto na maioria dos outros paiacuteses ca em torno de 50 Hz Para tratar deste artefatousualmente coloca-se um ltro notch nessa faixa de frequecircncia e em seus respectivosharmocircnicos como por exemplo para o Brasil 60Hz 120Hz 180Hz etc

232 Artefato do amplicador

Eacute uma interferecircncia com pequena amplitude mas que tambeacutem merece alguma atenccedilatildeoNa Figura 210 em azul temos o sinal do EEG e em verde pode-se notar a pequenaamplitude do artefato gerado pelo amplicador

11

Figura 210 Artefato do amplicador analisado em graacuteco (Adaptado de [34])

24 Imageacutetica Motora

Depois de entender melhor como funciona todo o processo por traacutes da mediccedilatildeo doEEG torna-se interessante saber como isso se relaciona agrave praacutetica produzindo ao naldo processo o efeito esperado que eacute o deslocamento virtual de objetos usando apenas ainterpretaccedilatildeo dos sinais gerados pelo pensamento

O centro desse processo eacute a imageacutetica motora Ela pode ser denida como um estadodinacircmico durante a imaginaccedilatildeo que um indiviacuteduo faz de uma determinada accedilatildeo intenci-onada Este fenocircmeno implica que o sujeito sinta que realmente estaacute realizando a accedilatildeoimaginada sicamente seja ela de movimentar um braccedilo ou talvez empurrar um objeto[10]

A imageacutetica motora vem mostrando vaacuterios bons resultados em sua aplicaccedilatildeo Comoexemplo temos a ocorrecircncia do fenocircmeno na teacutecnica de aprendizado motor Os atletasutilizam a imaginaccedilatildeo de movimentos que seratildeo executados nos exerciacutecios de fato assimtrazem benefiacutecios no aquecimento relaxamento e concentraccedilatildeo [38] Outro exemplo in-teressante eacute o dos muacutesicos que ao utilizaacute-la possibilitam o aprendizado de partituras demaneira mais eciente [20]

Segundo o siologista sueco Hesslow [15] para o ceacuterebro a simulaccedilatildeo hipoteacutetica deestados consiste em trecircs premissas fundamentais

1 Imaginaccedilatildeo de accedilotildees ativa as estruturas motoras do ceacuterebro de tal forma que elasremetam agrave atividade que ocorre durante uma accedilatildeo normal de movimento entretantosem nenhum movimento evidente

2 Imaginaccedilatildeo de percepccedilatildeo a imaginaccedilatildeo de estar percebendo uma atividade eacute omesmo que realmente estar percebendo algo Em sua essecircncia a atividade de per-cepccedilatildeo eacute gerada pelo proacuteprio ceacuterebro em depreciaccedilatildeo de estiacutemulos externos

12

Letra Localizaccedilatildeo

A Loacutebulo da orelhaC CentralP ParietalF FrontalFp Frontal polarO OcipitalT Temporal

Tabela 21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22])

3 Antecipaccedilatildeo uma accedilatildeo simulada pode provocar a atividade perceptiva que remeteagravequela que deveria ter acontecido se a accedilatildeo fosse executada de fato

Devido a esses fatores a simulaccedilatildeo mental pode ser utilizada como uma ferramentarepresentativa para o entendimento da mente Isso permite que os diversos estados mentaispossam ser explorados possibilitando relacionar as aacutereas especiacutecas do ceacuterebro que satildeomais ativadas devido a certos sentimentos desejos ou talvez intenccedilotildees Assim a simulaccedilatildeomental contribui para o avanccedilo em diversas aacutereas tais como a psicologia e outras

25 Emotiv Epoc

A m de analisar a imaginaccedilatildeo e os efeitos que ela tem sobre o nosso corpo e mentecientistas atraveacutes da busca constante de avanccedilos chegaram agrave utilizaccedilatildeo de um capaceteneural para mediccedilatildeo efetiva de estiacutemulos demonstrados pela captaccedilatildeo do sinal de EEGComo ilustrado na Figura 11a o custo-benefiacutecio de capacete que melhor atendeu o grupono projeto de pesquisa foi o do Emotiv Epoc Seus detalhes de organizaccedilatildeo e funcionamentosatildeo mostrados a seguir

251 Posicionamento de eletrodos

A Federaccedilatildeo Internacional de Neuropsicologia recomenda a utilizaccedilatildeo do modelo 10-20para ateacute 21 eletrodos [11] de acordo com a Figura 211 Nesse modelo todos os eletrodosse encontram a uma distacircncia de seus eletrodos vizinhos de 10 ou 20 da distacircncia totalda cabeccedila A cada posiccedilatildeo eacute dado um identicador de uma ou duas letras e um nuacutemerode acordo com sua proximidade a alguma parte do ceacuterebro (veja tabela 21) Nuacutemerospares estatildeo agrave direita e nuacutemeros iacutempares agrave esquerda

A sociedade Americana de EEG sugeriu nos seus guias [16] que novos eletrodos sejamcolocados de maneira equidistante dos 21 eletrodos jaacute denidos na Figura 212 caso sejanecessaacuterio um nuacutemero maior de eletrodos

13

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 11: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Lista de Figuras

11 Preccedilos e comparaccedilotildees de custo-benefiacutecio de capacetes apenas dos maisbaratos (0-1000 doacutelares) (Adapatado de [37]) 2

21 Estrutura do neurocircnio (Adaptado de [39]) 522 Potencial de accedilatildeo de um neurocircnio [40] 623 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectados

pelo eletrodo do capacete [42] 724 Eletroencefalograa claacutessica (Adapatado de [9]) 825 Estrutura do olho e suas partes nomeadas (Adaptado de [3]) 926 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3]) 927 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5]) 1028 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada do

artefato de ECG (Adaptado de [35]) 1029 Sinal de EMG [2]) 11210 Artefato do amplicador analisado em graacuteco (Adaptado de [34]) 12211 Modelo 10-20 para ateacute 21 eletrodos [33] 14212 Modelo 10-20 para ateacute 75 eletrodos [33] 14213 Emotiv EPOC antes de ser montado (Adaptado de [23]) 15214 Vericando o estado dos eletrodos 16215 Detecccedilatildeo de movimentos da face do usuaacuterio 16216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo 17217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento 17218 Controlador de mouse 17

31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da uti-lizaccedilatildeo do Emotiv EPOC [30] 19

32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildeestelefocircnicas [25] 20

33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8] 2134 Exemplo de tela do Second Life com os possiacuteveis movimentos de um jogador[18] 2235 Braccedilo de um robocirc sendo controlado pelo capacete neural [43] 2236 Teclado virtual do sistema Brain talk[21] 23

41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc He-adset [28] 24

42 Tentativa sem feedback [28] 2543 Tentativa que contava com feedback [28] 2644 Cenaacuterio de monitoramento 27

viii

45 Cenaacuterio de aquisiccedilatildeo de sinais 2846 Cenaacuterio de treinamento 2947 Cenaacuterio de treinamento do ltro espacial CSP 3048 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM 3149 Cenaacuterio de treinamento do classicador usando o ltro CSP 32410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utiliza-

ccedilatildeo da barra azul como feedback 33411 Cenaacuterio de utilizaccedilatildeo online 33412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP 34413 Cenaacuterio de replay 35414 Cenaacuterio de caacutelculo de porcentagem de acertos 36415 Cenaacuterio de caacutelculo de porcentagem de acertos 36416 Jogo implementado 37

ix

Lista de Tabelas

11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvan-tagens (Adapatado de [19]) 2

21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22]) 13

31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8] 21

51 Tabela de porcentagem de acertos dos diferentes classicadores citados 40

x

Capiacutetulo 1

Introduccedilatildeo

11 Contextualizaccedilatildeo

No ano de 1929 Hans Berger [4] psiquiatra alematildeo publicou as primeiras paacuteginas deseu trabalho o eletroencefalograma (EEG) [22] Ele foi o primeiro a identicar ondas alfa(8-12 Hz) que satildeo atividades oscilatoacuterias no ceacuterebro Antes do registro dessas atividadesno ceacuterebro humano pesquisas jaacute haviam sido feitas em animais Entretanto foi apoacutesHans Berger que a quantidade de pesquisa feita sobre este oacutergatildeo cresceu bastante

O EEG eacute o registro da sincronizaccedilatildeo de milhares de sinais de neurocircnios em conjuntoDessa forma a localizaccedilatildeo exata da atividade de um neurocircnio eacute impossiacutevel de ser feitasomente com o EEG No entanto o registro de EEG associado a outras formas de registropermite resolver esse impasse Na Tabela 11 satildeo mostradas outras formas de se mensuraratividades neurais e suas respectivas desvantagens Devido ao alto custo envolvido nastecnologias apresentadas na Tabela 11 e principalmente agraves desvantagens como por exem-plo a exposiccedilatildeo agrave radiaccedilatildeo que outras tecnologias exigem o EEG tem sido o sinal maisutilizado para o desenvolvimento de pesquisa em Interface Ceacuterebro Computador (ICC)Aleacutem de ter bom custo-benefiacutecio sua utilizaccedilatildeo eacute bastante praacutetica

A ICC eacute uma teacutecnica que tenta interpretar os sinais eleacutetricos da superfiacutecie corticalou subcortical do ceacuterebro para interagir com o ambiente externo por meio de maacutequinasbuscando assim interpretar pensamentos referentes a movimento sem a necessidade domovimento real Por exemplo se um indiviacuteduo utilizador de ICC quiser mover o mousede um computador a tecnologia entenderia isso e realizaacute-la-ia sem o movimento das matildeosdo humano Essa tecnologia eacute um meio de comunicaccedilatildeo alternativo uacutetil para muitosobjetivos entre eles a possibilidade de ajudar um paciente impossibilitado de atividadesmotoras como um tetrapleacutegico a movimentar objetos

Para que seja possiacutevel a aplicaccedilatildeo da tecnologia ICC eacute necessaacuterio um aparelho que sejacapaz de captar as ondas emitidas pelo ceacuterebro um capacete neural Diante da grandequantidade de aparelhos o que se destacou foi o Emotiv Epoc como se pode observar deacordo com a Figura 11 A Figura 11a mostra alguns equipamentos com suas respectivasfaixas de preccedilo e algumas de suas funcionalidades Para efeitos de comparaccedilatildeo a Figura11b exibe a nota recebida por cada equipamento devido ao custo-benefiacutecio O destaquedo capacete Emotiv Epoc se deve ao melhor custo-benefiacutecio e agrave praticidade de utilizaccedilatildeoEle se acopla facilmente agrave cabeccedila e sua manipulaccedilatildeo eacute muito simples

1

Tecnologia Desvantagem

Electrocorticogram (ECoG) Exige cirurgiaMagneto-encephalography (MEG) Alto custoComputed Tomography (CT) Somente dados anatocircmicos

e exposiccedilatildeo agrave radiaccedilatildeoSingle Photon Emission Computerized Tomography (SPECT) Exposiccedilatildeo agrave radiaccedilatildeoPositron Emission Tomography (PET) Exposiccedilatildeo agrave radiaccedilatildeoMagnetic Resonance Imaging (MRI) CaraFunctional Magnetic Resonance Imaging (fMRI) CaraEvent-Related Optical Signal (EROS) Cara

Tabela 11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvanta-gens (Adapatado de [19])

(a) Capacetes neurais de baixo custo (b) Relaccedilatildeo custo-benefiacutecio

Figura 11 Preccedilos e comparaccedilotildees de custo-benefiacutecio de capacetes apenas dos mais baratos(0-1000 doacutelares) (Adapatado de [37])

2

O primeiro passo no processo eacute a aquisiccedilatildeo dos sinais cerebrais Para isso na literaturahaacute diversas teacutecnicas que se dividem em trecircs categorias as invasivas as semi-invasivas eas natildeo invasivas cada uma com suas devidas vantagens e desvantagens

A utilizaccedilatildeo da teacutecnica invasiva eacute uma oacutetima opccedilatildeo quando o foco eacute na captaccedilatildeo dedados com o miacutenimo de ruiacutedo Essa teacutecnica possibilita a diminuiccedilatildeo de ruiacutedos apesarde possuir como desvantagem a cirurgia que eacute necessaacuteria Nesta o cracircnio do indiviacuteduo eacuteaberto e eacute colocado no ceacuterebro eletrodos para captar os dados Tambeacutem como desvantagempode-se citar a faacutecil oxidaccedilatildeo dos eletrodos quando entram em contato com o sangue Ateacutecnica semi-invasiva eacute um pouco menos invasiva do que a primeira No entanto tambeacutemeacute necessaacuterio cirurgia Apesar disso a aquisiccedilatildeo de sinalruiacutedo eacute boa Jaacute a terceira teacutecnicacitada a natildeo-invasiva eacute a pior das trecircs em questatildeo de robustez ao ruiacutedo poreacutem eacute a demais faacutecil adaptaccedilatildeo agrave qualquer indiviacuteduo que tenha intenccedilatildeo de utilizaacute-la

Devido agraves caracteristicas destacadas este trabalho utiliza a teacutecnica natildeo invasiva comofonte de captaccedilatildeo de dados de EEG Com o uso do capacete Emotiv Epoc essa teacutecnicaeacute possibilitada De posse do aparelho comeccedilamos entatildeo fazendo essa aquisiccedilatildeo O se-gundo passo eacute o processamento do sinal e o reconhecimento de padrotildees atraveacutes do uso declassicadores Por uacuteltimo eacute necessaacuterio associar os dados obtidos agrave intenccedilatildeo do indiviacuteduo

Os estudos sobre ICC procuram adaptaacute-la ao uso no cotidiano Para avanccedilar nessaaacuterea eacute necessaacuterio o desenvolvimento de sistemas com elevada acuraacutecia e praticidade Paraaumentar a qualidade dos sistemas busca-se a implementaccedilatildeo de novos algoritmos para aaquisiccedilatildeo e a classicaccedilatildeo de sinais A cada dia novas aplicaccedilotildees estatildeo surgindo baseadasnessa tecnologia tanto de uso biomeacutedico quanto para jogos e outras aacutereas

12 Foco do trabalho

A imageacutetica motora eacute o processo mental no qual o indiviacuteduo imagina um determinadomovimento como por exemplo movimentar o braccedilo esquerdo ou direito A intenccedilatildeodo movimento que foi mandada pelo ceacuterebro eacute analisada e classicada de acordo como membro correspondente O resultado pode ser usado como comando para diversasaplicaccedilotildees como por exemplo o controle de um jogo

Dentro de ICC seraacute trabalhado o desenvolvimento de uma aplicaccedilatildeo online que utilizaduas classes de movimentos com as matildeos para a direita e a outra para a esquerda Estaaplicaccedilatildeo seraacute o jogo de ping-pong

13 Objetivo

Este trabalho possui dois objetivos principais O primeiro consiste em fazer um estudorelacionado agrave imageacutetica motora incluindo um levantamento dos trabalhos existentes naliteratura de forma a sumarizaacute-los O segundo objetivo eacute propor implementar e analisaruma aplicaccedilotildees que realiza a interaccedilatildeo ceacuterebro computador atraveacutes da imageacutetica motorao jogo de Ping Pong

3

14 Justicativa

O tema abordado neste trabalho eacute de grande relevacircncia social A ICC pode ser usadacomo soluccedilatildeo para a inclusccedilatildeo social de indiviacuteduos com diversos tipos de patologias quelimitam seus movimentos Aleacutem disso a ICC pode ser usada como uma alternativa paraa interface de jogos que representam um mercado de bilhotildees de doacutelares Pode-se porexemplo desenvolver melhorias para seres humanos decientes como a construccedilatildeo debraccedilos biocircnicos com o uso da imageacutetica motora ou talvez o controle de uma cadeira derodas para um indiviacuteduo tetrapleacutegico Tambeacutem se justica o estudo do tema am defacilitar tarefas mais simples como realizar uma ligaccedilatildeo atraveacutes de um telefone celular

15 Organizaccedilatildeo dos Capiacutetulos

O presente trabalho eacute dividio em seis capiacutetulos e anexos No primeiro capiacutetulo satildeoapresentados a contextualizaccedilatildeo do tema foco do trabalho objetivo e justicativas OCapiacutetulo 2 abrange os conceitos baacutesicos necessaacuterios ao entendimento da proposta do tra-balho O capiacutetulo seguinte conteacutem a descriccedilatildeo das trabalhos anteriores relacionados agraveICC encontradas na literatura O quarto capiacutetulo descreve o processo de desenvolvimentoda aplicaccedilatildeo propostas desde a idealizaccedilatildeo ateacute o desenvolvimento de fato O Capiacutetulo5 apresenta a descriccedilatildeo da fase de testes da implantaccedilatildeo da aplicaccedilatildeo bem como dosresultados obtidos desse processo com posterior anaacutelise deles O uacuteltimo eacute o capiacutetulo con-cludente sobre os resultados obtidos e que conta com sugestotildees de trabalhos futuros Porm o texto ainda conta com anexos

4

Capiacutetulo 2

Fundamentaccedilatildeo

21 A Biologia por traacutes do EEG

Estaacute entendido pela bibliograa que o sinal de EEG eacute bastante uacutetil e com ele conse-guimos produzir diversos trabalhos mas para entender o que se passa por traacutes do EEGde onde esse sinal vem e como eacute tratado temos que procurar nos interar melhor com abiologia do neurocircnio sua estrutura e funccedilatildeo

211 Estrutura e funccedilatildeo do neurocircnio

Como se pode ver na Figura 21 o neurocircnio eacute constituiacutedo de

1 Corpo celular

2 Dendritos

3 Axocircnio

Mas como ocorre a comunicaccedilatildeo entre duas ceacutelulas Qual o meio fiacutesico Os dendritossatildeo responsaacuteveis por receber sinais e passaacute-los para um axocircnio vide Figura 21 que remetea mesma para os outros neurocircnios

Figura 21 Estrutura do neurocircnio (Adaptado de [39])

5

212 Como funciona a troca de potenciais

Com o sinal recebido o neurocircnio tenta passar os impulsos eleacutetricos agrave frente atraveacutesde troca de potenciais a membrana celular envolta ao neurocircnio eacute carregada de iacuteons desoacutedio (Na+) e potaacutessio (K+) que cam se movimentando para dentro e fora da ceacutelulaInicialmente o interior da ceacutelula se encontra a -70mV em comparaccedilatildeo ao lado externoQuando algum sinal eacute recebido pelo dendrito ela ca menos negativa Se essa despola-rizaccedilatildeo chegar a -55mV a membrana se abre para iacuteons de soacutedio que entram na ceacutelulaIsto faz com que ela que cada vez menos negativa [40] Quando a ceacutelula atingir umpotencial positivo ela se abre para a saiacuteda de iacuteons de potaacutessio que agora causam a raacutepidarepolarizaccedilatildeo da membrana que chega a um potencial menor que -70mV como podemosver na Figura 22

Figura 22 Potencial de accedilatildeo de um neurocircnio [40]

213 O sinal de EEG

Os eletrodos do capacete Emotiv Epoc natildeo conseguem captar sinais de amplitudemuito pequena Este capacete e os demais relacionados apenas conseguem analisar sinaisde maior amplitude e a consequecircncia disso eacute que um uacutenico neurocircnio natildeo produz um sinalamplo o suciente para ser detectado sozinho Portanto o sinal soacute pode ser medidoconsiderando uma regiatildeo com vaacuterios neurocircnios Juntos levam aproximadamente 03s paraacumular a energia suciente para serem detectados [17] Como saber entatildeo quandoos neurocircnios tem sinal sucientemente forte para ser detectado Atraveacutes de dois preacute-requisitos

1 Muitos neurocircnios devem ser acionados ao mesmo tempo

2 Eles precisam estar alinhados em paralelo

6

Figura 23 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectadospelo eletrodo do capacete [42]

A ativaccedilatildeo de neurotransmissores do axocircnio terminal para as sinapses ocorre quandoum potencial de accedilatildeo atinge o m de um axocircnio Existem dois tipos de neurotransmissores

1 o primeiro causa um inuxo

2 o segundo causa um escoamento de iacuteons positivos

Assim os neurotransmissores ativados conseguem inuenciar a mudanccedila de potencialdo neurocircnio subsequente agrave sinapse mudando a permeabilidade da sua membrana Onome dado a essa mudanccedila de potencial do neurocircnio subsequente eacute potencial poacutes-sinaacutepticoexcitatoacuterio quando for uma mudanccedila positiva e potencial poacutes-sinaacuteptico inibitoacuterio quandonegativa Esses potenciais duram em meacutedia 100ms e variam sua amplitude entre 50e 100mV Na Figura 24 podemos ver um salto quacircntico de potencial de accedilatildeo de umneurocircnio para sinal de EEG

7

Figura 24 Eletroencefalograa claacutessica (Adapatado de [9])

22 Artefatos bioloacutegicos

Artefatos bioloacutegicos satildeo atividades causadas pelo sujeito mas natildeo ligadas agrave atividadecerebral de fato Agraves vezes satildeo chamados de artefatos sioloacutegicos [2] Os artefatos tecircm atendecircncia de ter uma amplitude mais forte que a de um sinal de EEG puro sendo assimum componente signicante obtido no EEG pois pode vir a atrapalhar sua mediccedilatildeotornando-a ineciente Eacute considerado como um ruiacutedo Desse modo se torna necessaacuteriofazer consideraccedilotildees especiais sobre os artefatos

221 Eletrooculograma

O EOG eacute um tipo de artefato relacionado agrave estrutura ocular do indiviacuteduo Ele vemdo movimento dos olhos para os lados ou para cima e das possiacuteveis piscadas pois essesmovimentos causam alteraccedilatildeo do campo eleacutetrico ocular Na Figura 25 mostramos doque eacute feito o olho humano

8

Figura 25 Estrutura do olho e suas partes nomeadas (Adaptado de [3])

O campo eleacutetrico do olho se origina da diferenccedila de potencial causada entre a coacuterneaque eacute carregada positivamente e a retina que eacute carregada negativamente Um esquemade como funciona esse dipolo pode ser visto na Figura 26

Figura 26 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3])

Como funciona a mediccedilatildeo do EOG

Dois eletrodos satildeo posicionados em cada lado esquerdo e direito de cada olho Amovimentaccedilatildeo dos olhos vai causar a diferenccedila de potencial fazendo a coacuternea carregadapositivamente car mais proacutexima de um dos eletrodos e consequentemente a retina car-regada negativamente car mais distante de um dos eletrodos Entatildeo cresce a tensatildeoeleacutetrica de um lado e decresce do outro O piscar de olhos provoca uma diferenccedila de po-tencial e tambeacutem inuencia o sinal de EEG A Figura 27 mostra como satildeo posicionadosesses eletrodos para medir a diferenccedila de potencial

9

Figura 27 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5])

No trabalho em questatildeo natildeo foi possiacutevel medir a diferenccedila de potencial ocasionadapelo movimentar dos olhos portanto esse eacute um ruiacutedo que natildeo foi tratado

222 Eletrocardiograma

Um exame bastante interessante eacute o eletrocardiograma (ECG) A cada batida docoraccedilatildeo o electrocardioacutegrafo grava a diferenccedila de potencial no muacutesculo cardiacuteaco causadapela sua despolarizaccedilatildeo Ou seja ele registra a variaccedilatildeo eleacutetrica da atividade do coraccedilatildeo

Essa atividade do coraccedilatildeo pode vir a atrapalhar os sinais de EEG como pode-se notarna Figura 28 Em azul tem-se o sinal do EEG puro antes de ser retirado o ECG Emverde tem-se o sinal do ECG e em vermelho notamos a diferenccedila que acontece no sinalde EEG quando o artefato ECG eacute retirado

Figura 28 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada doartefato de ECG (Adaptado de [35])

223 Eletromiograa

O sinal eletromiograacuteco (EMG) eacute a soma algeacutebrica de todos os sinais detectados emcerta aacuterea podendo ser afetado por propriedades musculares anatocircmicas e sioloacutegicasassim como pelo controle do sistema nervoso perifeacuterico e a instrumentaccedilatildeo utilizada paraa aquisiccedilatildeo dos sinais [13] O eletromioacutegrafo eacute um aparelho que adquire o sinal EMG

10

possibilitando o exame da eletromiograa (ver Figura 29) Ele fornece informaccedilotildees rele-vantes sobre a ativaccedilatildeo da musculatura envolvida em um movimento e a intensidade desua ativaccedilatildeo Qualquer movimentaccedilatildeo ou contraccedilatildeo dos muacutesculos da face afeta o sinal deEEG como por exemplo apertar os dentes contrair a testa etc

Figura 29 Sinal de EMG [2])

23 Artefatos teacutecnicos

Satildeo os tambeacutem chamados artefatos extrasioloacutegicos Natildeo dependem do ser humanomas sim do ambiente em que o usuaacuterio se encontra ou dos possiacuteveis eventos que ocorram

231 Frequecircncia de 5060 Hz

Um dos artefatos mais comuns existentes eacute o da interferecircncia causada pela correnteeleacutetrica Estatildeo indicadas duas frequecircncias pois a faixa normal de interferecircncia variade local para local no mundo Por exemplo na Ameacuterica do Norte eacute em torno de 60Hzenquanto na maioria dos outros paiacuteses ca em torno de 50 Hz Para tratar deste artefatousualmente coloca-se um ltro notch nessa faixa de frequecircncia e em seus respectivosharmocircnicos como por exemplo para o Brasil 60Hz 120Hz 180Hz etc

232 Artefato do amplicador

Eacute uma interferecircncia com pequena amplitude mas que tambeacutem merece alguma atenccedilatildeoNa Figura 210 em azul temos o sinal do EEG e em verde pode-se notar a pequenaamplitude do artefato gerado pelo amplicador

11

Figura 210 Artefato do amplicador analisado em graacuteco (Adaptado de [34])

24 Imageacutetica Motora

Depois de entender melhor como funciona todo o processo por traacutes da mediccedilatildeo doEEG torna-se interessante saber como isso se relaciona agrave praacutetica produzindo ao naldo processo o efeito esperado que eacute o deslocamento virtual de objetos usando apenas ainterpretaccedilatildeo dos sinais gerados pelo pensamento

O centro desse processo eacute a imageacutetica motora Ela pode ser denida como um estadodinacircmico durante a imaginaccedilatildeo que um indiviacuteduo faz de uma determinada accedilatildeo intenci-onada Este fenocircmeno implica que o sujeito sinta que realmente estaacute realizando a accedilatildeoimaginada sicamente seja ela de movimentar um braccedilo ou talvez empurrar um objeto[10]

A imageacutetica motora vem mostrando vaacuterios bons resultados em sua aplicaccedilatildeo Comoexemplo temos a ocorrecircncia do fenocircmeno na teacutecnica de aprendizado motor Os atletasutilizam a imaginaccedilatildeo de movimentos que seratildeo executados nos exerciacutecios de fato assimtrazem benefiacutecios no aquecimento relaxamento e concentraccedilatildeo [38] Outro exemplo in-teressante eacute o dos muacutesicos que ao utilizaacute-la possibilitam o aprendizado de partituras demaneira mais eciente [20]

Segundo o siologista sueco Hesslow [15] para o ceacuterebro a simulaccedilatildeo hipoteacutetica deestados consiste em trecircs premissas fundamentais

1 Imaginaccedilatildeo de accedilotildees ativa as estruturas motoras do ceacuterebro de tal forma que elasremetam agrave atividade que ocorre durante uma accedilatildeo normal de movimento entretantosem nenhum movimento evidente

2 Imaginaccedilatildeo de percepccedilatildeo a imaginaccedilatildeo de estar percebendo uma atividade eacute omesmo que realmente estar percebendo algo Em sua essecircncia a atividade de per-cepccedilatildeo eacute gerada pelo proacuteprio ceacuterebro em depreciaccedilatildeo de estiacutemulos externos

12

Letra Localizaccedilatildeo

A Loacutebulo da orelhaC CentralP ParietalF FrontalFp Frontal polarO OcipitalT Temporal

Tabela 21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22])

3 Antecipaccedilatildeo uma accedilatildeo simulada pode provocar a atividade perceptiva que remeteagravequela que deveria ter acontecido se a accedilatildeo fosse executada de fato

Devido a esses fatores a simulaccedilatildeo mental pode ser utilizada como uma ferramentarepresentativa para o entendimento da mente Isso permite que os diversos estados mentaispossam ser explorados possibilitando relacionar as aacutereas especiacutecas do ceacuterebro que satildeomais ativadas devido a certos sentimentos desejos ou talvez intenccedilotildees Assim a simulaccedilatildeomental contribui para o avanccedilo em diversas aacutereas tais como a psicologia e outras

25 Emotiv Epoc

A m de analisar a imaginaccedilatildeo e os efeitos que ela tem sobre o nosso corpo e mentecientistas atraveacutes da busca constante de avanccedilos chegaram agrave utilizaccedilatildeo de um capaceteneural para mediccedilatildeo efetiva de estiacutemulos demonstrados pela captaccedilatildeo do sinal de EEGComo ilustrado na Figura 11a o custo-benefiacutecio de capacete que melhor atendeu o grupono projeto de pesquisa foi o do Emotiv Epoc Seus detalhes de organizaccedilatildeo e funcionamentosatildeo mostrados a seguir

251 Posicionamento de eletrodos

A Federaccedilatildeo Internacional de Neuropsicologia recomenda a utilizaccedilatildeo do modelo 10-20para ateacute 21 eletrodos [11] de acordo com a Figura 211 Nesse modelo todos os eletrodosse encontram a uma distacircncia de seus eletrodos vizinhos de 10 ou 20 da distacircncia totalda cabeccedila A cada posiccedilatildeo eacute dado um identicador de uma ou duas letras e um nuacutemerode acordo com sua proximidade a alguma parte do ceacuterebro (veja tabela 21) Nuacutemerospares estatildeo agrave direita e nuacutemeros iacutempares agrave esquerda

A sociedade Americana de EEG sugeriu nos seus guias [16] que novos eletrodos sejamcolocados de maneira equidistante dos 21 eletrodos jaacute denidos na Figura 212 caso sejanecessaacuterio um nuacutemero maior de eletrodos

13

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 12: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

45 Cenaacuterio de aquisiccedilatildeo de sinais 2846 Cenaacuterio de treinamento 2947 Cenaacuterio de treinamento do ltro espacial CSP 3048 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM 3149 Cenaacuterio de treinamento do classicador usando o ltro CSP 32410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utiliza-

ccedilatildeo da barra azul como feedback 33411 Cenaacuterio de utilizaccedilatildeo online 33412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP 34413 Cenaacuterio de replay 35414 Cenaacuterio de caacutelculo de porcentagem de acertos 36415 Cenaacuterio de caacutelculo de porcentagem de acertos 36416 Jogo implementado 37

ix

Lista de Tabelas

11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvan-tagens (Adapatado de [19]) 2

21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22]) 13

31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8] 21

51 Tabela de porcentagem de acertos dos diferentes classicadores citados 40

x

Capiacutetulo 1

Introduccedilatildeo

11 Contextualizaccedilatildeo

No ano de 1929 Hans Berger [4] psiquiatra alematildeo publicou as primeiras paacuteginas deseu trabalho o eletroencefalograma (EEG) [22] Ele foi o primeiro a identicar ondas alfa(8-12 Hz) que satildeo atividades oscilatoacuterias no ceacuterebro Antes do registro dessas atividadesno ceacuterebro humano pesquisas jaacute haviam sido feitas em animais Entretanto foi apoacutesHans Berger que a quantidade de pesquisa feita sobre este oacutergatildeo cresceu bastante

O EEG eacute o registro da sincronizaccedilatildeo de milhares de sinais de neurocircnios em conjuntoDessa forma a localizaccedilatildeo exata da atividade de um neurocircnio eacute impossiacutevel de ser feitasomente com o EEG No entanto o registro de EEG associado a outras formas de registropermite resolver esse impasse Na Tabela 11 satildeo mostradas outras formas de se mensuraratividades neurais e suas respectivas desvantagens Devido ao alto custo envolvido nastecnologias apresentadas na Tabela 11 e principalmente agraves desvantagens como por exem-plo a exposiccedilatildeo agrave radiaccedilatildeo que outras tecnologias exigem o EEG tem sido o sinal maisutilizado para o desenvolvimento de pesquisa em Interface Ceacuterebro Computador (ICC)Aleacutem de ter bom custo-benefiacutecio sua utilizaccedilatildeo eacute bastante praacutetica

A ICC eacute uma teacutecnica que tenta interpretar os sinais eleacutetricos da superfiacutecie corticalou subcortical do ceacuterebro para interagir com o ambiente externo por meio de maacutequinasbuscando assim interpretar pensamentos referentes a movimento sem a necessidade domovimento real Por exemplo se um indiviacuteduo utilizador de ICC quiser mover o mousede um computador a tecnologia entenderia isso e realizaacute-la-ia sem o movimento das matildeosdo humano Essa tecnologia eacute um meio de comunicaccedilatildeo alternativo uacutetil para muitosobjetivos entre eles a possibilidade de ajudar um paciente impossibilitado de atividadesmotoras como um tetrapleacutegico a movimentar objetos

Para que seja possiacutevel a aplicaccedilatildeo da tecnologia ICC eacute necessaacuterio um aparelho que sejacapaz de captar as ondas emitidas pelo ceacuterebro um capacete neural Diante da grandequantidade de aparelhos o que se destacou foi o Emotiv Epoc como se pode observar deacordo com a Figura 11 A Figura 11a mostra alguns equipamentos com suas respectivasfaixas de preccedilo e algumas de suas funcionalidades Para efeitos de comparaccedilatildeo a Figura11b exibe a nota recebida por cada equipamento devido ao custo-benefiacutecio O destaquedo capacete Emotiv Epoc se deve ao melhor custo-benefiacutecio e agrave praticidade de utilizaccedilatildeoEle se acopla facilmente agrave cabeccedila e sua manipulaccedilatildeo eacute muito simples

1

Tecnologia Desvantagem

Electrocorticogram (ECoG) Exige cirurgiaMagneto-encephalography (MEG) Alto custoComputed Tomography (CT) Somente dados anatocircmicos

e exposiccedilatildeo agrave radiaccedilatildeoSingle Photon Emission Computerized Tomography (SPECT) Exposiccedilatildeo agrave radiaccedilatildeoPositron Emission Tomography (PET) Exposiccedilatildeo agrave radiaccedilatildeoMagnetic Resonance Imaging (MRI) CaraFunctional Magnetic Resonance Imaging (fMRI) CaraEvent-Related Optical Signal (EROS) Cara

Tabela 11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvanta-gens (Adapatado de [19])

(a) Capacetes neurais de baixo custo (b) Relaccedilatildeo custo-benefiacutecio

Figura 11 Preccedilos e comparaccedilotildees de custo-benefiacutecio de capacetes apenas dos mais baratos(0-1000 doacutelares) (Adapatado de [37])

2

O primeiro passo no processo eacute a aquisiccedilatildeo dos sinais cerebrais Para isso na literaturahaacute diversas teacutecnicas que se dividem em trecircs categorias as invasivas as semi-invasivas eas natildeo invasivas cada uma com suas devidas vantagens e desvantagens

A utilizaccedilatildeo da teacutecnica invasiva eacute uma oacutetima opccedilatildeo quando o foco eacute na captaccedilatildeo dedados com o miacutenimo de ruiacutedo Essa teacutecnica possibilita a diminuiccedilatildeo de ruiacutedos apesarde possuir como desvantagem a cirurgia que eacute necessaacuteria Nesta o cracircnio do indiviacuteduo eacuteaberto e eacute colocado no ceacuterebro eletrodos para captar os dados Tambeacutem como desvantagempode-se citar a faacutecil oxidaccedilatildeo dos eletrodos quando entram em contato com o sangue Ateacutecnica semi-invasiva eacute um pouco menos invasiva do que a primeira No entanto tambeacutemeacute necessaacuterio cirurgia Apesar disso a aquisiccedilatildeo de sinalruiacutedo eacute boa Jaacute a terceira teacutecnicacitada a natildeo-invasiva eacute a pior das trecircs em questatildeo de robustez ao ruiacutedo poreacutem eacute a demais faacutecil adaptaccedilatildeo agrave qualquer indiviacuteduo que tenha intenccedilatildeo de utilizaacute-la

Devido agraves caracteristicas destacadas este trabalho utiliza a teacutecnica natildeo invasiva comofonte de captaccedilatildeo de dados de EEG Com o uso do capacete Emotiv Epoc essa teacutecnicaeacute possibilitada De posse do aparelho comeccedilamos entatildeo fazendo essa aquisiccedilatildeo O se-gundo passo eacute o processamento do sinal e o reconhecimento de padrotildees atraveacutes do uso declassicadores Por uacuteltimo eacute necessaacuterio associar os dados obtidos agrave intenccedilatildeo do indiviacuteduo

Os estudos sobre ICC procuram adaptaacute-la ao uso no cotidiano Para avanccedilar nessaaacuterea eacute necessaacuterio o desenvolvimento de sistemas com elevada acuraacutecia e praticidade Paraaumentar a qualidade dos sistemas busca-se a implementaccedilatildeo de novos algoritmos para aaquisiccedilatildeo e a classicaccedilatildeo de sinais A cada dia novas aplicaccedilotildees estatildeo surgindo baseadasnessa tecnologia tanto de uso biomeacutedico quanto para jogos e outras aacutereas

12 Foco do trabalho

A imageacutetica motora eacute o processo mental no qual o indiviacuteduo imagina um determinadomovimento como por exemplo movimentar o braccedilo esquerdo ou direito A intenccedilatildeodo movimento que foi mandada pelo ceacuterebro eacute analisada e classicada de acordo como membro correspondente O resultado pode ser usado como comando para diversasaplicaccedilotildees como por exemplo o controle de um jogo

Dentro de ICC seraacute trabalhado o desenvolvimento de uma aplicaccedilatildeo online que utilizaduas classes de movimentos com as matildeos para a direita e a outra para a esquerda Estaaplicaccedilatildeo seraacute o jogo de ping-pong

13 Objetivo

Este trabalho possui dois objetivos principais O primeiro consiste em fazer um estudorelacionado agrave imageacutetica motora incluindo um levantamento dos trabalhos existentes naliteratura de forma a sumarizaacute-los O segundo objetivo eacute propor implementar e analisaruma aplicaccedilotildees que realiza a interaccedilatildeo ceacuterebro computador atraveacutes da imageacutetica motorao jogo de Ping Pong

3

14 Justicativa

O tema abordado neste trabalho eacute de grande relevacircncia social A ICC pode ser usadacomo soluccedilatildeo para a inclusccedilatildeo social de indiviacuteduos com diversos tipos de patologias quelimitam seus movimentos Aleacutem disso a ICC pode ser usada como uma alternativa paraa interface de jogos que representam um mercado de bilhotildees de doacutelares Pode-se porexemplo desenvolver melhorias para seres humanos decientes como a construccedilatildeo debraccedilos biocircnicos com o uso da imageacutetica motora ou talvez o controle de uma cadeira derodas para um indiviacuteduo tetrapleacutegico Tambeacutem se justica o estudo do tema am defacilitar tarefas mais simples como realizar uma ligaccedilatildeo atraveacutes de um telefone celular

15 Organizaccedilatildeo dos Capiacutetulos

O presente trabalho eacute dividio em seis capiacutetulos e anexos No primeiro capiacutetulo satildeoapresentados a contextualizaccedilatildeo do tema foco do trabalho objetivo e justicativas OCapiacutetulo 2 abrange os conceitos baacutesicos necessaacuterios ao entendimento da proposta do tra-balho O capiacutetulo seguinte conteacutem a descriccedilatildeo das trabalhos anteriores relacionados agraveICC encontradas na literatura O quarto capiacutetulo descreve o processo de desenvolvimentoda aplicaccedilatildeo propostas desde a idealizaccedilatildeo ateacute o desenvolvimento de fato O Capiacutetulo5 apresenta a descriccedilatildeo da fase de testes da implantaccedilatildeo da aplicaccedilatildeo bem como dosresultados obtidos desse processo com posterior anaacutelise deles O uacuteltimo eacute o capiacutetulo con-cludente sobre os resultados obtidos e que conta com sugestotildees de trabalhos futuros Porm o texto ainda conta com anexos

4

Capiacutetulo 2

Fundamentaccedilatildeo

21 A Biologia por traacutes do EEG

Estaacute entendido pela bibliograa que o sinal de EEG eacute bastante uacutetil e com ele conse-guimos produzir diversos trabalhos mas para entender o que se passa por traacutes do EEGde onde esse sinal vem e como eacute tratado temos que procurar nos interar melhor com abiologia do neurocircnio sua estrutura e funccedilatildeo

211 Estrutura e funccedilatildeo do neurocircnio

Como se pode ver na Figura 21 o neurocircnio eacute constituiacutedo de

1 Corpo celular

2 Dendritos

3 Axocircnio

Mas como ocorre a comunicaccedilatildeo entre duas ceacutelulas Qual o meio fiacutesico Os dendritossatildeo responsaacuteveis por receber sinais e passaacute-los para um axocircnio vide Figura 21 que remetea mesma para os outros neurocircnios

Figura 21 Estrutura do neurocircnio (Adaptado de [39])

5

212 Como funciona a troca de potenciais

Com o sinal recebido o neurocircnio tenta passar os impulsos eleacutetricos agrave frente atraveacutesde troca de potenciais a membrana celular envolta ao neurocircnio eacute carregada de iacuteons desoacutedio (Na+) e potaacutessio (K+) que cam se movimentando para dentro e fora da ceacutelulaInicialmente o interior da ceacutelula se encontra a -70mV em comparaccedilatildeo ao lado externoQuando algum sinal eacute recebido pelo dendrito ela ca menos negativa Se essa despola-rizaccedilatildeo chegar a -55mV a membrana se abre para iacuteons de soacutedio que entram na ceacutelulaIsto faz com que ela que cada vez menos negativa [40] Quando a ceacutelula atingir umpotencial positivo ela se abre para a saiacuteda de iacuteons de potaacutessio que agora causam a raacutepidarepolarizaccedilatildeo da membrana que chega a um potencial menor que -70mV como podemosver na Figura 22

Figura 22 Potencial de accedilatildeo de um neurocircnio [40]

213 O sinal de EEG

Os eletrodos do capacete Emotiv Epoc natildeo conseguem captar sinais de amplitudemuito pequena Este capacete e os demais relacionados apenas conseguem analisar sinaisde maior amplitude e a consequecircncia disso eacute que um uacutenico neurocircnio natildeo produz um sinalamplo o suciente para ser detectado sozinho Portanto o sinal soacute pode ser medidoconsiderando uma regiatildeo com vaacuterios neurocircnios Juntos levam aproximadamente 03s paraacumular a energia suciente para serem detectados [17] Como saber entatildeo quandoos neurocircnios tem sinal sucientemente forte para ser detectado Atraveacutes de dois preacute-requisitos

1 Muitos neurocircnios devem ser acionados ao mesmo tempo

2 Eles precisam estar alinhados em paralelo

6

Figura 23 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectadospelo eletrodo do capacete [42]

A ativaccedilatildeo de neurotransmissores do axocircnio terminal para as sinapses ocorre quandoum potencial de accedilatildeo atinge o m de um axocircnio Existem dois tipos de neurotransmissores

1 o primeiro causa um inuxo

2 o segundo causa um escoamento de iacuteons positivos

Assim os neurotransmissores ativados conseguem inuenciar a mudanccedila de potencialdo neurocircnio subsequente agrave sinapse mudando a permeabilidade da sua membrana Onome dado a essa mudanccedila de potencial do neurocircnio subsequente eacute potencial poacutes-sinaacutepticoexcitatoacuterio quando for uma mudanccedila positiva e potencial poacutes-sinaacuteptico inibitoacuterio quandonegativa Esses potenciais duram em meacutedia 100ms e variam sua amplitude entre 50e 100mV Na Figura 24 podemos ver um salto quacircntico de potencial de accedilatildeo de umneurocircnio para sinal de EEG

7

Figura 24 Eletroencefalograa claacutessica (Adapatado de [9])

22 Artefatos bioloacutegicos

Artefatos bioloacutegicos satildeo atividades causadas pelo sujeito mas natildeo ligadas agrave atividadecerebral de fato Agraves vezes satildeo chamados de artefatos sioloacutegicos [2] Os artefatos tecircm atendecircncia de ter uma amplitude mais forte que a de um sinal de EEG puro sendo assimum componente signicante obtido no EEG pois pode vir a atrapalhar sua mediccedilatildeotornando-a ineciente Eacute considerado como um ruiacutedo Desse modo se torna necessaacuteriofazer consideraccedilotildees especiais sobre os artefatos

221 Eletrooculograma

O EOG eacute um tipo de artefato relacionado agrave estrutura ocular do indiviacuteduo Ele vemdo movimento dos olhos para os lados ou para cima e das possiacuteveis piscadas pois essesmovimentos causam alteraccedilatildeo do campo eleacutetrico ocular Na Figura 25 mostramos doque eacute feito o olho humano

8

Figura 25 Estrutura do olho e suas partes nomeadas (Adaptado de [3])

O campo eleacutetrico do olho se origina da diferenccedila de potencial causada entre a coacuterneaque eacute carregada positivamente e a retina que eacute carregada negativamente Um esquemade como funciona esse dipolo pode ser visto na Figura 26

Figura 26 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3])

Como funciona a mediccedilatildeo do EOG

Dois eletrodos satildeo posicionados em cada lado esquerdo e direito de cada olho Amovimentaccedilatildeo dos olhos vai causar a diferenccedila de potencial fazendo a coacuternea carregadapositivamente car mais proacutexima de um dos eletrodos e consequentemente a retina car-regada negativamente car mais distante de um dos eletrodos Entatildeo cresce a tensatildeoeleacutetrica de um lado e decresce do outro O piscar de olhos provoca uma diferenccedila de po-tencial e tambeacutem inuencia o sinal de EEG A Figura 27 mostra como satildeo posicionadosesses eletrodos para medir a diferenccedila de potencial

9

Figura 27 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5])

No trabalho em questatildeo natildeo foi possiacutevel medir a diferenccedila de potencial ocasionadapelo movimentar dos olhos portanto esse eacute um ruiacutedo que natildeo foi tratado

222 Eletrocardiograma

Um exame bastante interessante eacute o eletrocardiograma (ECG) A cada batida docoraccedilatildeo o electrocardioacutegrafo grava a diferenccedila de potencial no muacutesculo cardiacuteaco causadapela sua despolarizaccedilatildeo Ou seja ele registra a variaccedilatildeo eleacutetrica da atividade do coraccedilatildeo

Essa atividade do coraccedilatildeo pode vir a atrapalhar os sinais de EEG como pode-se notarna Figura 28 Em azul tem-se o sinal do EEG puro antes de ser retirado o ECG Emverde tem-se o sinal do ECG e em vermelho notamos a diferenccedila que acontece no sinalde EEG quando o artefato ECG eacute retirado

Figura 28 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada doartefato de ECG (Adaptado de [35])

223 Eletromiograa

O sinal eletromiograacuteco (EMG) eacute a soma algeacutebrica de todos os sinais detectados emcerta aacuterea podendo ser afetado por propriedades musculares anatocircmicas e sioloacutegicasassim como pelo controle do sistema nervoso perifeacuterico e a instrumentaccedilatildeo utilizada paraa aquisiccedilatildeo dos sinais [13] O eletromioacutegrafo eacute um aparelho que adquire o sinal EMG

10

possibilitando o exame da eletromiograa (ver Figura 29) Ele fornece informaccedilotildees rele-vantes sobre a ativaccedilatildeo da musculatura envolvida em um movimento e a intensidade desua ativaccedilatildeo Qualquer movimentaccedilatildeo ou contraccedilatildeo dos muacutesculos da face afeta o sinal deEEG como por exemplo apertar os dentes contrair a testa etc

Figura 29 Sinal de EMG [2])

23 Artefatos teacutecnicos

Satildeo os tambeacutem chamados artefatos extrasioloacutegicos Natildeo dependem do ser humanomas sim do ambiente em que o usuaacuterio se encontra ou dos possiacuteveis eventos que ocorram

231 Frequecircncia de 5060 Hz

Um dos artefatos mais comuns existentes eacute o da interferecircncia causada pela correnteeleacutetrica Estatildeo indicadas duas frequecircncias pois a faixa normal de interferecircncia variade local para local no mundo Por exemplo na Ameacuterica do Norte eacute em torno de 60Hzenquanto na maioria dos outros paiacuteses ca em torno de 50 Hz Para tratar deste artefatousualmente coloca-se um ltro notch nessa faixa de frequecircncia e em seus respectivosharmocircnicos como por exemplo para o Brasil 60Hz 120Hz 180Hz etc

232 Artefato do amplicador

Eacute uma interferecircncia com pequena amplitude mas que tambeacutem merece alguma atenccedilatildeoNa Figura 210 em azul temos o sinal do EEG e em verde pode-se notar a pequenaamplitude do artefato gerado pelo amplicador

11

Figura 210 Artefato do amplicador analisado em graacuteco (Adaptado de [34])

24 Imageacutetica Motora

Depois de entender melhor como funciona todo o processo por traacutes da mediccedilatildeo doEEG torna-se interessante saber como isso se relaciona agrave praacutetica produzindo ao naldo processo o efeito esperado que eacute o deslocamento virtual de objetos usando apenas ainterpretaccedilatildeo dos sinais gerados pelo pensamento

O centro desse processo eacute a imageacutetica motora Ela pode ser denida como um estadodinacircmico durante a imaginaccedilatildeo que um indiviacuteduo faz de uma determinada accedilatildeo intenci-onada Este fenocircmeno implica que o sujeito sinta que realmente estaacute realizando a accedilatildeoimaginada sicamente seja ela de movimentar um braccedilo ou talvez empurrar um objeto[10]

A imageacutetica motora vem mostrando vaacuterios bons resultados em sua aplicaccedilatildeo Comoexemplo temos a ocorrecircncia do fenocircmeno na teacutecnica de aprendizado motor Os atletasutilizam a imaginaccedilatildeo de movimentos que seratildeo executados nos exerciacutecios de fato assimtrazem benefiacutecios no aquecimento relaxamento e concentraccedilatildeo [38] Outro exemplo in-teressante eacute o dos muacutesicos que ao utilizaacute-la possibilitam o aprendizado de partituras demaneira mais eciente [20]

Segundo o siologista sueco Hesslow [15] para o ceacuterebro a simulaccedilatildeo hipoteacutetica deestados consiste em trecircs premissas fundamentais

1 Imaginaccedilatildeo de accedilotildees ativa as estruturas motoras do ceacuterebro de tal forma que elasremetam agrave atividade que ocorre durante uma accedilatildeo normal de movimento entretantosem nenhum movimento evidente

2 Imaginaccedilatildeo de percepccedilatildeo a imaginaccedilatildeo de estar percebendo uma atividade eacute omesmo que realmente estar percebendo algo Em sua essecircncia a atividade de per-cepccedilatildeo eacute gerada pelo proacuteprio ceacuterebro em depreciaccedilatildeo de estiacutemulos externos

12

Letra Localizaccedilatildeo

A Loacutebulo da orelhaC CentralP ParietalF FrontalFp Frontal polarO OcipitalT Temporal

Tabela 21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22])

3 Antecipaccedilatildeo uma accedilatildeo simulada pode provocar a atividade perceptiva que remeteagravequela que deveria ter acontecido se a accedilatildeo fosse executada de fato

Devido a esses fatores a simulaccedilatildeo mental pode ser utilizada como uma ferramentarepresentativa para o entendimento da mente Isso permite que os diversos estados mentaispossam ser explorados possibilitando relacionar as aacutereas especiacutecas do ceacuterebro que satildeomais ativadas devido a certos sentimentos desejos ou talvez intenccedilotildees Assim a simulaccedilatildeomental contribui para o avanccedilo em diversas aacutereas tais como a psicologia e outras

25 Emotiv Epoc

A m de analisar a imaginaccedilatildeo e os efeitos que ela tem sobre o nosso corpo e mentecientistas atraveacutes da busca constante de avanccedilos chegaram agrave utilizaccedilatildeo de um capaceteneural para mediccedilatildeo efetiva de estiacutemulos demonstrados pela captaccedilatildeo do sinal de EEGComo ilustrado na Figura 11a o custo-benefiacutecio de capacete que melhor atendeu o grupono projeto de pesquisa foi o do Emotiv Epoc Seus detalhes de organizaccedilatildeo e funcionamentosatildeo mostrados a seguir

251 Posicionamento de eletrodos

A Federaccedilatildeo Internacional de Neuropsicologia recomenda a utilizaccedilatildeo do modelo 10-20para ateacute 21 eletrodos [11] de acordo com a Figura 211 Nesse modelo todos os eletrodosse encontram a uma distacircncia de seus eletrodos vizinhos de 10 ou 20 da distacircncia totalda cabeccedila A cada posiccedilatildeo eacute dado um identicador de uma ou duas letras e um nuacutemerode acordo com sua proximidade a alguma parte do ceacuterebro (veja tabela 21) Nuacutemerospares estatildeo agrave direita e nuacutemeros iacutempares agrave esquerda

A sociedade Americana de EEG sugeriu nos seus guias [16] que novos eletrodos sejamcolocados de maneira equidistante dos 21 eletrodos jaacute denidos na Figura 212 caso sejanecessaacuterio um nuacutemero maior de eletrodos

13

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 13: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Lista de Tabelas

11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvan-tagens (Adapatado de [19]) 2

21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22]) 13

31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8] 21

51 Tabela de porcentagem de acertos dos diferentes classicadores citados 40

x

Capiacutetulo 1

Introduccedilatildeo

11 Contextualizaccedilatildeo

No ano de 1929 Hans Berger [4] psiquiatra alematildeo publicou as primeiras paacuteginas deseu trabalho o eletroencefalograma (EEG) [22] Ele foi o primeiro a identicar ondas alfa(8-12 Hz) que satildeo atividades oscilatoacuterias no ceacuterebro Antes do registro dessas atividadesno ceacuterebro humano pesquisas jaacute haviam sido feitas em animais Entretanto foi apoacutesHans Berger que a quantidade de pesquisa feita sobre este oacutergatildeo cresceu bastante

O EEG eacute o registro da sincronizaccedilatildeo de milhares de sinais de neurocircnios em conjuntoDessa forma a localizaccedilatildeo exata da atividade de um neurocircnio eacute impossiacutevel de ser feitasomente com o EEG No entanto o registro de EEG associado a outras formas de registropermite resolver esse impasse Na Tabela 11 satildeo mostradas outras formas de se mensuraratividades neurais e suas respectivas desvantagens Devido ao alto custo envolvido nastecnologias apresentadas na Tabela 11 e principalmente agraves desvantagens como por exem-plo a exposiccedilatildeo agrave radiaccedilatildeo que outras tecnologias exigem o EEG tem sido o sinal maisutilizado para o desenvolvimento de pesquisa em Interface Ceacuterebro Computador (ICC)Aleacutem de ter bom custo-benefiacutecio sua utilizaccedilatildeo eacute bastante praacutetica

A ICC eacute uma teacutecnica que tenta interpretar os sinais eleacutetricos da superfiacutecie corticalou subcortical do ceacuterebro para interagir com o ambiente externo por meio de maacutequinasbuscando assim interpretar pensamentos referentes a movimento sem a necessidade domovimento real Por exemplo se um indiviacuteduo utilizador de ICC quiser mover o mousede um computador a tecnologia entenderia isso e realizaacute-la-ia sem o movimento das matildeosdo humano Essa tecnologia eacute um meio de comunicaccedilatildeo alternativo uacutetil para muitosobjetivos entre eles a possibilidade de ajudar um paciente impossibilitado de atividadesmotoras como um tetrapleacutegico a movimentar objetos

Para que seja possiacutevel a aplicaccedilatildeo da tecnologia ICC eacute necessaacuterio um aparelho que sejacapaz de captar as ondas emitidas pelo ceacuterebro um capacete neural Diante da grandequantidade de aparelhos o que se destacou foi o Emotiv Epoc como se pode observar deacordo com a Figura 11 A Figura 11a mostra alguns equipamentos com suas respectivasfaixas de preccedilo e algumas de suas funcionalidades Para efeitos de comparaccedilatildeo a Figura11b exibe a nota recebida por cada equipamento devido ao custo-benefiacutecio O destaquedo capacete Emotiv Epoc se deve ao melhor custo-benefiacutecio e agrave praticidade de utilizaccedilatildeoEle se acopla facilmente agrave cabeccedila e sua manipulaccedilatildeo eacute muito simples

1

Tecnologia Desvantagem

Electrocorticogram (ECoG) Exige cirurgiaMagneto-encephalography (MEG) Alto custoComputed Tomography (CT) Somente dados anatocircmicos

e exposiccedilatildeo agrave radiaccedilatildeoSingle Photon Emission Computerized Tomography (SPECT) Exposiccedilatildeo agrave radiaccedilatildeoPositron Emission Tomography (PET) Exposiccedilatildeo agrave radiaccedilatildeoMagnetic Resonance Imaging (MRI) CaraFunctional Magnetic Resonance Imaging (fMRI) CaraEvent-Related Optical Signal (EROS) Cara

Tabela 11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvanta-gens (Adapatado de [19])

(a) Capacetes neurais de baixo custo (b) Relaccedilatildeo custo-benefiacutecio

Figura 11 Preccedilos e comparaccedilotildees de custo-benefiacutecio de capacetes apenas dos mais baratos(0-1000 doacutelares) (Adapatado de [37])

2

O primeiro passo no processo eacute a aquisiccedilatildeo dos sinais cerebrais Para isso na literaturahaacute diversas teacutecnicas que se dividem em trecircs categorias as invasivas as semi-invasivas eas natildeo invasivas cada uma com suas devidas vantagens e desvantagens

A utilizaccedilatildeo da teacutecnica invasiva eacute uma oacutetima opccedilatildeo quando o foco eacute na captaccedilatildeo dedados com o miacutenimo de ruiacutedo Essa teacutecnica possibilita a diminuiccedilatildeo de ruiacutedos apesarde possuir como desvantagem a cirurgia que eacute necessaacuteria Nesta o cracircnio do indiviacuteduo eacuteaberto e eacute colocado no ceacuterebro eletrodos para captar os dados Tambeacutem como desvantagempode-se citar a faacutecil oxidaccedilatildeo dos eletrodos quando entram em contato com o sangue Ateacutecnica semi-invasiva eacute um pouco menos invasiva do que a primeira No entanto tambeacutemeacute necessaacuterio cirurgia Apesar disso a aquisiccedilatildeo de sinalruiacutedo eacute boa Jaacute a terceira teacutecnicacitada a natildeo-invasiva eacute a pior das trecircs em questatildeo de robustez ao ruiacutedo poreacutem eacute a demais faacutecil adaptaccedilatildeo agrave qualquer indiviacuteduo que tenha intenccedilatildeo de utilizaacute-la

Devido agraves caracteristicas destacadas este trabalho utiliza a teacutecnica natildeo invasiva comofonte de captaccedilatildeo de dados de EEG Com o uso do capacete Emotiv Epoc essa teacutecnicaeacute possibilitada De posse do aparelho comeccedilamos entatildeo fazendo essa aquisiccedilatildeo O se-gundo passo eacute o processamento do sinal e o reconhecimento de padrotildees atraveacutes do uso declassicadores Por uacuteltimo eacute necessaacuterio associar os dados obtidos agrave intenccedilatildeo do indiviacuteduo

Os estudos sobre ICC procuram adaptaacute-la ao uso no cotidiano Para avanccedilar nessaaacuterea eacute necessaacuterio o desenvolvimento de sistemas com elevada acuraacutecia e praticidade Paraaumentar a qualidade dos sistemas busca-se a implementaccedilatildeo de novos algoritmos para aaquisiccedilatildeo e a classicaccedilatildeo de sinais A cada dia novas aplicaccedilotildees estatildeo surgindo baseadasnessa tecnologia tanto de uso biomeacutedico quanto para jogos e outras aacutereas

12 Foco do trabalho

A imageacutetica motora eacute o processo mental no qual o indiviacuteduo imagina um determinadomovimento como por exemplo movimentar o braccedilo esquerdo ou direito A intenccedilatildeodo movimento que foi mandada pelo ceacuterebro eacute analisada e classicada de acordo como membro correspondente O resultado pode ser usado como comando para diversasaplicaccedilotildees como por exemplo o controle de um jogo

Dentro de ICC seraacute trabalhado o desenvolvimento de uma aplicaccedilatildeo online que utilizaduas classes de movimentos com as matildeos para a direita e a outra para a esquerda Estaaplicaccedilatildeo seraacute o jogo de ping-pong

13 Objetivo

Este trabalho possui dois objetivos principais O primeiro consiste em fazer um estudorelacionado agrave imageacutetica motora incluindo um levantamento dos trabalhos existentes naliteratura de forma a sumarizaacute-los O segundo objetivo eacute propor implementar e analisaruma aplicaccedilotildees que realiza a interaccedilatildeo ceacuterebro computador atraveacutes da imageacutetica motorao jogo de Ping Pong

3

14 Justicativa

O tema abordado neste trabalho eacute de grande relevacircncia social A ICC pode ser usadacomo soluccedilatildeo para a inclusccedilatildeo social de indiviacuteduos com diversos tipos de patologias quelimitam seus movimentos Aleacutem disso a ICC pode ser usada como uma alternativa paraa interface de jogos que representam um mercado de bilhotildees de doacutelares Pode-se porexemplo desenvolver melhorias para seres humanos decientes como a construccedilatildeo debraccedilos biocircnicos com o uso da imageacutetica motora ou talvez o controle de uma cadeira derodas para um indiviacuteduo tetrapleacutegico Tambeacutem se justica o estudo do tema am defacilitar tarefas mais simples como realizar uma ligaccedilatildeo atraveacutes de um telefone celular

15 Organizaccedilatildeo dos Capiacutetulos

O presente trabalho eacute dividio em seis capiacutetulos e anexos No primeiro capiacutetulo satildeoapresentados a contextualizaccedilatildeo do tema foco do trabalho objetivo e justicativas OCapiacutetulo 2 abrange os conceitos baacutesicos necessaacuterios ao entendimento da proposta do tra-balho O capiacutetulo seguinte conteacutem a descriccedilatildeo das trabalhos anteriores relacionados agraveICC encontradas na literatura O quarto capiacutetulo descreve o processo de desenvolvimentoda aplicaccedilatildeo propostas desde a idealizaccedilatildeo ateacute o desenvolvimento de fato O Capiacutetulo5 apresenta a descriccedilatildeo da fase de testes da implantaccedilatildeo da aplicaccedilatildeo bem como dosresultados obtidos desse processo com posterior anaacutelise deles O uacuteltimo eacute o capiacutetulo con-cludente sobre os resultados obtidos e que conta com sugestotildees de trabalhos futuros Porm o texto ainda conta com anexos

4

Capiacutetulo 2

Fundamentaccedilatildeo

21 A Biologia por traacutes do EEG

Estaacute entendido pela bibliograa que o sinal de EEG eacute bastante uacutetil e com ele conse-guimos produzir diversos trabalhos mas para entender o que se passa por traacutes do EEGde onde esse sinal vem e como eacute tratado temos que procurar nos interar melhor com abiologia do neurocircnio sua estrutura e funccedilatildeo

211 Estrutura e funccedilatildeo do neurocircnio

Como se pode ver na Figura 21 o neurocircnio eacute constituiacutedo de

1 Corpo celular

2 Dendritos

3 Axocircnio

Mas como ocorre a comunicaccedilatildeo entre duas ceacutelulas Qual o meio fiacutesico Os dendritossatildeo responsaacuteveis por receber sinais e passaacute-los para um axocircnio vide Figura 21 que remetea mesma para os outros neurocircnios

Figura 21 Estrutura do neurocircnio (Adaptado de [39])

5

212 Como funciona a troca de potenciais

Com o sinal recebido o neurocircnio tenta passar os impulsos eleacutetricos agrave frente atraveacutesde troca de potenciais a membrana celular envolta ao neurocircnio eacute carregada de iacuteons desoacutedio (Na+) e potaacutessio (K+) que cam se movimentando para dentro e fora da ceacutelulaInicialmente o interior da ceacutelula se encontra a -70mV em comparaccedilatildeo ao lado externoQuando algum sinal eacute recebido pelo dendrito ela ca menos negativa Se essa despola-rizaccedilatildeo chegar a -55mV a membrana se abre para iacuteons de soacutedio que entram na ceacutelulaIsto faz com que ela que cada vez menos negativa [40] Quando a ceacutelula atingir umpotencial positivo ela se abre para a saiacuteda de iacuteons de potaacutessio que agora causam a raacutepidarepolarizaccedilatildeo da membrana que chega a um potencial menor que -70mV como podemosver na Figura 22

Figura 22 Potencial de accedilatildeo de um neurocircnio [40]

213 O sinal de EEG

Os eletrodos do capacete Emotiv Epoc natildeo conseguem captar sinais de amplitudemuito pequena Este capacete e os demais relacionados apenas conseguem analisar sinaisde maior amplitude e a consequecircncia disso eacute que um uacutenico neurocircnio natildeo produz um sinalamplo o suciente para ser detectado sozinho Portanto o sinal soacute pode ser medidoconsiderando uma regiatildeo com vaacuterios neurocircnios Juntos levam aproximadamente 03s paraacumular a energia suciente para serem detectados [17] Como saber entatildeo quandoos neurocircnios tem sinal sucientemente forte para ser detectado Atraveacutes de dois preacute-requisitos

1 Muitos neurocircnios devem ser acionados ao mesmo tempo

2 Eles precisam estar alinhados em paralelo

6

Figura 23 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectadospelo eletrodo do capacete [42]

A ativaccedilatildeo de neurotransmissores do axocircnio terminal para as sinapses ocorre quandoum potencial de accedilatildeo atinge o m de um axocircnio Existem dois tipos de neurotransmissores

1 o primeiro causa um inuxo

2 o segundo causa um escoamento de iacuteons positivos

Assim os neurotransmissores ativados conseguem inuenciar a mudanccedila de potencialdo neurocircnio subsequente agrave sinapse mudando a permeabilidade da sua membrana Onome dado a essa mudanccedila de potencial do neurocircnio subsequente eacute potencial poacutes-sinaacutepticoexcitatoacuterio quando for uma mudanccedila positiva e potencial poacutes-sinaacuteptico inibitoacuterio quandonegativa Esses potenciais duram em meacutedia 100ms e variam sua amplitude entre 50e 100mV Na Figura 24 podemos ver um salto quacircntico de potencial de accedilatildeo de umneurocircnio para sinal de EEG

7

Figura 24 Eletroencefalograa claacutessica (Adapatado de [9])

22 Artefatos bioloacutegicos

Artefatos bioloacutegicos satildeo atividades causadas pelo sujeito mas natildeo ligadas agrave atividadecerebral de fato Agraves vezes satildeo chamados de artefatos sioloacutegicos [2] Os artefatos tecircm atendecircncia de ter uma amplitude mais forte que a de um sinal de EEG puro sendo assimum componente signicante obtido no EEG pois pode vir a atrapalhar sua mediccedilatildeotornando-a ineciente Eacute considerado como um ruiacutedo Desse modo se torna necessaacuteriofazer consideraccedilotildees especiais sobre os artefatos

221 Eletrooculograma

O EOG eacute um tipo de artefato relacionado agrave estrutura ocular do indiviacuteduo Ele vemdo movimento dos olhos para os lados ou para cima e das possiacuteveis piscadas pois essesmovimentos causam alteraccedilatildeo do campo eleacutetrico ocular Na Figura 25 mostramos doque eacute feito o olho humano

8

Figura 25 Estrutura do olho e suas partes nomeadas (Adaptado de [3])

O campo eleacutetrico do olho se origina da diferenccedila de potencial causada entre a coacuterneaque eacute carregada positivamente e a retina que eacute carregada negativamente Um esquemade como funciona esse dipolo pode ser visto na Figura 26

Figura 26 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3])

Como funciona a mediccedilatildeo do EOG

Dois eletrodos satildeo posicionados em cada lado esquerdo e direito de cada olho Amovimentaccedilatildeo dos olhos vai causar a diferenccedila de potencial fazendo a coacuternea carregadapositivamente car mais proacutexima de um dos eletrodos e consequentemente a retina car-regada negativamente car mais distante de um dos eletrodos Entatildeo cresce a tensatildeoeleacutetrica de um lado e decresce do outro O piscar de olhos provoca uma diferenccedila de po-tencial e tambeacutem inuencia o sinal de EEG A Figura 27 mostra como satildeo posicionadosesses eletrodos para medir a diferenccedila de potencial

9

Figura 27 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5])

No trabalho em questatildeo natildeo foi possiacutevel medir a diferenccedila de potencial ocasionadapelo movimentar dos olhos portanto esse eacute um ruiacutedo que natildeo foi tratado

222 Eletrocardiograma

Um exame bastante interessante eacute o eletrocardiograma (ECG) A cada batida docoraccedilatildeo o electrocardioacutegrafo grava a diferenccedila de potencial no muacutesculo cardiacuteaco causadapela sua despolarizaccedilatildeo Ou seja ele registra a variaccedilatildeo eleacutetrica da atividade do coraccedilatildeo

Essa atividade do coraccedilatildeo pode vir a atrapalhar os sinais de EEG como pode-se notarna Figura 28 Em azul tem-se o sinal do EEG puro antes de ser retirado o ECG Emverde tem-se o sinal do ECG e em vermelho notamos a diferenccedila que acontece no sinalde EEG quando o artefato ECG eacute retirado

Figura 28 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada doartefato de ECG (Adaptado de [35])

223 Eletromiograa

O sinal eletromiograacuteco (EMG) eacute a soma algeacutebrica de todos os sinais detectados emcerta aacuterea podendo ser afetado por propriedades musculares anatocircmicas e sioloacutegicasassim como pelo controle do sistema nervoso perifeacuterico e a instrumentaccedilatildeo utilizada paraa aquisiccedilatildeo dos sinais [13] O eletromioacutegrafo eacute um aparelho que adquire o sinal EMG

10

possibilitando o exame da eletromiograa (ver Figura 29) Ele fornece informaccedilotildees rele-vantes sobre a ativaccedilatildeo da musculatura envolvida em um movimento e a intensidade desua ativaccedilatildeo Qualquer movimentaccedilatildeo ou contraccedilatildeo dos muacutesculos da face afeta o sinal deEEG como por exemplo apertar os dentes contrair a testa etc

Figura 29 Sinal de EMG [2])

23 Artefatos teacutecnicos

Satildeo os tambeacutem chamados artefatos extrasioloacutegicos Natildeo dependem do ser humanomas sim do ambiente em que o usuaacuterio se encontra ou dos possiacuteveis eventos que ocorram

231 Frequecircncia de 5060 Hz

Um dos artefatos mais comuns existentes eacute o da interferecircncia causada pela correnteeleacutetrica Estatildeo indicadas duas frequecircncias pois a faixa normal de interferecircncia variade local para local no mundo Por exemplo na Ameacuterica do Norte eacute em torno de 60Hzenquanto na maioria dos outros paiacuteses ca em torno de 50 Hz Para tratar deste artefatousualmente coloca-se um ltro notch nessa faixa de frequecircncia e em seus respectivosharmocircnicos como por exemplo para o Brasil 60Hz 120Hz 180Hz etc

232 Artefato do amplicador

Eacute uma interferecircncia com pequena amplitude mas que tambeacutem merece alguma atenccedilatildeoNa Figura 210 em azul temos o sinal do EEG e em verde pode-se notar a pequenaamplitude do artefato gerado pelo amplicador

11

Figura 210 Artefato do amplicador analisado em graacuteco (Adaptado de [34])

24 Imageacutetica Motora

Depois de entender melhor como funciona todo o processo por traacutes da mediccedilatildeo doEEG torna-se interessante saber como isso se relaciona agrave praacutetica produzindo ao naldo processo o efeito esperado que eacute o deslocamento virtual de objetos usando apenas ainterpretaccedilatildeo dos sinais gerados pelo pensamento

O centro desse processo eacute a imageacutetica motora Ela pode ser denida como um estadodinacircmico durante a imaginaccedilatildeo que um indiviacuteduo faz de uma determinada accedilatildeo intenci-onada Este fenocircmeno implica que o sujeito sinta que realmente estaacute realizando a accedilatildeoimaginada sicamente seja ela de movimentar um braccedilo ou talvez empurrar um objeto[10]

A imageacutetica motora vem mostrando vaacuterios bons resultados em sua aplicaccedilatildeo Comoexemplo temos a ocorrecircncia do fenocircmeno na teacutecnica de aprendizado motor Os atletasutilizam a imaginaccedilatildeo de movimentos que seratildeo executados nos exerciacutecios de fato assimtrazem benefiacutecios no aquecimento relaxamento e concentraccedilatildeo [38] Outro exemplo in-teressante eacute o dos muacutesicos que ao utilizaacute-la possibilitam o aprendizado de partituras demaneira mais eciente [20]

Segundo o siologista sueco Hesslow [15] para o ceacuterebro a simulaccedilatildeo hipoteacutetica deestados consiste em trecircs premissas fundamentais

1 Imaginaccedilatildeo de accedilotildees ativa as estruturas motoras do ceacuterebro de tal forma que elasremetam agrave atividade que ocorre durante uma accedilatildeo normal de movimento entretantosem nenhum movimento evidente

2 Imaginaccedilatildeo de percepccedilatildeo a imaginaccedilatildeo de estar percebendo uma atividade eacute omesmo que realmente estar percebendo algo Em sua essecircncia a atividade de per-cepccedilatildeo eacute gerada pelo proacuteprio ceacuterebro em depreciaccedilatildeo de estiacutemulos externos

12

Letra Localizaccedilatildeo

A Loacutebulo da orelhaC CentralP ParietalF FrontalFp Frontal polarO OcipitalT Temporal

Tabela 21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22])

3 Antecipaccedilatildeo uma accedilatildeo simulada pode provocar a atividade perceptiva que remeteagravequela que deveria ter acontecido se a accedilatildeo fosse executada de fato

Devido a esses fatores a simulaccedilatildeo mental pode ser utilizada como uma ferramentarepresentativa para o entendimento da mente Isso permite que os diversos estados mentaispossam ser explorados possibilitando relacionar as aacutereas especiacutecas do ceacuterebro que satildeomais ativadas devido a certos sentimentos desejos ou talvez intenccedilotildees Assim a simulaccedilatildeomental contribui para o avanccedilo em diversas aacutereas tais como a psicologia e outras

25 Emotiv Epoc

A m de analisar a imaginaccedilatildeo e os efeitos que ela tem sobre o nosso corpo e mentecientistas atraveacutes da busca constante de avanccedilos chegaram agrave utilizaccedilatildeo de um capaceteneural para mediccedilatildeo efetiva de estiacutemulos demonstrados pela captaccedilatildeo do sinal de EEGComo ilustrado na Figura 11a o custo-benefiacutecio de capacete que melhor atendeu o grupono projeto de pesquisa foi o do Emotiv Epoc Seus detalhes de organizaccedilatildeo e funcionamentosatildeo mostrados a seguir

251 Posicionamento de eletrodos

A Federaccedilatildeo Internacional de Neuropsicologia recomenda a utilizaccedilatildeo do modelo 10-20para ateacute 21 eletrodos [11] de acordo com a Figura 211 Nesse modelo todos os eletrodosse encontram a uma distacircncia de seus eletrodos vizinhos de 10 ou 20 da distacircncia totalda cabeccedila A cada posiccedilatildeo eacute dado um identicador de uma ou duas letras e um nuacutemerode acordo com sua proximidade a alguma parte do ceacuterebro (veja tabela 21) Nuacutemerospares estatildeo agrave direita e nuacutemeros iacutempares agrave esquerda

A sociedade Americana de EEG sugeriu nos seus guias [16] que novos eletrodos sejamcolocados de maneira equidistante dos 21 eletrodos jaacute denidos na Figura 212 caso sejanecessaacuterio um nuacutemero maior de eletrodos

13

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 14: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Capiacutetulo 1

Introduccedilatildeo

11 Contextualizaccedilatildeo

No ano de 1929 Hans Berger [4] psiquiatra alematildeo publicou as primeiras paacuteginas deseu trabalho o eletroencefalograma (EEG) [22] Ele foi o primeiro a identicar ondas alfa(8-12 Hz) que satildeo atividades oscilatoacuterias no ceacuterebro Antes do registro dessas atividadesno ceacuterebro humano pesquisas jaacute haviam sido feitas em animais Entretanto foi apoacutesHans Berger que a quantidade de pesquisa feita sobre este oacutergatildeo cresceu bastante

O EEG eacute o registro da sincronizaccedilatildeo de milhares de sinais de neurocircnios em conjuntoDessa forma a localizaccedilatildeo exata da atividade de um neurocircnio eacute impossiacutevel de ser feitasomente com o EEG No entanto o registro de EEG associado a outras formas de registropermite resolver esse impasse Na Tabela 11 satildeo mostradas outras formas de se mensuraratividades neurais e suas respectivas desvantagens Devido ao alto custo envolvido nastecnologias apresentadas na Tabela 11 e principalmente agraves desvantagens como por exem-plo a exposiccedilatildeo agrave radiaccedilatildeo que outras tecnologias exigem o EEG tem sido o sinal maisutilizado para o desenvolvimento de pesquisa em Interface Ceacuterebro Computador (ICC)Aleacutem de ter bom custo-benefiacutecio sua utilizaccedilatildeo eacute bastante praacutetica

A ICC eacute uma teacutecnica que tenta interpretar os sinais eleacutetricos da superfiacutecie corticalou subcortical do ceacuterebro para interagir com o ambiente externo por meio de maacutequinasbuscando assim interpretar pensamentos referentes a movimento sem a necessidade domovimento real Por exemplo se um indiviacuteduo utilizador de ICC quiser mover o mousede um computador a tecnologia entenderia isso e realizaacute-la-ia sem o movimento das matildeosdo humano Essa tecnologia eacute um meio de comunicaccedilatildeo alternativo uacutetil para muitosobjetivos entre eles a possibilidade de ajudar um paciente impossibilitado de atividadesmotoras como um tetrapleacutegico a movimentar objetos

Para que seja possiacutevel a aplicaccedilatildeo da tecnologia ICC eacute necessaacuterio um aparelho que sejacapaz de captar as ondas emitidas pelo ceacuterebro um capacete neural Diante da grandequantidade de aparelhos o que se destacou foi o Emotiv Epoc como se pode observar deacordo com a Figura 11 A Figura 11a mostra alguns equipamentos com suas respectivasfaixas de preccedilo e algumas de suas funcionalidades Para efeitos de comparaccedilatildeo a Figura11b exibe a nota recebida por cada equipamento devido ao custo-benefiacutecio O destaquedo capacete Emotiv Epoc se deve ao melhor custo-benefiacutecio e agrave praticidade de utilizaccedilatildeoEle se acopla facilmente agrave cabeccedila e sua manipulaccedilatildeo eacute muito simples

1

Tecnologia Desvantagem

Electrocorticogram (ECoG) Exige cirurgiaMagneto-encephalography (MEG) Alto custoComputed Tomography (CT) Somente dados anatocircmicos

e exposiccedilatildeo agrave radiaccedilatildeoSingle Photon Emission Computerized Tomography (SPECT) Exposiccedilatildeo agrave radiaccedilatildeoPositron Emission Tomography (PET) Exposiccedilatildeo agrave radiaccedilatildeoMagnetic Resonance Imaging (MRI) CaraFunctional Magnetic Resonance Imaging (fMRI) CaraEvent-Related Optical Signal (EROS) Cara

Tabela 11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvanta-gens (Adapatado de [19])

(a) Capacetes neurais de baixo custo (b) Relaccedilatildeo custo-benefiacutecio

Figura 11 Preccedilos e comparaccedilotildees de custo-benefiacutecio de capacetes apenas dos mais baratos(0-1000 doacutelares) (Adapatado de [37])

2

O primeiro passo no processo eacute a aquisiccedilatildeo dos sinais cerebrais Para isso na literaturahaacute diversas teacutecnicas que se dividem em trecircs categorias as invasivas as semi-invasivas eas natildeo invasivas cada uma com suas devidas vantagens e desvantagens

A utilizaccedilatildeo da teacutecnica invasiva eacute uma oacutetima opccedilatildeo quando o foco eacute na captaccedilatildeo dedados com o miacutenimo de ruiacutedo Essa teacutecnica possibilita a diminuiccedilatildeo de ruiacutedos apesarde possuir como desvantagem a cirurgia que eacute necessaacuteria Nesta o cracircnio do indiviacuteduo eacuteaberto e eacute colocado no ceacuterebro eletrodos para captar os dados Tambeacutem como desvantagempode-se citar a faacutecil oxidaccedilatildeo dos eletrodos quando entram em contato com o sangue Ateacutecnica semi-invasiva eacute um pouco menos invasiva do que a primeira No entanto tambeacutemeacute necessaacuterio cirurgia Apesar disso a aquisiccedilatildeo de sinalruiacutedo eacute boa Jaacute a terceira teacutecnicacitada a natildeo-invasiva eacute a pior das trecircs em questatildeo de robustez ao ruiacutedo poreacutem eacute a demais faacutecil adaptaccedilatildeo agrave qualquer indiviacuteduo que tenha intenccedilatildeo de utilizaacute-la

Devido agraves caracteristicas destacadas este trabalho utiliza a teacutecnica natildeo invasiva comofonte de captaccedilatildeo de dados de EEG Com o uso do capacete Emotiv Epoc essa teacutecnicaeacute possibilitada De posse do aparelho comeccedilamos entatildeo fazendo essa aquisiccedilatildeo O se-gundo passo eacute o processamento do sinal e o reconhecimento de padrotildees atraveacutes do uso declassicadores Por uacuteltimo eacute necessaacuterio associar os dados obtidos agrave intenccedilatildeo do indiviacuteduo

Os estudos sobre ICC procuram adaptaacute-la ao uso no cotidiano Para avanccedilar nessaaacuterea eacute necessaacuterio o desenvolvimento de sistemas com elevada acuraacutecia e praticidade Paraaumentar a qualidade dos sistemas busca-se a implementaccedilatildeo de novos algoritmos para aaquisiccedilatildeo e a classicaccedilatildeo de sinais A cada dia novas aplicaccedilotildees estatildeo surgindo baseadasnessa tecnologia tanto de uso biomeacutedico quanto para jogos e outras aacutereas

12 Foco do trabalho

A imageacutetica motora eacute o processo mental no qual o indiviacuteduo imagina um determinadomovimento como por exemplo movimentar o braccedilo esquerdo ou direito A intenccedilatildeodo movimento que foi mandada pelo ceacuterebro eacute analisada e classicada de acordo como membro correspondente O resultado pode ser usado como comando para diversasaplicaccedilotildees como por exemplo o controle de um jogo

Dentro de ICC seraacute trabalhado o desenvolvimento de uma aplicaccedilatildeo online que utilizaduas classes de movimentos com as matildeos para a direita e a outra para a esquerda Estaaplicaccedilatildeo seraacute o jogo de ping-pong

13 Objetivo

Este trabalho possui dois objetivos principais O primeiro consiste em fazer um estudorelacionado agrave imageacutetica motora incluindo um levantamento dos trabalhos existentes naliteratura de forma a sumarizaacute-los O segundo objetivo eacute propor implementar e analisaruma aplicaccedilotildees que realiza a interaccedilatildeo ceacuterebro computador atraveacutes da imageacutetica motorao jogo de Ping Pong

3

14 Justicativa

O tema abordado neste trabalho eacute de grande relevacircncia social A ICC pode ser usadacomo soluccedilatildeo para a inclusccedilatildeo social de indiviacuteduos com diversos tipos de patologias quelimitam seus movimentos Aleacutem disso a ICC pode ser usada como uma alternativa paraa interface de jogos que representam um mercado de bilhotildees de doacutelares Pode-se porexemplo desenvolver melhorias para seres humanos decientes como a construccedilatildeo debraccedilos biocircnicos com o uso da imageacutetica motora ou talvez o controle de uma cadeira derodas para um indiviacuteduo tetrapleacutegico Tambeacutem se justica o estudo do tema am defacilitar tarefas mais simples como realizar uma ligaccedilatildeo atraveacutes de um telefone celular

15 Organizaccedilatildeo dos Capiacutetulos

O presente trabalho eacute dividio em seis capiacutetulos e anexos No primeiro capiacutetulo satildeoapresentados a contextualizaccedilatildeo do tema foco do trabalho objetivo e justicativas OCapiacutetulo 2 abrange os conceitos baacutesicos necessaacuterios ao entendimento da proposta do tra-balho O capiacutetulo seguinte conteacutem a descriccedilatildeo das trabalhos anteriores relacionados agraveICC encontradas na literatura O quarto capiacutetulo descreve o processo de desenvolvimentoda aplicaccedilatildeo propostas desde a idealizaccedilatildeo ateacute o desenvolvimento de fato O Capiacutetulo5 apresenta a descriccedilatildeo da fase de testes da implantaccedilatildeo da aplicaccedilatildeo bem como dosresultados obtidos desse processo com posterior anaacutelise deles O uacuteltimo eacute o capiacutetulo con-cludente sobre os resultados obtidos e que conta com sugestotildees de trabalhos futuros Porm o texto ainda conta com anexos

4

Capiacutetulo 2

Fundamentaccedilatildeo

21 A Biologia por traacutes do EEG

Estaacute entendido pela bibliograa que o sinal de EEG eacute bastante uacutetil e com ele conse-guimos produzir diversos trabalhos mas para entender o que se passa por traacutes do EEGde onde esse sinal vem e como eacute tratado temos que procurar nos interar melhor com abiologia do neurocircnio sua estrutura e funccedilatildeo

211 Estrutura e funccedilatildeo do neurocircnio

Como se pode ver na Figura 21 o neurocircnio eacute constituiacutedo de

1 Corpo celular

2 Dendritos

3 Axocircnio

Mas como ocorre a comunicaccedilatildeo entre duas ceacutelulas Qual o meio fiacutesico Os dendritossatildeo responsaacuteveis por receber sinais e passaacute-los para um axocircnio vide Figura 21 que remetea mesma para os outros neurocircnios

Figura 21 Estrutura do neurocircnio (Adaptado de [39])

5

212 Como funciona a troca de potenciais

Com o sinal recebido o neurocircnio tenta passar os impulsos eleacutetricos agrave frente atraveacutesde troca de potenciais a membrana celular envolta ao neurocircnio eacute carregada de iacuteons desoacutedio (Na+) e potaacutessio (K+) que cam se movimentando para dentro e fora da ceacutelulaInicialmente o interior da ceacutelula se encontra a -70mV em comparaccedilatildeo ao lado externoQuando algum sinal eacute recebido pelo dendrito ela ca menos negativa Se essa despola-rizaccedilatildeo chegar a -55mV a membrana se abre para iacuteons de soacutedio que entram na ceacutelulaIsto faz com que ela que cada vez menos negativa [40] Quando a ceacutelula atingir umpotencial positivo ela se abre para a saiacuteda de iacuteons de potaacutessio que agora causam a raacutepidarepolarizaccedilatildeo da membrana que chega a um potencial menor que -70mV como podemosver na Figura 22

Figura 22 Potencial de accedilatildeo de um neurocircnio [40]

213 O sinal de EEG

Os eletrodos do capacete Emotiv Epoc natildeo conseguem captar sinais de amplitudemuito pequena Este capacete e os demais relacionados apenas conseguem analisar sinaisde maior amplitude e a consequecircncia disso eacute que um uacutenico neurocircnio natildeo produz um sinalamplo o suciente para ser detectado sozinho Portanto o sinal soacute pode ser medidoconsiderando uma regiatildeo com vaacuterios neurocircnios Juntos levam aproximadamente 03s paraacumular a energia suciente para serem detectados [17] Como saber entatildeo quandoos neurocircnios tem sinal sucientemente forte para ser detectado Atraveacutes de dois preacute-requisitos

1 Muitos neurocircnios devem ser acionados ao mesmo tempo

2 Eles precisam estar alinhados em paralelo

6

Figura 23 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectadospelo eletrodo do capacete [42]

A ativaccedilatildeo de neurotransmissores do axocircnio terminal para as sinapses ocorre quandoum potencial de accedilatildeo atinge o m de um axocircnio Existem dois tipos de neurotransmissores

1 o primeiro causa um inuxo

2 o segundo causa um escoamento de iacuteons positivos

Assim os neurotransmissores ativados conseguem inuenciar a mudanccedila de potencialdo neurocircnio subsequente agrave sinapse mudando a permeabilidade da sua membrana Onome dado a essa mudanccedila de potencial do neurocircnio subsequente eacute potencial poacutes-sinaacutepticoexcitatoacuterio quando for uma mudanccedila positiva e potencial poacutes-sinaacuteptico inibitoacuterio quandonegativa Esses potenciais duram em meacutedia 100ms e variam sua amplitude entre 50e 100mV Na Figura 24 podemos ver um salto quacircntico de potencial de accedilatildeo de umneurocircnio para sinal de EEG

7

Figura 24 Eletroencefalograa claacutessica (Adapatado de [9])

22 Artefatos bioloacutegicos

Artefatos bioloacutegicos satildeo atividades causadas pelo sujeito mas natildeo ligadas agrave atividadecerebral de fato Agraves vezes satildeo chamados de artefatos sioloacutegicos [2] Os artefatos tecircm atendecircncia de ter uma amplitude mais forte que a de um sinal de EEG puro sendo assimum componente signicante obtido no EEG pois pode vir a atrapalhar sua mediccedilatildeotornando-a ineciente Eacute considerado como um ruiacutedo Desse modo se torna necessaacuteriofazer consideraccedilotildees especiais sobre os artefatos

221 Eletrooculograma

O EOG eacute um tipo de artefato relacionado agrave estrutura ocular do indiviacuteduo Ele vemdo movimento dos olhos para os lados ou para cima e das possiacuteveis piscadas pois essesmovimentos causam alteraccedilatildeo do campo eleacutetrico ocular Na Figura 25 mostramos doque eacute feito o olho humano

8

Figura 25 Estrutura do olho e suas partes nomeadas (Adaptado de [3])

O campo eleacutetrico do olho se origina da diferenccedila de potencial causada entre a coacuterneaque eacute carregada positivamente e a retina que eacute carregada negativamente Um esquemade como funciona esse dipolo pode ser visto na Figura 26

Figura 26 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3])

Como funciona a mediccedilatildeo do EOG

Dois eletrodos satildeo posicionados em cada lado esquerdo e direito de cada olho Amovimentaccedilatildeo dos olhos vai causar a diferenccedila de potencial fazendo a coacuternea carregadapositivamente car mais proacutexima de um dos eletrodos e consequentemente a retina car-regada negativamente car mais distante de um dos eletrodos Entatildeo cresce a tensatildeoeleacutetrica de um lado e decresce do outro O piscar de olhos provoca uma diferenccedila de po-tencial e tambeacutem inuencia o sinal de EEG A Figura 27 mostra como satildeo posicionadosesses eletrodos para medir a diferenccedila de potencial

9

Figura 27 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5])

No trabalho em questatildeo natildeo foi possiacutevel medir a diferenccedila de potencial ocasionadapelo movimentar dos olhos portanto esse eacute um ruiacutedo que natildeo foi tratado

222 Eletrocardiograma

Um exame bastante interessante eacute o eletrocardiograma (ECG) A cada batida docoraccedilatildeo o electrocardioacutegrafo grava a diferenccedila de potencial no muacutesculo cardiacuteaco causadapela sua despolarizaccedilatildeo Ou seja ele registra a variaccedilatildeo eleacutetrica da atividade do coraccedilatildeo

Essa atividade do coraccedilatildeo pode vir a atrapalhar os sinais de EEG como pode-se notarna Figura 28 Em azul tem-se o sinal do EEG puro antes de ser retirado o ECG Emverde tem-se o sinal do ECG e em vermelho notamos a diferenccedila que acontece no sinalde EEG quando o artefato ECG eacute retirado

Figura 28 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada doartefato de ECG (Adaptado de [35])

223 Eletromiograa

O sinal eletromiograacuteco (EMG) eacute a soma algeacutebrica de todos os sinais detectados emcerta aacuterea podendo ser afetado por propriedades musculares anatocircmicas e sioloacutegicasassim como pelo controle do sistema nervoso perifeacuterico e a instrumentaccedilatildeo utilizada paraa aquisiccedilatildeo dos sinais [13] O eletromioacutegrafo eacute um aparelho que adquire o sinal EMG

10

possibilitando o exame da eletromiograa (ver Figura 29) Ele fornece informaccedilotildees rele-vantes sobre a ativaccedilatildeo da musculatura envolvida em um movimento e a intensidade desua ativaccedilatildeo Qualquer movimentaccedilatildeo ou contraccedilatildeo dos muacutesculos da face afeta o sinal deEEG como por exemplo apertar os dentes contrair a testa etc

Figura 29 Sinal de EMG [2])

23 Artefatos teacutecnicos

Satildeo os tambeacutem chamados artefatos extrasioloacutegicos Natildeo dependem do ser humanomas sim do ambiente em que o usuaacuterio se encontra ou dos possiacuteveis eventos que ocorram

231 Frequecircncia de 5060 Hz

Um dos artefatos mais comuns existentes eacute o da interferecircncia causada pela correnteeleacutetrica Estatildeo indicadas duas frequecircncias pois a faixa normal de interferecircncia variade local para local no mundo Por exemplo na Ameacuterica do Norte eacute em torno de 60Hzenquanto na maioria dos outros paiacuteses ca em torno de 50 Hz Para tratar deste artefatousualmente coloca-se um ltro notch nessa faixa de frequecircncia e em seus respectivosharmocircnicos como por exemplo para o Brasil 60Hz 120Hz 180Hz etc

232 Artefato do amplicador

Eacute uma interferecircncia com pequena amplitude mas que tambeacutem merece alguma atenccedilatildeoNa Figura 210 em azul temos o sinal do EEG e em verde pode-se notar a pequenaamplitude do artefato gerado pelo amplicador

11

Figura 210 Artefato do amplicador analisado em graacuteco (Adaptado de [34])

24 Imageacutetica Motora

Depois de entender melhor como funciona todo o processo por traacutes da mediccedilatildeo doEEG torna-se interessante saber como isso se relaciona agrave praacutetica produzindo ao naldo processo o efeito esperado que eacute o deslocamento virtual de objetos usando apenas ainterpretaccedilatildeo dos sinais gerados pelo pensamento

O centro desse processo eacute a imageacutetica motora Ela pode ser denida como um estadodinacircmico durante a imaginaccedilatildeo que um indiviacuteduo faz de uma determinada accedilatildeo intenci-onada Este fenocircmeno implica que o sujeito sinta que realmente estaacute realizando a accedilatildeoimaginada sicamente seja ela de movimentar um braccedilo ou talvez empurrar um objeto[10]

A imageacutetica motora vem mostrando vaacuterios bons resultados em sua aplicaccedilatildeo Comoexemplo temos a ocorrecircncia do fenocircmeno na teacutecnica de aprendizado motor Os atletasutilizam a imaginaccedilatildeo de movimentos que seratildeo executados nos exerciacutecios de fato assimtrazem benefiacutecios no aquecimento relaxamento e concentraccedilatildeo [38] Outro exemplo in-teressante eacute o dos muacutesicos que ao utilizaacute-la possibilitam o aprendizado de partituras demaneira mais eciente [20]

Segundo o siologista sueco Hesslow [15] para o ceacuterebro a simulaccedilatildeo hipoteacutetica deestados consiste em trecircs premissas fundamentais

1 Imaginaccedilatildeo de accedilotildees ativa as estruturas motoras do ceacuterebro de tal forma que elasremetam agrave atividade que ocorre durante uma accedilatildeo normal de movimento entretantosem nenhum movimento evidente

2 Imaginaccedilatildeo de percepccedilatildeo a imaginaccedilatildeo de estar percebendo uma atividade eacute omesmo que realmente estar percebendo algo Em sua essecircncia a atividade de per-cepccedilatildeo eacute gerada pelo proacuteprio ceacuterebro em depreciaccedilatildeo de estiacutemulos externos

12

Letra Localizaccedilatildeo

A Loacutebulo da orelhaC CentralP ParietalF FrontalFp Frontal polarO OcipitalT Temporal

Tabela 21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22])

3 Antecipaccedilatildeo uma accedilatildeo simulada pode provocar a atividade perceptiva que remeteagravequela que deveria ter acontecido se a accedilatildeo fosse executada de fato

Devido a esses fatores a simulaccedilatildeo mental pode ser utilizada como uma ferramentarepresentativa para o entendimento da mente Isso permite que os diversos estados mentaispossam ser explorados possibilitando relacionar as aacutereas especiacutecas do ceacuterebro que satildeomais ativadas devido a certos sentimentos desejos ou talvez intenccedilotildees Assim a simulaccedilatildeomental contribui para o avanccedilo em diversas aacutereas tais como a psicologia e outras

25 Emotiv Epoc

A m de analisar a imaginaccedilatildeo e os efeitos que ela tem sobre o nosso corpo e mentecientistas atraveacutes da busca constante de avanccedilos chegaram agrave utilizaccedilatildeo de um capaceteneural para mediccedilatildeo efetiva de estiacutemulos demonstrados pela captaccedilatildeo do sinal de EEGComo ilustrado na Figura 11a o custo-benefiacutecio de capacete que melhor atendeu o grupono projeto de pesquisa foi o do Emotiv Epoc Seus detalhes de organizaccedilatildeo e funcionamentosatildeo mostrados a seguir

251 Posicionamento de eletrodos

A Federaccedilatildeo Internacional de Neuropsicologia recomenda a utilizaccedilatildeo do modelo 10-20para ateacute 21 eletrodos [11] de acordo com a Figura 211 Nesse modelo todos os eletrodosse encontram a uma distacircncia de seus eletrodos vizinhos de 10 ou 20 da distacircncia totalda cabeccedila A cada posiccedilatildeo eacute dado um identicador de uma ou duas letras e um nuacutemerode acordo com sua proximidade a alguma parte do ceacuterebro (veja tabela 21) Nuacutemerospares estatildeo agrave direita e nuacutemeros iacutempares agrave esquerda

A sociedade Americana de EEG sugeriu nos seus guias [16] que novos eletrodos sejamcolocados de maneira equidistante dos 21 eletrodos jaacute denidos na Figura 212 caso sejanecessaacuterio um nuacutemero maior de eletrodos

13

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 15: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Tecnologia Desvantagem

Electrocorticogram (ECoG) Exige cirurgiaMagneto-encephalography (MEG) Alto custoComputed Tomography (CT) Somente dados anatocircmicos

e exposiccedilatildeo agrave radiaccedilatildeoSingle Photon Emission Computerized Tomography (SPECT) Exposiccedilatildeo agrave radiaccedilatildeoPositron Emission Tomography (PET) Exposiccedilatildeo agrave radiaccedilatildeoMagnetic Resonance Imaging (MRI) CaraFunctional Magnetic Resonance Imaging (fMRI) CaraEvent-Related Optical Signal (EROS) Cara

Tabela 11 Possiacuteveis formas de aquisiccedilatildeo de sinais cerebrais e suas respectivas desvanta-gens (Adapatado de [19])

(a) Capacetes neurais de baixo custo (b) Relaccedilatildeo custo-benefiacutecio

Figura 11 Preccedilos e comparaccedilotildees de custo-benefiacutecio de capacetes apenas dos mais baratos(0-1000 doacutelares) (Adapatado de [37])

2

O primeiro passo no processo eacute a aquisiccedilatildeo dos sinais cerebrais Para isso na literaturahaacute diversas teacutecnicas que se dividem em trecircs categorias as invasivas as semi-invasivas eas natildeo invasivas cada uma com suas devidas vantagens e desvantagens

A utilizaccedilatildeo da teacutecnica invasiva eacute uma oacutetima opccedilatildeo quando o foco eacute na captaccedilatildeo dedados com o miacutenimo de ruiacutedo Essa teacutecnica possibilita a diminuiccedilatildeo de ruiacutedos apesarde possuir como desvantagem a cirurgia que eacute necessaacuteria Nesta o cracircnio do indiviacuteduo eacuteaberto e eacute colocado no ceacuterebro eletrodos para captar os dados Tambeacutem como desvantagempode-se citar a faacutecil oxidaccedilatildeo dos eletrodos quando entram em contato com o sangue Ateacutecnica semi-invasiva eacute um pouco menos invasiva do que a primeira No entanto tambeacutemeacute necessaacuterio cirurgia Apesar disso a aquisiccedilatildeo de sinalruiacutedo eacute boa Jaacute a terceira teacutecnicacitada a natildeo-invasiva eacute a pior das trecircs em questatildeo de robustez ao ruiacutedo poreacutem eacute a demais faacutecil adaptaccedilatildeo agrave qualquer indiviacuteduo que tenha intenccedilatildeo de utilizaacute-la

Devido agraves caracteristicas destacadas este trabalho utiliza a teacutecnica natildeo invasiva comofonte de captaccedilatildeo de dados de EEG Com o uso do capacete Emotiv Epoc essa teacutecnicaeacute possibilitada De posse do aparelho comeccedilamos entatildeo fazendo essa aquisiccedilatildeo O se-gundo passo eacute o processamento do sinal e o reconhecimento de padrotildees atraveacutes do uso declassicadores Por uacuteltimo eacute necessaacuterio associar os dados obtidos agrave intenccedilatildeo do indiviacuteduo

Os estudos sobre ICC procuram adaptaacute-la ao uso no cotidiano Para avanccedilar nessaaacuterea eacute necessaacuterio o desenvolvimento de sistemas com elevada acuraacutecia e praticidade Paraaumentar a qualidade dos sistemas busca-se a implementaccedilatildeo de novos algoritmos para aaquisiccedilatildeo e a classicaccedilatildeo de sinais A cada dia novas aplicaccedilotildees estatildeo surgindo baseadasnessa tecnologia tanto de uso biomeacutedico quanto para jogos e outras aacutereas

12 Foco do trabalho

A imageacutetica motora eacute o processo mental no qual o indiviacuteduo imagina um determinadomovimento como por exemplo movimentar o braccedilo esquerdo ou direito A intenccedilatildeodo movimento que foi mandada pelo ceacuterebro eacute analisada e classicada de acordo como membro correspondente O resultado pode ser usado como comando para diversasaplicaccedilotildees como por exemplo o controle de um jogo

Dentro de ICC seraacute trabalhado o desenvolvimento de uma aplicaccedilatildeo online que utilizaduas classes de movimentos com as matildeos para a direita e a outra para a esquerda Estaaplicaccedilatildeo seraacute o jogo de ping-pong

13 Objetivo

Este trabalho possui dois objetivos principais O primeiro consiste em fazer um estudorelacionado agrave imageacutetica motora incluindo um levantamento dos trabalhos existentes naliteratura de forma a sumarizaacute-los O segundo objetivo eacute propor implementar e analisaruma aplicaccedilotildees que realiza a interaccedilatildeo ceacuterebro computador atraveacutes da imageacutetica motorao jogo de Ping Pong

3

14 Justicativa

O tema abordado neste trabalho eacute de grande relevacircncia social A ICC pode ser usadacomo soluccedilatildeo para a inclusccedilatildeo social de indiviacuteduos com diversos tipos de patologias quelimitam seus movimentos Aleacutem disso a ICC pode ser usada como uma alternativa paraa interface de jogos que representam um mercado de bilhotildees de doacutelares Pode-se porexemplo desenvolver melhorias para seres humanos decientes como a construccedilatildeo debraccedilos biocircnicos com o uso da imageacutetica motora ou talvez o controle de uma cadeira derodas para um indiviacuteduo tetrapleacutegico Tambeacutem se justica o estudo do tema am defacilitar tarefas mais simples como realizar uma ligaccedilatildeo atraveacutes de um telefone celular

15 Organizaccedilatildeo dos Capiacutetulos

O presente trabalho eacute dividio em seis capiacutetulos e anexos No primeiro capiacutetulo satildeoapresentados a contextualizaccedilatildeo do tema foco do trabalho objetivo e justicativas OCapiacutetulo 2 abrange os conceitos baacutesicos necessaacuterios ao entendimento da proposta do tra-balho O capiacutetulo seguinte conteacutem a descriccedilatildeo das trabalhos anteriores relacionados agraveICC encontradas na literatura O quarto capiacutetulo descreve o processo de desenvolvimentoda aplicaccedilatildeo propostas desde a idealizaccedilatildeo ateacute o desenvolvimento de fato O Capiacutetulo5 apresenta a descriccedilatildeo da fase de testes da implantaccedilatildeo da aplicaccedilatildeo bem como dosresultados obtidos desse processo com posterior anaacutelise deles O uacuteltimo eacute o capiacutetulo con-cludente sobre os resultados obtidos e que conta com sugestotildees de trabalhos futuros Porm o texto ainda conta com anexos

4

Capiacutetulo 2

Fundamentaccedilatildeo

21 A Biologia por traacutes do EEG

Estaacute entendido pela bibliograa que o sinal de EEG eacute bastante uacutetil e com ele conse-guimos produzir diversos trabalhos mas para entender o que se passa por traacutes do EEGde onde esse sinal vem e como eacute tratado temos que procurar nos interar melhor com abiologia do neurocircnio sua estrutura e funccedilatildeo

211 Estrutura e funccedilatildeo do neurocircnio

Como se pode ver na Figura 21 o neurocircnio eacute constituiacutedo de

1 Corpo celular

2 Dendritos

3 Axocircnio

Mas como ocorre a comunicaccedilatildeo entre duas ceacutelulas Qual o meio fiacutesico Os dendritossatildeo responsaacuteveis por receber sinais e passaacute-los para um axocircnio vide Figura 21 que remetea mesma para os outros neurocircnios

Figura 21 Estrutura do neurocircnio (Adaptado de [39])

5

212 Como funciona a troca de potenciais

Com o sinal recebido o neurocircnio tenta passar os impulsos eleacutetricos agrave frente atraveacutesde troca de potenciais a membrana celular envolta ao neurocircnio eacute carregada de iacuteons desoacutedio (Na+) e potaacutessio (K+) que cam se movimentando para dentro e fora da ceacutelulaInicialmente o interior da ceacutelula se encontra a -70mV em comparaccedilatildeo ao lado externoQuando algum sinal eacute recebido pelo dendrito ela ca menos negativa Se essa despola-rizaccedilatildeo chegar a -55mV a membrana se abre para iacuteons de soacutedio que entram na ceacutelulaIsto faz com que ela que cada vez menos negativa [40] Quando a ceacutelula atingir umpotencial positivo ela se abre para a saiacuteda de iacuteons de potaacutessio que agora causam a raacutepidarepolarizaccedilatildeo da membrana que chega a um potencial menor que -70mV como podemosver na Figura 22

Figura 22 Potencial de accedilatildeo de um neurocircnio [40]

213 O sinal de EEG

Os eletrodos do capacete Emotiv Epoc natildeo conseguem captar sinais de amplitudemuito pequena Este capacete e os demais relacionados apenas conseguem analisar sinaisde maior amplitude e a consequecircncia disso eacute que um uacutenico neurocircnio natildeo produz um sinalamplo o suciente para ser detectado sozinho Portanto o sinal soacute pode ser medidoconsiderando uma regiatildeo com vaacuterios neurocircnios Juntos levam aproximadamente 03s paraacumular a energia suciente para serem detectados [17] Como saber entatildeo quandoos neurocircnios tem sinal sucientemente forte para ser detectado Atraveacutes de dois preacute-requisitos

1 Muitos neurocircnios devem ser acionados ao mesmo tempo

2 Eles precisam estar alinhados em paralelo

6

Figura 23 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectadospelo eletrodo do capacete [42]

A ativaccedilatildeo de neurotransmissores do axocircnio terminal para as sinapses ocorre quandoum potencial de accedilatildeo atinge o m de um axocircnio Existem dois tipos de neurotransmissores

1 o primeiro causa um inuxo

2 o segundo causa um escoamento de iacuteons positivos

Assim os neurotransmissores ativados conseguem inuenciar a mudanccedila de potencialdo neurocircnio subsequente agrave sinapse mudando a permeabilidade da sua membrana Onome dado a essa mudanccedila de potencial do neurocircnio subsequente eacute potencial poacutes-sinaacutepticoexcitatoacuterio quando for uma mudanccedila positiva e potencial poacutes-sinaacuteptico inibitoacuterio quandonegativa Esses potenciais duram em meacutedia 100ms e variam sua amplitude entre 50e 100mV Na Figura 24 podemos ver um salto quacircntico de potencial de accedilatildeo de umneurocircnio para sinal de EEG

7

Figura 24 Eletroencefalograa claacutessica (Adapatado de [9])

22 Artefatos bioloacutegicos

Artefatos bioloacutegicos satildeo atividades causadas pelo sujeito mas natildeo ligadas agrave atividadecerebral de fato Agraves vezes satildeo chamados de artefatos sioloacutegicos [2] Os artefatos tecircm atendecircncia de ter uma amplitude mais forte que a de um sinal de EEG puro sendo assimum componente signicante obtido no EEG pois pode vir a atrapalhar sua mediccedilatildeotornando-a ineciente Eacute considerado como um ruiacutedo Desse modo se torna necessaacuteriofazer consideraccedilotildees especiais sobre os artefatos

221 Eletrooculograma

O EOG eacute um tipo de artefato relacionado agrave estrutura ocular do indiviacuteduo Ele vemdo movimento dos olhos para os lados ou para cima e das possiacuteveis piscadas pois essesmovimentos causam alteraccedilatildeo do campo eleacutetrico ocular Na Figura 25 mostramos doque eacute feito o olho humano

8

Figura 25 Estrutura do olho e suas partes nomeadas (Adaptado de [3])

O campo eleacutetrico do olho se origina da diferenccedila de potencial causada entre a coacuterneaque eacute carregada positivamente e a retina que eacute carregada negativamente Um esquemade como funciona esse dipolo pode ser visto na Figura 26

Figura 26 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3])

Como funciona a mediccedilatildeo do EOG

Dois eletrodos satildeo posicionados em cada lado esquerdo e direito de cada olho Amovimentaccedilatildeo dos olhos vai causar a diferenccedila de potencial fazendo a coacuternea carregadapositivamente car mais proacutexima de um dos eletrodos e consequentemente a retina car-regada negativamente car mais distante de um dos eletrodos Entatildeo cresce a tensatildeoeleacutetrica de um lado e decresce do outro O piscar de olhos provoca uma diferenccedila de po-tencial e tambeacutem inuencia o sinal de EEG A Figura 27 mostra como satildeo posicionadosesses eletrodos para medir a diferenccedila de potencial

9

Figura 27 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5])

No trabalho em questatildeo natildeo foi possiacutevel medir a diferenccedila de potencial ocasionadapelo movimentar dos olhos portanto esse eacute um ruiacutedo que natildeo foi tratado

222 Eletrocardiograma

Um exame bastante interessante eacute o eletrocardiograma (ECG) A cada batida docoraccedilatildeo o electrocardioacutegrafo grava a diferenccedila de potencial no muacutesculo cardiacuteaco causadapela sua despolarizaccedilatildeo Ou seja ele registra a variaccedilatildeo eleacutetrica da atividade do coraccedilatildeo

Essa atividade do coraccedilatildeo pode vir a atrapalhar os sinais de EEG como pode-se notarna Figura 28 Em azul tem-se o sinal do EEG puro antes de ser retirado o ECG Emverde tem-se o sinal do ECG e em vermelho notamos a diferenccedila que acontece no sinalde EEG quando o artefato ECG eacute retirado

Figura 28 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada doartefato de ECG (Adaptado de [35])

223 Eletromiograa

O sinal eletromiograacuteco (EMG) eacute a soma algeacutebrica de todos os sinais detectados emcerta aacuterea podendo ser afetado por propriedades musculares anatocircmicas e sioloacutegicasassim como pelo controle do sistema nervoso perifeacuterico e a instrumentaccedilatildeo utilizada paraa aquisiccedilatildeo dos sinais [13] O eletromioacutegrafo eacute um aparelho que adquire o sinal EMG

10

possibilitando o exame da eletromiograa (ver Figura 29) Ele fornece informaccedilotildees rele-vantes sobre a ativaccedilatildeo da musculatura envolvida em um movimento e a intensidade desua ativaccedilatildeo Qualquer movimentaccedilatildeo ou contraccedilatildeo dos muacutesculos da face afeta o sinal deEEG como por exemplo apertar os dentes contrair a testa etc

Figura 29 Sinal de EMG [2])

23 Artefatos teacutecnicos

Satildeo os tambeacutem chamados artefatos extrasioloacutegicos Natildeo dependem do ser humanomas sim do ambiente em que o usuaacuterio se encontra ou dos possiacuteveis eventos que ocorram

231 Frequecircncia de 5060 Hz

Um dos artefatos mais comuns existentes eacute o da interferecircncia causada pela correnteeleacutetrica Estatildeo indicadas duas frequecircncias pois a faixa normal de interferecircncia variade local para local no mundo Por exemplo na Ameacuterica do Norte eacute em torno de 60Hzenquanto na maioria dos outros paiacuteses ca em torno de 50 Hz Para tratar deste artefatousualmente coloca-se um ltro notch nessa faixa de frequecircncia e em seus respectivosharmocircnicos como por exemplo para o Brasil 60Hz 120Hz 180Hz etc

232 Artefato do amplicador

Eacute uma interferecircncia com pequena amplitude mas que tambeacutem merece alguma atenccedilatildeoNa Figura 210 em azul temos o sinal do EEG e em verde pode-se notar a pequenaamplitude do artefato gerado pelo amplicador

11

Figura 210 Artefato do amplicador analisado em graacuteco (Adaptado de [34])

24 Imageacutetica Motora

Depois de entender melhor como funciona todo o processo por traacutes da mediccedilatildeo doEEG torna-se interessante saber como isso se relaciona agrave praacutetica produzindo ao naldo processo o efeito esperado que eacute o deslocamento virtual de objetos usando apenas ainterpretaccedilatildeo dos sinais gerados pelo pensamento

O centro desse processo eacute a imageacutetica motora Ela pode ser denida como um estadodinacircmico durante a imaginaccedilatildeo que um indiviacuteduo faz de uma determinada accedilatildeo intenci-onada Este fenocircmeno implica que o sujeito sinta que realmente estaacute realizando a accedilatildeoimaginada sicamente seja ela de movimentar um braccedilo ou talvez empurrar um objeto[10]

A imageacutetica motora vem mostrando vaacuterios bons resultados em sua aplicaccedilatildeo Comoexemplo temos a ocorrecircncia do fenocircmeno na teacutecnica de aprendizado motor Os atletasutilizam a imaginaccedilatildeo de movimentos que seratildeo executados nos exerciacutecios de fato assimtrazem benefiacutecios no aquecimento relaxamento e concentraccedilatildeo [38] Outro exemplo in-teressante eacute o dos muacutesicos que ao utilizaacute-la possibilitam o aprendizado de partituras demaneira mais eciente [20]

Segundo o siologista sueco Hesslow [15] para o ceacuterebro a simulaccedilatildeo hipoteacutetica deestados consiste em trecircs premissas fundamentais

1 Imaginaccedilatildeo de accedilotildees ativa as estruturas motoras do ceacuterebro de tal forma que elasremetam agrave atividade que ocorre durante uma accedilatildeo normal de movimento entretantosem nenhum movimento evidente

2 Imaginaccedilatildeo de percepccedilatildeo a imaginaccedilatildeo de estar percebendo uma atividade eacute omesmo que realmente estar percebendo algo Em sua essecircncia a atividade de per-cepccedilatildeo eacute gerada pelo proacuteprio ceacuterebro em depreciaccedilatildeo de estiacutemulos externos

12

Letra Localizaccedilatildeo

A Loacutebulo da orelhaC CentralP ParietalF FrontalFp Frontal polarO OcipitalT Temporal

Tabela 21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22])

3 Antecipaccedilatildeo uma accedilatildeo simulada pode provocar a atividade perceptiva que remeteagravequela que deveria ter acontecido se a accedilatildeo fosse executada de fato

Devido a esses fatores a simulaccedilatildeo mental pode ser utilizada como uma ferramentarepresentativa para o entendimento da mente Isso permite que os diversos estados mentaispossam ser explorados possibilitando relacionar as aacutereas especiacutecas do ceacuterebro que satildeomais ativadas devido a certos sentimentos desejos ou talvez intenccedilotildees Assim a simulaccedilatildeomental contribui para o avanccedilo em diversas aacutereas tais como a psicologia e outras

25 Emotiv Epoc

A m de analisar a imaginaccedilatildeo e os efeitos que ela tem sobre o nosso corpo e mentecientistas atraveacutes da busca constante de avanccedilos chegaram agrave utilizaccedilatildeo de um capaceteneural para mediccedilatildeo efetiva de estiacutemulos demonstrados pela captaccedilatildeo do sinal de EEGComo ilustrado na Figura 11a o custo-benefiacutecio de capacete que melhor atendeu o grupono projeto de pesquisa foi o do Emotiv Epoc Seus detalhes de organizaccedilatildeo e funcionamentosatildeo mostrados a seguir

251 Posicionamento de eletrodos

A Federaccedilatildeo Internacional de Neuropsicologia recomenda a utilizaccedilatildeo do modelo 10-20para ateacute 21 eletrodos [11] de acordo com a Figura 211 Nesse modelo todos os eletrodosse encontram a uma distacircncia de seus eletrodos vizinhos de 10 ou 20 da distacircncia totalda cabeccedila A cada posiccedilatildeo eacute dado um identicador de uma ou duas letras e um nuacutemerode acordo com sua proximidade a alguma parte do ceacuterebro (veja tabela 21) Nuacutemerospares estatildeo agrave direita e nuacutemeros iacutempares agrave esquerda

A sociedade Americana de EEG sugeriu nos seus guias [16] que novos eletrodos sejamcolocados de maneira equidistante dos 21 eletrodos jaacute denidos na Figura 212 caso sejanecessaacuterio um nuacutemero maior de eletrodos

13

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 16: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

O primeiro passo no processo eacute a aquisiccedilatildeo dos sinais cerebrais Para isso na literaturahaacute diversas teacutecnicas que se dividem em trecircs categorias as invasivas as semi-invasivas eas natildeo invasivas cada uma com suas devidas vantagens e desvantagens

A utilizaccedilatildeo da teacutecnica invasiva eacute uma oacutetima opccedilatildeo quando o foco eacute na captaccedilatildeo dedados com o miacutenimo de ruiacutedo Essa teacutecnica possibilita a diminuiccedilatildeo de ruiacutedos apesarde possuir como desvantagem a cirurgia que eacute necessaacuteria Nesta o cracircnio do indiviacuteduo eacuteaberto e eacute colocado no ceacuterebro eletrodos para captar os dados Tambeacutem como desvantagempode-se citar a faacutecil oxidaccedilatildeo dos eletrodos quando entram em contato com o sangue Ateacutecnica semi-invasiva eacute um pouco menos invasiva do que a primeira No entanto tambeacutemeacute necessaacuterio cirurgia Apesar disso a aquisiccedilatildeo de sinalruiacutedo eacute boa Jaacute a terceira teacutecnicacitada a natildeo-invasiva eacute a pior das trecircs em questatildeo de robustez ao ruiacutedo poreacutem eacute a demais faacutecil adaptaccedilatildeo agrave qualquer indiviacuteduo que tenha intenccedilatildeo de utilizaacute-la

Devido agraves caracteristicas destacadas este trabalho utiliza a teacutecnica natildeo invasiva comofonte de captaccedilatildeo de dados de EEG Com o uso do capacete Emotiv Epoc essa teacutecnicaeacute possibilitada De posse do aparelho comeccedilamos entatildeo fazendo essa aquisiccedilatildeo O se-gundo passo eacute o processamento do sinal e o reconhecimento de padrotildees atraveacutes do uso declassicadores Por uacuteltimo eacute necessaacuterio associar os dados obtidos agrave intenccedilatildeo do indiviacuteduo

Os estudos sobre ICC procuram adaptaacute-la ao uso no cotidiano Para avanccedilar nessaaacuterea eacute necessaacuterio o desenvolvimento de sistemas com elevada acuraacutecia e praticidade Paraaumentar a qualidade dos sistemas busca-se a implementaccedilatildeo de novos algoritmos para aaquisiccedilatildeo e a classicaccedilatildeo de sinais A cada dia novas aplicaccedilotildees estatildeo surgindo baseadasnessa tecnologia tanto de uso biomeacutedico quanto para jogos e outras aacutereas

12 Foco do trabalho

A imageacutetica motora eacute o processo mental no qual o indiviacuteduo imagina um determinadomovimento como por exemplo movimentar o braccedilo esquerdo ou direito A intenccedilatildeodo movimento que foi mandada pelo ceacuterebro eacute analisada e classicada de acordo como membro correspondente O resultado pode ser usado como comando para diversasaplicaccedilotildees como por exemplo o controle de um jogo

Dentro de ICC seraacute trabalhado o desenvolvimento de uma aplicaccedilatildeo online que utilizaduas classes de movimentos com as matildeos para a direita e a outra para a esquerda Estaaplicaccedilatildeo seraacute o jogo de ping-pong

13 Objetivo

Este trabalho possui dois objetivos principais O primeiro consiste em fazer um estudorelacionado agrave imageacutetica motora incluindo um levantamento dos trabalhos existentes naliteratura de forma a sumarizaacute-los O segundo objetivo eacute propor implementar e analisaruma aplicaccedilotildees que realiza a interaccedilatildeo ceacuterebro computador atraveacutes da imageacutetica motorao jogo de Ping Pong

3

14 Justicativa

O tema abordado neste trabalho eacute de grande relevacircncia social A ICC pode ser usadacomo soluccedilatildeo para a inclusccedilatildeo social de indiviacuteduos com diversos tipos de patologias quelimitam seus movimentos Aleacutem disso a ICC pode ser usada como uma alternativa paraa interface de jogos que representam um mercado de bilhotildees de doacutelares Pode-se porexemplo desenvolver melhorias para seres humanos decientes como a construccedilatildeo debraccedilos biocircnicos com o uso da imageacutetica motora ou talvez o controle de uma cadeira derodas para um indiviacuteduo tetrapleacutegico Tambeacutem se justica o estudo do tema am defacilitar tarefas mais simples como realizar uma ligaccedilatildeo atraveacutes de um telefone celular

15 Organizaccedilatildeo dos Capiacutetulos

O presente trabalho eacute dividio em seis capiacutetulos e anexos No primeiro capiacutetulo satildeoapresentados a contextualizaccedilatildeo do tema foco do trabalho objetivo e justicativas OCapiacutetulo 2 abrange os conceitos baacutesicos necessaacuterios ao entendimento da proposta do tra-balho O capiacutetulo seguinte conteacutem a descriccedilatildeo das trabalhos anteriores relacionados agraveICC encontradas na literatura O quarto capiacutetulo descreve o processo de desenvolvimentoda aplicaccedilatildeo propostas desde a idealizaccedilatildeo ateacute o desenvolvimento de fato O Capiacutetulo5 apresenta a descriccedilatildeo da fase de testes da implantaccedilatildeo da aplicaccedilatildeo bem como dosresultados obtidos desse processo com posterior anaacutelise deles O uacuteltimo eacute o capiacutetulo con-cludente sobre os resultados obtidos e que conta com sugestotildees de trabalhos futuros Porm o texto ainda conta com anexos

4

Capiacutetulo 2

Fundamentaccedilatildeo

21 A Biologia por traacutes do EEG

Estaacute entendido pela bibliograa que o sinal de EEG eacute bastante uacutetil e com ele conse-guimos produzir diversos trabalhos mas para entender o que se passa por traacutes do EEGde onde esse sinal vem e como eacute tratado temos que procurar nos interar melhor com abiologia do neurocircnio sua estrutura e funccedilatildeo

211 Estrutura e funccedilatildeo do neurocircnio

Como se pode ver na Figura 21 o neurocircnio eacute constituiacutedo de

1 Corpo celular

2 Dendritos

3 Axocircnio

Mas como ocorre a comunicaccedilatildeo entre duas ceacutelulas Qual o meio fiacutesico Os dendritossatildeo responsaacuteveis por receber sinais e passaacute-los para um axocircnio vide Figura 21 que remetea mesma para os outros neurocircnios

Figura 21 Estrutura do neurocircnio (Adaptado de [39])

5

212 Como funciona a troca de potenciais

Com o sinal recebido o neurocircnio tenta passar os impulsos eleacutetricos agrave frente atraveacutesde troca de potenciais a membrana celular envolta ao neurocircnio eacute carregada de iacuteons desoacutedio (Na+) e potaacutessio (K+) que cam se movimentando para dentro e fora da ceacutelulaInicialmente o interior da ceacutelula se encontra a -70mV em comparaccedilatildeo ao lado externoQuando algum sinal eacute recebido pelo dendrito ela ca menos negativa Se essa despola-rizaccedilatildeo chegar a -55mV a membrana se abre para iacuteons de soacutedio que entram na ceacutelulaIsto faz com que ela que cada vez menos negativa [40] Quando a ceacutelula atingir umpotencial positivo ela se abre para a saiacuteda de iacuteons de potaacutessio que agora causam a raacutepidarepolarizaccedilatildeo da membrana que chega a um potencial menor que -70mV como podemosver na Figura 22

Figura 22 Potencial de accedilatildeo de um neurocircnio [40]

213 O sinal de EEG

Os eletrodos do capacete Emotiv Epoc natildeo conseguem captar sinais de amplitudemuito pequena Este capacete e os demais relacionados apenas conseguem analisar sinaisde maior amplitude e a consequecircncia disso eacute que um uacutenico neurocircnio natildeo produz um sinalamplo o suciente para ser detectado sozinho Portanto o sinal soacute pode ser medidoconsiderando uma regiatildeo com vaacuterios neurocircnios Juntos levam aproximadamente 03s paraacumular a energia suciente para serem detectados [17] Como saber entatildeo quandoos neurocircnios tem sinal sucientemente forte para ser detectado Atraveacutes de dois preacute-requisitos

1 Muitos neurocircnios devem ser acionados ao mesmo tempo

2 Eles precisam estar alinhados em paralelo

6

Figura 23 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectadospelo eletrodo do capacete [42]

A ativaccedilatildeo de neurotransmissores do axocircnio terminal para as sinapses ocorre quandoum potencial de accedilatildeo atinge o m de um axocircnio Existem dois tipos de neurotransmissores

1 o primeiro causa um inuxo

2 o segundo causa um escoamento de iacuteons positivos

Assim os neurotransmissores ativados conseguem inuenciar a mudanccedila de potencialdo neurocircnio subsequente agrave sinapse mudando a permeabilidade da sua membrana Onome dado a essa mudanccedila de potencial do neurocircnio subsequente eacute potencial poacutes-sinaacutepticoexcitatoacuterio quando for uma mudanccedila positiva e potencial poacutes-sinaacuteptico inibitoacuterio quandonegativa Esses potenciais duram em meacutedia 100ms e variam sua amplitude entre 50e 100mV Na Figura 24 podemos ver um salto quacircntico de potencial de accedilatildeo de umneurocircnio para sinal de EEG

7

Figura 24 Eletroencefalograa claacutessica (Adapatado de [9])

22 Artefatos bioloacutegicos

Artefatos bioloacutegicos satildeo atividades causadas pelo sujeito mas natildeo ligadas agrave atividadecerebral de fato Agraves vezes satildeo chamados de artefatos sioloacutegicos [2] Os artefatos tecircm atendecircncia de ter uma amplitude mais forte que a de um sinal de EEG puro sendo assimum componente signicante obtido no EEG pois pode vir a atrapalhar sua mediccedilatildeotornando-a ineciente Eacute considerado como um ruiacutedo Desse modo se torna necessaacuteriofazer consideraccedilotildees especiais sobre os artefatos

221 Eletrooculograma

O EOG eacute um tipo de artefato relacionado agrave estrutura ocular do indiviacuteduo Ele vemdo movimento dos olhos para os lados ou para cima e das possiacuteveis piscadas pois essesmovimentos causam alteraccedilatildeo do campo eleacutetrico ocular Na Figura 25 mostramos doque eacute feito o olho humano

8

Figura 25 Estrutura do olho e suas partes nomeadas (Adaptado de [3])

O campo eleacutetrico do olho se origina da diferenccedila de potencial causada entre a coacuterneaque eacute carregada positivamente e a retina que eacute carregada negativamente Um esquemade como funciona esse dipolo pode ser visto na Figura 26

Figura 26 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3])

Como funciona a mediccedilatildeo do EOG

Dois eletrodos satildeo posicionados em cada lado esquerdo e direito de cada olho Amovimentaccedilatildeo dos olhos vai causar a diferenccedila de potencial fazendo a coacuternea carregadapositivamente car mais proacutexima de um dos eletrodos e consequentemente a retina car-regada negativamente car mais distante de um dos eletrodos Entatildeo cresce a tensatildeoeleacutetrica de um lado e decresce do outro O piscar de olhos provoca uma diferenccedila de po-tencial e tambeacutem inuencia o sinal de EEG A Figura 27 mostra como satildeo posicionadosesses eletrodos para medir a diferenccedila de potencial

9

Figura 27 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5])

No trabalho em questatildeo natildeo foi possiacutevel medir a diferenccedila de potencial ocasionadapelo movimentar dos olhos portanto esse eacute um ruiacutedo que natildeo foi tratado

222 Eletrocardiograma

Um exame bastante interessante eacute o eletrocardiograma (ECG) A cada batida docoraccedilatildeo o electrocardioacutegrafo grava a diferenccedila de potencial no muacutesculo cardiacuteaco causadapela sua despolarizaccedilatildeo Ou seja ele registra a variaccedilatildeo eleacutetrica da atividade do coraccedilatildeo

Essa atividade do coraccedilatildeo pode vir a atrapalhar os sinais de EEG como pode-se notarna Figura 28 Em azul tem-se o sinal do EEG puro antes de ser retirado o ECG Emverde tem-se o sinal do ECG e em vermelho notamos a diferenccedila que acontece no sinalde EEG quando o artefato ECG eacute retirado

Figura 28 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada doartefato de ECG (Adaptado de [35])

223 Eletromiograa

O sinal eletromiograacuteco (EMG) eacute a soma algeacutebrica de todos os sinais detectados emcerta aacuterea podendo ser afetado por propriedades musculares anatocircmicas e sioloacutegicasassim como pelo controle do sistema nervoso perifeacuterico e a instrumentaccedilatildeo utilizada paraa aquisiccedilatildeo dos sinais [13] O eletromioacutegrafo eacute um aparelho que adquire o sinal EMG

10

possibilitando o exame da eletromiograa (ver Figura 29) Ele fornece informaccedilotildees rele-vantes sobre a ativaccedilatildeo da musculatura envolvida em um movimento e a intensidade desua ativaccedilatildeo Qualquer movimentaccedilatildeo ou contraccedilatildeo dos muacutesculos da face afeta o sinal deEEG como por exemplo apertar os dentes contrair a testa etc

Figura 29 Sinal de EMG [2])

23 Artefatos teacutecnicos

Satildeo os tambeacutem chamados artefatos extrasioloacutegicos Natildeo dependem do ser humanomas sim do ambiente em que o usuaacuterio se encontra ou dos possiacuteveis eventos que ocorram

231 Frequecircncia de 5060 Hz

Um dos artefatos mais comuns existentes eacute o da interferecircncia causada pela correnteeleacutetrica Estatildeo indicadas duas frequecircncias pois a faixa normal de interferecircncia variade local para local no mundo Por exemplo na Ameacuterica do Norte eacute em torno de 60Hzenquanto na maioria dos outros paiacuteses ca em torno de 50 Hz Para tratar deste artefatousualmente coloca-se um ltro notch nessa faixa de frequecircncia e em seus respectivosharmocircnicos como por exemplo para o Brasil 60Hz 120Hz 180Hz etc

232 Artefato do amplicador

Eacute uma interferecircncia com pequena amplitude mas que tambeacutem merece alguma atenccedilatildeoNa Figura 210 em azul temos o sinal do EEG e em verde pode-se notar a pequenaamplitude do artefato gerado pelo amplicador

11

Figura 210 Artefato do amplicador analisado em graacuteco (Adaptado de [34])

24 Imageacutetica Motora

Depois de entender melhor como funciona todo o processo por traacutes da mediccedilatildeo doEEG torna-se interessante saber como isso se relaciona agrave praacutetica produzindo ao naldo processo o efeito esperado que eacute o deslocamento virtual de objetos usando apenas ainterpretaccedilatildeo dos sinais gerados pelo pensamento

O centro desse processo eacute a imageacutetica motora Ela pode ser denida como um estadodinacircmico durante a imaginaccedilatildeo que um indiviacuteduo faz de uma determinada accedilatildeo intenci-onada Este fenocircmeno implica que o sujeito sinta que realmente estaacute realizando a accedilatildeoimaginada sicamente seja ela de movimentar um braccedilo ou talvez empurrar um objeto[10]

A imageacutetica motora vem mostrando vaacuterios bons resultados em sua aplicaccedilatildeo Comoexemplo temos a ocorrecircncia do fenocircmeno na teacutecnica de aprendizado motor Os atletasutilizam a imaginaccedilatildeo de movimentos que seratildeo executados nos exerciacutecios de fato assimtrazem benefiacutecios no aquecimento relaxamento e concentraccedilatildeo [38] Outro exemplo in-teressante eacute o dos muacutesicos que ao utilizaacute-la possibilitam o aprendizado de partituras demaneira mais eciente [20]

Segundo o siologista sueco Hesslow [15] para o ceacuterebro a simulaccedilatildeo hipoteacutetica deestados consiste em trecircs premissas fundamentais

1 Imaginaccedilatildeo de accedilotildees ativa as estruturas motoras do ceacuterebro de tal forma que elasremetam agrave atividade que ocorre durante uma accedilatildeo normal de movimento entretantosem nenhum movimento evidente

2 Imaginaccedilatildeo de percepccedilatildeo a imaginaccedilatildeo de estar percebendo uma atividade eacute omesmo que realmente estar percebendo algo Em sua essecircncia a atividade de per-cepccedilatildeo eacute gerada pelo proacuteprio ceacuterebro em depreciaccedilatildeo de estiacutemulos externos

12

Letra Localizaccedilatildeo

A Loacutebulo da orelhaC CentralP ParietalF FrontalFp Frontal polarO OcipitalT Temporal

Tabela 21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22])

3 Antecipaccedilatildeo uma accedilatildeo simulada pode provocar a atividade perceptiva que remeteagravequela que deveria ter acontecido se a accedilatildeo fosse executada de fato

Devido a esses fatores a simulaccedilatildeo mental pode ser utilizada como uma ferramentarepresentativa para o entendimento da mente Isso permite que os diversos estados mentaispossam ser explorados possibilitando relacionar as aacutereas especiacutecas do ceacuterebro que satildeomais ativadas devido a certos sentimentos desejos ou talvez intenccedilotildees Assim a simulaccedilatildeomental contribui para o avanccedilo em diversas aacutereas tais como a psicologia e outras

25 Emotiv Epoc

A m de analisar a imaginaccedilatildeo e os efeitos que ela tem sobre o nosso corpo e mentecientistas atraveacutes da busca constante de avanccedilos chegaram agrave utilizaccedilatildeo de um capaceteneural para mediccedilatildeo efetiva de estiacutemulos demonstrados pela captaccedilatildeo do sinal de EEGComo ilustrado na Figura 11a o custo-benefiacutecio de capacete que melhor atendeu o grupono projeto de pesquisa foi o do Emotiv Epoc Seus detalhes de organizaccedilatildeo e funcionamentosatildeo mostrados a seguir

251 Posicionamento de eletrodos

A Federaccedilatildeo Internacional de Neuropsicologia recomenda a utilizaccedilatildeo do modelo 10-20para ateacute 21 eletrodos [11] de acordo com a Figura 211 Nesse modelo todos os eletrodosse encontram a uma distacircncia de seus eletrodos vizinhos de 10 ou 20 da distacircncia totalda cabeccedila A cada posiccedilatildeo eacute dado um identicador de uma ou duas letras e um nuacutemerode acordo com sua proximidade a alguma parte do ceacuterebro (veja tabela 21) Nuacutemerospares estatildeo agrave direita e nuacutemeros iacutempares agrave esquerda

A sociedade Americana de EEG sugeriu nos seus guias [16] que novos eletrodos sejamcolocados de maneira equidistante dos 21 eletrodos jaacute denidos na Figura 212 caso sejanecessaacuterio um nuacutemero maior de eletrodos

13

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 17: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

14 Justicativa

O tema abordado neste trabalho eacute de grande relevacircncia social A ICC pode ser usadacomo soluccedilatildeo para a inclusccedilatildeo social de indiviacuteduos com diversos tipos de patologias quelimitam seus movimentos Aleacutem disso a ICC pode ser usada como uma alternativa paraa interface de jogos que representam um mercado de bilhotildees de doacutelares Pode-se porexemplo desenvolver melhorias para seres humanos decientes como a construccedilatildeo debraccedilos biocircnicos com o uso da imageacutetica motora ou talvez o controle de uma cadeira derodas para um indiviacuteduo tetrapleacutegico Tambeacutem se justica o estudo do tema am defacilitar tarefas mais simples como realizar uma ligaccedilatildeo atraveacutes de um telefone celular

15 Organizaccedilatildeo dos Capiacutetulos

O presente trabalho eacute dividio em seis capiacutetulos e anexos No primeiro capiacutetulo satildeoapresentados a contextualizaccedilatildeo do tema foco do trabalho objetivo e justicativas OCapiacutetulo 2 abrange os conceitos baacutesicos necessaacuterios ao entendimento da proposta do tra-balho O capiacutetulo seguinte conteacutem a descriccedilatildeo das trabalhos anteriores relacionados agraveICC encontradas na literatura O quarto capiacutetulo descreve o processo de desenvolvimentoda aplicaccedilatildeo propostas desde a idealizaccedilatildeo ateacute o desenvolvimento de fato O Capiacutetulo5 apresenta a descriccedilatildeo da fase de testes da implantaccedilatildeo da aplicaccedilatildeo bem como dosresultados obtidos desse processo com posterior anaacutelise deles O uacuteltimo eacute o capiacutetulo con-cludente sobre os resultados obtidos e que conta com sugestotildees de trabalhos futuros Porm o texto ainda conta com anexos

4

Capiacutetulo 2

Fundamentaccedilatildeo

21 A Biologia por traacutes do EEG

Estaacute entendido pela bibliograa que o sinal de EEG eacute bastante uacutetil e com ele conse-guimos produzir diversos trabalhos mas para entender o que se passa por traacutes do EEGde onde esse sinal vem e como eacute tratado temos que procurar nos interar melhor com abiologia do neurocircnio sua estrutura e funccedilatildeo

211 Estrutura e funccedilatildeo do neurocircnio

Como se pode ver na Figura 21 o neurocircnio eacute constituiacutedo de

1 Corpo celular

2 Dendritos

3 Axocircnio

Mas como ocorre a comunicaccedilatildeo entre duas ceacutelulas Qual o meio fiacutesico Os dendritossatildeo responsaacuteveis por receber sinais e passaacute-los para um axocircnio vide Figura 21 que remetea mesma para os outros neurocircnios

Figura 21 Estrutura do neurocircnio (Adaptado de [39])

5

212 Como funciona a troca de potenciais

Com o sinal recebido o neurocircnio tenta passar os impulsos eleacutetricos agrave frente atraveacutesde troca de potenciais a membrana celular envolta ao neurocircnio eacute carregada de iacuteons desoacutedio (Na+) e potaacutessio (K+) que cam se movimentando para dentro e fora da ceacutelulaInicialmente o interior da ceacutelula se encontra a -70mV em comparaccedilatildeo ao lado externoQuando algum sinal eacute recebido pelo dendrito ela ca menos negativa Se essa despola-rizaccedilatildeo chegar a -55mV a membrana se abre para iacuteons de soacutedio que entram na ceacutelulaIsto faz com que ela que cada vez menos negativa [40] Quando a ceacutelula atingir umpotencial positivo ela se abre para a saiacuteda de iacuteons de potaacutessio que agora causam a raacutepidarepolarizaccedilatildeo da membrana que chega a um potencial menor que -70mV como podemosver na Figura 22

Figura 22 Potencial de accedilatildeo de um neurocircnio [40]

213 O sinal de EEG

Os eletrodos do capacete Emotiv Epoc natildeo conseguem captar sinais de amplitudemuito pequena Este capacete e os demais relacionados apenas conseguem analisar sinaisde maior amplitude e a consequecircncia disso eacute que um uacutenico neurocircnio natildeo produz um sinalamplo o suciente para ser detectado sozinho Portanto o sinal soacute pode ser medidoconsiderando uma regiatildeo com vaacuterios neurocircnios Juntos levam aproximadamente 03s paraacumular a energia suciente para serem detectados [17] Como saber entatildeo quandoos neurocircnios tem sinal sucientemente forte para ser detectado Atraveacutes de dois preacute-requisitos

1 Muitos neurocircnios devem ser acionados ao mesmo tempo

2 Eles precisam estar alinhados em paralelo

6

Figura 23 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectadospelo eletrodo do capacete [42]

A ativaccedilatildeo de neurotransmissores do axocircnio terminal para as sinapses ocorre quandoum potencial de accedilatildeo atinge o m de um axocircnio Existem dois tipos de neurotransmissores

1 o primeiro causa um inuxo

2 o segundo causa um escoamento de iacuteons positivos

Assim os neurotransmissores ativados conseguem inuenciar a mudanccedila de potencialdo neurocircnio subsequente agrave sinapse mudando a permeabilidade da sua membrana Onome dado a essa mudanccedila de potencial do neurocircnio subsequente eacute potencial poacutes-sinaacutepticoexcitatoacuterio quando for uma mudanccedila positiva e potencial poacutes-sinaacuteptico inibitoacuterio quandonegativa Esses potenciais duram em meacutedia 100ms e variam sua amplitude entre 50e 100mV Na Figura 24 podemos ver um salto quacircntico de potencial de accedilatildeo de umneurocircnio para sinal de EEG

7

Figura 24 Eletroencefalograa claacutessica (Adapatado de [9])

22 Artefatos bioloacutegicos

Artefatos bioloacutegicos satildeo atividades causadas pelo sujeito mas natildeo ligadas agrave atividadecerebral de fato Agraves vezes satildeo chamados de artefatos sioloacutegicos [2] Os artefatos tecircm atendecircncia de ter uma amplitude mais forte que a de um sinal de EEG puro sendo assimum componente signicante obtido no EEG pois pode vir a atrapalhar sua mediccedilatildeotornando-a ineciente Eacute considerado como um ruiacutedo Desse modo se torna necessaacuteriofazer consideraccedilotildees especiais sobre os artefatos

221 Eletrooculograma

O EOG eacute um tipo de artefato relacionado agrave estrutura ocular do indiviacuteduo Ele vemdo movimento dos olhos para os lados ou para cima e das possiacuteveis piscadas pois essesmovimentos causam alteraccedilatildeo do campo eleacutetrico ocular Na Figura 25 mostramos doque eacute feito o olho humano

8

Figura 25 Estrutura do olho e suas partes nomeadas (Adaptado de [3])

O campo eleacutetrico do olho se origina da diferenccedila de potencial causada entre a coacuterneaque eacute carregada positivamente e a retina que eacute carregada negativamente Um esquemade como funciona esse dipolo pode ser visto na Figura 26

Figura 26 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3])

Como funciona a mediccedilatildeo do EOG

Dois eletrodos satildeo posicionados em cada lado esquerdo e direito de cada olho Amovimentaccedilatildeo dos olhos vai causar a diferenccedila de potencial fazendo a coacuternea carregadapositivamente car mais proacutexima de um dos eletrodos e consequentemente a retina car-regada negativamente car mais distante de um dos eletrodos Entatildeo cresce a tensatildeoeleacutetrica de um lado e decresce do outro O piscar de olhos provoca uma diferenccedila de po-tencial e tambeacutem inuencia o sinal de EEG A Figura 27 mostra como satildeo posicionadosesses eletrodos para medir a diferenccedila de potencial

9

Figura 27 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5])

No trabalho em questatildeo natildeo foi possiacutevel medir a diferenccedila de potencial ocasionadapelo movimentar dos olhos portanto esse eacute um ruiacutedo que natildeo foi tratado

222 Eletrocardiograma

Um exame bastante interessante eacute o eletrocardiograma (ECG) A cada batida docoraccedilatildeo o electrocardioacutegrafo grava a diferenccedila de potencial no muacutesculo cardiacuteaco causadapela sua despolarizaccedilatildeo Ou seja ele registra a variaccedilatildeo eleacutetrica da atividade do coraccedilatildeo

Essa atividade do coraccedilatildeo pode vir a atrapalhar os sinais de EEG como pode-se notarna Figura 28 Em azul tem-se o sinal do EEG puro antes de ser retirado o ECG Emverde tem-se o sinal do ECG e em vermelho notamos a diferenccedila que acontece no sinalde EEG quando o artefato ECG eacute retirado

Figura 28 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada doartefato de ECG (Adaptado de [35])

223 Eletromiograa

O sinal eletromiograacuteco (EMG) eacute a soma algeacutebrica de todos os sinais detectados emcerta aacuterea podendo ser afetado por propriedades musculares anatocircmicas e sioloacutegicasassim como pelo controle do sistema nervoso perifeacuterico e a instrumentaccedilatildeo utilizada paraa aquisiccedilatildeo dos sinais [13] O eletromioacutegrafo eacute um aparelho que adquire o sinal EMG

10

possibilitando o exame da eletromiograa (ver Figura 29) Ele fornece informaccedilotildees rele-vantes sobre a ativaccedilatildeo da musculatura envolvida em um movimento e a intensidade desua ativaccedilatildeo Qualquer movimentaccedilatildeo ou contraccedilatildeo dos muacutesculos da face afeta o sinal deEEG como por exemplo apertar os dentes contrair a testa etc

Figura 29 Sinal de EMG [2])

23 Artefatos teacutecnicos

Satildeo os tambeacutem chamados artefatos extrasioloacutegicos Natildeo dependem do ser humanomas sim do ambiente em que o usuaacuterio se encontra ou dos possiacuteveis eventos que ocorram

231 Frequecircncia de 5060 Hz

Um dos artefatos mais comuns existentes eacute o da interferecircncia causada pela correnteeleacutetrica Estatildeo indicadas duas frequecircncias pois a faixa normal de interferecircncia variade local para local no mundo Por exemplo na Ameacuterica do Norte eacute em torno de 60Hzenquanto na maioria dos outros paiacuteses ca em torno de 50 Hz Para tratar deste artefatousualmente coloca-se um ltro notch nessa faixa de frequecircncia e em seus respectivosharmocircnicos como por exemplo para o Brasil 60Hz 120Hz 180Hz etc

232 Artefato do amplicador

Eacute uma interferecircncia com pequena amplitude mas que tambeacutem merece alguma atenccedilatildeoNa Figura 210 em azul temos o sinal do EEG e em verde pode-se notar a pequenaamplitude do artefato gerado pelo amplicador

11

Figura 210 Artefato do amplicador analisado em graacuteco (Adaptado de [34])

24 Imageacutetica Motora

Depois de entender melhor como funciona todo o processo por traacutes da mediccedilatildeo doEEG torna-se interessante saber como isso se relaciona agrave praacutetica produzindo ao naldo processo o efeito esperado que eacute o deslocamento virtual de objetos usando apenas ainterpretaccedilatildeo dos sinais gerados pelo pensamento

O centro desse processo eacute a imageacutetica motora Ela pode ser denida como um estadodinacircmico durante a imaginaccedilatildeo que um indiviacuteduo faz de uma determinada accedilatildeo intenci-onada Este fenocircmeno implica que o sujeito sinta que realmente estaacute realizando a accedilatildeoimaginada sicamente seja ela de movimentar um braccedilo ou talvez empurrar um objeto[10]

A imageacutetica motora vem mostrando vaacuterios bons resultados em sua aplicaccedilatildeo Comoexemplo temos a ocorrecircncia do fenocircmeno na teacutecnica de aprendizado motor Os atletasutilizam a imaginaccedilatildeo de movimentos que seratildeo executados nos exerciacutecios de fato assimtrazem benefiacutecios no aquecimento relaxamento e concentraccedilatildeo [38] Outro exemplo in-teressante eacute o dos muacutesicos que ao utilizaacute-la possibilitam o aprendizado de partituras demaneira mais eciente [20]

Segundo o siologista sueco Hesslow [15] para o ceacuterebro a simulaccedilatildeo hipoteacutetica deestados consiste em trecircs premissas fundamentais

1 Imaginaccedilatildeo de accedilotildees ativa as estruturas motoras do ceacuterebro de tal forma que elasremetam agrave atividade que ocorre durante uma accedilatildeo normal de movimento entretantosem nenhum movimento evidente

2 Imaginaccedilatildeo de percepccedilatildeo a imaginaccedilatildeo de estar percebendo uma atividade eacute omesmo que realmente estar percebendo algo Em sua essecircncia a atividade de per-cepccedilatildeo eacute gerada pelo proacuteprio ceacuterebro em depreciaccedilatildeo de estiacutemulos externos

12

Letra Localizaccedilatildeo

A Loacutebulo da orelhaC CentralP ParietalF FrontalFp Frontal polarO OcipitalT Temporal

Tabela 21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22])

3 Antecipaccedilatildeo uma accedilatildeo simulada pode provocar a atividade perceptiva que remeteagravequela que deveria ter acontecido se a accedilatildeo fosse executada de fato

Devido a esses fatores a simulaccedilatildeo mental pode ser utilizada como uma ferramentarepresentativa para o entendimento da mente Isso permite que os diversos estados mentaispossam ser explorados possibilitando relacionar as aacutereas especiacutecas do ceacuterebro que satildeomais ativadas devido a certos sentimentos desejos ou talvez intenccedilotildees Assim a simulaccedilatildeomental contribui para o avanccedilo em diversas aacutereas tais como a psicologia e outras

25 Emotiv Epoc

A m de analisar a imaginaccedilatildeo e os efeitos que ela tem sobre o nosso corpo e mentecientistas atraveacutes da busca constante de avanccedilos chegaram agrave utilizaccedilatildeo de um capaceteneural para mediccedilatildeo efetiva de estiacutemulos demonstrados pela captaccedilatildeo do sinal de EEGComo ilustrado na Figura 11a o custo-benefiacutecio de capacete que melhor atendeu o grupono projeto de pesquisa foi o do Emotiv Epoc Seus detalhes de organizaccedilatildeo e funcionamentosatildeo mostrados a seguir

251 Posicionamento de eletrodos

A Federaccedilatildeo Internacional de Neuropsicologia recomenda a utilizaccedilatildeo do modelo 10-20para ateacute 21 eletrodos [11] de acordo com a Figura 211 Nesse modelo todos os eletrodosse encontram a uma distacircncia de seus eletrodos vizinhos de 10 ou 20 da distacircncia totalda cabeccedila A cada posiccedilatildeo eacute dado um identicador de uma ou duas letras e um nuacutemerode acordo com sua proximidade a alguma parte do ceacuterebro (veja tabela 21) Nuacutemerospares estatildeo agrave direita e nuacutemeros iacutempares agrave esquerda

A sociedade Americana de EEG sugeriu nos seus guias [16] que novos eletrodos sejamcolocados de maneira equidistante dos 21 eletrodos jaacute denidos na Figura 212 caso sejanecessaacuterio um nuacutemero maior de eletrodos

13

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 18: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Capiacutetulo 2

Fundamentaccedilatildeo

21 A Biologia por traacutes do EEG

Estaacute entendido pela bibliograa que o sinal de EEG eacute bastante uacutetil e com ele conse-guimos produzir diversos trabalhos mas para entender o que se passa por traacutes do EEGde onde esse sinal vem e como eacute tratado temos que procurar nos interar melhor com abiologia do neurocircnio sua estrutura e funccedilatildeo

211 Estrutura e funccedilatildeo do neurocircnio

Como se pode ver na Figura 21 o neurocircnio eacute constituiacutedo de

1 Corpo celular

2 Dendritos

3 Axocircnio

Mas como ocorre a comunicaccedilatildeo entre duas ceacutelulas Qual o meio fiacutesico Os dendritossatildeo responsaacuteveis por receber sinais e passaacute-los para um axocircnio vide Figura 21 que remetea mesma para os outros neurocircnios

Figura 21 Estrutura do neurocircnio (Adaptado de [39])

5

212 Como funciona a troca de potenciais

Com o sinal recebido o neurocircnio tenta passar os impulsos eleacutetricos agrave frente atraveacutesde troca de potenciais a membrana celular envolta ao neurocircnio eacute carregada de iacuteons desoacutedio (Na+) e potaacutessio (K+) que cam se movimentando para dentro e fora da ceacutelulaInicialmente o interior da ceacutelula se encontra a -70mV em comparaccedilatildeo ao lado externoQuando algum sinal eacute recebido pelo dendrito ela ca menos negativa Se essa despola-rizaccedilatildeo chegar a -55mV a membrana se abre para iacuteons de soacutedio que entram na ceacutelulaIsto faz com que ela que cada vez menos negativa [40] Quando a ceacutelula atingir umpotencial positivo ela se abre para a saiacuteda de iacuteons de potaacutessio que agora causam a raacutepidarepolarizaccedilatildeo da membrana que chega a um potencial menor que -70mV como podemosver na Figura 22

Figura 22 Potencial de accedilatildeo de um neurocircnio [40]

213 O sinal de EEG

Os eletrodos do capacete Emotiv Epoc natildeo conseguem captar sinais de amplitudemuito pequena Este capacete e os demais relacionados apenas conseguem analisar sinaisde maior amplitude e a consequecircncia disso eacute que um uacutenico neurocircnio natildeo produz um sinalamplo o suciente para ser detectado sozinho Portanto o sinal soacute pode ser medidoconsiderando uma regiatildeo com vaacuterios neurocircnios Juntos levam aproximadamente 03s paraacumular a energia suciente para serem detectados [17] Como saber entatildeo quandoos neurocircnios tem sinal sucientemente forte para ser detectado Atraveacutes de dois preacute-requisitos

1 Muitos neurocircnios devem ser acionados ao mesmo tempo

2 Eles precisam estar alinhados em paralelo

6

Figura 23 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectadospelo eletrodo do capacete [42]

A ativaccedilatildeo de neurotransmissores do axocircnio terminal para as sinapses ocorre quandoum potencial de accedilatildeo atinge o m de um axocircnio Existem dois tipos de neurotransmissores

1 o primeiro causa um inuxo

2 o segundo causa um escoamento de iacuteons positivos

Assim os neurotransmissores ativados conseguem inuenciar a mudanccedila de potencialdo neurocircnio subsequente agrave sinapse mudando a permeabilidade da sua membrana Onome dado a essa mudanccedila de potencial do neurocircnio subsequente eacute potencial poacutes-sinaacutepticoexcitatoacuterio quando for uma mudanccedila positiva e potencial poacutes-sinaacuteptico inibitoacuterio quandonegativa Esses potenciais duram em meacutedia 100ms e variam sua amplitude entre 50e 100mV Na Figura 24 podemos ver um salto quacircntico de potencial de accedilatildeo de umneurocircnio para sinal de EEG

7

Figura 24 Eletroencefalograa claacutessica (Adapatado de [9])

22 Artefatos bioloacutegicos

Artefatos bioloacutegicos satildeo atividades causadas pelo sujeito mas natildeo ligadas agrave atividadecerebral de fato Agraves vezes satildeo chamados de artefatos sioloacutegicos [2] Os artefatos tecircm atendecircncia de ter uma amplitude mais forte que a de um sinal de EEG puro sendo assimum componente signicante obtido no EEG pois pode vir a atrapalhar sua mediccedilatildeotornando-a ineciente Eacute considerado como um ruiacutedo Desse modo se torna necessaacuteriofazer consideraccedilotildees especiais sobre os artefatos

221 Eletrooculograma

O EOG eacute um tipo de artefato relacionado agrave estrutura ocular do indiviacuteduo Ele vemdo movimento dos olhos para os lados ou para cima e das possiacuteveis piscadas pois essesmovimentos causam alteraccedilatildeo do campo eleacutetrico ocular Na Figura 25 mostramos doque eacute feito o olho humano

8

Figura 25 Estrutura do olho e suas partes nomeadas (Adaptado de [3])

O campo eleacutetrico do olho se origina da diferenccedila de potencial causada entre a coacuterneaque eacute carregada positivamente e a retina que eacute carregada negativamente Um esquemade como funciona esse dipolo pode ser visto na Figura 26

Figura 26 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3])

Como funciona a mediccedilatildeo do EOG

Dois eletrodos satildeo posicionados em cada lado esquerdo e direito de cada olho Amovimentaccedilatildeo dos olhos vai causar a diferenccedila de potencial fazendo a coacuternea carregadapositivamente car mais proacutexima de um dos eletrodos e consequentemente a retina car-regada negativamente car mais distante de um dos eletrodos Entatildeo cresce a tensatildeoeleacutetrica de um lado e decresce do outro O piscar de olhos provoca uma diferenccedila de po-tencial e tambeacutem inuencia o sinal de EEG A Figura 27 mostra como satildeo posicionadosesses eletrodos para medir a diferenccedila de potencial

9

Figura 27 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5])

No trabalho em questatildeo natildeo foi possiacutevel medir a diferenccedila de potencial ocasionadapelo movimentar dos olhos portanto esse eacute um ruiacutedo que natildeo foi tratado

222 Eletrocardiograma

Um exame bastante interessante eacute o eletrocardiograma (ECG) A cada batida docoraccedilatildeo o electrocardioacutegrafo grava a diferenccedila de potencial no muacutesculo cardiacuteaco causadapela sua despolarizaccedilatildeo Ou seja ele registra a variaccedilatildeo eleacutetrica da atividade do coraccedilatildeo

Essa atividade do coraccedilatildeo pode vir a atrapalhar os sinais de EEG como pode-se notarna Figura 28 Em azul tem-se o sinal do EEG puro antes de ser retirado o ECG Emverde tem-se o sinal do ECG e em vermelho notamos a diferenccedila que acontece no sinalde EEG quando o artefato ECG eacute retirado

Figura 28 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada doartefato de ECG (Adaptado de [35])

223 Eletromiograa

O sinal eletromiograacuteco (EMG) eacute a soma algeacutebrica de todos os sinais detectados emcerta aacuterea podendo ser afetado por propriedades musculares anatocircmicas e sioloacutegicasassim como pelo controle do sistema nervoso perifeacuterico e a instrumentaccedilatildeo utilizada paraa aquisiccedilatildeo dos sinais [13] O eletromioacutegrafo eacute um aparelho que adquire o sinal EMG

10

possibilitando o exame da eletromiograa (ver Figura 29) Ele fornece informaccedilotildees rele-vantes sobre a ativaccedilatildeo da musculatura envolvida em um movimento e a intensidade desua ativaccedilatildeo Qualquer movimentaccedilatildeo ou contraccedilatildeo dos muacutesculos da face afeta o sinal deEEG como por exemplo apertar os dentes contrair a testa etc

Figura 29 Sinal de EMG [2])

23 Artefatos teacutecnicos

Satildeo os tambeacutem chamados artefatos extrasioloacutegicos Natildeo dependem do ser humanomas sim do ambiente em que o usuaacuterio se encontra ou dos possiacuteveis eventos que ocorram

231 Frequecircncia de 5060 Hz

Um dos artefatos mais comuns existentes eacute o da interferecircncia causada pela correnteeleacutetrica Estatildeo indicadas duas frequecircncias pois a faixa normal de interferecircncia variade local para local no mundo Por exemplo na Ameacuterica do Norte eacute em torno de 60Hzenquanto na maioria dos outros paiacuteses ca em torno de 50 Hz Para tratar deste artefatousualmente coloca-se um ltro notch nessa faixa de frequecircncia e em seus respectivosharmocircnicos como por exemplo para o Brasil 60Hz 120Hz 180Hz etc

232 Artefato do amplicador

Eacute uma interferecircncia com pequena amplitude mas que tambeacutem merece alguma atenccedilatildeoNa Figura 210 em azul temos o sinal do EEG e em verde pode-se notar a pequenaamplitude do artefato gerado pelo amplicador

11

Figura 210 Artefato do amplicador analisado em graacuteco (Adaptado de [34])

24 Imageacutetica Motora

Depois de entender melhor como funciona todo o processo por traacutes da mediccedilatildeo doEEG torna-se interessante saber como isso se relaciona agrave praacutetica produzindo ao naldo processo o efeito esperado que eacute o deslocamento virtual de objetos usando apenas ainterpretaccedilatildeo dos sinais gerados pelo pensamento

O centro desse processo eacute a imageacutetica motora Ela pode ser denida como um estadodinacircmico durante a imaginaccedilatildeo que um indiviacuteduo faz de uma determinada accedilatildeo intenci-onada Este fenocircmeno implica que o sujeito sinta que realmente estaacute realizando a accedilatildeoimaginada sicamente seja ela de movimentar um braccedilo ou talvez empurrar um objeto[10]

A imageacutetica motora vem mostrando vaacuterios bons resultados em sua aplicaccedilatildeo Comoexemplo temos a ocorrecircncia do fenocircmeno na teacutecnica de aprendizado motor Os atletasutilizam a imaginaccedilatildeo de movimentos que seratildeo executados nos exerciacutecios de fato assimtrazem benefiacutecios no aquecimento relaxamento e concentraccedilatildeo [38] Outro exemplo in-teressante eacute o dos muacutesicos que ao utilizaacute-la possibilitam o aprendizado de partituras demaneira mais eciente [20]

Segundo o siologista sueco Hesslow [15] para o ceacuterebro a simulaccedilatildeo hipoteacutetica deestados consiste em trecircs premissas fundamentais

1 Imaginaccedilatildeo de accedilotildees ativa as estruturas motoras do ceacuterebro de tal forma que elasremetam agrave atividade que ocorre durante uma accedilatildeo normal de movimento entretantosem nenhum movimento evidente

2 Imaginaccedilatildeo de percepccedilatildeo a imaginaccedilatildeo de estar percebendo uma atividade eacute omesmo que realmente estar percebendo algo Em sua essecircncia a atividade de per-cepccedilatildeo eacute gerada pelo proacuteprio ceacuterebro em depreciaccedilatildeo de estiacutemulos externos

12

Letra Localizaccedilatildeo

A Loacutebulo da orelhaC CentralP ParietalF FrontalFp Frontal polarO OcipitalT Temporal

Tabela 21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22])

3 Antecipaccedilatildeo uma accedilatildeo simulada pode provocar a atividade perceptiva que remeteagravequela que deveria ter acontecido se a accedilatildeo fosse executada de fato

Devido a esses fatores a simulaccedilatildeo mental pode ser utilizada como uma ferramentarepresentativa para o entendimento da mente Isso permite que os diversos estados mentaispossam ser explorados possibilitando relacionar as aacutereas especiacutecas do ceacuterebro que satildeomais ativadas devido a certos sentimentos desejos ou talvez intenccedilotildees Assim a simulaccedilatildeomental contribui para o avanccedilo em diversas aacutereas tais como a psicologia e outras

25 Emotiv Epoc

A m de analisar a imaginaccedilatildeo e os efeitos que ela tem sobre o nosso corpo e mentecientistas atraveacutes da busca constante de avanccedilos chegaram agrave utilizaccedilatildeo de um capaceteneural para mediccedilatildeo efetiva de estiacutemulos demonstrados pela captaccedilatildeo do sinal de EEGComo ilustrado na Figura 11a o custo-benefiacutecio de capacete que melhor atendeu o grupono projeto de pesquisa foi o do Emotiv Epoc Seus detalhes de organizaccedilatildeo e funcionamentosatildeo mostrados a seguir

251 Posicionamento de eletrodos

A Federaccedilatildeo Internacional de Neuropsicologia recomenda a utilizaccedilatildeo do modelo 10-20para ateacute 21 eletrodos [11] de acordo com a Figura 211 Nesse modelo todos os eletrodosse encontram a uma distacircncia de seus eletrodos vizinhos de 10 ou 20 da distacircncia totalda cabeccedila A cada posiccedilatildeo eacute dado um identicador de uma ou duas letras e um nuacutemerode acordo com sua proximidade a alguma parte do ceacuterebro (veja tabela 21) Nuacutemerospares estatildeo agrave direita e nuacutemeros iacutempares agrave esquerda

A sociedade Americana de EEG sugeriu nos seus guias [16] que novos eletrodos sejamcolocados de maneira equidistante dos 21 eletrodos jaacute denidos na Figura 212 caso sejanecessaacuterio um nuacutemero maior de eletrodos

13

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 19: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

212 Como funciona a troca de potenciais

Com o sinal recebido o neurocircnio tenta passar os impulsos eleacutetricos agrave frente atraveacutesde troca de potenciais a membrana celular envolta ao neurocircnio eacute carregada de iacuteons desoacutedio (Na+) e potaacutessio (K+) que cam se movimentando para dentro e fora da ceacutelulaInicialmente o interior da ceacutelula se encontra a -70mV em comparaccedilatildeo ao lado externoQuando algum sinal eacute recebido pelo dendrito ela ca menos negativa Se essa despola-rizaccedilatildeo chegar a -55mV a membrana se abre para iacuteons de soacutedio que entram na ceacutelulaIsto faz com que ela que cada vez menos negativa [40] Quando a ceacutelula atingir umpotencial positivo ela se abre para a saiacuteda de iacuteons de potaacutessio que agora causam a raacutepidarepolarizaccedilatildeo da membrana que chega a um potencial menor que -70mV como podemosver na Figura 22

Figura 22 Potencial de accedilatildeo de um neurocircnio [40]

213 O sinal de EEG

Os eletrodos do capacete Emotiv Epoc natildeo conseguem captar sinais de amplitudemuito pequena Este capacete e os demais relacionados apenas conseguem analisar sinaisde maior amplitude e a consequecircncia disso eacute que um uacutenico neurocircnio natildeo produz um sinalamplo o suciente para ser detectado sozinho Portanto o sinal soacute pode ser medidoconsiderando uma regiatildeo com vaacuterios neurocircnios Juntos levam aproximadamente 03s paraacumular a energia suciente para serem detectados [17] Como saber entatildeo quandoos neurocircnios tem sinal sucientemente forte para ser detectado Atraveacutes de dois preacute-requisitos

1 Muitos neurocircnios devem ser acionados ao mesmo tempo

2 Eles precisam estar alinhados em paralelo

6

Figura 23 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectadospelo eletrodo do capacete [42]

A ativaccedilatildeo de neurotransmissores do axocircnio terminal para as sinapses ocorre quandoum potencial de accedilatildeo atinge o m de um axocircnio Existem dois tipos de neurotransmissores

1 o primeiro causa um inuxo

2 o segundo causa um escoamento de iacuteons positivos

Assim os neurotransmissores ativados conseguem inuenciar a mudanccedila de potencialdo neurocircnio subsequente agrave sinapse mudando a permeabilidade da sua membrana Onome dado a essa mudanccedila de potencial do neurocircnio subsequente eacute potencial poacutes-sinaacutepticoexcitatoacuterio quando for uma mudanccedila positiva e potencial poacutes-sinaacuteptico inibitoacuterio quandonegativa Esses potenciais duram em meacutedia 100ms e variam sua amplitude entre 50e 100mV Na Figura 24 podemos ver um salto quacircntico de potencial de accedilatildeo de umneurocircnio para sinal de EEG

7

Figura 24 Eletroencefalograa claacutessica (Adapatado de [9])

22 Artefatos bioloacutegicos

Artefatos bioloacutegicos satildeo atividades causadas pelo sujeito mas natildeo ligadas agrave atividadecerebral de fato Agraves vezes satildeo chamados de artefatos sioloacutegicos [2] Os artefatos tecircm atendecircncia de ter uma amplitude mais forte que a de um sinal de EEG puro sendo assimum componente signicante obtido no EEG pois pode vir a atrapalhar sua mediccedilatildeotornando-a ineciente Eacute considerado como um ruiacutedo Desse modo se torna necessaacuteriofazer consideraccedilotildees especiais sobre os artefatos

221 Eletrooculograma

O EOG eacute um tipo de artefato relacionado agrave estrutura ocular do indiviacuteduo Ele vemdo movimento dos olhos para os lados ou para cima e das possiacuteveis piscadas pois essesmovimentos causam alteraccedilatildeo do campo eleacutetrico ocular Na Figura 25 mostramos doque eacute feito o olho humano

8

Figura 25 Estrutura do olho e suas partes nomeadas (Adaptado de [3])

O campo eleacutetrico do olho se origina da diferenccedila de potencial causada entre a coacuterneaque eacute carregada positivamente e a retina que eacute carregada negativamente Um esquemade como funciona esse dipolo pode ser visto na Figura 26

Figura 26 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3])

Como funciona a mediccedilatildeo do EOG

Dois eletrodos satildeo posicionados em cada lado esquerdo e direito de cada olho Amovimentaccedilatildeo dos olhos vai causar a diferenccedila de potencial fazendo a coacuternea carregadapositivamente car mais proacutexima de um dos eletrodos e consequentemente a retina car-regada negativamente car mais distante de um dos eletrodos Entatildeo cresce a tensatildeoeleacutetrica de um lado e decresce do outro O piscar de olhos provoca uma diferenccedila de po-tencial e tambeacutem inuencia o sinal de EEG A Figura 27 mostra como satildeo posicionadosesses eletrodos para medir a diferenccedila de potencial

9

Figura 27 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5])

No trabalho em questatildeo natildeo foi possiacutevel medir a diferenccedila de potencial ocasionadapelo movimentar dos olhos portanto esse eacute um ruiacutedo que natildeo foi tratado

222 Eletrocardiograma

Um exame bastante interessante eacute o eletrocardiograma (ECG) A cada batida docoraccedilatildeo o electrocardioacutegrafo grava a diferenccedila de potencial no muacutesculo cardiacuteaco causadapela sua despolarizaccedilatildeo Ou seja ele registra a variaccedilatildeo eleacutetrica da atividade do coraccedilatildeo

Essa atividade do coraccedilatildeo pode vir a atrapalhar os sinais de EEG como pode-se notarna Figura 28 Em azul tem-se o sinal do EEG puro antes de ser retirado o ECG Emverde tem-se o sinal do ECG e em vermelho notamos a diferenccedila que acontece no sinalde EEG quando o artefato ECG eacute retirado

Figura 28 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada doartefato de ECG (Adaptado de [35])

223 Eletromiograa

O sinal eletromiograacuteco (EMG) eacute a soma algeacutebrica de todos os sinais detectados emcerta aacuterea podendo ser afetado por propriedades musculares anatocircmicas e sioloacutegicasassim como pelo controle do sistema nervoso perifeacuterico e a instrumentaccedilatildeo utilizada paraa aquisiccedilatildeo dos sinais [13] O eletromioacutegrafo eacute um aparelho que adquire o sinal EMG

10

possibilitando o exame da eletromiograa (ver Figura 29) Ele fornece informaccedilotildees rele-vantes sobre a ativaccedilatildeo da musculatura envolvida em um movimento e a intensidade desua ativaccedilatildeo Qualquer movimentaccedilatildeo ou contraccedilatildeo dos muacutesculos da face afeta o sinal deEEG como por exemplo apertar os dentes contrair a testa etc

Figura 29 Sinal de EMG [2])

23 Artefatos teacutecnicos

Satildeo os tambeacutem chamados artefatos extrasioloacutegicos Natildeo dependem do ser humanomas sim do ambiente em que o usuaacuterio se encontra ou dos possiacuteveis eventos que ocorram

231 Frequecircncia de 5060 Hz

Um dos artefatos mais comuns existentes eacute o da interferecircncia causada pela correnteeleacutetrica Estatildeo indicadas duas frequecircncias pois a faixa normal de interferecircncia variade local para local no mundo Por exemplo na Ameacuterica do Norte eacute em torno de 60Hzenquanto na maioria dos outros paiacuteses ca em torno de 50 Hz Para tratar deste artefatousualmente coloca-se um ltro notch nessa faixa de frequecircncia e em seus respectivosharmocircnicos como por exemplo para o Brasil 60Hz 120Hz 180Hz etc

232 Artefato do amplicador

Eacute uma interferecircncia com pequena amplitude mas que tambeacutem merece alguma atenccedilatildeoNa Figura 210 em azul temos o sinal do EEG e em verde pode-se notar a pequenaamplitude do artefato gerado pelo amplicador

11

Figura 210 Artefato do amplicador analisado em graacuteco (Adaptado de [34])

24 Imageacutetica Motora

Depois de entender melhor como funciona todo o processo por traacutes da mediccedilatildeo doEEG torna-se interessante saber como isso se relaciona agrave praacutetica produzindo ao naldo processo o efeito esperado que eacute o deslocamento virtual de objetos usando apenas ainterpretaccedilatildeo dos sinais gerados pelo pensamento

O centro desse processo eacute a imageacutetica motora Ela pode ser denida como um estadodinacircmico durante a imaginaccedilatildeo que um indiviacuteduo faz de uma determinada accedilatildeo intenci-onada Este fenocircmeno implica que o sujeito sinta que realmente estaacute realizando a accedilatildeoimaginada sicamente seja ela de movimentar um braccedilo ou talvez empurrar um objeto[10]

A imageacutetica motora vem mostrando vaacuterios bons resultados em sua aplicaccedilatildeo Comoexemplo temos a ocorrecircncia do fenocircmeno na teacutecnica de aprendizado motor Os atletasutilizam a imaginaccedilatildeo de movimentos que seratildeo executados nos exerciacutecios de fato assimtrazem benefiacutecios no aquecimento relaxamento e concentraccedilatildeo [38] Outro exemplo in-teressante eacute o dos muacutesicos que ao utilizaacute-la possibilitam o aprendizado de partituras demaneira mais eciente [20]

Segundo o siologista sueco Hesslow [15] para o ceacuterebro a simulaccedilatildeo hipoteacutetica deestados consiste em trecircs premissas fundamentais

1 Imaginaccedilatildeo de accedilotildees ativa as estruturas motoras do ceacuterebro de tal forma que elasremetam agrave atividade que ocorre durante uma accedilatildeo normal de movimento entretantosem nenhum movimento evidente

2 Imaginaccedilatildeo de percepccedilatildeo a imaginaccedilatildeo de estar percebendo uma atividade eacute omesmo que realmente estar percebendo algo Em sua essecircncia a atividade de per-cepccedilatildeo eacute gerada pelo proacuteprio ceacuterebro em depreciaccedilatildeo de estiacutemulos externos

12

Letra Localizaccedilatildeo

A Loacutebulo da orelhaC CentralP ParietalF FrontalFp Frontal polarO OcipitalT Temporal

Tabela 21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22])

3 Antecipaccedilatildeo uma accedilatildeo simulada pode provocar a atividade perceptiva que remeteagravequela que deveria ter acontecido se a accedilatildeo fosse executada de fato

Devido a esses fatores a simulaccedilatildeo mental pode ser utilizada como uma ferramentarepresentativa para o entendimento da mente Isso permite que os diversos estados mentaispossam ser explorados possibilitando relacionar as aacutereas especiacutecas do ceacuterebro que satildeomais ativadas devido a certos sentimentos desejos ou talvez intenccedilotildees Assim a simulaccedilatildeomental contribui para o avanccedilo em diversas aacutereas tais como a psicologia e outras

25 Emotiv Epoc

A m de analisar a imaginaccedilatildeo e os efeitos que ela tem sobre o nosso corpo e mentecientistas atraveacutes da busca constante de avanccedilos chegaram agrave utilizaccedilatildeo de um capaceteneural para mediccedilatildeo efetiva de estiacutemulos demonstrados pela captaccedilatildeo do sinal de EEGComo ilustrado na Figura 11a o custo-benefiacutecio de capacete que melhor atendeu o grupono projeto de pesquisa foi o do Emotiv Epoc Seus detalhes de organizaccedilatildeo e funcionamentosatildeo mostrados a seguir

251 Posicionamento de eletrodos

A Federaccedilatildeo Internacional de Neuropsicologia recomenda a utilizaccedilatildeo do modelo 10-20para ateacute 21 eletrodos [11] de acordo com a Figura 211 Nesse modelo todos os eletrodosse encontram a uma distacircncia de seus eletrodos vizinhos de 10 ou 20 da distacircncia totalda cabeccedila A cada posiccedilatildeo eacute dado um identicador de uma ou duas letras e um nuacutemerode acordo com sua proximidade a alguma parte do ceacuterebro (veja tabela 21) Nuacutemerospares estatildeo agrave direita e nuacutemeros iacutempares agrave esquerda

A sociedade Americana de EEG sugeriu nos seus guias [16] que novos eletrodos sejamcolocados de maneira equidistante dos 21 eletrodos jaacute denidos na Figura 212 caso sejanecessaacuterio um nuacutemero maior de eletrodos

13

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 20: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Figura 23 Potencial de neurocircnios em paralelo se propagando e sendo entatildeo detectadospelo eletrodo do capacete [42]

A ativaccedilatildeo de neurotransmissores do axocircnio terminal para as sinapses ocorre quandoum potencial de accedilatildeo atinge o m de um axocircnio Existem dois tipos de neurotransmissores

1 o primeiro causa um inuxo

2 o segundo causa um escoamento de iacuteons positivos

Assim os neurotransmissores ativados conseguem inuenciar a mudanccedila de potencialdo neurocircnio subsequente agrave sinapse mudando a permeabilidade da sua membrana Onome dado a essa mudanccedila de potencial do neurocircnio subsequente eacute potencial poacutes-sinaacutepticoexcitatoacuterio quando for uma mudanccedila positiva e potencial poacutes-sinaacuteptico inibitoacuterio quandonegativa Esses potenciais duram em meacutedia 100ms e variam sua amplitude entre 50e 100mV Na Figura 24 podemos ver um salto quacircntico de potencial de accedilatildeo de umneurocircnio para sinal de EEG

7

Figura 24 Eletroencefalograa claacutessica (Adapatado de [9])

22 Artefatos bioloacutegicos

Artefatos bioloacutegicos satildeo atividades causadas pelo sujeito mas natildeo ligadas agrave atividadecerebral de fato Agraves vezes satildeo chamados de artefatos sioloacutegicos [2] Os artefatos tecircm atendecircncia de ter uma amplitude mais forte que a de um sinal de EEG puro sendo assimum componente signicante obtido no EEG pois pode vir a atrapalhar sua mediccedilatildeotornando-a ineciente Eacute considerado como um ruiacutedo Desse modo se torna necessaacuteriofazer consideraccedilotildees especiais sobre os artefatos

221 Eletrooculograma

O EOG eacute um tipo de artefato relacionado agrave estrutura ocular do indiviacuteduo Ele vemdo movimento dos olhos para os lados ou para cima e das possiacuteveis piscadas pois essesmovimentos causam alteraccedilatildeo do campo eleacutetrico ocular Na Figura 25 mostramos doque eacute feito o olho humano

8

Figura 25 Estrutura do olho e suas partes nomeadas (Adaptado de [3])

O campo eleacutetrico do olho se origina da diferenccedila de potencial causada entre a coacuterneaque eacute carregada positivamente e a retina que eacute carregada negativamente Um esquemade como funciona esse dipolo pode ser visto na Figura 26

Figura 26 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3])

Como funciona a mediccedilatildeo do EOG

Dois eletrodos satildeo posicionados em cada lado esquerdo e direito de cada olho Amovimentaccedilatildeo dos olhos vai causar a diferenccedila de potencial fazendo a coacuternea carregadapositivamente car mais proacutexima de um dos eletrodos e consequentemente a retina car-regada negativamente car mais distante de um dos eletrodos Entatildeo cresce a tensatildeoeleacutetrica de um lado e decresce do outro O piscar de olhos provoca uma diferenccedila de po-tencial e tambeacutem inuencia o sinal de EEG A Figura 27 mostra como satildeo posicionadosesses eletrodos para medir a diferenccedila de potencial

9

Figura 27 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5])

No trabalho em questatildeo natildeo foi possiacutevel medir a diferenccedila de potencial ocasionadapelo movimentar dos olhos portanto esse eacute um ruiacutedo que natildeo foi tratado

222 Eletrocardiograma

Um exame bastante interessante eacute o eletrocardiograma (ECG) A cada batida docoraccedilatildeo o electrocardioacutegrafo grava a diferenccedila de potencial no muacutesculo cardiacuteaco causadapela sua despolarizaccedilatildeo Ou seja ele registra a variaccedilatildeo eleacutetrica da atividade do coraccedilatildeo

Essa atividade do coraccedilatildeo pode vir a atrapalhar os sinais de EEG como pode-se notarna Figura 28 Em azul tem-se o sinal do EEG puro antes de ser retirado o ECG Emverde tem-se o sinal do ECG e em vermelho notamos a diferenccedila que acontece no sinalde EEG quando o artefato ECG eacute retirado

Figura 28 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada doartefato de ECG (Adaptado de [35])

223 Eletromiograa

O sinal eletromiograacuteco (EMG) eacute a soma algeacutebrica de todos os sinais detectados emcerta aacuterea podendo ser afetado por propriedades musculares anatocircmicas e sioloacutegicasassim como pelo controle do sistema nervoso perifeacuterico e a instrumentaccedilatildeo utilizada paraa aquisiccedilatildeo dos sinais [13] O eletromioacutegrafo eacute um aparelho que adquire o sinal EMG

10

possibilitando o exame da eletromiograa (ver Figura 29) Ele fornece informaccedilotildees rele-vantes sobre a ativaccedilatildeo da musculatura envolvida em um movimento e a intensidade desua ativaccedilatildeo Qualquer movimentaccedilatildeo ou contraccedilatildeo dos muacutesculos da face afeta o sinal deEEG como por exemplo apertar os dentes contrair a testa etc

Figura 29 Sinal de EMG [2])

23 Artefatos teacutecnicos

Satildeo os tambeacutem chamados artefatos extrasioloacutegicos Natildeo dependem do ser humanomas sim do ambiente em que o usuaacuterio se encontra ou dos possiacuteveis eventos que ocorram

231 Frequecircncia de 5060 Hz

Um dos artefatos mais comuns existentes eacute o da interferecircncia causada pela correnteeleacutetrica Estatildeo indicadas duas frequecircncias pois a faixa normal de interferecircncia variade local para local no mundo Por exemplo na Ameacuterica do Norte eacute em torno de 60Hzenquanto na maioria dos outros paiacuteses ca em torno de 50 Hz Para tratar deste artefatousualmente coloca-se um ltro notch nessa faixa de frequecircncia e em seus respectivosharmocircnicos como por exemplo para o Brasil 60Hz 120Hz 180Hz etc

232 Artefato do amplicador

Eacute uma interferecircncia com pequena amplitude mas que tambeacutem merece alguma atenccedilatildeoNa Figura 210 em azul temos o sinal do EEG e em verde pode-se notar a pequenaamplitude do artefato gerado pelo amplicador

11

Figura 210 Artefato do amplicador analisado em graacuteco (Adaptado de [34])

24 Imageacutetica Motora

Depois de entender melhor como funciona todo o processo por traacutes da mediccedilatildeo doEEG torna-se interessante saber como isso se relaciona agrave praacutetica produzindo ao naldo processo o efeito esperado que eacute o deslocamento virtual de objetos usando apenas ainterpretaccedilatildeo dos sinais gerados pelo pensamento

O centro desse processo eacute a imageacutetica motora Ela pode ser denida como um estadodinacircmico durante a imaginaccedilatildeo que um indiviacuteduo faz de uma determinada accedilatildeo intenci-onada Este fenocircmeno implica que o sujeito sinta que realmente estaacute realizando a accedilatildeoimaginada sicamente seja ela de movimentar um braccedilo ou talvez empurrar um objeto[10]

A imageacutetica motora vem mostrando vaacuterios bons resultados em sua aplicaccedilatildeo Comoexemplo temos a ocorrecircncia do fenocircmeno na teacutecnica de aprendizado motor Os atletasutilizam a imaginaccedilatildeo de movimentos que seratildeo executados nos exerciacutecios de fato assimtrazem benefiacutecios no aquecimento relaxamento e concentraccedilatildeo [38] Outro exemplo in-teressante eacute o dos muacutesicos que ao utilizaacute-la possibilitam o aprendizado de partituras demaneira mais eciente [20]

Segundo o siologista sueco Hesslow [15] para o ceacuterebro a simulaccedilatildeo hipoteacutetica deestados consiste em trecircs premissas fundamentais

1 Imaginaccedilatildeo de accedilotildees ativa as estruturas motoras do ceacuterebro de tal forma que elasremetam agrave atividade que ocorre durante uma accedilatildeo normal de movimento entretantosem nenhum movimento evidente

2 Imaginaccedilatildeo de percepccedilatildeo a imaginaccedilatildeo de estar percebendo uma atividade eacute omesmo que realmente estar percebendo algo Em sua essecircncia a atividade de per-cepccedilatildeo eacute gerada pelo proacuteprio ceacuterebro em depreciaccedilatildeo de estiacutemulos externos

12

Letra Localizaccedilatildeo

A Loacutebulo da orelhaC CentralP ParietalF FrontalFp Frontal polarO OcipitalT Temporal

Tabela 21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22])

3 Antecipaccedilatildeo uma accedilatildeo simulada pode provocar a atividade perceptiva que remeteagravequela que deveria ter acontecido se a accedilatildeo fosse executada de fato

Devido a esses fatores a simulaccedilatildeo mental pode ser utilizada como uma ferramentarepresentativa para o entendimento da mente Isso permite que os diversos estados mentaispossam ser explorados possibilitando relacionar as aacutereas especiacutecas do ceacuterebro que satildeomais ativadas devido a certos sentimentos desejos ou talvez intenccedilotildees Assim a simulaccedilatildeomental contribui para o avanccedilo em diversas aacutereas tais como a psicologia e outras

25 Emotiv Epoc

A m de analisar a imaginaccedilatildeo e os efeitos que ela tem sobre o nosso corpo e mentecientistas atraveacutes da busca constante de avanccedilos chegaram agrave utilizaccedilatildeo de um capaceteneural para mediccedilatildeo efetiva de estiacutemulos demonstrados pela captaccedilatildeo do sinal de EEGComo ilustrado na Figura 11a o custo-benefiacutecio de capacete que melhor atendeu o grupono projeto de pesquisa foi o do Emotiv Epoc Seus detalhes de organizaccedilatildeo e funcionamentosatildeo mostrados a seguir

251 Posicionamento de eletrodos

A Federaccedilatildeo Internacional de Neuropsicologia recomenda a utilizaccedilatildeo do modelo 10-20para ateacute 21 eletrodos [11] de acordo com a Figura 211 Nesse modelo todos os eletrodosse encontram a uma distacircncia de seus eletrodos vizinhos de 10 ou 20 da distacircncia totalda cabeccedila A cada posiccedilatildeo eacute dado um identicador de uma ou duas letras e um nuacutemerode acordo com sua proximidade a alguma parte do ceacuterebro (veja tabela 21) Nuacutemerospares estatildeo agrave direita e nuacutemeros iacutempares agrave esquerda

A sociedade Americana de EEG sugeriu nos seus guias [16] que novos eletrodos sejamcolocados de maneira equidistante dos 21 eletrodos jaacute denidos na Figura 212 caso sejanecessaacuterio um nuacutemero maior de eletrodos

13

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 21: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Figura 24 Eletroencefalograa claacutessica (Adapatado de [9])

22 Artefatos bioloacutegicos

Artefatos bioloacutegicos satildeo atividades causadas pelo sujeito mas natildeo ligadas agrave atividadecerebral de fato Agraves vezes satildeo chamados de artefatos sioloacutegicos [2] Os artefatos tecircm atendecircncia de ter uma amplitude mais forte que a de um sinal de EEG puro sendo assimum componente signicante obtido no EEG pois pode vir a atrapalhar sua mediccedilatildeotornando-a ineciente Eacute considerado como um ruiacutedo Desse modo se torna necessaacuteriofazer consideraccedilotildees especiais sobre os artefatos

221 Eletrooculograma

O EOG eacute um tipo de artefato relacionado agrave estrutura ocular do indiviacuteduo Ele vemdo movimento dos olhos para os lados ou para cima e das possiacuteveis piscadas pois essesmovimentos causam alteraccedilatildeo do campo eleacutetrico ocular Na Figura 25 mostramos doque eacute feito o olho humano

8

Figura 25 Estrutura do olho e suas partes nomeadas (Adaptado de [3])

O campo eleacutetrico do olho se origina da diferenccedila de potencial causada entre a coacuterneaque eacute carregada positivamente e a retina que eacute carregada negativamente Um esquemade como funciona esse dipolo pode ser visto na Figura 26

Figura 26 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3])

Como funciona a mediccedilatildeo do EOG

Dois eletrodos satildeo posicionados em cada lado esquerdo e direito de cada olho Amovimentaccedilatildeo dos olhos vai causar a diferenccedila de potencial fazendo a coacuternea carregadapositivamente car mais proacutexima de um dos eletrodos e consequentemente a retina car-regada negativamente car mais distante de um dos eletrodos Entatildeo cresce a tensatildeoeleacutetrica de um lado e decresce do outro O piscar de olhos provoca uma diferenccedila de po-tencial e tambeacutem inuencia o sinal de EEG A Figura 27 mostra como satildeo posicionadosesses eletrodos para medir a diferenccedila de potencial

9

Figura 27 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5])

No trabalho em questatildeo natildeo foi possiacutevel medir a diferenccedila de potencial ocasionadapelo movimentar dos olhos portanto esse eacute um ruiacutedo que natildeo foi tratado

222 Eletrocardiograma

Um exame bastante interessante eacute o eletrocardiograma (ECG) A cada batida docoraccedilatildeo o electrocardioacutegrafo grava a diferenccedila de potencial no muacutesculo cardiacuteaco causadapela sua despolarizaccedilatildeo Ou seja ele registra a variaccedilatildeo eleacutetrica da atividade do coraccedilatildeo

Essa atividade do coraccedilatildeo pode vir a atrapalhar os sinais de EEG como pode-se notarna Figura 28 Em azul tem-se o sinal do EEG puro antes de ser retirado o ECG Emverde tem-se o sinal do ECG e em vermelho notamos a diferenccedila que acontece no sinalde EEG quando o artefato ECG eacute retirado

Figura 28 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada doartefato de ECG (Adaptado de [35])

223 Eletromiograa

O sinal eletromiograacuteco (EMG) eacute a soma algeacutebrica de todos os sinais detectados emcerta aacuterea podendo ser afetado por propriedades musculares anatocircmicas e sioloacutegicasassim como pelo controle do sistema nervoso perifeacuterico e a instrumentaccedilatildeo utilizada paraa aquisiccedilatildeo dos sinais [13] O eletromioacutegrafo eacute um aparelho que adquire o sinal EMG

10

possibilitando o exame da eletromiograa (ver Figura 29) Ele fornece informaccedilotildees rele-vantes sobre a ativaccedilatildeo da musculatura envolvida em um movimento e a intensidade desua ativaccedilatildeo Qualquer movimentaccedilatildeo ou contraccedilatildeo dos muacutesculos da face afeta o sinal deEEG como por exemplo apertar os dentes contrair a testa etc

Figura 29 Sinal de EMG [2])

23 Artefatos teacutecnicos

Satildeo os tambeacutem chamados artefatos extrasioloacutegicos Natildeo dependem do ser humanomas sim do ambiente em que o usuaacuterio se encontra ou dos possiacuteveis eventos que ocorram

231 Frequecircncia de 5060 Hz

Um dos artefatos mais comuns existentes eacute o da interferecircncia causada pela correnteeleacutetrica Estatildeo indicadas duas frequecircncias pois a faixa normal de interferecircncia variade local para local no mundo Por exemplo na Ameacuterica do Norte eacute em torno de 60Hzenquanto na maioria dos outros paiacuteses ca em torno de 50 Hz Para tratar deste artefatousualmente coloca-se um ltro notch nessa faixa de frequecircncia e em seus respectivosharmocircnicos como por exemplo para o Brasil 60Hz 120Hz 180Hz etc

232 Artefato do amplicador

Eacute uma interferecircncia com pequena amplitude mas que tambeacutem merece alguma atenccedilatildeoNa Figura 210 em azul temos o sinal do EEG e em verde pode-se notar a pequenaamplitude do artefato gerado pelo amplicador

11

Figura 210 Artefato do amplicador analisado em graacuteco (Adaptado de [34])

24 Imageacutetica Motora

Depois de entender melhor como funciona todo o processo por traacutes da mediccedilatildeo doEEG torna-se interessante saber como isso se relaciona agrave praacutetica produzindo ao naldo processo o efeito esperado que eacute o deslocamento virtual de objetos usando apenas ainterpretaccedilatildeo dos sinais gerados pelo pensamento

O centro desse processo eacute a imageacutetica motora Ela pode ser denida como um estadodinacircmico durante a imaginaccedilatildeo que um indiviacuteduo faz de uma determinada accedilatildeo intenci-onada Este fenocircmeno implica que o sujeito sinta que realmente estaacute realizando a accedilatildeoimaginada sicamente seja ela de movimentar um braccedilo ou talvez empurrar um objeto[10]

A imageacutetica motora vem mostrando vaacuterios bons resultados em sua aplicaccedilatildeo Comoexemplo temos a ocorrecircncia do fenocircmeno na teacutecnica de aprendizado motor Os atletasutilizam a imaginaccedilatildeo de movimentos que seratildeo executados nos exerciacutecios de fato assimtrazem benefiacutecios no aquecimento relaxamento e concentraccedilatildeo [38] Outro exemplo in-teressante eacute o dos muacutesicos que ao utilizaacute-la possibilitam o aprendizado de partituras demaneira mais eciente [20]

Segundo o siologista sueco Hesslow [15] para o ceacuterebro a simulaccedilatildeo hipoteacutetica deestados consiste em trecircs premissas fundamentais

1 Imaginaccedilatildeo de accedilotildees ativa as estruturas motoras do ceacuterebro de tal forma que elasremetam agrave atividade que ocorre durante uma accedilatildeo normal de movimento entretantosem nenhum movimento evidente

2 Imaginaccedilatildeo de percepccedilatildeo a imaginaccedilatildeo de estar percebendo uma atividade eacute omesmo que realmente estar percebendo algo Em sua essecircncia a atividade de per-cepccedilatildeo eacute gerada pelo proacuteprio ceacuterebro em depreciaccedilatildeo de estiacutemulos externos

12

Letra Localizaccedilatildeo

A Loacutebulo da orelhaC CentralP ParietalF FrontalFp Frontal polarO OcipitalT Temporal

Tabela 21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22])

3 Antecipaccedilatildeo uma accedilatildeo simulada pode provocar a atividade perceptiva que remeteagravequela que deveria ter acontecido se a accedilatildeo fosse executada de fato

Devido a esses fatores a simulaccedilatildeo mental pode ser utilizada como uma ferramentarepresentativa para o entendimento da mente Isso permite que os diversos estados mentaispossam ser explorados possibilitando relacionar as aacutereas especiacutecas do ceacuterebro que satildeomais ativadas devido a certos sentimentos desejos ou talvez intenccedilotildees Assim a simulaccedilatildeomental contribui para o avanccedilo em diversas aacutereas tais como a psicologia e outras

25 Emotiv Epoc

A m de analisar a imaginaccedilatildeo e os efeitos que ela tem sobre o nosso corpo e mentecientistas atraveacutes da busca constante de avanccedilos chegaram agrave utilizaccedilatildeo de um capaceteneural para mediccedilatildeo efetiva de estiacutemulos demonstrados pela captaccedilatildeo do sinal de EEGComo ilustrado na Figura 11a o custo-benefiacutecio de capacete que melhor atendeu o grupono projeto de pesquisa foi o do Emotiv Epoc Seus detalhes de organizaccedilatildeo e funcionamentosatildeo mostrados a seguir

251 Posicionamento de eletrodos

A Federaccedilatildeo Internacional de Neuropsicologia recomenda a utilizaccedilatildeo do modelo 10-20para ateacute 21 eletrodos [11] de acordo com a Figura 211 Nesse modelo todos os eletrodosse encontram a uma distacircncia de seus eletrodos vizinhos de 10 ou 20 da distacircncia totalda cabeccedila A cada posiccedilatildeo eacute dado um identicador de uma ou duas letras e um nuacutemerode acordo com sua proximidade a alguma parte do ceacuterebro (veja tabela 21) Nuacutemerospares estatildeo agrave direita e nuacutemeros iacutempares agrave esquerda

A sociedade Americana de EEG sugeriu nos seus guias [16] que novos eletrodos sejamcolocados de maneira equidistante dos 21 eletrodos jaacute denidos na Figura 212 caso sejanecessaacuterio um nuacutemero maior de eletrodos

13

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 22: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Figura 25 Estrutura do olho e suas partes nomeadas (Adaptado de [3])

O campo eleacutetrico do olho se origina da diferenccedila de potencial causada entre a coacuterneaque eacute carregada positivamente e a retina que eacute carregada negativamente Um esquemade como funciona esse dipolo pode ser visto na Figura 26

Figura 26 Demonstraccedilatildeo do dipolo do olho (Adaptado de [3])

Como funciona a mediccedilatildeo do EOG

Dois eletrodos satildeo posicionados em cada lado esquerdo e direito de cada olho Amovimentaccedilatildeo dos olhos vai causar a diferenccedila de potencial fazendo a coacuternea carregadapositivamente car mais proacutexima de um dos eletrodos e consequentemente a retina car-regada negativamente car mais distante de um dos eletrodos Entatildeo cresce a tensatildeoeleacutetrica de um lado e decresce do outro O piscar de olhos provoca uma diferenccedila de po-tencial e tambeacutem inuencia o sinal de EEG A Figura 27 mostra como satildeo posicionadosesses eletrodos para medir a diferenccedila de potencial

9

Figura 27 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5])

No trabalho em questatildeo natildeo foi possiacutevel medir a diferenccedila de potencial ocasionadapelo movimentar dos olhos portanto esse eacute um ruiacutedo que natildeo foi tratado

222 Eletrocardiograma

Um exame bastante interessante eacute o eletrocardiograma (ECG) A cada batida docoraccedilatildeo o electrocardioacutegrafo grava a diferenccedila de potencial no muacutesculo cardiacuteaco causadapela sua despolarizaccedilatildeo Ou seja ele registra a variaccedilatildeo eleacutetrica da atividade do coraccedilatildeo

Essa atividade do coraccedilatildeo pode vir a atrapalhar os sinais de EEG como pode-se notarna Figura 28 Em azul tem-se o sinal do EEG puro antes de ser retirado o ECG Emverde tem-se o sinal do ECG e em vermelho notamos a diferenccedila que acontece no sinalde EEG quando o artefato ECG eacute retirado

Figura 28 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada doartefato de ECG (Adaptado de [35])

223 Eletromiograa

O sinal eletromiograacuteco (EMG) eacute a soma algeacutebrica de todos os sinais detectados emcerta aacuterea podendo ser afetado por propriedades musculares anatocircmicas e sioloacutegicasassim como pelo controle do sistema nervoso perifeacuterico e a instrumentaccedilatildeo utilizada paraa aquisiccedilatildeo dos sinais [13] O eletromioacutegrafo eacute um aparelho que adquire o sinal EMG

10

possibilitando o exame da eletromiograa (ver Figura 29) Ele fornece informaccedilotildees rele-vantes sobre a ativaccedilatildeo da musculatura envolvida em um movimento e a intensidade desua ativaccedilatildeo Qualquer movimentaccedilatildeo ou contraccedilatildeo dos muacutesculos da face afeta o sinal deEEG como por exemplo apertar os dentes contrair a testa etc

Figura 29 Sinal de EMG [2])

23 Artefatos teacutecnicos

Satildeo os tambeacutem chamados artefatos extrasioloacutegicos Natildeo dependem do ser humanomas sim do ambiente em que o usuaacuterio se encontra ou dos possiacuteveis eventos que ocorram

231 Frequecircncia de 5060 Hz

Um dos artefatos mais comuns existentes eacute o da interferecircncia causada pela correnteeleacutetrica Estatildeo indicadas duas frequecircncias pois a faixa normal de interferecircncia variade local para local no mundo Por exemplo na Ameacuterica do Norte eacute em torno de 60Hzenquanto na maioria dos outros paiacuteses ca em torno de 50 Hz Para tratar deste artefatousualmente coloca-se um ltro notch nessa faixa de frequecircncia e em seus respectivosharmocircnicos como por exemplo para o Brasil 60Hz 120Hz 180Hz etc

232 Artefato do amplicador

Eacute uma interferecircncia com pequena amplitude mas que tambeacutem merece alguma atenccedilatildeoNa Figura 210 em azul temos o sinal do EEG e em verde pode-se notar a pequenaamplitude do artefato gerado pelo amplicador

11

Figura 210 Artefato do amplicador analisado em graacuteco (Adaptado de [34])

24 Imageacutetica Motora

Depois de entender melhor como funciona todo o processo por traacutes da mediccedilatildeo doEEG torna-se interessante saber como isso se relaciona agrave praacutetica produzindo ao naldo processo o efeito esperado que eacute o deslocamento virtual de objetos usando apenas ainterpretaccedilatildeo dos sinais gerados pelo pensamento

O centro desse processo eacute a imageacutetica motora Ela pode ser denida como um estadodinacircmico durante a imaginaccedilatildeo que um indiviacuteduo faz de uma determinada accedilatildeo intenci-onada Este fenocircmeno implica que o sujeito sinta que realmente estaacute realizando a accedilatildeoimaginada sicamente seja ela de movimentar um braccedilo ou talvez empurrar um objeto[10]

A imageacutetica motora vem mostrando vaacuterios bons resultados em sua aplicaccedilatildeo Comoexemplo temos a ocorrecircncia do fenocircmeno na teacutecnica de aprendizado motor Os atletasutilizam a imaginaccedilatildeo de movimentos que seratildeo executados nos exerciacutecios de fato assimtrazem benefiacutecios no aquecimento relaxamento e concentraccedilatildeo [38] Outro exemplo in-teressante eacute o dos muacutesicos que ao utilizaacute-la possibilitam o aprendizado de partituras demaneira mais eciente [20]

Segundo o siologista sueco Hesslow [15] para o ceacuterebro a simulaccedilatildeo hipoteacutetica deestados consiste em trecircs premissas fundamentais

1 Imaginaccedilatildeo de accedilotildees ativa as estruturas motoras do ceacuterebro de tal forma que elasremetam agrave atividade que ocorre durante uma accedilatildeo normal de movimento entretantosem nenhum movimento evidente

2 Imaginaccedilatildeo de percepccedilatildeo a imaginaccedilatildeo de estar percebendo uma atividade eacute omesmo que realmente estar percebendo algo Em sua essecircncia a atividade de per-cepccedilatildeo eacute gerada pelo proacuteprio ceacuterebro em depreciaccedilatildeo de estiacutemulos externos

12

Letra Localizaccedilatildeo

A Loacutebulo da orelhaC CentralP ParietalF FrontalFp Frontal polarO OcipitalT Temporal

Tabela 21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22])

3 Antecipaccedilatildeo uma accedilatildeo simulada pode provocar a atividade perceptiva que remeteagravequela que deveria ter acontecido se a accedilatildeo fosse executada de fato

Devido a esses fatores a simulaccedilatildeo mental pode ser utilizada como uma ferramentarepresentativa para o entendimento da mente Isso permite que os diversos estados mentaispossam ser explorados possibilitando relacionar as aacutereas especiacutecas do ceacuterebro que satildeomais ativadas devido a certos sentimentos desejos ou talvez intenccedilotildees Assim a simulaccedilatildeomental contribui para o avanccedilo em diversas aacutereas tais como a psicologia e outras

25 Emotiv Epoc

A m de analisar a imaginaccedilatildeo e os efeitos que ela tem sobre o nosso corpo e mentecientistas atraveacutes da busca constante de avanccedilos chegaram agrave utilizaccedilatildeo de um capaceteneural para mediccedilatildeo efetiva de estiacutemulos demonstrados pela captaccedilatildeo do sinal de EEGComo ilustrado na Figura 11a o custo-benefiacutecio de capacete que melhor atendeu o grupono projeto de pesquisa foi o do Emotiv Epoc Seus detalhes de organizaccedilatildeo e funcionamentosatildeo mostrados a seguir

251 Posicionamento de eletrodos

A Federaccedilatildeo Internacional de Neuropsicologia recomenda a utilizaccedilatildeo do modelo 10-20para ateacute 21 eletrodos [11] de acordo com a Figura 211 Nesse modelo todos os eletrodosse encontram a uma distacircncia de seus eletrodos vizinhos de 10 ou 20 da distacircncia totalda cabeccedila A cada posiccedilatildeo eacute dado um identicador de uma ou duas letras e um nuacutemerode acordo com sua proximidade a alguma parte do ceacuterebro (veja tabela 21) Nuacutemerospares estatildeo agrave direita e nuacutemeros iacutempares agrave esquerda

A sociedade Americana de EEG sugeriu nos seus guias [16] que novos eletrodos sejamcolocados de maneira equidistante dos 21 eletrodos jaacute denidos na Figura 212 caso sejanecessaacuterio um nuacutemero maior de eletrodos

13

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 23: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Figura 27 Posicionamento dos eletrodos para se medir o EOG (Adaptado de [5])

No trabalho em questatildeo natildeo foi possiacutevel medir a diferenccedila de potencial ocasionadapelo movimentar dos olhos portanto esse eacute um ruiacutedo que natildeo foi tratado

222 Eletrocardiograma

Um exame bastante interessante eacute o eletrocardiograma (ECG) A cada batida docoraccedilatildeo o electrocardioacutegrafo grava a diferenccedila de potencial no muacutesculo cardiacuteaco causadapela sua despolarizaccedilatildeo Ou seja ele registra a variaccedilatildeo eleacutetrica da atividade do coraccedilatildeo

Essa atividade do coraccedilatildeo pode vir a atrapalhar os sinais de EEG como pode-se notarna Figura 28 Em azul tem-se o sinal do EEG puro antes de ser retirado o ECG Emverde tem-se o sinal do ECG e em vermelho notamos a diferenccedila que acontece no sinalde EEG quando o artefato ECG eacute retirado

Figura 28 Sinal de EEG e do eletrocardiograma EEG antes e depois da retirada doartefato de ECG (Adaptado de [35])

223 Eletromiograa

O sinal eletromiograacuteco (EMG) eacute a soma algeacutebrica de todos os sinais detectados emcerta aacuterea podendo ser afetado por propriedades musculares anatocircmicas e sioloacutegicasassim como pelo controle do sistema nervoso perifeacuterico e a instrumentaccedilatildeo utilizada paraa aquisiccedilatildeo dos sinais [13] O eletromioacutegrafo eacute um aparelho que adquire o sinal EMG

10

possibilitando o exame da eletromiograa (ver Figura 29) Ele fornece informaccedilotildees rele-vantes sobre a ativaccedilatildeo da musculatura envolvida em um movimento e a intensidade desua ativaccedilatildeo Qualquer movimentaccedilatildeo ou contraccedilatildeo dos muacutesculos da face afeta o sinal deEEG como por exemplo apertar os dentes contrair a testa etc

Figura 29 Sinal de EMG [2])

23 Artefatos teacutecnicos

Satildeo os tambeacutem chamados artefatos extrasioloacutegicos Natildeo dependem do ser humanomas sim do ambiente em que o usuaacuterio se encontra ou dos possiacuteveis eventos que ocorram

231 Frequecircncia de 5060 Hz

Um dos artefatos mais comuns existentes eacute o da interferecircncia causada pela correnteeleacutetrica Estatildeo indicadas duas frequecircncias pois a faixa normal de interferecircncia variade local para local no mundo Por exemplo na Ameacuterica do Norte eacute em torno de 60Hzenquanto na maioria dos outros paiacuteses ca em torno de 50 Hz Para tratar deste artefatousualmente coloca-se um ltro notch nessa faixa de frequecircncia e em seus respectivosharmocircnicos como por exemplo para o Brasil 60Hz 120Hz 180Hz etc

232 Artefato do amplicador

Eacute uma interferecircncia com pequena amplitude mas que tambeacutem merece alguma atenccedilatildeoNa Figura 210 em azul temos o sinal do EEG e em verde pode-se notar a pequenaamplitude do artefato gerado pelo amplicador

11

Figura 210 Artefato do amplicador analisado em graacuteco (Adaptado de [34])

24 Imageacutetica Motora

Depois de entender melhor como funciona todo o processo por traacutes da mediccedilatildeo doEEG torna-se interessante saber como isso se relaciona agrave praacutetica produzindo ao naldo processo o efeito esperado que eacute o deslocamento virtual de objetos usando apenas ainterpretaccedilatildeo dos sinais gerados pelo pensamento

O centro desse processo eacute a imageacutetica motora Ela pode ser denida como um estadodinacircmico durante a imaginaccedilatildeo que um indiviacuteduo faz de uma determinada accedilatildeo intenci-onada Este fenocircmeno implica que o sujeito sinta que realmente estaacute realizando a accedilatildeoimaginada sicamente seja ela de movimentar um braccedilo ou talvez empurrar um objeto[10]

A imageacutetica motora vem mostrando vaacuterios bons resultados em sua aplicaccedilatildeo Comoexemplo temos a ocorrecircncia do fenocircmeno na teacutecnica de aprendizado motor Os atletasutilizam a imaginaccedilatildeo de movimentos que seratildeo executados nos exerciacutecios de fato assimtrazem benefiacutecios no aquecimento relaxamento e concentraccedilatildeo [38] Outro exemplo in-teressante eacute o dos muacutesicos que ao utilizaacute-la possibilitam o aprendizado de partituras demaneira mais eciente [20]

Segundo o siologista sueco Hesslow [15] para o ceacuterebro a simulaccedilatildeo hipoteacutetica deestados consiste em trecircs premissas fundamentais

1 Imaginaccedilatildeo de accedilotildees ativa as estruturas motoras do ceacuterebro de tal forma que elasremetam agrave atividade que ocorre durante uma accedilatildeo normal de movimento entretantosem nenhum movimento evidente

2 Imaginaccedilatildeo de percepccedilatildeo a imaginaccedilatildeo de estar percebendo uma atividade eacute omesmo que realmente estar percebendo algo Em sua essecircncia a atividade de per-cepccedilatildeo eacute gerada pelo proacuteprio ceacuterebro em depreciaccedilatildeo de estiacutemulos externos

12

Letra Localizaccedilatildeo

A Loacutebulo da orelhaC CentralP ParietalF FrontalFp Frontal polarO OcipitalT Temporal

Tabela 21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22])

3 Antecipaccedilatildeo uma accedilatildeo simulada pode provocar a atividade perceptiva que remeteagravequela que deveria ter acontecido se a accedilatildeo fosse executada de fato

Devido a esses fatores a simulaccedilatildeo mental pode ser utilizada como uma ferramentarepresentativa para o entendimento da mente Isso permite que os diversos estados mentaispossam ser explorados possibilitando relacionar as aacutereas especiacutecas do ceacuterebro que satildeomais ativadas devido a certos sentimentos desejos ou talvez intenccedilotildees Assim a simulaccedilatildeomental contribui para o avanccedilo em diversas aacutereas tais como a psicologia e outras

25 Emotiv Epoc

A m de analisar a imaginaccedilatildeo e os efeitos que ela tem sobre o nosso corpo e mentecientistas atraveacutes da busca constante de avanccedilos chegaram agrave utilizaccedilatildeo de um capaceteneural para mediccedilatildeo efetiva de estiacutemulos demonstrados pela captaccedilatildeo do sinal de EEGComo ilustrado na Figura 11a o custo-benefiacutecio de capacete que melhor atendeu o grupono projeto de pesquisa foi o do Emotiv Epoc Seus detalhes de organizaccedilatildeo e funcionamentosatildeo mostrados a seguir

251 Posicionamento de eletrodos

A Federaccedilatildeo Internacional de Neuropsicologia recomenda a utilizaccedilatildeo do modelo 10-20para ateacute 21 eletrodos [11] de acordo com a Figura 211 Nesse modelo todos os eletrodosse encontram a uma distacircncia de seus eletrodos vizinhos de 10 ou 20 da distacircncia totalda cabeccedila A cada posiccedilatildeo eacute dado um identicador de uma ou duas letras e um nuacutemerode acordo com sua proximidade a alguma parte do ceacuterebro (veja tabela 21) Nuacutemerospares estatildeo agrave direita e nuacutemeros iacutempares agrave esquerda

A sociedade Americana de EEG sugeriu nos seus guias [16] que novos eletrodos sejamcolocados de maneira equidistante dos 21 eletrodos jaacute denidos na Figura 212 caso sejanecessaacuterio um nuacutemero maior de eletrodos

13

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 24: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

possibilitando o exame da eletromiograa (ver Figura 29) Ele fornece informaccedilotildees rele-vantes sobre a ativaccedilatildeo da musculatura envolvida em um movimento e a intensidade desua ativaccedilatildeo Qualquer movimentaccedilatildeo ou contraccedilatildeo dos muacutesculos da face afeta o sinal deEEG como por exemplo apertar os dentes contrair a testa etc

Figura 29 Sinal de EMG [2])

23 Artefatos teacutecnicos

Satildeo os tambeacutem chamados artefatos extrasioloacutegicos Natildeo dependem do ser humanomas sim do ambiente em que o usuaacuterio se encontra ou dos possiacuteveis eventos que ocorram

231 Frequecircncia de 5060 Hz

Um dos artefatos mais comuns existentes eacute o da interferecircncia causada pela correnteeleacutetrica Estatildeo indicadas duas frequecircncias pois a faixa normal de interferecircncia variade local para local no mundo Por exemplo na Ameacuterica do Norte eacute em torno de 60Hzenquanto na maioria dos outros paiacuteses ca em torno de 50 Hz Para tratar deste artefatousualmente coloca-se um ltro notch nessa faixa de frequecircncia e em seus respectivosharmocircnicos como por exemplo para o Brasil 60Hz 120Hz 180Hz etc

232 Artefato do amplicador

Eacute uma interferecircncia com pequena amplitude mas que tambeacutem merece alguma atenccedilatildeoNa Figura 210 em azul temos o sinal do EEG e em verde pode-se notar a pequenaamplitude do artefato gerado pelo amplicador

11

Figura 210 Artefato do amplicador analisado em graacuteco (Adaptado de [34])

24 Imageacutetica Motora

Depois de entender melhor como funciona todo o processo por traacutes da mediccedilatildeo doEEG torna-se interessante saber como isso se relaciona agrave praacutetica produzindo ao naldo processo o efeito esperado que eacute o deslocamento virtual de objetos usando apenas ainterpretaccedilatildeo dos sinais gerados pelo pensamento

O centro desse processo eacute a imageacutetica motora Ela pode ser denida como um estadodinacircmico durante a imaginaccedilatildeo que um indiviacuteduo faz de uma determinada accedilatildeo intenci-onada Este fenocircmeno implica que o sujeito sinta que realmente estaacute realizando a accedilatildeoimaginada sicamente seja ela de movimentar um braccedilo ou talvez empurrar um objeto[10]

A imageacutetica motora vem mostrando vaacuterios bons resultados em sua aplicaccedilatildeo Comoexemplo temos a ocorrecircncia do fenocircmeno na teacutecnica de aprendizado motor Os atletasutilizam a imaginaccedilatildeo de movimentos que seratildeo executados nos exerciacutecios de fato assimtrazem benefiacutecios no aquecimento relaxamento e concentraccedilatildeo [38] Outro exemplo in-teressante eacute o dos muacutesicos que ao utilizaacute-la possibilitam o aprendizado de partituras demaneira mais eciente [20]

Segundo o siologista sueco Hesslow [15] para o ceacuterebro a simulaccedilatildeo hipoteacutetica deestados consiste em trecircs premissas fundamentais

1 Imaginaccedilatildeo de accedilotildees ativa as estruturas motoras do ceacuterebro de tal forma que elasremetam agrave atividade que ocorre durante uma accedilatildeo normal de movimento entretantosem nenhum movimento evidente

2 Imaginaccedilatildeo de percepccedilatildeo a imaginaccedilatildeo de estar percebendo uma atividade eacute omesmo que realmente estar percebendo algo Em sua essecircncia a atividade de per-cepccedilatildeo eacute gerada pelo proacuteprio ceacuterebro em depreciaccedilatildeo de estiacutemulos externos

12

Letra Localizaccedilatildeo

A Loacutebulo da orelhaC CentralP ParietalF FrontalFp Frontal polarO OcipitalT Temporal

Tabela 21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22])

3 Antecipaccedilatildeo uma accedilatildeo simulada pode provocar a atividade perceptiva que remeteagravequela que deveria ter acontecido se a accedilatildeo fosse executada de fato

Devido a esses fatores a simulaccedilatildeo mental pode ser utilizada como uma ferramentarepresentativa para o entendimento da mente Isso permite que os diversos estados mentaispossam ser explorados possibilitando relacionar as aacutereas especiacutecas do ceacuterebro que satildeomais ativadas devido a certos sentimentos desejos ou talvez intenccedilotildees Assim a simulaccedilatildeomental contribui para o avanccedilo em diversas aacutereas tais como a psicologia e outras

25 Emotiv Epoc

A m de analisar a imaginaccedilatildeo e os efeitos que ela tem sobre o nosso corpo e mentecientistas atraveacutes da busca constante de avanccedilos chegaram agrave utilizaccedilatildeo de um capaceteneural para mediccedilatildeo efetiva de estiacutemulos demonstrados pela captaccedilatildeo do sinal de EEGComo ilustrado na Figura 11a o custo-benefiacutecio de capacete que melhor atendeu o grupono projeto de pesquisa foi o do Emotiv Epoc Seus detalhes de organizaccedilatildeo e funcionamentosatildeo mostrados a seguir

251 Posicionamento de eletrodos

A Federaccedilatildeo Internacional de Neuropsicologia recomenda a utilizaccedilatildeo do modelo 10-20para ateacute 21 eletrodos [11] de acordo com a Figura 211 Nesse modelo todos os eletrodosse encontram a uma distacircncia de seus eletrodos vizinhos de 10 ou 20 da distacircncia totalda cabeccedila A cada posiccedilatildeo eacute dado um identicador de uma ou duas letras e um nuacutemerode acordo com sua proximidade a alguma parte do ceacuterebro (veja tabela 21) Nuacutemerospares estatildeo agrave direita e nuacutemeros iacutempares agrave esquerda

A sociedade Americana de EEG sugeriu nos seus guias [16] que novos eletrodos sejamcolocados de maneira equidistante dos 21 eletrodos jaacute denidos na Figura 212 caso sejanecessaacuterio um nuacutemero maior de eletrodos

13

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 25: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Figura 210 Artefato do amplicador analisado em graacuteco (Adaptado de [34])

24 Imageacutetica Motora

Depois de entender melhor como funciona todo o processo por traacutes da mediccedilatildeo doEEG torna-se interessante saber como isso se relaciona agrave praacutetica produzindo ao naldo processo o efeito esperado que eacute o deslocamento virtual de objetos usando apenas ainterpretaccedilatildeo dos sinais gerados pelo pensamento

O centro desse processo eacute a imageacutetica motora Ela pode ser denida como um estadodinacircmico durante a imaginaccedilatildeo que um indiviacuteduo faz de uma determinada accedilatildeo intenci-onada Este fenocircmeno implica que o sujeito sinta que realmente estaacute realizando a accedilatildeoimaginada sicamente seja ela de movimentar um braccedilo ou talvez empurrar um objeto[10]

A imageacutetica motora vem mostrando vaacuterios bons resultados em sua aplicaccedilatildeo Comoexemplo temos a ocorrecircncia do fenocircmeno na teacutecnica de aprendizado motor Os atletasutilizam a imaginaccedilatildeo de movimentos que seratildeo executados nos exerciacutecios de fato assimtrazem benefiacutecios no aquecimento relaxamento e concentraccedilatildeo [38] Outro exemplo in-teressante eacute o dos muacutesicos que ao utilizaacute-la possibilitam o aprendizado de partituras demaneira mais eciente [20]

Segundo o siologista sueco Hesslow [15] para o ceacuterebro a simulaccedilatildeo hipoteacutetica deestados consiste em trecircs premissas fundamentais

1 Imaginaccedilatildeo de accedilotildees ativa as estruturas motoras do ceacuterebro de tal forma que elasremetam agrave atividade que ocorre durante uma accedilatildeo normal de movimento entretantosem nenhum movimento evidente

2 Imaginaccedilatildeo de percepccedilatildeo a imaginaccedilatildeo de estar percebendo uma atividade eacute omesmo que realmente estar percebendo algo Em sua essecircncia a atividade de per-cepccedilatildeo eacute gerada pelo proacuteprio ceacuterebro em depreciaccedilatildeo de estiacutemulos externos

12

Letra Localizaccedilatildeo

A Loacutebulo da orelhaC CentralP ParietalF FrontalFp Frontal polarO OcipitalT Temporal

Tabela 21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22])

3 Antecipaccedilatildeo uma accedilatildeo simulada pode provocar a atividade perceptiva que remeteagravequela que deveria ter acontecido se a accedilatildeo fosse executada de fato

Devido a esses fatores a simulaccedilatildeo mental pode ser utilizada como uma ferramentarepresentativa para o entendimento da mente Isso permite que os diversos estados mentaispossam ser explorados possibilitando relacionar as aacutereas especiacutecas do ceacuterebro que satildeomais ativadas devido a certos sentimentos desejos ou talvez intenccedilotildees Assim a simulaccedilatildeomental contribui para o avanccedilo em diversas aacutereas tais como a psicologia e outras

25 Emotiv Epoc

A m de analisar a imaginaccedilatildeo e os efeitos que ela tem sobre o nosso corpo e mentecientistas atraveacutes da busca constante de avanccedilos chegaram agrave utilizaccedilatildeo de um capaceteneural para mediccedilatildeo efetiva de estiacutemulos demonstrados pela captaccedilatildeo do sinal de EEGComo ilustrado na Figura 11a o custo-benefiacutecio de capacete que melhor atendeu o grupono projeto de pesquisa foi o do Emotiv Epoc Seus detalhes de organizaccedilatildeo e funcionamentosatildeo mostrados a seguir

251 Posicionamento de eletrodos

A Federaccedilatildeo Internacional de Neuropsicologia recomenda a utilizaccedilatildeo do modelo 10-20para ateacute 21 eletrodos [11] de acordo com a Figura 211 Nesse modelo todos os eletrodosse encontram a uma distacircncia de seus eletrodos vizinhos de 10 ou 20 da distacircncia totalda cabeccedila A cada posiccedilatildeo eacute dado um identicador de uma ou duas letras e um nuacutemerode acordo com sua proximidade a alguma parte do ceacuterebro (veja tabela 21) Nuacutemerospares estatildeo agrave direita e nuacutemeros iacutempares agrave esquerda

A sociedade Americana de EEG sugeriu nos seus guias [16] que novos eletrodos sejamcolocados de maneira equidistante dos 21 eletrodos jaacute denidos na Figura 212 caso sejanecessaacuterio um nuacutemero maior de eletrodos

13

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 26: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Letra Localizaccedilatildeo

A Loacutebulo da orelhaC CentralP ParietalF FrontalFp Frontal polarO OcipitalT Temporal

Tabela 21 Abreviaccedilotildees de posicionamento dos eletrodos (Adaptado de [22])

3 Antecipaccedilatildeo uma accedilatildeo simulada pode provocar a atividade perceptiva que remeteagravequela que deveria ter acontecido se a accedilatildeo fosse executada de fato

Devido a esses fatores a simulaccedilatildeo mental pode ser utilizada como uma ferramentarepresentativa para o entendimento da mente Isso permite que os diversos estados mentaispossam ser explorados possibilitando relacionar as aacutereas especiacutecas do ceacuterebro que satildeomais ativadas devido a certos sentimentos desejos ou talvez intenccedilotildees Assim a simulaccedilatildeomental contribui para o avanccedilo em diversas aacutereas tais como a psicologia e outras

25 Emotiv Epoc

A m de analisar a imaginaccedilatildeo e os efeitos que ela tem sobre o nosso corpo e mentecientistas atraveacutes da busca constante de avanccedilos chegaram agrave utilizaccedilatildeo de um capaceteneural para mediccedilatildeo efetiva de estiacutemulos demonstrados pela captaccedilatildeo do sinal de EEGComo ilustrado na Figura 11a o custo-benefiacutecio de capacete que melhor atendeu o grupono projeto de pesquisa foi o do Emotiv Epoc Seus detalhes de organizaccedilatildeo e funcionamentosatildeo mostrados a seguir

251 Posicionamento de eletrodos

A Federaccedilatildeo Internacional de Neuropsicologia recomenda a utilizaccedilatildeo do modelo 10-20para ateacute 21 eletrodos [11] de acordo com a Figura 211 Nesse modelo todos os eletrodosse encontram a uma distacircncia de seus eletrodos vizinhos de 10 ou 20 da distacircncia totalda cabeccedila A cada posiccedilatildeo eacute dado um identicador de uma ou duas letras e um nuacutemerode acordo com sua proximidade a alguma parte do ceacuterebro (veja tabela 21) Nuacutemerospares estatildeo agrave direita e nuacutemeros iacutempares agrave esquerda

A sociedade Americana de EEG sugeriu nos seus guias [16] que novos eletrodos sejamcolocados de maneira equidistante dos 21 eletrodos jaacute denidos na Figura 212 caso sejanecessaacuterio um nuacutemero maior de eletrodos

13

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 27: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Figura 211 Modelo 10-20 para ateacute 21 eletrodos [33]

Figura 212 Modelo 10-20 para ateacute 75 eletrodos [33]

252 Emotiv Epoc Headset

O Emotiv Epoc Headset eacute um hardware desenvolvido pela Emotiv Systems [12] quetem como proposta ser o dispositivo para controle de videogames da proacutexima geraccedilatildeo

14

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 28: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Figura 213 Emotiv EPOC antes de ser montado (Adaptado de [23])

Esse capacete neural estaacute equipado com 14 eletrodos salinos xos nas posiccedilotildees AF3AF4 F3 F4 F7 F8 FC5 FC6 P7 P8 T7 T8 O1 O2 e mais dois eletrodos CMSe DRL O primeiro eacute usado como referecircncia O segundo eacute usado para reinjetar o sinalcomum a todos de volta ao sujeito poreacutem invertido am de minimizar o ruiacutedo O capacetetambeacutem possui um girometro cuja intenccedilatildeo seria controlar a visatildeo da cacircmera do jogadorporeacutem pode ser usado para remover o artefato de movimento da cabeccedila dos sinais captadospelos outros eletrodos

O Emotiv amostra os sinais de EEG a uma taxa de 2048Hz que eacute convertida para128Hz O seguinte preacute-processamento eacute realizado diretamente no controlador neural antesde ser transmitido agrave aplicaccedilatildeo

1 Filtro com frequecircncia de corte de 85Hz

2 Filtro com frequecircncia de corte 016Hz

3 Filtro com rejeiccedilatildeo em torno de 50 Hz e 60Hz

Ao utilizar o aparelho eacute necessaacuterio colocar algumas gotas de uma soluccedilatildeo salina emcada eletrodo para melhorar a aquisiccedilatildeo de sinais Para vericar a qualidade dos sinaishaacute um painel de controle que acompanha o Emotiv Esse painel apresenta para cadaeletrodo a cor verde se esta recebendo bons sinais amarelo se a recepccedilatildeo de sinais natildeo eacutemuito boa laranja se a recepccedilatildeo de sinais eacute ruim vermelha se os sinais satildeo muito ruinse preta caso natildeo receba nenhum tipo de sinal como exemplicado na Figura 214 Oideal eacute que ao usar o aparelho todos os eletrodos apresentem a cor verde

Aleacutem desse painel de controle o Emotiv Epoc SDK tambeacutem apresenta quatro outrasaplicaccedilotildees o Expressive Suite (Figura 215) que mostra uma aplicaccedilatildeo que reconheceexpressotildees faciais por meio dos sinais captados pelo controle neural e mostra-os em umavatar a Aective Suite (Figura 216) que tenta associar os sinais captados ao comporta-mento dos pensamentos de excitaccedilatildeo felicidade teacutedio frustraccedilatildeo ou meditaccedilatildeo por parte

15

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 29: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

do usuaacuterio a Cognitive Suite (Figura 217) que apresenta um quarto de trecircs dimensotildeese um cubo que pode ser treinado para agir de acordo com os pensamentos do usuaacuterio(pode-se tentar fazer o cubo desaparecer girar no sentido horaacuterio ou anti-horaacuterio entreoutras accedilotildees) e o Mouse emulator (Figura 218) que utiliza o girocircmetro para mostrarcomo eacute possiacutevel mover um ponto na tela de acordo com o movimento feito pela cabeccedilado usuaacuterio do capacete neural Estas aplicaccedilotildees natildeo exigem nenhum conhecimento sobreeletroencefalogramas da parte de quem iraacute utilizar o aparelho

Figura 214 Vericando o estado dos eletrodos

Figura 215 Detecccedilatildeo de movimentos da face do usuaacuterio

16

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 30: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Figura 216 Graacutecos mostrando a detecccedilatildeo de frustraccedilatildeo meditaccedilatildeo etc do indiviacuteduo

Figura 217 Simulaccedilatildeo do movimento da caixa atraveacutes do pensamento

Figura 218 Controlador de mouse

17

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 31: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

26 OpenViBE

Para captaccedilatildeo dos dados eacute necessaacuteria a utilizaccedilatildeo de um software Um bom programalivre encontrado foi oOpenViBE Ele foi escolhido porque aleacutem de ser de faacutecil manuseiotambeacutem eacute um ambiente de coacutedigo aberto sob a licensa L-GPL o que possibilita a alteraccedilatildeode partes do seu coacutedigo

O OpenViBE eacute uma plataforma para design teste e uso de interfaces ceacuterebro maacutequinaPara o experimento de imageacutetica motora seratildeo utilizados primeiramente os cenaacuterios

propostos no ambiente que implementam o Graz BCI para imageacutetica motora de matildeos Oscenaacuterios satildeo dividos em monitoramento de sinal aquisiccedilatildeo treinamento do classicadorutilizaccedilatildeo online e replay

27 Classicadores

Dentro do ambiente de aquisiccedilatildeo dos dados captados pelo capacete o OpenViBE nocaso ocorre a programaccedilatildeo de ltros e diversos caacutelculos que possibilitam o processamentoadequado dos sinais recebidos Para realizar este processamento encontramos a caixinhados classicadores

Os meacutetodos mais comuns para classicaccedilatildeo de EEG satildeo LDA (Linnear DiscriminantAnalysis) e SVM (Support Vector Machines) porque conseguem as melhores taxas deacerto [36]

O SVM eacute classicador de aprendizagem supervisionada e seu objetivo eacute separar asclasses por meio de hiperplanos de modo que o hiperplano ideal esteja o mais distantepossiacutevel de cada exemplar de ambas as classes

Existem algumas funccedilotildees kernel usadas com SVM entre elas usamos a RBF (RadialBasis Function) que eacute tida como a que apresenta os melhores resultados para classica-dores SVM [7]

O meacutetodo conhecido como Common Spatial Patterns ou somente CSP foi propostopor Ramoser et al para classicaccedilatildeo de EEGs com vaacuterios canais [29] Eacute um procedimentomatemaacutetico onde dados dois estados de sinal diferentes ele acha os vetores maximizandoa variacircncia de um sinal enquanto minimiza a variacircncia de outro [1]

28 Extraccedilatildeo de sinais utilizando a energia de banda

Um dos meacutetodos que se mostra ecaz na identicaccedilatildeo dos sinais que correspondem adeterminadas accedilotildees eacute a extraccedilatildeo por bandas As bandas satildeo classicadas de acordo comas frequecircncias como delta (0-3 Hz) teta (4-7 Hz) alfa (8-13 Hz) e beta (14-20 Hz)

Keirn and Aunon [27] sugeriram que a extraccedilatildeo apenas da banda alfa traria como re-sultado uma classicaccedilatildeo pobre Assim as quatro bandas de frequecircncias satildeo consideradasna criaccedilatildeo do conjunto de caracteriacutesticas

Ao analisar o comportamento das ondas em alguns indiviacuteduos utilizando todas asquatro bandas de frequecircncias eacute faacutecil notar que as maiores oscilaccedilotildees de valores satildeo notadasentre as bandas alfa e beta [26] tornando-se assim as mais importantes para o trabalhoe de fato as que seratildeo utilizadas para melhorar os resultados

18

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 32: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Capiacutetulo 3

Trabalhos relacionados

Ao longo dos anos o interesse geral no avanccedilo do tema interface ceacuterebro maacutequina foiaumentando Uma das causas desse aumento eacute o fato de o preccedilo dos capacetes utilizadoster sido reduzido devido ao surgimento de novas tecnologias

Com esse crescimento o nuacutemero de pesquisas no assunto foi expandido de tal formaque pelo mundo todo surgiram interessados Satildeo universidades empresas e institutos aoredor do planeta procurando o avanccedilo dessa tecnologia Assim jaacute foi dado iniacutecio a algunsprojetos de grande importacircncia

31 Carro controlado pelo ceacuterebro

Na Universidade de Berlim foi iniciada uma pesquisa relacionada ao controle de umcarro atraveacutes do pensamento tambeacutem utilizando o Emotiv EPOC Para ilustraccedilatildeo temosa imagem de um usuaacuterio testando o sistema na Figura 31

Figura 31 Projeto BrainDriver do controle de um carro pelo ceacuterebro atraveacutes da utili-zaccedilatildeo do Emotiv EPOC [30]

A ideia apesar de parecer bastante ousada eacute relativamente simples devido aos poucoscontroles que satildeo necessaacuterios para dirigir o carro As possibilidades satildeo as seguintes

1 acelerar

19

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 33: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

2 desacelerar

3 virar agrave direita

4 virar agrave esquerda

Um problema evidente eacute a questatildeo do tempo de resposta ao comando Como aindanatildeo se tem pelo mundo vasto conhecimento nessa aacuterea pode-se notar um certo atrasopara que o sistema entenda exatamente a intenccedilatildeo do usuaacuterio seja ela virar agrave esquerdaou acelerar por exemplo Portanto torna-se inviaacutevel no momento aplicar o projeto paraa vida real

32 NeuroPhone

Um projeto bastante interessante foi desenvolvido no Dartmouth College em Hanovernos Estados Unidos Trata-se de um controle cerebral para o processo de fazer chamadastelefocircnicas atraveacutes de um aparelho como o iPhone

Figura 32 Ilustraccedilatildeo do uso do capacete neural Emotiv EPOC para fazer ligaccedilotildees te-lefocircnicas [25]

Esse sistema faz uso do paradigma oddball em que um estiacutemulo inesperado provoca oP300 uma deexatildeo positiva no ceacuterebro em 300ms

No iPhone especicamente o processo funciona da seguinte maneira como mostradona Figura 33a seis contatos do telefone satildeo exibidos em forma de guras lado a ladopara o usuaacuterio Entatildeo o sistema daacute destaque visual a cada uma das opccedilotildees de formaaleatoacuteria Toda vez que a opccedilatildeo que o usuaacuterio quiser escolher for destacada seu ceacuterebroapresentaraacute o P300 Apoacutes algumas repeticcedilotildees do processo o sistema calcula a meacutedia dajanela em torno do tempo de apresentaccedilatildeo dos sinais Para todas as opccedilotildees possiacuteveis asmeacutedias satildeo comparadas e a que mais se aproximar ao sinal P300 eacute escolhida A repeticcedilatildeodo processo e o caacutelculo da meacutedia permitem maior robustez a ruiacutedos uma vez que eles tecircmuma distribuiccedilatildeo aleatoacuteria e meacutedia proacutexima a zero

A gura iluminada natildeo causou o envio do sinal ao sistema Assim as informaccedilotildees natildeocasaram e entatildeo uma nova tentativa eacute realizada pelo sistema iluminando outro contatodentre os seis (33b)

Ainda natildeo se obteve nenhum resultado favoraacutevel Uma terceira tentativa eacute feita comoilustrado em 33c

20

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 34: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

(a) (b) (c) (d)

Figura 33 Processo de ligaccedilatildeo atraveacutes da utilizaccedilatildeo do Neurophone [8]

Tempo Sentado Ouvindo muacutesica Em peacute

20s 7778 4444 333350s 7782 6667 6667100s 8889 8889 6667

Tabela 31 Tabela de resultados da classicaccedilatildeo do processo executado no neurophone[8]

A partir da Figura 33d eacute possiacutevel notar a ocorrecircncia do casamento entre o aumentodo sinal P300 enviado pelo utilizador e o contato iluminado pelo sistema Em seguida aligaccedilatildeo intencionada eacute completada

A vantagem dessa ferramenta eacute que ela soacute tem uma dimensatildeo de escolha Como eacute bemsimples eacute algo perfeito para aplicaccedilatildeo em smartphones

O processo acima produz diferentes resultados de classicaccedilatildeo Pois eacute bastante de-pendente do estado que o usuaacuterio se encontra Dependendo do que ele estaacute fazendoa classicaccedilatildeo seraacute melhor ou pior Na tabela 31 podemos ver alguns resultados comrelaccedilatildeo ao tempo que se passou em cada atividade

Podemos notar claramente que quanto maior eacute o tempo gasto na atividade e quantomais estaacutevel for a posiccedilatildeo do usuaacuterio como quando ele estaacute sentado ou relaxado maior eacutea qualidade da classicaccedilatildeo totalizando uma taxa de acertos de 8889

33 Controle para o Second Life

Um grupo de Hansen em Chicago propocircs a utilizaccedilatildeo de ICC no serviccedilo online SecondLife [18] O Second Life propotildee a simulaccedilatildeo de um mundo virtual uma segunda realidadepara todos os seus usuaacuterios Ele daacute opccedilotildees de andar pelo mundo como ir para direitaesquerda frente traacutes aleacutem de conversar com algum outro usuaacuterio como um jogo masonde os outros personagens satildeo usuaacuterios reais construindo uma possiacutevel interpretaccedilatildeo domundo real no servidor Como o EPOC jaacute vem acompanhado de uma suiacutete de aplicativos

21

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 35: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

chamada SDK que eacute programaacutevel entatildeo se encaixa perfeitamente na proposta de controledo personagem no Second Life Esta ferramenta que acompanha o capacete implementao aprendizado de certas accedilotildees que podem ser usadas para controlar movimentos comomostrado na Figura 34

Figura 34 Exemplo de tela do Second Life com os possiacuteveis movimentos de umjogador[18]

34 Controle do braccedilo de um robocirc

Figura 35 Braccedilo de um robocirc sendo controlado pelo capacete neural [43]

Um projeto independente de Alex Blainey aborda um braccedilo roboacutetico controlado pelocapacete neural Os comandos possiacuteveis de uso satildeo apenas os mais comuns como empur-rar puxar etc Esse eacute um projeto interessante pois consegue realizar dois comandos aomesmo tempo como por exemplo mover o braccedilo para a direita enquanto empurra umobjeto

22

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 36: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

35 BrainTalk

Um projeto interessante tambeacutem independente de Louizos Alexander Louizos eacute oBrainTalk [21] Trata-se de um teclado virtual que eacute controlado pelo capacete Utilizao mesmo sistema do Neurophone Ele se baseia no sinal P300 para dizer a letra que ousuaacuterio estaacute escolhendo para digitar sua palavra frase ou expressatildeo Em comparaccedilatildeo aosistema do Neurophone este eacute um pouco diferente Ele destaca a seacuterie de letras de formadiferente aumentando a claridade em certas linhas e colunas Isso vai despertar o ceacuterebrodo usuaacuterio Este no entanto soacute precisa se focar na letra desejada Quando essa letra foriluminada um sinal P300 seraacute mandado para o programa que iraacute classicar e escrever aletra na tela

Figura 36 Teclado virtual do sistema Brain talk[21]

23

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 37: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Capiacutetulo 4

Processo de desenvolvimento

41 Aquisiccedilatildeo de Sinais de EEG

Neste trabalho a aquisiccedilatildeo de sinais de EEG foi executada com o aparelho Epoc daEmotiv 41 Referenciado neste trabalho como capacete neural esse dispositivo eacute umleitor de EEG sem-o que adquire amostras a 128Hz de 16 canais dispostos conforme aFigura 41

Figura 41 Posicionamento de eletrodos segundo a conguraccedilatildeo do Emotiv Epoc Head-set [28]

O meacutetodo utilizado para a aquisiccedilatildeo e o processamento dos sinais de EEG utilizadosneste trabalho foi baseado na competiccedilatildeo de BCI realizada na Aacuteustria no ano de 2008que produziu o conjunto de sinais B [28]

Na competiccedilatildeo ocorreu o seguinte trecircs eletrodos foram utilizados para a gravaccedilatildeoTratava-se do C3 Cz e C4 Como se pode notar na Figura 41 o Emotiv Epoc natildeo contacom os posicionamentos de C3 e C4 Portanto para substituiccedilatildeo utilizou-se os eletrodosde F7 F8 FC5 FC6 P7 e P8 A frequecircncia de amostragem utilizada foi de 250Hz Oltro de passa-banda utilizado selecionava os sinais entre 05Hz e 100Hz Como no meiodessas frequecircncias do ltro contamos com interferecircncias geradas pela corrente eleacutetrica emtorno dos 50Hz tornou-se necessaacuterio colocar outro ltro mas agora um ltro notch O

24

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 38: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

eletrodo da posiccedilatildeo Fz servia como referecircncia O posicionamento de cada eletrodo variavamuito pouco de indiviacuteduo para indiviacuteduo

Toda aquisiccedilatildeo gera artefatos que podem atrapalhar o desempenho da classicaccedilatildeoPara remover esses artefatos aleacutem do EEG em questatildeo um EOG (electrooculograma) erautilizado para retirar artefatos produzidos que modicariam os resultados dessa classi-caccedilatildeo

Utilizou-se duas classes diferentes chamadas imageacutetica motora da matildeo esquerda e damatildeo direita Cada participante seria levado a participar de duas sessotildees sem feedbackem dois dias diferentes em duas semanas distintas para natildeo haver muitos erros a seremretirados da proximidade relativa aos dias da aquisiccedilatildeo de dados Isso resultava em 20tentativas por vez e 120 por sessatildeo No total 120 repeticcedilotildees de imageacutetica motora rela-tivas agrave matildeo esquerda e mais 120 relativas agrave matildeo direita resultavam para cada indiviacuteduoparticipante

Primeiramente o participante tentou imaginar movimentos relacionados agrave imageacuteticamotora de cada parte do corpo que ele conseguiria realizar melhor em sua mente para otreinamento referente agrave parte esquerda e agrave direita de seu corpo

Em cada tentativa do treinamento aparecia uma cruz para xaccedilatildeo no meio da telae um tom curto de atenccedilatildeo Apoacutes isso um estiacutemulo visual era apresentado por 125segundos Assim o sujeito deveria imaginar o movimento de matildeos correspondente por 4segundos Depois de cada tentativa um periacuteodo de pausa era concedido de 15 segundos eum tempo randocircmico de mais de 1 segundo era adicionado agrave pausa para evitar o possiacutevelerro vindo do tempo de adaptaccedilatildeo

Figura 42 Tentativa sem feedback [28]

Aleacutem das 2 tentativas sem feedback 3 tentativas com feedback eram feitas Elas con-sistiam em 4 sessotildees cada uma com 20 tentativas para cada tipo de imageacutetica motoraO feedback consistia na gura de um smile que comeccedilava o teste no meio da tela na corcinza Por dois segundos apenas essa gura era mostrada e a partir dos 3 ateacute os 75segundos a pista era colocada na tela a m de que o participante a seguisse e imaginasseo movimento de matildeos para o smile andar para a esquerda ou para a direita de acordocom cada comando dado pelo programa

Quando movido para a direccedilatildeo relativa ao comando o smile se tornava verde ou seo contraacuterio ocorresse se tornava vermelho O classicador entrava em accedilatildeo para vericaracertos e erros e entatildeo tornava o smile feliz mudando a curvatura de sua boca para cimaou triste modicado-na para baixo como mostrado abaixo na Figura 43 A partir dos

25

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 39: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

75 segundos a tela se tornava branca e 1 ou 2 segundos de intervalo eram adicionadosagrave tentativa O participante era entatildeo instruiacutedo a manter o smile no lugar correto pelomaior tempo possiacutevel usando a imageacutetica motora

Figura 43 Tentativa que contava com feedback [28]

42 O Experimento

Foram escolhidos dez voluntaacuterios para fazer o experimento Foi priorizada a escolhade pessoas que natildeo tivessem histoacuterico de doenccedilas mentais e se encontrassem entre 20e 30 anos Foram feitas duas sessotildees com cada um dos dez voluntaacuterios Na primeirasessatildeo foram captados os sinais das ondas do ceacuterebro do candidato mexendo a matildeocorrespondente agrave uma seta mostrada no monitor de um computador Na segunda sessatildeoo voluntaacuterio apenas imaginou mexer a matildeo referente agrave seta que era apresentada

Cada sessatildeo teve duraccedilatildeo aproximada de quinze minutos e foram realizadas em diasdiferentes da semana O ambiente utilizado para gravaccedilatildeo dos dados foi um laboratoacute-rio localizado dentro da Universidade de Brasiacutelia cedido para o experimento Ficarampresentes apenas duas pessoas uma para scalizar e o voluntaacuterio que participou do expe-rimento O scal do experimento instruiacutea o voluntaacuterio a se colocar de maneira cocircmoda nacadeira e umidicava a parte de espuma de cada eletrodo com a soluccedilatildeo salina colocandoo aparelho de maneira adequada na cabeccedila do voluntaacuterio O painel de controle do EmotivHeadset foi utilizado para conferir se o capacete neural apresenta a condiccedilatildeo de recepccedilatildeode sinais adequada O voluntaacuterio foi apresentado ao procedimento de captaccedilatildeo das ondaspara saber o quecirc e em quecirc velocidade deveria executar as instruccedilotildees O instrutor deveriase certicar de que o candidato havia entendido o processo e de que estaria apto a seguircom o experimento

Para efeitos de comparaccedilatildeo iremos utilizou-se um classicador LDA com auxiacutelio deuma superfiacutecie de Laplace [24] um classicador LDA com auxilio de um ltro CSP enalmente um classicador SVM com uma funccedilatildeo kernel RBF junto com o ltro CSP

43 Cenaacuterios

431 Monitoramento de Sinais

O monitoramento de sinais serve apenas para garantir que o sinal que eacute captado pelocapacete neural tenha uma qualidade razoaacutevel para ser usada no treinamento Duranteesse cenaacuterio eacute importante notar se eacute possiacutevel perceber alguns artefatos como o piscar de

26

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 40: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

olhos e o movimento do maxilar e se as ondas alfa se fazem visiacuteveis ao fechar-se os olhose relaxar

O diagrama do moacutedulo Aquisition client apresentado na Figura 44 nos fornece osdados enviados pelo capacete o moacutedulo Temporal lter eacute onde podemos congurar umltro temporal para selecionar faixas de frequecircncia e os moacutedulos de Signal display lteredsignals e raw signals iratildeo mostrar os sinais ao rodar este cenaacuterio

Figura 44 Cenaacuterio de monitoramento

432 Aquisiccedilatildeo de Sinais

A aquisiccedilatildeo do sinal eacute o primeiro passo para os gerar dados que seratildeo usados no trei-namento do classicador Ao ser iniciado o cenaacuterio um script feito em LUA solicitaraacute agravepessoa que estaacute usando o capacete que imagine movimentar sua matildeo direita ou esquerdaAssim os sinais os estiacutemulos gerados pelo script e algumas informaccedilotildees sobre o experi-mento satildeo gravados em um arquivo divididos em colunas devidamente rotuladas com onome de cada eletrodo

Na Figura 45 eacute apresentado o diagrama que nos fornece os dados enviados pelocapacete o Aquisition client Tambeacutem eacute apresentado o diagrama que eacute o responsaacutevelpor interpretar o script LUA e o diagrama que mostra a interpretaccedilatildeo do coacutedigo LUApara o usuaacuterio do capacete satildeo eles LUA Stimulator e Graz visualization respectivamenteTambeacutem eacute mostrado o diagrama Generic stream writer que iraacute gravar o arquivo em disco

27

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 41: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Figura 45 Cenaacuterio de aquisiccedilatildeo de sinais

433 Treinamento dos Classicadores

O arquivo contendo os sinais eacute lido no cenaacuterio de treinamento do classicador (Figura46) Basicamente esse cenaacuterio seleciona os canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4 lecirc os sinais e os divide em janelas de 4s aplica um ltro passa-bandaselecionando os sinais de 8Hz a 24Hz (ondas alfa e ondas beta) e entatildeo calcula a energiadessas janelas e as usa para treinar um classicador LDA de Fisher [14] cuja conguraccedilatildeoeacute salva para ser utilizada no cenaacuterio online O algoritmo utilizado eacute o seguinte

1 Selecionar do arquivo CSV as colunas dos canais C3 C4 FC3 FC4 C5 C1 C2C6 CP3 e CP4

2 Aplicar uma superfiacutecie de Laplace de dez entradas e uma saiacuteda com peso 4 para C3-1 para os outros eletrodos impares e 0 para eletrodos pares e a outra saiacuteda compeso 4 para C4 -1 para os outros eletrodos pares e 0 para eletrodos iacutempares

3 Aplicar um ltro temporal Butterworth passa banda [6] de grau 4 para 8Hz a 24Hz

4 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

5 A cada 16 segundos de sinais dividos pelo passo 4 dividi-los em 16 blocos de 1segundo com oset ou deslocamento de 00625 segundos

6 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

7 Voltar ao passo 4 ateacute terminar de ler todos os sinais

8 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

9 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

28

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 42: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Figura 46 Cenaacuterio de treinamento

Entre os tutoriais encontrados no foacuterum localizado dentro do site do OpenViBE [41]natildeo foi possiacutevel encontrar nenhum documento orientando como trabalhar com o modelode capacete neural deste trabalho o qual difere do conjunto de eletrodos utilizados noscenaacuterios Por isso utilizou-se todos os eletrodos do capacete que estavam agrave disposiccedilatildeomodicando a superfiacutecie de Laplace para ter os pesos equivalentes para todos os eletrodosEm outro cenaacuterio ela foi trocada por um ltro espacial CSP que busca separar melhor asclasses

Portanto no treinamento tambeacutem utilizou-se o cenaacuterio de treinamento do CSP etreinamento do classicador LDA com CSP este inclui poucas diferenccedilas do cenaacuterio detreinamento do classicador LDA comum Primeiro haacute o treinamento do CSP que sim-plesmente acha os padrotildees especiais da imaginaccedilatildeo do movimento da matildeo esquerda edireita dando pesos aos canais que tecircm uma variaccedilatildeo maior nos seus vetores (Figura 47)Estes pesos satildeo gravados em um arquivo que seraacute usado no classicador LDA No cenaacuteriode treinamento do classicador (Figura 49) apenas iremos trocar a seleccedilatildeo de canal e asuperfiacutecie de Laplace pelo ltro espacial CSP treinado no cenaacuterio anterior O algoritmoseria modicado para

1 Aplicar um ltro temporal Butterworth passa banda de grau 4 para 8Hz a 24Hz

2 Aplicar o ltro temporal CSP treinado anteriormente que teraacute como entrada osdezesseis canais dos eletrodos e seratildeo selecionados os seis melhores para classicaccedilatildeocom seus devidos pesos

29

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 43: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

3 Selecionar 4 segundos de sinais de estiacutemulos das duas matildeos (OVTK_GDF_Left eOVTK_GDF_Right) e mais meio segundo depois do teacutermino do estiacutemulo

4 A cada 16 segundos de sinais dividos pelo passo 4 dividir estes em 16 blocos de 1segundo com oset de 00625 segundos

5 Calcular a energia de cada um dos 16 blocos atraveacutes do logaritmo na base dez dameacutedia do quadrado de cada bloco

6 Voltar ao passo 4 ateacute terminar de ler todos os sinais

7 As matrizes resultantes satildeo convertidas em um vetor de caracteriacutesticas

8 O vetor de caracteriacutesticas eacute gravado e usado pelo classicador na etapa online

Figura 47 Cenaacuterio de treinamento do ltro espacial CSP

Para utilizar um classicador SVM basta trocar o campo Classier to use no moacuteduloClassier trainer de Linear Discrimimant Analysis (LDA) para Support Vector Machine(SVM) Conguramos os paracircmetros da caixa como mostrado na Figura 48

30

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 44: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Figura 48 Paracircmetros de conguraccedilatildeo do moacutedulo do classicador SVM

31

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 45: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Figura 49 Cenaacuterio de treinamento do classicador usando o ltro CSP

434 Online

Para o cenaacuterio online (Figura 411) que utiliza um script em LUA para mostrar osresultados eacute necessaacuterio que a mesma pessoa que fez o treinamento utilize o capaceteneural novamente poreacutem agora ela poderaacute imaginar livremente qual matildeo movimentar eassim o programa utilizando o veto de caracteriacutesticas extraiacutedo e o classicador treinadotentaraacute dizer qual eacute a matildeo que a pessoa imagina movimentar por meio da exibiccedilatildeo deuma barra azul Se eacute a matildeo esquerda uma barra eacute mostrada crescendo para a esquerdacaso contraacuterio para a direita como mostrado na Figura 410

32

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 46: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

(a) Classicaccedilatildeo para a direita (b) Classicaccedilatildeo para a esquerda

Figura 410 Demonstraccedilotildees de uma classicaccedilatildeo para a direita e esquerda com utilizaccedilatildeoda barra azul como feedback

Figura 411 Cenaacuterio de utilizaccedilatildeo online

O cenaacuterio online com o ltro espacial CSP (Figura 412) teraacute como principal modi-caccedilatildeo a retirada da superfiacutecie de Laplace e dos dois moacutedulos de seleccedilatildeo de canais simplesElas seratildeo trocadas pela CSP treinada anteriormente que daraacute os pesos adequados paramelhorar a classicaccedilatildeo dos sinais

33

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 47: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Figura 412 Cenaacuterio de utilizaccedilatildeo online com uso de CSP

435 Replay

Eacute possiacutevel gravar os sinais captados pelo capacete no cenaacuterio online para utilizaccedilatildeo noreplay que como o nome sugere iraacute reproduzir o resultado da parte online a partir do

34

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 48: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

arquivo de sinais gravados ou seja sem a necessidade de o usuaacuterio usar o capacete Ocenaacuterio de replay eacute mostrado na Figura 413

Figura 413 Cenaacuterio de replay

436 Caacutelculo da porcentagem de acertos

A Figura 414 mostra o cenaacuterio que foi usado para calcular a porcentagem de acertodos classicadores Nesse cenaacuterio o usuaacuterio do capacete iraacute fazer praticamente o mesmoprocedimento do cenaacuterio de aquisiccedilatildeo de sinais poreacutem desta vez seraacute comparado o estiacutemuloda saiacuteda do classicar com o estiacutemulo mandado pelo script LUA Assim se os dois foremiguais seraacute considerado um acerto e ao nal do script seraacute apresentada uma janela coma porcentagem de acertos (Figura 415)

35

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 49: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Figura 414 Cenaacuterio de caacutelculo de porcentagem de acertos

Figura 415 Cenaacuterio de caacutelculo de porcentagem de acertos

36

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 50: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

44 Aplicativo desenvolvido

O programa feito para demonstrar o projeto foi um jogo que simula uma partidade ping-pongestilo Pong Isto eacute um indiviacuteduo controla uma barra vertical simulandouma raquete movendo-a verticalmente no lado esquerdo da tela e compete contra ocomputador (ou outro jogador) que controla uma segunda raquete no lado oposto Osjogadores usam suas paletas para acertar a bola que eacute simbolizada por uma esfera que semove diagonalmente e mandaacute-la para o outro lado

Poreacutem alterou-se a orientaccedilatildeo do jogo como eacute possiacutevel notar na Figura 416 em vezde vertical foi realizado um jogo horizontal por achar que seria mais simples imaginarum movimento para a esquerda ou direita do que imaginar um movimento para cima oupara baixo assim ca mais claro o paradigma de imageacutetica motora desenvolvido com oclassicador

Figura 416 Jogo implementado

Para a comunicaccedilatildeo do OpenViBE com o jogo utilizou-se o VRPN (Virtual-RealityPeripheral Network) sistema que provecirc uma interface independente e transparente entreprogramas e dispositivos fiacutesicos usados em realidade virtual [32]

441 Comunicaccedilatildeo do OpenViBE com o aplicativo

O OpenViBE possui uma caixa que jaacute implementa um servidor VRPN bastandocolocar seu identicardor No aplicativo que zemos criamos o cliente VRPN usando afunccedilatildeo

handle_analog (void userData const vrpn_ANALOGCB a)

(1) como uma funccedilatildeo de callback para os dados enviados pelo servidor O coacutedigo docliente VRPN utilizado natildeo se encontra completamente em anexo pois pode ser facilmenteencontrado na internet [31]

Dessa forma o servidor VRPN instanciado no OpenViBE recebe a saiacuteda do classica-dor (valor real entre 0 e 1) e o envia aos clientes VRPN No cliente esse valor eacute recebidoe discretizado em duas classes Caso o valor seja maior que 05 dipara-se um evento

37

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 51: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

de pressionamento da tecla seta para direita e caso contraacuterio dispara-se um evento depressionamento da seta para esquerda

Ao dar o update a cada loop principal do jogo seratildeo analisadas as accedilotildees a seremtomadas conforme os eventos que foram inseridos na pilha e assim as barras iratildeo se moverpara a direita e para a esquerda

Durante a utilizaccedilatildeo do jogo pelo teclado existe a possibilidade de natildeo se moverbastando para tanto natildeo pressionar as setas Entretanto essa possibilidade natildeo existequando o jogo eacute controlado com o capacete neural pois o classicador utilizado possuisomente duas classes Notou-se tambeacutem que essa impossibilidade de deixar a barra paradadiculta o jogo pois eacute necessaacuterio acertar perfeitamente o tempo para fazer a bola rebaterna barra Para isso foi utilizada uma ag de correccedilatildeo que muda os paracircmetros de 05 para05 + correcao para direita ou 05 minus correcao para a esquerda Assim se a correccedilatildeo forde 0025 haacute uma margem de 005 que faraacute com que nossa barra que parada em algunsmomentos

442 Classes principais do aplicativo

A classe Sprite eacute herdada pelas classes Pong e Barra mostradas nos apecircndices A11e A4 respectivamente e se encarrega de apresentar os objetos corretamente na tela aleacutemde vericar se o objeto colide com outro objeto usando a teacutecnica de colisatildeo por caixa

A classe Barra eacute a classe que cria o objeto que iraacute rebater a bola Esta classe em suainicializaccedilatildeo pode ser denida como um jogador humano ou uma inteligecircncia articial(IA)O movimento da barra eacute dado na funccedilatildeo Update() em que eacute vericado se a barra eacute umjogador ou IA Caso seja uma IA a barra tentaraacute manter o seu meio alinhado com a bolacaso esta esteja se dirigindo para seu lado e jaacute tenha passado da linha do centro da telaCaso seja um jogador iraacute vericar se haacute eventos na pilha que possam ser traduzidos comomovimentos para a esquerda e para a direita

A classe Pong dene nossa bola que se move em oito direccedilotildees Sua principal funccedilatildeo eacuteUpdate() que como o nome jaacute sugere iraacute atualizar a situaccedilatildeo em que se encontra a bolasuas coordenadas e se ela atravessou um dos limites do campo o que seria um ponto paraum dos jogadores

A classe GameManager eacute a responsaacutevel por juntar todos os elementos do jogo in-cluindo o cliente VRPN Esta classe inicia todos os elementos do jogo e em sua funccedilatildeorun() encontra-se o loop principal do sistema onde estatildeo as chamadas a funccedilotildees de updatee apresentaccedilatildeo dos objetos

Para cada cliente VRPN teremos uma funccedilatildeo de callback dentro do GameManagerque iraacute criar os eventos de apertar bototildees para poder mover a barra

Procuramos colocar nos anexos somente as classes mais importantes do programacomo as citadas acima As classes referentes agrave VRPN natildeo foram anexadas

38

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 52: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Capiacutetulo 5

Resultados e anaacutelise

51 Comparaccedilatildeo entre resultados de classicadores uti-

lizados

Neste trabalho foram realizados testes com dois tipos de classicadores diferentes -LDA e SVM - e foram utilizadas duas teacutecnicas de ltragem do sinal de EEG ltros deLaplace e ltros CSP A Tabela 51 apresenta as porcentagens de acertos de classicaccedilatildeocom a combinaccedilatildeo dessas teacutecnicas

A segunda coluna da Tabela 51 apresenta os reultados da primeira conguraccedilatildeo utili-zada no sistema desenvolvido a saber classicador LDA e preacute-processamento com ltrosde Laplace Com essa conguraccedilatildeo foi possiacutevel alcanccedilar taxas de acerto de classicaccedilatildeovariando aproximadamente entre 55 e 60

Com o objetivo de melhorar a taxa de acerto de classicaccedilatildeo substituiu-se o classi-cador linear(LDA) por uma rede SVM Essa rede apresenta duas vantagens imediatasproduz uma separaccedilatildeo oacutetima entre as classes [7] e possui baixa complexidade computa-cional A funccedilatildeo de base escolhida foi a RBF (Radial Basis Function) por apresentarresultados em meacutedia superiores a outras funccedilotildees de base Os paracircmetros de conguraccedilatildeoda rede SVM podem ser observados na Figura 48

O proacuteximo passo em busca de melhoria nas taxas de acerto de classicaccedilatildeo foi utilizaros ltros espaciais CSP Inicialmente utilizou-se esses ltros com o classicador LDA e osresultados mostraram que o desempenho de classicaccedilatildeo foi pior do que a utilizaccedilatildeo deSVM com ltros de Laplace Entretando utilizando o classicador SVM e os ltros CSPobservou-se uma melhora de aproximadamente 4 na taxa de classicaccedilatildeo correta emrelaccedilatildeo agrave conguraccedilatildeo anterior com classicador SVM que utilizava ltros de Laplace

Por m optou-se pela utilizaccedilatildeo de ondas alfa e beta no caacutelculo do vetor de caracte-riacutesticas ao inveacutes da utilizaccedilatildeo de ondas na faixa de 05 Hz a 30 Hz o que resultam emtaxas de classicaccedilatildeo correta em torno de 70 o melhor resultado alcanccedilado

39

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 53: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Sujeito LDA com SVM com LDA com SVM com SVM com CSP e

Laplace Laplace CSP com CSP ondas alfa e beta

1 5962 6582 6171 6653 67652 5264 6568 6192 6377 67583 5636 6541 5701 6323 68134 5694 6606 6345 6731 71805 5603 6264 5971 6747 68576 5735 6370 5925 6624 70757 6129 6732 6538 6920 71428 5942 6593 6110 6677 69839 5580 6442 5934 6491 711210 5564 6848 5902 6702 7068

Tabela 51 Tabela de porcentagem de acertos dos diferentes classicadores citados

40

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 54: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Capiacutetulo 6

Conclusatildeo

Trabalhar com interaccedilotildees ceacuterebro-computador eacute uma tarefa desaadora que exigemuito conhecimento que em sua grande maioria natildeo se encontra na liacutengua nativa Nestetrabalho foi possiacutevel mostrar como as ondas alfa e beta e sua respectiva ltragem podemauxiliar no relacionamento entre pensamentos e movimento de um componente virtualsem o auxiacutelio do fiacutesico Tambeacutem foi possiacutevel utilizar um software aberto para fazer ce-naacuterios de aquisiccedilatildeo e classicaccedilatildeo de sinais Ademais foi possiacutevel fazer um programaque implementa o paradigma de imageacutetica motora demonstrando como eacute a interaccedilatildeoceacuterebro-computador apesar da inacuraacutecia obtida

O classicador utilizado natildeo pocircde demonstrar todo o seu potencial As condiccedilotildeesutilizadas para aquisiccedilatildeo dos sinais geraram rupido excessivoEntretanto conclui-se queos resultados de classicaccedilatildeo podem ser melhorados com o aprimoramento do vetor decaracteriacutesticas utilizado e com a utilizaccedilatildeo de um sistema de aquisiccedilatildeo de sinais de EEGmais robusto a ruiacutedos

Portanto a sugestatildeo que ca para trabalhos futuros eacute captar os sinais em um ambientemelhorado utilizar novos meacutetodos para o preacute-processamento de sinais bem como outrosclassicadores para tentar minimizar os erros desenvolver formas de se testar interaccedilotildeescom outros paradigmas e classicaccedilotildees natildeo binaacuterias fazer anaacutelises estatiacutesticas mais ex-tensas e se possiacutevel dentro dos padrotildees econocircmicos usar um capacete mais adequadoO trabalho poderia tambeacutem envolver uma terceira classe de anaacutelise aquela em que o indi-viacuteduo encontra-se parado o que facilitaria quanto ao problema da estrateacutegia para o jogocitada nos resultados Seria interessante desenvolver uma aplicaccedilatildeo fiacutesica real como porexemplo tentar mover um carrinho de controle remoto visto que a comunicaccedilatildeo VRPNdo OpenViBE eacute permitida com muitas plataformas e possibilita maior visualizaccedilatildeo pelacomunidade interessada

41

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 55: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Apecircndice A

Anexos

A1 Spriteh

ifndef SPRITEH

define SPRITEH

include ltstringgt

include SDLSDLh

class Sprite

private

char fileName[100]

SDL_Surface surface

SDL_Rect retangulo

int xy

public

void modImg(char filename[100])

Sprite(char filename[100]int x2int y2SDL_Rect ret)

void Render(SDL_Surface surface)

void updatePos(int x int y)

SDL_Rect getRetangulo()

bool boxColidesWith(Sprite sprite)

void Destrutor()

endif

A2 Spritecpp

include Spriteh

include ltSDLSDLhgt

42

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 56: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

include ltSDLSDL_imagehgt

include ltstringgt

SpriteSprite(char filename[100]int x2int y2SDL_Rect ret)

strcpy(this-gtfileNamefilename)

this-gtx=x2

this-gty=y2

this-gtsurface = IMG_Load(this-gtfileName)

retangulo = ret

confere se as sprites colidiram

bool SpriteboxColidesWith(Sprite sprite)

lados dos objetos

int esqA esqB

int dirA dirB

int cimaA cimaB

int baixoA baixoB

calculando os lados do objeto A

esqA = sprite-gtgetRetangulo()x

dirA = sprite-gtgetRetangulo()x + sprite-gtgetRetangulo()w

cimaA = sprite-gtgetRetangulo()y

baixoA = sprite-gtgetRetangulo()y + sprite-gtgetRetangulo()h

calculando os lados do objeto B

esqB = this-gtretangulox

dirB = this-gtretangulox + this-gtretangulow

cimaB = this-gtretanguloy

baixoB = this-gtretanguloy + this-gtretanguloh

verificando se A esta fora de B

if( baixoA lt= cimaB )

return false

43

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 57: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

if( cimaA gt= baixoB )

return false

if( dirA lt= esqB )

return false

if( esqA gt= dirB )

return false

se chegou ateacute aqui eacute pq colidiu

return true

void SpriteRender(SDL_Surface surface)

this-gtretangulox = x

this-gtretanguloy = y

SDL_BlitSurface(this-gtsurfaceNULLsurfaceampthis-gtretangulo)

void SpritemodImg(char filename[100])

strcpy(this-gtfileNamefilename)

this-gtsurface = IMG_Load(filename)

void SpriteupdatePos(int x2 int y2)

this-gtx=x2

this-gty=y2

retangulox = x

retanguloy = y

void SpriteDestrutor()

44

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 58: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

SDL_FreeSurface(surface)

SDL_Rect SpritegetRetangulo()

retangulox = x

retanguloy = y

return this-gtretangulo

A3 Barrah

ifndef BARRA_H

define BARRA_H

include Spriteh

include InputManagerh

class Barra public

private

float vxvy

float ax

float xy

Sprite ssdirsesq

InputManager input

bool iabarraDeCima

public

Barra(char nome[50] int px int py InputManager inp bool ia2 bool

barradecima)

virtual ~Barra()

void Update(float dt)

float getVx()

void colisao(float vx2 float vy2)

float getVy()

bool getIa()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

45

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 59: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

endif BARRA_H

A4 Barracpp

include Barrah

include Spriteh

include Pongh

BarraBarra(char nome[50]int pxint pyInputManager inpbool ia2bool barradecima)

input = inp

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 0

vy = 0

ax = 5

ia = ia2

barraDeCima = barradecima

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

bool BarragetIa()

return ia

e chamado em caso de colisoes

void Barracolisao(float vx2float vy2)

float BarragetVx()

46

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 60: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

return this-gtvx

float BarragetVy()

return this-gtvy

Sprite BarragetSprite()

return this-gts

void BarrasetVx(float vx2)

this-gtvx = vx2

void BarrasetVy(float vy2)

this-gtvy = vy2

void BarraUpdate(float dt)

InputManager input

input = input-gtgetInstance()

if(barraDeCima)

if(ia)

Pong bola = bola-gtgetInstance()

if((bola-gtgety()lt200 )ampamp (bola-gtgetVy() lt0))

if(bola-gtgetx() lt (x+s-gtgetRetangulo()w2))

vx = -ax+1

x = x+vx

if(xlt=0)

x=0

else if(bola-gtgetx() gt (x+s-gtgetRetangulo()w2))

vx = ax-1

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_a))

setVx(0)

47

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 61: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_d))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

else

if(input-gtisKeyDown(SDLK_LEFT))

vx = -ax

x = x+vx

if(xlt=0)

x=0

else if(input-gtisKeyDown(SDLK_RIGHT))

vx = ax

x = x+vx

if((x+s-gtgetRetangulo()w)gt=640)

x=640-s-gtgetRetangulo()w

void Barrarender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Barra~Barra()

s-gtDestrutor()

delete s

48

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 62: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

A5 GameManagerh

ifndef GAMEMANAGER_H

define GAMEMANAGER_H

include SDLSDLh

include SDLSDL_framerateh

include InputManagerh

class GameManager

public

GameManager()

void run()

virtual ~GameManager()

protected

private

SDL_Event event

SDL_Surface screen

FPSmanager manex

int timer

int dt

bool quit

InputManager input

endif GAMEMANAGER_H

A6 GameManagercpp

include GameManagerh

include SDLSDLh

include SDLSDL_imageh

include ltiostreamgt

include ltstdiohgt

include SDLSDL_ttfh

include SDLSDL_mixerh

include Spriteh

include Pongh

include Barrah

include TimeCounterh

include Texth

include lttimehgt

include vrpn_Analogh

49

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 63: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

pra jogar com dois capacetes modificar o parametro IA para false

no teclado os comandos satildeo lt- a -gt d

define IA false

o fator de correcao abaixo serve para tentar parar a barra

define CORRECAO_BARRA_BAIXO 0025

define CORRECAO_BARRA_CIMA 0025

GameManagerGameManager()

inicializando

SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO|SDL_INIT_TIMER)

TTF_Init()

Mix_OpenAudio(22050MIX_DEFAULT_FORMAT2 1024)

screen = SDL_SetVideoMode(64048016SDL_SWSURFACE)

fpsManager

manex = (FPSmanager) malloc (sizeof(FPSmanager))

SDL_initFramerate(manex)

SDL_setFramerate(manex 30)

SDL_WM_SetCaption(Pong para openVibeNULL)

inicializando o inputmanager

input = input-gtgetInstance()

quit = false

void VRPN_CALLBACK handle_analog2( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_CIMA))

SDL_Event event

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

50

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 64: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_CIMA))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_d

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_a

SDL_PushEvent(ampevent)

input-gtpollEvents()

void VRPN_CALLBACK handle_analog( void userData const vrpn_ANALOGCB a )

int nbChannels = anum_channel

float label

SDL_Event user_event

user_eventtype= SDL_USEREVENT

InputManager input

input = input-gtgetInstance()

for( int i=0 i lt anum_channel i++ )

label = achannel[i]

if(label gt (05 + CORRECAO_BARRA_BAIXO))

SDL_Event event

51

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 65: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

direita

soltando o botao da esquerda para apertar o botao da direita

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da direita

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

else if(label lt (05 - CORRECAO_BARRA_BAIXO))

SDL_Event event

esquerda

soltando o botao da direita para apertar o botao da esquerda

eventtype = SDL_KEYUP

eventkeykeysymsym = SDLK_RIGHT

SDL_PushEvent(ampevent)

input-gtpollEvents()

apertando o botao da esquerda

eventtype = SDL_KEYDOWN

eventkeykeysymsym = SDLK_LEFT

SDL_PushEvent(ampevent)

else

parado

input-gtpollEvents()

void GameManagerrun()

srand(time(NULL))

Text placar = placar-gtgetInstance()

TimeCounter time = new TimeCounter()

time-gtstart()

52

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 66: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

SDL_Rect retangulo

retangulox=0

retanguloy=0

retangulow = 640

retanguloh = 480

Sprite fundo

fundo = new Sprite(imagensfundopng00retangulo)

Pong bola

bola = bola-gtgetInstance()

Barra jogador = new Barra(imagensBarrapng320465inputfalsefalse)

Barra ia = new Barra(imagensBarrapng3200inputIAtrue)

SDL_Color cor = 000

setando o vrpn do openvibe

vrpn_Analog_Remote vrpnAnalog = new vrpn_Analog_Remote(openvibe-vrpnlocalhost)

vrpnAnalog-gtregister_change_handler( 0 handle_analog )

if(ia-gtgetIa())

vrpn_Analog_Remote vrpnAnalog2 = new vrpn_Analog_Remote(openvibe-vrpn2localhost)

vrpnAnalog2-gtregister_change_handler( 0 handle_analog2 )

while( quit == false )

calculando diferenca tempo

dt = time-gtgetTime()

time-gtstop()

atualizando o vrpn

vrpnAnalog-gtmainloop()

verificando estado

input-gtpollEvents()

dando update nos objetos

jogador-gtUpdate(dt)

bola-gtUpdate(dt)

ia-gtUpdate(dt)

bool colideJogador = bola-gtgetSprite()-gtboxColidesWith(jogador-gtgetSprite())

bool colideIa = bola-gtgetSprite()-gtboxColidesWith(ia-gtgetSprite())

53

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 67: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

if(colideJogador || colideIa)

bola-gtcolisao(11)

jogador-gtcolisao(11)

renderizando

fundo-gtRender(screen)

jogador-gtrender(screen)

ia-gtrender(screen)

placar-gtrender(screen)

bola-gtrender(screen)

SDL_Flip(screen)

SDL_framerateDelay(manex)

verificando solicitacao de fechamento

if ((input-gtgetQuit())||(input-gtisKeyPressed(SDLK_ESCAPE)))

quit = true

jogador-gt~Barra()

bola-gt~Pong()

ia-gt~Barra()

placar-gt~Text()

dt = time-gtgetTime()

time-gtresume()

GameManager~GameManager()

SDL_FreeSurface(screen)

A7 InputManagerh

ifndef INPUTMANAGER_H

define INPUTMANAGER_H

include Spriteh

include ltSDLSDLhgt

class InputManager

54

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 68: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

public

static InputManager getInstance()

void pollEvents()

bool isKeyDown(int key)

bool isKeyUp(int key)

bool isKeyPressed(int key)

bool isMouseDown(int button)

bool isMousePressed(int button)

bool isMouseUp(int button)

int mousePosX()

int mousePosY()

bool isMouseInside(SDL_Rect ret)

virtual ~InputManager()

bool getQuit()

int tecla

protected

private

static InputManager instance

InputManager()

int mouseXmouseY

int buttomUpbuttomDown

Uint8 keyState keyDownState keyUpState

bool estadoAntesestadoDepoisquit

endif INPUTMANAGER_H

A8 InputManagercpp

include InputManagerh

include Spriteh

include SDLSDLh

include eventosh

include ltiostreamgt

InputManager InputManagerinstance = NULL

InputManagerInputManager()

keyState = SDL_GetKeyState(NULL)

tecla = 0

keyDownState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

55

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 69: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

keyUpState = (Uint8)calloc(sizeof(keyState)sizeof(Uint8) sizeof(Uint8))

funcao para organizar os eventos que estao ocorrendo

void InputManagerpollEvents()

SDL_Event event

memset(keyDownState 0 sizeof(keyDownState))

memset(keyUpState 0 sizeof(keyUpState))

quit = false

buttomDown = -1

buttomUp = -1

while( SDL_PollEvent( ampevent ) )

if( eventtype == SDL_KEYDOWN)

keyDownState[eventkeykeysymsym] = 1

keyUpState[eventkeykeysymsym] = 0

if(eventtype == SDL_KEYUP)

keyUpState[eventkeykeysymsym] = 1

keyDownState[eventkeykeysymsym] = 0

if( eventtype == SDL_QUIT )

quit = true

if( eventtype == SDL_MOUSEMOTION)

mouseX = eventmotionx

mouseY = eventmotiony

if( eventtype == SDL_MOUSEBUTTONDOWN)

buttomDown = eventbuttonbutton

if( eventtype == SDL_MOUSEBUTTONUP)

buttomUp = eventbuttonbutton

56

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 70: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

bool InputManagergetQuit()

return quit

InputManager InputManagergetInstance()

if (instance)

instance = new InputManager()

return instance

bool InputManagerisKeyDown(int key)

verificar array keydownstate

if(keyDownState[key]==1)

return true

return false

bool InputManagerisKeyUp(int key)

if(keyUpState[key]==1)

return true

return false

bool InputManagerisKeyPressed(int key)

if(keyState[key])

return true

return false

bool InputManagerisMouseDown(int button)

return (buttomDown == button)

57

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 71: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

bool InputManagerisMousePressed(int button)

bool InputManagerisMouseUp(int button)

return (buttomUp == button)

int InputManagermousePosX()

return mouseX

int InputManagermousePosY()

return mouseY

verifica se o mouse esta dentro de um determinado retangulo

bool InputManagerisMouseInside(SDL_Rect ret)

bool auxX=false

bool auxY=false

if ((mousePosX() gt= retx ) ampamp (mousePosX() lt= (retw + retx )))

auxX=true

if (mousePosY()gt=rety ampamp mousePosY()lt=(reth + rety ))

auxY=true

return (auxX ampamp auxY)

InputManager~InputManager()

A9 Maincpp

include ltiostreamgt

include ltstdiohgt

include GameManagerh

58

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 72: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

int main (int argc char argv)

GameManager game = new GameManager()

game-gtrun()

game-gt~GameManager()

return 0

A10 Pongh

ifndef PONG_H

define PONG_H

include Spriteh

include Soundh

class Pong

private

static Pong instance

float vxvy

float xy

Sprite s

Sound som

public

static Pong getInstance()

Pong(char nome[50]int pxint pychar fileSound[50])

virtual ~Pong()

void Update(float dt)

float getVx()

float getx()

void colisao(float vx2float vy2)

float getVy()

float gety()

void setVx(float vx2)

void setVy(float vy2)

Sprite getSprite()

void render(SDL_Surface surface)

59

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 73: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

endif PONG_H

A11 Pongcpp

include Pongh

include Spriteh

include Soundh

include Texth

include ltcstdlibgt

include lttimehgt

include ltstringhgt

Pong Ponginstance = NULL

Pong PonggetInstance()

if (instance)

instance = new Pong(imagensbolapongpng100100musicsfx01wav)

return instance

PongPong(char nome[50]int pxint pychar fileSound[50])

x = px

y = py

SDL_Rect ret

retx = x

rety = y

retw = 1

reth = 1

vx = 3

vy = 3

som = new Sound(fileSound)

s = new Sprite(nomepxpyret)

e chamado em caso de colisoes

void Pongcolisao(float vx2float vy2)

60

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 74: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

vy = -vy

y = y+vy

Update(0)

float PonggetVx()

return this-gtvx

float PonggetVy()

return this-gtvy

float Ponggetx()

return this-gtx

float Ponggety()

return this-gty

Sprite PonggetSprite()

return this-gts

void PongsetVx(float vx2)

this-gtvx = vx2

void PongsetVy(float vy2)

this-gtvy = vy2

void PongUpdate(float dt)

Text placar = placar-gtgetInstance()

char straux[50]

int deslocamentoX = vx

int deslocamentoy = vy

int varRandom = 2(rand() 2) - 1

if((x+deslocamentoX) lt= 0 || (x+deslocamentoX) gt= (640 - s-gtgetRetangulo()w))

61

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 75: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

som-gtplay(0)ao tocar na parede toca o som

vx = -vx e muda o sentido da bola

x += deslocamentoX

if((y+deslocamentoy) lt 0)

ponto do jogador

char mensagem[50] = placar AI

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

placar-gtplacarJogador++

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)

placar-gtsetMensagem(mensagem)

x=320

y=240

vy = vyvarRandom

s-gtupdatePos(xy)

if((y+deslocamentoy) gt (480 - s-gtgetRetangulo()h))

ponto da ia

char mensagem[50] = placar AI

placar-gtplacarIA++

sprintf(strauxdplacar-gtplacarIA)

strcat(mensagemstraux)

strcat(mensagemx)

sprintf(strauxdplacar-gtplacarJogador)

strcat(mensagemstraux)

strcat(mensagem Jogador1)printf(mensagem)

placar-gtsetMensagem(mensagem)

x=320

y=240

62

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 76: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

vy = vyvarRandom

s-gtupdatePos(xy)

y += deslocamentoy

void Pongrender(SDL_Surface surface)

s-gtupdatePos(xy)

this-gts-gtRender(surface)

Pong~Pong()

som-gt~Sound()

s-gtDestrutor()

delete s

63

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 77: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

Referecircncias

[1] Minkyu Ahn Jun Hee Hong and Sung Chan Jun Source space based brain computerinterface In Selma Supek and Ana Susup2ac editors 17th International Conferenceon Biomagnetism Advances in Biomagnetism Biomag2010 volume 28 of IFMBEProceedings pages 366369 Springer Berlin Heidelberg 2010 101007978-3-642-12197-58618

[2] Diego Rielo Selim R Benbadis EEG artifacts httpautonomos-labscom 2010 viii8 11

[3] Patrick Berg and Michael Scherg Dipole models of eye movements and blinks Electro-encephalography and Clinical Neurophysiology 79(1)36 44 1991 viii 9

[4] Hans Berger Uumlber das elektrenkephalogramm des menschen Psychiatrie und Nerven-krankheiten December 1929 1

[5] Malcolm Brown Michael Marmor Vaegan Eberhard Zrenner Mitchell Brigell andMichael Bach Iscev standard for clinical electro-oculography (eog) 2006 DocumentaOphthalmologica 113205212 2006 101007s10633-006-9030-0 viii 10

[6] Stephen Butterworth On the theory of lter ampliers Experimental Wireless and theWireless Engineer 7536541 1930 28

[7] Burges C J C A tutorial on support vector machines for pattern recognition DataMining and Knowledge Discovery 2121167 1998 18 39

[8] Andrew Campbell Tanzeem Choudhury Shaohan Hu Hong Lu Matthew K MukerjeeMashqui Rabbi and Rajeev DS Raizada Neurophone brain-mobile phone interfaceusing a wireless EEG headset In Proceedings of the second ACM SIGCOMM workshopon Networking systems and applications on mobile handhelds MobiHeld 10 pages 38New York NY USA 2010 ACM viii x 21

[9] BS Chang SC Schachter and DL Schomer Atlas of Ambulatory EEG ElsevierAcademic Press 2005 viii 8

[10] Jean Decety Do imagined and executed actions share the same neural substrate Cog-nitive Brain Research 3(2)87 93 1996 ltcetitlegtMental representations of motoractsltcetitlegt 12

[11] G Deuschl and A Eisen Recommendations for the practice of clinical neurophysiologyGuidelines of the international federation of clinical neurophysiology Elsevier 1999 13

64

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 78: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

[12] Emotiv Emotiv home page httpwwwemotivcom 2011 14

[13] Roger M ENOKA Bases neuromecanicas da cinesiologia Manole 2 edition 2000 10

[14] R A FISHER The statistical utilization of multiple measurements Annalsof Eugenics8376386 1938 28

[15] Germund Hesslow Conscious thought as simulation of behaviour and perception Trendsin Cognitive Sciences 6242247 2002 12

[16] Knott JR American electroencephalographic society guidelines for standard electrodeposition nomenclature J Clin Neurophysiol 8200202 1991 13

[17] T Kirschstein Wie entsteht das EEG das neurophysiologie-labor httpwww

sciencedirectcomsciencearticlepiiS1439484708000112 2008 6

[18] Linden Lab Second life your world your imagination httpsecondlifecom 2003viii 21 22

[19] Johnny Chung Lee and Desney S Tan using a low-cost electroencephalograph for taskclassication in hci research httpresearchmicrosoftcomen-usumredmondgroupscuepublicationsUIST2006-LowCostEEGpdf October 2006 x 2

[20] M Lotze G Scheler H-RM Tan C Braun and N Birbaumer The musicians brainfunctional imaging of amateurs and professionals during performance and imagery Neu-roImage 20(3)1817 1829 2003 12

[21] Louizos Alexander Louizos Braintalk project httpwwwnanotechgalaxycom

braintalk 2010 viii 23

[22] J Malmivuo R Plonsey and J Cameron Bioelectromagnetism principles and applicationsof bioelectric and biomagnetic elds Informa Pharma Science January 1995 x 1 13

[23] MasterMind Mastermind project httpseniorcengmetuedutr2011

mastermindindexphpemotiv viii 15

[24] Paul L Nunez and Andrew F Westdorp The surface Laplacian high resolution EEGand controversies Brain Topography 6221226 1994 101007BF01187712 26

[25] Surfdaddy Orca Using your thought-controlled iphoneto dial home httphplusmagazinecom20100412

using-your-thought-controlled-iphone-dial-home viii 20

[26] Satu Palva and J Matias Palva New vistas for -frequency band oscillations Trends inNeurosciences 30(4)150 158 2007 18

[27] G Pfurtscheller C Neuper A Schlogl and K Lugger Separability of EEG signalsrecorded during right and left motor imagery using adaptive autoregressive parametersRehabilitation Engineering IEEE Transactions on 6(3)316 325 sep 1998 18

65

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 79: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

[28] G R Muller-Putz1 A Schlogl2 R Leeb1 C Brunner1 and G Pfurtscheller1 BCI com-petition 2008 graz data set b Institute for Knowledge Discovery Graz University ofTechnology 2008 viii 24 25 26

[29] Pfurtscheller G Ramoser H Muumlller-Gerking J Optimal spatial ltering of single trialEEG during imagined hand movement Rehabil Eng 8(4)441446 2000 18

[30] Rauacutel Rojas Braindriver project httpemedicinemedscapecomarticle

1140247-overview 2011 viii 19

[31] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell MTaylor II Thomas C Hudson Vrpn tutorial Sending data froman external application to openvibe httpopenvibeinriafr

vrpn-tutorial-sending-data-from-an-external-application-to-openvibe37

[32] Adam Seeger Hans Weber Jerey Juliano Aron T Helser Russell M Taylor II Tho-mas C Hudson Vrpn A device-independent network-transparent vr peripheralsystem httpwwwcsunceduResearchvrpnVRST_2001_conferencevrst_vrpn_paper_reprintpdf 2001 37

[33] Saeid Sanei and Jonathon Chambers EEG signal processing Informa Pharma Sciencepage 289 January 2007 viii 14

[34] A Schloumlgl M Slater and G Pfurtscheller Presence research and eeg Proceedings of the5th International Workshop on Presence pages 911 2002 viii 12

[35] A Schloumlgl and G Pfurtscheller Eog and ecg minimization based on regression analysisJanuary 2007 viii 10

[36] Alois Schloumlgl Felix Lee Horst Bischof and Gert Pfurtscheller Characterization of four-class motor imagery EEG data for the bci-competition 2005 Journal of Neural Enginee-ring 2(4)L14 2005 18

[37] K Stamps and Y Hamam Towards inexpensive bci control for wheelchair navigation in theenabled environmenta hardware survey Brain Informatics pages 336-345 December2010 viii 2

[38] RM Suinn and RD Clayton Psychology in sports methods and applications BurgessPub Co 1980 12

[39] Ana Luisa Miranda Vilela Sistema nervoso httpwwwafhbiobrnervoso

nervoso1asp viii 5

[40] Jamie Ward The students guide to cognitive neuroscience Psychology Press 2010 viii6

[41] G Gibert M Congedo E Maby V Delannoy O Bertrand A Leacutecuyer Y Renard F LotteOpenvibe An open-source software platform to design test and use brain-computer inter-faces in real and virtual environments Presence teleoperators and virtual environments19(1) 2010 29

66

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias
Page 80: Universidade de Brasília - bdm.unb.brbdm.unb.br/bitstream/10483/5033/1/2012_RenatoCarrascoCosta_Vanessa... · Emotiv Epoc Headset CDU 004.4 Endereço: Universidade de Brasília Campus

[42] A Zani and AM Proverbio The Cognitive Electrophysiology of Mind and Brain Aca-demic Press 2002 viii 7

[43] Loacuteska Aacutedaacutem Emotiv epoc eeg based brain-computer interface May 2011 viii 22

67

  • Dedicatoacuteria
  • Agradecimentos
  • Agradecimentos
  • Resumo
  • Abstract
  • Introduccedilatildeo
    • Contextualizaccedilatildeo
    • Foco do trabalho
    • Objetivo
    • Justificativa
    • Organizaccedilatildeo dos Capiacutetulos
      • Fundamentaccedilatildeo
        • A Biologia por traacutes do EEG
          • Estrutura e funccedilatildeo do neurocircnio
          • Como funciona a troca de potenciais
          • O sinal de EEG
            • Artefatos bioloacutegicos
              • Eletrooculograma
              • Eletrocardiograma
              • Eletromiografia
                • Artefatos teacutecnicos
                  • Frequecircncia de 5060 Hz
                  • Artefato do amplificador
                    • Imageacutetica Motora
                    • Emotiv Epoc
                      • Posicionamento de eletrodos
                      • Emotiv Epoc Headset
                        • OpenViBE
                        • Classificadores
                        • Extraccedilatildeo de sinais utilizando a energia de banda
                          • Trabalhos relacionados
                            • Carro controlado pelo ceacuterebro
                            • NeuroPhone
                            • Controle para o Second Life
                            • Controle do braccedilo de um robocirc
                            • BrainTalk
                              • Processo de desenvolvimento
                                • Aquisiccedilatildeo de Sinais de EEG
                                • O Experimento
                                • Cenaacuterios
                                  • Monitoramento de Sinais
                                  • Aquisiccedilatildeo de Sinais
                                  • Treinamento dos Classificadores
                                  • Online
                                  • Replay
                                  • Caacutelculo da porcentagem de acertos
                                    • Aplicativo desenvolvido
                                      • Comunicaccedilatildeo do OpenViBE com o aplicativo
                                      • Classes principais do aplicativo
                                          • Resultados e anaacutelise
                                            • Comparaccedilatildeo entre resultados de classificadores utilizados
                                              • Conclusatildeo
                                              • Anexos
                                                • Spriteh
                                                • Spritecpp
                                                • Barrah
                                                • Barracpp
                                                • GameManagerh
                                                • GameManagercpp
                                                • InputManagerh
                                                • InputManagercpp
                                                • Maincpp
                                                • Pongh
                                                • Pongcpp
                                                  • Referecircncias