Neurosky MindWave Mobile i ThinkGear iOS API

Web stranica za seminar i projekt iz kolegija "Računalna grafika".


Kao ulazni uređaj na računalu, najčešće koristimo tipkovnicu, miš ili "joystick" međutim postoje razni uređaji za unos podataka u računalo kao što su grafički tableti, mikrofon, skener i dr.


Ovdje ću prikazati upotrebu jednog novog uređaja za unos podataka i manipuliranje računalnom grafikom ovisno o istima.

Više o uređaju potražite ovdje.


Također objasniti ću kako koristiti podatke iz uređaja u iOS aplikaciji i kako riješiti neke, u dokumentaciji, ne spomenute detalje nužne da bi se spojili sa uređajem.

Više o korištenju potražite ovdje.


Na stranici možete pogledati kako izgledaju primjeri izrađeni za potrebe seminarskog rada koristeći OpenGL 2 na iOS-u sa ulaznim podacima iz MindWave Mobile uređaja.

Više o tome ovdje.


Na download dijelu možete preuzeti primjere i prezentaciju.


Ako imate bilo kakvih pitanja, slobodno me kontaktirajte.

Neurosky MindWave Mobile

MindWave mobile je uređaj koji očitava moždane valove korisnika te ih pomoću ThinkGear iOS API-a može učiniti sastavnim dijelom svake iOS aplikacije. Uređaj se spaja na druge uređaje putem Bluetooth-a.

To je zapravo prijenosni EEG biosenzor koji zamjenjuje skupe, teške, velike i neprijenosne uređaje.

Očitava moždane valove, a NE misli.

Senzor interpretira moždanu aktvivost kroz slijedeće podatke koje može dostaviti aplikaciji:

  • RAW EEG Signal
  • Pažnja/Fokus
  • Meditacija
  • Treptaj
  • delta
  • theta
  • low apha
  • high alpha
  • low beta
  • high beta and
  • gamma waves

Primjena

MindWave mobile možemo koristiti kao jedini ili kao dodatni način unosa parametara u igre. Najčešće se koristi kod rehabilitacije ili treninga sportaša, ali primjena ovog uređaja je neograničena i ovisi samo o mašti.

ThinkGear iOS API

ThinkGear iOS API olakšava rad s MindWave mobile uređajem jer za programera riješava problem spajanja i održavanja veze s uređajem te parsira primljene podatke iz uređaja.

ThinkGear iOS API je besplatan za preuzimanje i korištenje, a može ga se naći na ovom linku.


Koristi se kod razvoja aplikacija koje koriste podatke bio signala NeuroSky ThinkGear obitelji:

  • MindWave
  • CardioChip

Pri razvoju aplikacija korištenjem ThinkGear iOS API-a treba biti svjestan dva ograničenja, a to su da je moguće spojiti se samo sa jednim uređajem i da zbog frenkvencije uzorkovanja neki podaci mogu biti izgubljeni. Tu najviše stradaju podaci o treptaju koje je najlakše izgubiti.


API za nas upravlja vezom prema ThinkGear uređaju, parsira tok podataka iz uređaja i delegate klasu obaviještava u zadanom intervalu o spajanju uređaja, prekidu veze sa uređajem i o očitanim vrijednostima sa senzora

Spajanje uređaja sa OpenGL aplikacijom

Prvi korak nakon kreiranja novog projekta je editirati info.plist file u kojem treba dodati "supported external accessory protocols" i vrijednost "com.neurosky.thinkgear"

Zatim sve iz foldera "src/lib" koji se nalazi u .zip file-u kojeg smo preuzeli sa linka navedenog gore, prebacimo u "Libraries" groupu u projektu

Treći korak je da dodamo accelerate.framework i externalAccessories.framework

Kad smo sve pripremili možemo krenuti na editiranje koda.

