MasterKoda’s blog

半導体エンジニア、マーケッターです。テクノロジーや読書について書きます。

MindWaveでやりたいこと

自己能力開発、研究の一環として、脳波測定器:Mindwaveを購入した。

やってみたいこと
  • 集中力測定
  • 集中力が高まる飲食物の選定
  • 集中力が高まる環境の選定
  • フライト中のストレス測定
  • コーヒーを飲んだ時の脳波の変化
  • 「会いたくて会いたくて震える」時の脳波の震え計測

基本的には「脳波取得 >> 解析 >>価値提供」 の流れ。

思いつくシステム構成
  • MindWave >> Windows PC
  • MindWave >> Arduino
  • MindWave >> Rapsbbary Pi
  • MindWave on AR device >> Cloud?

自分の研究テーマとしては、デバイスの能力を強化する、だけでも十分である。応用例を重視すぎず、根幹技術にフォーカスする。

PCでシリアル通信を受け取る

下記のサイトにPCで値を受け取ってラズパイに送るまでの一連の開発をした例が載っている。非常にありがたい。値の精度はあまり高くないよう?

MindWaveからPythonを使って脳波の値を取得し、好きなプログラムで利用する方法 - Ambivalent Wanderer

なぜ脳波測定が流行っていないのか?

個人的な感覚としては、脳波測定がもっと生活に浸透していても良いと思っている。浸透していない理由として考えられるのは - デバイスが高い。 - 測定精度が低い。 - 計測データを処理するアプリの能力が低い。 - 応用例が実用に耐えない。

f:id:MasterKoda:20190103125714j:plain
WhyBCI?

思考を判別することを目指している人は多いようだ。しかし、集中力=疲労度合いがわかるだけでも十分ではないのか?BCIとして、ロボットアームを動かすだとか、難しいことよりももっと簡単なことから応用できないか?単機能でいい。生活に根付く機能が必要だ。

植物も脳波と同様に電気信号で捉えることができるようだが、一般には普及していない。これも同様な要因分析ができるだろう。脳も植物も意味が明確に理解できる活動をしている。ということは、電気信号も意味のある処理がなされているはずである。

Arduinoの応用例として自動水やり器があるが、これはとても示唆的な応用例だ。何故ならば、植物の活動を正確に判別しなくても、一定期間で必ず水やりすればいいという、抜本的な解決策を簡易な方法で提供しているからだ。こういった技術の妥協点を見つけ出すのもまた、ビジネスの面白みと、ビジネスマンのセンスだと思う。

植物に脳波測定器を向けたら何かわかるかな?

技術的に解決した方が良さそうなこと。

結局は数学的にゴリゴリしたものに落とし込めると思われる。機械学習で処理できる具合まで抽象化できれば、あとは時代の流れに沿ったテクノロジーがなんとかしてくれるだろう。

バイスの到着をしばしまたれり。

2019年に学ぶこと

2019年に手を動かして実践したいこと。

手を動かす

  • 脳波測定:Mindwave
  • Arduino act as I2C Master
  • 英語文書執筆、スピーチ作り
  • Fipsy
  • MAX10

本で学ぶ

脳波測定は自分の研究開発のみならず、仕事の質を向上させることに直結するため積極的に取り組みたい。ArduinoのI2Cマスター化も同様である。英語文書もスピーチ作りも、英語でコミュニケーションをとる能力を自分のものにするために、自分自身が身に着けるべき能力だと思っている。いくら翻訳が発達しても、言葉の真意や文化を理解するためには自分自身の体感から学ばなければならない、と思っている。学ぶこと、機会やオープンソースに任せてしまうことの分別をつけること、make or buyの見極めが肝心な時代ということでしょう。

変わらないことは、本質的なこと、根幹の技術を学び、身に付けること。20代の間は自分の基礎を作ることに専念すること。技術的にも人間的にも。

Fipsy検証環境のブロック図をざっくり解説する

Fipsyの検証環境の構成をざっくりまとめておきたいと思う。ArduinoPythonソースコードの中身まで読み解き、本質的な部分まで調べたいところだが、気乗りしないのでとりあえずできたことを書いておく。ちなみに、Mocoの解説だとPythonが何をしているのかわかりにくく、だいぶ苦戦した。

ブロック図にするとこんな感じ。

