Emotive EPOC+使ってみた!BMIができそうだ!
この記事はこんな人にオススメです.
  • 脳破解析をしている人
  • Emotiv EPOC+を買うか悩んでいる人
  • ブレインマシンインタフェースに興味がある人

こんにちは.けんゆーです(@kenyu0501_)

最近,ラボにワイヤレス脳波計(Emotiv EPOC+)が届いたので記事書きます.

ワイヤレスヘッドセット(脳波計)と,電極,コンタクトレンズ用液,信号レシーバ用のUSBドングルが入ってました.
パソコンがあればとりあえず,USBにドングルさして動かせます.

(わいの研究費で購入したはじめてのもの!笑)

今はラボの後輩が卒論研究に向けてあれやこれや中心的に触ってますが,ブレインマシンインターフェースをはじめいろんなことができるっぽいので色々と楽しみです.

実際に使ってみての感想

ワイヤレスということもあり非常に使いやすいです.
接続もものすごく簡単です.
センサー部分はウェットタイプなのですがセットアップすぐに完了します.

リアルタイム計測を行うためには,PROライセンスが必要ですが,すぐに以下のような14チャンネルの信号が取れました.

リアルタイムFFTも一瞬で出来ます.

しかしこれ,データをリアルタイム計測するためには,EmotivPROのライセンスがいるのですよねー

EmotivPROも買いました

生データを高解像度で取得したければ,EmotivPROのライセンス購入が必要ぽかったのでそれも同時に契約しました.

Pro Licenseの詳細ページはこちらです

 

価格は4つのパターンがあって,

  • 月契約
  • 年契約
  • 3年契約
  • 5年契約

です.おいらは1年の契約にしました.
まあ,これでさっきのような生体信号が取れます.

データの保存は,csv形式か,edf形式(生体信号を扱うときによく用いられる拡張子でバイナリ保存)か選べます.
基本的にPythonかなんかで生波形の処理を行うのであれば,edf形式で十分です.

各種アプリケーションが優秀で面白い

ハードとしての脳波計の使い心地も良いですが,色々とソフトウェアも開発されているそうで,かなり面白いと思います.

(参考:EMOTIV – software Application)

無料のものは一通りやりましたが,EmotivBCIはおもしろかったですよ.

感想は,,,ちょっとはじめ難しいです.変な筋肉使います笑
しかもどこの筋肉かわからない笑

脳みそを動かす感じが,なんとも言えない面白さがありました.

ブレインマシンインターフェースBMIの使い方としては,あのキューブの動きとロボット(ドローン)の動きをリンクさせて動かすといったところでしょう.

夢がありますね.これからおいら達も内側を触っていきます.

実際にBMIを実装していくためのファーストステップ!

まだ実際に,ものを動かすまでには至っていませんが,BMIの研究アーカイブとして記事に起こしておきます.

配布されているソフトウェアではなく,やっぱり自分自身でBMI設計がしたいですよね!
っていうことで,色々と触ってみました.

Cortex APIを使うととりあえず良いみたい

何もわからず手探りで色々と触って行きます.
開発しながら記事を書いているので,記事としてまとまりが無いのはご了承ください.

EmotivのHPから紹介されていますが,BMI開発用のSDKがgithubにあります.

githubはこちらです
(https://github.com/emotiv/cortex-example).

こちらからcpp-qtというファイルを扱っていくのですが,C++を動かす際に,Qtフレームワークが推奨されています.
なので,無料版のQt (https://www.qt.io/) を入れました.

visual studioのような統合開発環境ですね.

結論から言うと,cpp-qtの中に入っているeegディレクトリの中のmain.cppを回すとリアルタイムの値を取ることが出来ました.

しかしながら,ここまでやるためには以下を用意する必要があります.

  • Client ID
  • Client Secret
  • user name
  • password
  • Emotiv License

上の4つは,SessionCreater.cppに書き込む欄があるので,そちらに書き込んでください.
また,一番下のEmotiv License に関しては,main.cppのuse.start()に埋め込んでください.

計測のサンプリングのパラメータに関する設定

計測のサンプリングに関しては,
DataStreamExample.cppの nextDataTime = time + x;
のxを触ってください.
ここで,注意することは,xは周波数のサンプリング幅の間隔です.
初期設定のEmotivデバイスの128Hzの計測ならば,サンプリング時間幅は0.0078125です.
なので,1秒間に128点のサンプル数が欲しければ,0.0078125にしておけば良いのですが,取得したデータの値が飛びました.

対策措置て
DataStreamExample.cppの nextDataTime = time + 0.007;
とかにしてます,(0.0078125だとうまく行きませんでした)

nextDataTimeがdouble型なので,
それよりも小さい0.0078でやると多分いけるだろうと考えてましたが,サンプル数が128点得られずまた飛びました.

0.007だと取れましたよ.

計測時間に関しては,
DataStreamExample.cppの timerId = startTimer(x*1000)のxを変更すると任意に設定できます.
m秒で計測されているのですね.

とりあえずここまで

とりあえず,C++でデータを計測することができたので,とりあえずここまでにしておきます.

次回はデータ通信に使うsocketについて色々とやっていきます.

BMI開発目指して頑張りまーす!