Prvi korak je da u klasu u kojoj koristimo MindWave ubacimo headere:

  • TGAccessoryManager.h
  • TGAccessoryDelegate.h

Slijedeći korak je da što ranije u kodu postavimo TGAccessoryManager. Tipično se to postavlja u AppDidFinishLaunching metodi delegate klase aplikacije

[[TGAccessoryManager sharedTGAccessoryManager] setupManagerWithInterval:0.05 forAccessoryType:accessoryType];

[[TGAccessoryManager sharedTGAccessoryManager] setDelegate:(ViewController *)[[navigationController viewControllers] objectAtIndex:0]];

Ovime smo postavili osvježavanje tj. obavještavanje metode dataReceived o trenutnim podacima svakih 0.05 sekundi.

Trebamo paziti i da prilikom gašenja aplikacije prekinemo preuzimanje podataka iz uređaja, a to radimo naredbom:

[[TGAccessoryManager sharedTGAccessoryManager] teardownManager];

u appWillTerminate metodi

Da bismo nakon svega bili u mogućnosti primati podatke moramo klasu koja je postavljena kao delegate klasa modificirati da podržava TGAccessoryDelegate protokol.

@interface ViewController : GLKViewController <TGAccessoryDelegate>

Zatim u istoj klasi definiramo slijedeće metode.

- (void)accessoryDidConnect:(EAAccessory *)accessory;

- (void)accessoryDidDisconnect;

- (void)dataReceived:(NSDictionary *)data;

Preuzimanje podataka možemo pokrenuti kad je uređaj spreman i najpraktičnije je to napraviti u wievDidLoad metodi uz provjeru dostupnosti uređaja.

if([[TGAccessoryManager sharedTGAccessoryManager] accessory] != nil){
        [[TGAccessoryManager sharedTGAccessoryManager] startStream];
}

Stopiranje radimo u wievWillDisappear metodi uz provjeru dali je uređaj uopće spojen.

if([[TGAccessoryManager sharedTGAccessoryManager] connected]) [[TGAccessoryManager sharedTGAccessoryManager] startStream];

Po dokumentaciji je ovo kraj i uređaj bi se morao javljati te bi, ako ništa drugo, kroz dataReceived metodu trebali moći ispisivati podatke. Ukoliko bi se radilo o aplikaciji koja koristi standardne UI elemente to bi bilo sasvim dovoljno. S obzirom na to da se ovdje radi o OpenGL aplikaciji, tih elemenata nema, a potrebni su jer ih API koristi za prijenos podataka. Zato je potrebno iste kreirati i sakriti.

Započinjemo u appDelegate klasi gdje definiramo

@property (strong, nonatomic) UIWindow *window;

@property (nonatomic, strong) IBOutlet UINavigationController * navigationController;

U applicationDidFinishhLaunching stavljamo slijedeći kod

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:[[ViewController alloc] init]];

self.window.rootViewController = navigationController;

navigationController.navigationBar.hidden = YES;

1. primjer - koordinatni sustav

Prikaz moždanih valova u obliku koordinatnog sustava gdje je pažnja predstavljena vrijednošću na y osi, a meditacija na x osi. Treptaj je prikazan u ishodištu i traje 1 sekundu.

Primjer je moguće isprobati i bez MindWave-a pri čemu se prstom prelazi po ekranu.

2. primjer - igra ubrzanja

Automobil kreće kad je signal kvalitetan(zeleni semafor) i kad korisnik trepne. Koristeći prosječnu vrijednost pažnje i meditacije, prilagođava se brzina vozila koja ide do max 100km/h. U donjem desnom kutu bilježi se vrijeme potrebno za prelazak staze u dužini 402m. Dodirom na ekran igra kreće od početka.

Primjeri su izrađeni u Xcode razvojnom okruženju koristeći OpenGL ES2 te su prilagođeni za dimenzije iPad-a.

Ako želite preuzeti prezentaciju ili izvorni kod, kliknite na neku od ikona.