f:id:MasterKoda:20190102131102j:plain
Fipsy検証環境_ブロック図

まず、.jedファイルというJEDECファイル形式でRTL(FPGAに書き込むソースコード)を出力する。JEDECファイルの文法は決まっているようで、if文などで書かれたRTLをFPGAに焼くための結線情報がわかる形式になっている(人間が見て理解できる)。

.jedが出力できたら、次に、USBにデータを載せるためにBinary形式=.binに直す。

こちらのページにPythonのセットアップ方法が書かれているため、基本的には指示に従えば良い。

とはいえ、何をしているのか私にはさっぱりわからなかった。最終的には、

python FileChooser.py

コマンドプロンプト上で叩いて、FileChooserというスクリプトを呼び出し、GUIに従ってファイル選択などを行っていく。時系列で細かく説明するには結構めんどいので、こちらの環境立ち上げメモも参照されたい。

masterkoda.hatenablog.com

私がかかった罠は、Pythonを実行するという一般常識がなかったことに起因していた。まさかWindowsコマンドプロンプトからPythonが起動できるとは。また、書き込めているかどうかわからず、うーうーしていたが、Fipsyのアドレスが読み込めるあたりまで行ければだいたい動いているのは間違いなさそうだ。つまづいたのは、検証のためにソースコードの一部をいじったからで、動かないソースコードを書き込めた照明ができた時点でつまづいていた。うっかり。

ざっくりではあるが、こんな感じのブロック構成になっている。気が向いたら、詳細を丁寧に解説したいと思う。気が向くのは、このFPGAを使って面白いことができることがわかってからだろう。。。流石にLUTs数が小さすぎて、もう少し大きいFPGAを選びたいところ。

脳波測定デバイスの調査

自己能力開発、研究開発の一環として、脳波測定に興味を持っている。通常、疲れた、疲れていないと言った脳の状態は主観論に終始してしまうが、脳波を測定して客観的に評価をすることができれば、活動を改善することができる。これは仕事場での働きすぎ防止や、リモートワークでの集中度合い監視にも活かすことができるだろう。自分のビジネスを持ちたいという気持ちが強くあり、そのきっかけ作りとしては、非常に有効なものとなるだろう。

バイスはまだヘッドセット程度の大きさであるが、耳栓タイプのワイヤレスイヤホンぐらいまで小型化することができるとさらに応用例が広がるだろう。

脳波は数Hz程度の低周波であるから、デバイスの小型化が難しい側面もあるのではないかと思うが、何らかのブレイクスルーでスケールする道を選び出すことができるとありがたい。

応用分野は果てしなく広がる。教育、医療、ゲーミング。今それほどまでに浸透していない理由も器になるところだが、今後の発展のためも考えて、まずは手を動かしてみるのもいいだろう。

ググってみると、応用例の報告は研究段階が多いようだ。下記の記事でも検討されているが、「脳波を使って何かをコントロールする」という取り組みが主に取られているよう。ようは電子機器とのインターフェイスをキーボードやマウスではなく脳波にしようというのである。 第2回 「脳波」を真剣に科学してみる:未来のサービスを作る基礎技術|gihyo.jp … 技術評論社

脳波を測るのは、SDKまでセットで提供しているMindwaveのツールを使えば何の問題もなさそうだ。ただし、これをビジネス化するアイデアはあまり内容である。例えば、認知症の改善指標や、教育効果の指標、例えば音楽を聞くほうが集中できるのかどうかのような中2的な研究ですら、応用例として考えることはできるが、ビジネスにするのは難しい。とはいえ、個人的にはビジネスのみを考えるべきではないと思うし、本当に価値のあることならば如何にかこうにかビジネス化はできると信じている。今の世の中であれば、データを売るなんてことも考えられるだろう。

もう一つ、自分の考えの根幹にあるものは、改善をするためには評価が必要であるということだ。至極当然のことなのだが、こう言った原理的なことほど、世の中ではないがしろにされていたりする。定量化は万能ではない。例えば、素振り100回/日する少年と101回/日する少年では、どちらの方が上達が早いか明らかにするには、他の要素も抽出する必要がある。ただ、1000回/日する少年は、よっぽど適当な練習でない限り、確率的にかなり上達が早いと考えるのが自然である。

こう言った定量化が、脳波を用いるとできる。例えば、営業力も測ることができるようになるだろう。顧客を模擬した相手に脳波測定器をつけて、その感情を計測することで、営業力の指標の参考にできるだろう。コミュニケーション力、いわゆるコミュ力も同様である。ポイントは、人間の活動を定量化すべき、そして脳の働きは定量化できるということだ。

ここで注意したいことは、応用例の検討に終始しないことだ。あくまでも根幹技術を培うことに集中した方がいい。何故ならば、応用例は競争と荒廃を繰り返すからだ。根幹技術、コンピテンシーは廃れないものを意味する。

大きな枠で考えると、現象を「波」として捕らえられるものは多岐にわたるはずなのである。脳波しかり、木の生命活動も波として計測できるようだ。そのデータをいかにして計測して集約して活用するか、それがビジネスのタネになる。

とりあえずコイツを購入して、様子を見てみようと思う。控えめに考えても、仕事中の自分の状態を把握するためには絶好のデバイスだし、うまくいけば自分のビジネスにも繋がる。

FPGAで実装できる機能と必要なLUTsをざっくりまとめた

Lattice FPGAの活用を検討している。特にFipsyのような超小型FPGAアクセラレーション目的で活用ができないものかと模索している。FPGAは3cm*3cmぐらいのサイズが主流だが、Latticeは小型FPGAに特化している。IoTのエッジ用途を考えると、よほど小さくて消費電力が低くないと低くないと活用はできないから、Latticeは非常に優位な立ち位置にいると言えるだろう。

masterkoda.hatenablog.com

LatticeのReference Designは下記に公開されている。FPGAのデザインがここまで整理されて公開されているのは正直意外だった。LatticeとしてはFPGAが売れればいいので当たり前なのだが、設計資産を公開することはASICベンダーだったらあり得ないだろう。こういったオープンソース思考には感服するし、自分もそういった思考の持ち主でいたいと思う。

www.latticesemi.com

機能とLUTs

LUTs(ラッツと読むらしい)はFPGAにどれほどのロジックを詰め込めるか表した単位で、多ければ多いほどたくさんの機能が実装できる。Fipsyは256LUTsしかないため、どの程度のロジックが入れ込めるのかと思って調べて見たが、Reference Designはほぼほぼ使えない。ただし、グレードを少しアップグレードするだけで機械学習のようなリッチな処理までできるようになるので可能性の広がりは大きい。専門家には怒られるかもしれないが、ざっくりの値をまとめた。

Function vs LUTs
Function LUTs*1
LVDS converter 180
I2C Bus Master 200
ADC 400
Software Microprocessor 2000
H264 40k
Hand Gesture ?

イメージでいうと、MHzオーダー程度のインターフェイス処理については数百LUTsで実装可能。圧縮や機械学習のような力技の処理が必要な場合は数千LUTsオーダーが必要。

*1:全ておおよその数字

DIY向けFPGAブレークアウトボード「Fipsy」の開発環境立ち上げ完了。

過去記事にて紹介したLatticeのFPGAを書き込む環境を立ち上げた。

キックスターターでプロジェクトを立ち上げた張本人「Moco Makers」のページにも説明が書いてあるのだが、イマイチわかりにくい。だいぶ苦戦したので、先人の知恵として、活用してもらえたら嬉しい。ArduinoRaspberry Piのどちらを活用しても良いのだが、手元にあったArduinoを活用することにした。

検証環境


Mac OSではFPGAの開発環境が使えないため断念した。対応のLinuxを入れればMacでもたぶん可能だ。

ファイルを用意する。

こっちのGitHubArduinoRaspberry Piのどちらを使用する場合でも必要なファイルがあるのでダウンロードする。

こっちのGitHubにはArduinoを使用する場合に必要なファイルがある。

Arduinoにプログラムを書き込む

まずは、FPGAに対してではなく、FPGAにSPI経由でバイナリーを書き込むために使うArduinoの設定をする。ダウンロードした、Arduino-Fipsy-Programmer-masterの中にある、Arduino_Programmer.inoをArduino IDEから書き込む(もちろん、他の統合開発環境からでも大丈夫だと思う)。この時、MachXO2.hも同じフォルダにないといけないらしいので注意。

Lattice Diamondで.jedファイルを出力する

FPGAの書き込みにはLatticeの専用ツールが必要なので、こちらから準備しておく。このツールのダウンロード自体は訳ないのだが、ライセンスの申請で数日かかる。師匠は数ヶ月たってもライセンスの許諾が降りないようだ。ここはどうしようもない。

Lattice Diamond Softwareがダウンロードできたら、こちらの「3. Open the Lattice Project File」で書かれている指示通りにLattice Project Fileを開く。FipsyBaseline.ldfという名前のファイルがProject Fileのようだ。Fileを開くのではなく、Project Fileを開く必要があるので注意。4のSPIのEnableはデフォルトでEnableになっているっぽいのでたぶんスキップ可。

f:id:MasterKoda:20181209192959p:plain
Lattice Diamondの.jed出力後画面

もしかすると「5. Create a JEDEC file」では、指示通りに上手くいかない場合があるかもしれない。対処法の勘所として、"Return"を押す、作成済みの.jedファイルを別フォルダに移す、という対処がおそらく有効である。現象の原因も解決する理由もわからないけど、まぁそんなもん。

f:id:MasterKoda:20181209192822p:plain
.jedのsummary

以降は、Arduinoを活用した書き込み環境立ち上げのページを参照する。

回路は、電圧シフタのボードを持っていなかったため、抵抗分圧で実現した。

f:id:MasterKoda:20181209190144j:plain
Arduino+Fipsy

pythonの環境設定は苦戦した。

1 from Tkinter import Tk

2 import serial

と書かれているテストは結局うまく行かなかったと記憶している。テスト工程のデバッグが面倒だったのですっ飛ばした。

書き込みツールを立ち上げる

このあたりからようやく本題に入るのだが、書き込みツールの立ち上げ、書き込みの過程に入る。コマンドプロンプトを立ち上げ、FileChooser.pyが置いてあるフォルダ(フォルダ構成をいじっていなければ\Arduino-Fipsy-Programmer-master)に移動(Linuxと同じくcdで移動できる)。

python FileChooser.py

を実行すると下記の画面が立ち上がる。

f:id:MasterKoda:20181209190748p:plain
FileChooser.py起動画面

書き込む

Mocoのページの下の方にも書かれているが、GUIに書かれている通りに必要な設定をしていく。

Select a port → USBポートの選択(Arduono IDE上と同じ)

Select your file → .jed fileの選択

Check Device ID → ArduinoのデバイスIDが正しく読めているかの確認。FFが並ぶ結果にならなければOK

Erase Device → 使ったことない。

Program Device → 確認と設定が終わったらここを押してArduino経由で書きこみ。

f:id:MasterKoda:20181209191746p:plain
FileChooser.py書き込み途中

f:id:MasterKoda:20181209191829p:plain
FileChooser.py書き込み完了画面

バックグラウンドでは、Pythonが.jedをバイナリーに書き換え、Arduinoでシリアル to SPI変換をしているっぽい。

書き込み完了を確認する

上記の手段で書き込めているはずだが、確認が必要であれば、下記のコードを少し書き換えてみるといい。

begin if(RESET) count <= 0; else count <= count + 1; end

// Connect the output assign MSB = count[19];   ここの配列は19が正しい。例えば、20にすると、MSBの指定がされないため、Lチカしなくなる。

以上!とりあえず動くことはわかりました。

GODZILLA 星を喰う者

ゴジラは正義でも悪でもない。人間の敵でもあり味方でもある。幼い頃から父親と一緒に観てきたからか、ゴジラの映画があると不思議と足を運びたくなる。かつてはハラハラドキドキの特撮だと捉えていたが、世界情勢などの入れ知恵があるが故に捉え方が変わってきているようだ。特に今回の映画はテーマが明確に打ち出されていたように思う。ゴジラは人間の敵かもしれないけど地球を守ろうとしてくれている?ゴジラを生み出したのは人間そのもので、実はゴジラという究極の生き物を生み出すことができたと考えるべきでは?などなど。ゴジラという神格化された究極の生物の捉え方に、人類の持つ限りない欲望の愚かさや、それでも人類が積み上げてきた歴史への尊敬が含まれていた。

3部作が終了し、5月には再び実写版が上映されるらしいから、そちらも合わせて観たいと思う。