神経科学入門メモ書き_1

 

ブレインテックに関する概要は以下。

ampmedia.jp

 

↓前回はNextMindで遊んだ。

filot-nextd2.hatenablog.com

 

活動するにあたり、神経科学の門を叩く必要性を感じたため、

↓以下を参考に知見を吸収してみる。

note.com

 

尚、本記事のタイトル「メモ書き」とある通り、

↑で紹介されてる本に記載される知識のメモである。

その為、箇条書きで羅列する。 

 

↓今回の本

www.amazon.co.jp

 

  • 神経細胞は大脳皮質(灰白質)に集中しており、大きさは25-30マイクロメートル
  • 1mm立法メートルあたり、2万~10万個ある(脳全体で約1000億らしい、、)
  • 大脳皮質は6層構造で、すべての哺乳類に共通
  • 脳の場所により役割がちがう(いわゆる脳地図)、ただし脳地図は後天的。脳地図は以下のようなもの

    ペンフィールドマップ(脳地図)からひも解く脳活性 | My sense

  • 体の作りによって脳地図は変更されていく(例えば片腕を無くした場合、無くした腕に対応していた脳部位は、体の別の部位に対応していく、逆も然り)
  • 目から入った情報の、脳内での大まかな流れ
    目(網膜)ー>視神経ー>視床(交差)ー>後頭葉の第一次視覚野ー>他視覚野(第五迄)ー>側頭葉(物体自身)、頭頂葉(物体の様子、震えている、動いている、とか)
  • 視覚野は第一から第五までわかれている
  • 運動野を刺激すると体を単純に動かせる(腕を前に、後ろに、とか)、
    また、行動という漠然とした命令を下せる神経細胞も運動野に存在する
    (ここにリンゴをおけ、あそこにエンピツをおけ、とか)
  • 視界の奥行き感は片目でも感じる、脳がある程度補完しているから
  • 錯覚は、周りのコンテキストによって生まれる
  • 動くものを視る時、0.00x秒未満の間の動きは、脳により補完される(10秒間にパラパラ漫画を見る際、0.1秒ごとに1枚と、0.001秒ごとに1枚だと、0.001秒ごとの方が滑らかになる、逆を言えば、これ以上細かくしても、人間には意味がない、脳による補完により、違いを認識できないため)
  • 視神経は約100万本あるが、色も補完している(100万本を単純に100万画素だとすると、4Kテレビ放送は約829万画素。人間の目で本来映らない色があるが、それは脳が、経験により保管している)
  • 盲点は普段脳が補完している
  • 錐体細胞は網膜の中心付近(盲点あたり)に集中している、つまり、実際に視界として入ってくる情報のうち、色は中心付近しか入ってきていない、外側は桿体細胞のみで本来なら白黒、色が見えてると思うのは、脳が補完しているため
  • 盲視、上丘は、回路として視床を通さず直接大脳皮質に届くため、単純で処理が早い
  • 意識的にしてる動作でも、まず無意識の脳内領域が準備として必ず発火(スパイク)する
  • ミラーニューロンにより他の人と感情が同調される
  • 恐怖により心拍数が上がるのは、扁桃体で命令が起こり、その後神経細胞により感情が副産物として作られる
  • 人間は記憶を正確に覚えていない、曖昧に特徴だけを覚えている、例えばテレビはたくさん種類があるが、一度も見たことのないものをテレビだ、と認識できるのは、特徴を記憶しているから。完全に正確に記憶していると、応用力が効かずに、テレビと認識できなくなる
  • 神経細胞の数は約1000億、シナプスは神経細胞一個に付き約10000個
  • 神経細胞の電気活動は電子ではなく、イオンが流れている
  • 神経細胞の内側が-、外側+
  • 電位差が少なくなるとチャネルが開く(ナトリウムイオンを取り込む)
  • シナプスから発する神経伝達物質は100種類ある
    例:グルタミン酸(Na+を流す)、γアミノ酪酸(GABA)(Cl-を流す)
  • +がアクセル、ーがブレーキ、グルタミン酸がアクセルの役割であり、GABAがブレーキの役割を担う
  • 神経伝達物質を出す確率はシナプスによる
  • 神経伝達物質のやり取りにかかる時間は約1/1000秒
  • Cl-によるブレーキはシナプス周辺のみ
  • シナプスは一方通行
  • スパイクを出力する閾値が存在する
  • スパイクは軸索、樹状突起側双方に発生する
  • その為、シナプス付近で、複数の神経細胞のスパイクが重なることがあり、これによりシナプス間の結びつきが強まる、海馬付近でよくある
    (神経細胞A、神経細胞Bの順で発火->シナプス付近でスパイクが重なる->Na+が多めに取り込まれる->NMDA受容体が感知->Ca+を取り込む->グルタミン酸受容体をシナプス付近に増やす(神経細胞B、神経細胞Aの順だと減少するので、結果±ゼロ))
  • 発生確率は、偶然ではない(パターンがある:ヘブ則)
  • 反回性回路(フィードバック)は重要性の多い箇所に多くある、99.99%が内部層
    海馬など

書籍にはアルツハイマー病のことも記載されているが、必要性がある場合別途記載するため、今回は割愛。

 

 

脳波でテレビの電源を消す(NextMind)

NextMindのBMI機器を使って、LGのwebOS TVを操作する

前回は↓

filot-nextd2.hatenablog.com

 

環境

  • Unity(2020.2.1f1)
  • Node-Red(1.2.7)
  • Node.js(14.15.4)

Node-Redの環境を以前別のPC上に構築していたので、

今回はそちらからGETする。

 

BMI機器 -> Unity -> Node-Red -> TV

といった感じ。

 

 

※Unity、Node-redのインストール方法は割愛

 

Unity側

  1. Developers resources | NextMind Dev Kit からダウンロードできるNextMindSDK_Full.unitypackageをインポートする

  2. Hierarchy ウィンドウ上で右クリック->NextMind->NeuroManagerを選択
  3. NeuroManagerのInspectorウィンドウで、NeuroManager->Scene ConfigrationのSimulate device、Simulate focusのチェックを外す
  4. NextMindSDKフォルダ内の、ConnectedDeviceStatus PrefabをHierarchy ウィンドウ上にドラッグ
  5. Hierarchy ウィンドウ上で右クリック->3D Object->Sphereを選択
  6. SphereにNeuroTagコンポーネントを設定
  7. 以下のFixを選択すると、Materialに Neuro Tag Material_unlitが設定される

    f:id:filot_nextd2:20210115175126p:plain

  8. NextMindSDKフォルダ内の、TriangleFeedback PrefabをSphereの子階層にドラッグ
  9. http request用に、Hierarchy ウィンドウ上でGameObjectを作成(名前をHttpRequestとかにする)
  10. 作成したGameObjectに、HttpRequest用のscriptをアタッチする
    using System.Collections;
    using UnityEngine;
    using UnityEngine.Networking;
    
    public class HttpRequest : MonoBehaviour
    {
        private const string URL = "http://xxx.xxx.xxx.xxx:xxxx/turnoff";
    
        public void OnTriggerd()
        {
            StartCoroutine("OnSend", URL);
        }
    
        IEnumerator OnSend(string url)
        {
            UnityWebRequest webRequest = UnityWebRequest.Get(url);
            yield return webRequest.SendWebRequest();
    
            if (webRequest.isNetworkError)
            {
                Debug.Log(webRequest.error);
            }
            else
            {
                Debug.Log(webRequest.downloadHandler.text);
            }
        }
    } 
  11. SphereのNeuroタグコンポーネント->Tracking Events->Ontriggerd()に、HttpRequest.Ontriggerdを設定
  12. Hierarchy上の各オブジェクトのTransformを変更し、以下のように見えやすくする

    f:id:filot_nextd2:20210115182025p:plain

Node-Red側

  1.  node-red-contrib-lgtvパレットをインストール
  2. 追加されたlgtvパレットからcontrolノードを追加
  3. controlノードのプロパティ「Host」に、使用するTVのIPアドレスを入力

    f:id:filot_nextd2:20210115193321p:plain



  4. connectボタンをクリックすると、テレビに接続確認画面が表示されるので、はいを選択
  5. Node-redの画面で追加->完了ボタンをクリック
  6. templateノードを設定

    f:id:filot_nextd2:20210115192506p:plain
    今回はテレビの電源をOFFする

  7. http in ノードを追加する

    f:id:filot_nextd2:20210115193007p:plain

  8. あとはノードを並べて繋げてf:id:filot_nextd2:20210115193116p:plain
  9. できあがり

さて、さっそく試す

f:id:filot_nextd2:20210115200233p:plain

これが

f:id:filot_nextd2:20210115200316p:plain

こうなる。

テレビの電源消しただけだけど、脳で操る感覚、凄く楽しい。

NextMindのBMI機器で遊ぶ

NextMindのBMI機器が届いた。

 

www.next-mind.com

 

早速触ってみる。

 

セットアップ

f:id:filot_nextd2:20210112131629j:plain

f:id:filot_nextd2:20210112130758j:plain

f:id:filot_nextd2:20210112131654j:plain

↑この後ろの突起を後頭部に付けて、視覚野の電波(VEP)を拾い、

機械学習でデコードし、結果、何を見ているかを判断するとのこと。

 

セットアップは簡単で、

  1. https://www.next-mind.com/developer/

  2. ↑からNextMindSDKをダウンロード
  3. あとはインストーラーを通せばOK

とても簡単。

 

が、その後の、計測するためのキャリブレーションと操作が、少し難しい。

何が難しいかというと、

 

キャリブレーション

f:id:filot_nextd2:20210112133340p:plain

 

↑後頭部に十分フィットしてるか確認するのだが、画像にあるPerfectの状態を保つためには、装着用バンドをかなり締めなければならない。

結果、突起の圧が増すため、長時間付けるのは難しかった(体感だと、頑張っても30分とか、、)

装着に苦戦するのは、東洋人は後頭部が、西洋人と比べて絶壁気味の人が多いからだろうか。。。

 

操作

↑注視していると、周りをまわっている3つの四角形が中心に集まり、

三角形になる、その状態が選択されている状態として認識されるとのこと。

これ、ただ見ているだけではうまくいかないこともあり、

コツをつかむために練習が必要になる。、、コツは人による?

 

慣れたところで、サンプルを試してみる。

 

サンプル

流石に選択迄に数秒必要だが、用途によっては十分だと思う。

これが$399。BMI(BCI)も、一般に知られるようになると嬉しい。

 

unitypackageの形でSDKを操作可能なので、

次回はそれを試す。

3Dプリンターで樹脂交換に困った

昨年FLASHFORGE Adventure3を購入しました!
初心者でも綺麗に作れて良い感じです

f:id:filot_nextd2:20210105131140p:plainf:id:filot_nextd2:20210105131229j:plain

 

 

樹脂交換の状況

さて、表題の件についてです
初期で付属している赤いフィラメントは全く問題なく取り付けれたので樹脂交換もすぐできるかと思ってたのですが困ったことになりました

樹脂交換をしようとするとフィラメントを押し出すホイールのところで詰まってるような動きをします
メニューに「樹脂交換」という項目があるので難しい操作はないはずですが壊れそうな怖い音がします

 

 

赤いフィラメントはホイールの上からヘッドまで続いています

赤色が透けて見えるので外から確認可能です
フィラメント取り付け箇所に下から新しいフィラメントを入れて押し出すようになるはずなのですが、、

ちなみにロードができない状況ですが、アンロードは問題なくできました

 

問い合わせ


とりあえずお問い合わせします


検索すると電話番号とメールアドレスがでてきました

FLASHFORGEの各種お問い合わせと連絡先について | FLASHFORGE JAPAN | 3Dプリンター

 

残念ながら営業時間外だったのでメールで問い合わせましたが、アフターサポートにはシリアルナンバーが必要とのこと
シリアルナンバーは下記内容場所に記載があるそうです
【重要】アフターサポートにSN番号が必要になります。 | FLASHFORGE JAPAN | 3Dプリンター

 

知らずにメールしてしまい、お問い合わせフォームを教えてもらいました

こちらがそのフォームのリンクです

サポート | FLASHFORGE JAPAN | 3Dプリンター


サポートを待ってる間に対処法がないか検索してみたらでてきました!
この内容と同じ状況です!

qiita.com

※お問い合わせ後にサポートしていただいた内容も同じでした

フィラメントの除去

qiita記事を参考にしてフィラメントの先を確認して切断してみます

ツールを準備
  • 六角レンチ
  • ピンセット
  • ニッパー

六角レンチは付属されているので付属品を利用します

あとは抑えたりスプリングを持っておくためにピンセットと詰まってるフィラメントを切るためにニッパーを使いました
今回、フィラメントがつかめるギリギリのところで引っかかっていたので引き出すためにピンセットより力の入るペンチの方が便利かもしれません

f:id:filot_nextd2:20210105135247j:plain

記事の通りに作業を行う

f:id:filot_nextd2:20210106111847p:plain

六角レンチで青いところを外します

特に問題なく外せました

緑色のスプリングが落ちないように注意して外して中を見ると
確かに赤いフィラメントの最後の部分が曲がってました(赤い丸の箇所)

フィラメントが少しだけ出てるので、切れる長さになるまでピンセットでひっぱります

曲がってる箇所を切って元にもどしてネジをはめます

はめるときは特に支えもなく指で抑えながらできました

樹脂交換

電源を入れて樹脂交換開始です

ちゃんとホイールも動いて問題なく取り付け完了できました!

フィラメントの色が変わるまで押し出し

フィラメントの色を黒に変更したので、手動をつかってひたすら押し出します

f:id:filot_nextd2:20210105140032j:plain

押し出されたフィラメントが黒になったので

そこで終了して樹脂交換完了です!

ちゃんと黒で出力されています

f:id:filot_nextd2:20210105140153j:plain f:id:filot_nextd2:20210105140346j:plain

次回からフィラメントの残量を注意しておかないと、、、

 

 

おまけ

樹脂を接着する際にコンビニでプラスチック用の接着材を買って使ってみました
くっつけた次の日に手でひっぱたら取れてしまいました。。。

ネットで探してみたらこちらを発見

しっかりくっついて良い感じです!
一応人体に影響はないようですが手袋して使ってます

f:id:filot_nextd2:20210105141000j:plain




 

 

 

パリティミラーで時計を表示する

パリティミラーを触ってみました



パリティミラーとは空中に映像を表示させるディスプレイのことで
パリティ・イノベーションズさんの製品です


画像のようにパリティミラーと表示する対象物光源が必要となります
公式から画像をお借りしてきました

f:id:filot_nextd2:20201209181819j:plain

 

実物はこんな感じです
カメラの焦点が合わずぼやけた感じに見えます

f:id:filot_nextd2:20201209183046j:plain

手前にある青いシールは向きを示すものでこちらが手前になるようにセットします
シールは簡単に外れるので注意が必要です
サイズは150mm角のものを購入しました


ミラーの素材はアクリルで切断可能だそうですがそのまま使います
また特殊インクを利用してるそうなので汚れに注意です


画面に時計を表示したディスプレイを写してみました

目視だと立体的に見えますが、撮影はちょっと難しいですね


パリティミラーにはつるつるした面とザラザラした面があります
どちらを上にするかで表示が変わるそうです

f:id:filot_nextd2:20201209190740j:plain

上の画像はつるつるした面を上にしてセットしています
パリティミラーの面自体のムラが少なく見えるとのこと

 

f:id:filot_nextd2:20201209190749j:plain

こちらはザラザラした面を上にしてセットしています
より高コントラストで映像が表示されます



時計表示に使ったものはこちらです
・パリティミラー

・Airbar

・高輝度ディスプレイ

・ガムテープ
・ボード
後はwindowsのPCを繋ぎました

f:id:filot_nextd2:20201209191459j:plain


PCの上にディスプレイを乗せてボードで囲みました
後日3Dプリンターを使って周りの筐体を作ってみたいです

ちょっと崩れてるとこですがこんな感じです

f:id:filot_nextd2:20201209192149j:plain


角度が難しかったですが、綺麗に映像が表示できました
もっとエフェクトとか追加してどう見えるのか試してみたいです


 







 

OculusQuestでオリジナルハンドジェスチャを使う

※以下を参考
https://www.downtocode.com

そこそこな力技。

 

ざっくりやり方

・OculusHandComponentを継承。以下継承したBP上で実施。


・全ての手のBoneのLocation(Vector)を取得し、ジェスチャ名(String)とLocation(Vector、配列)の構造体を.savに保存。イベントは好きなインプットアクションに設定。

f:id:filot_nextd2:20201202130321p:plain

 

・Editor上で好きにジェスチャーを登録


・Recognized用のTimerを設置、Timer毎にBoneのLocation(Vector)を取得し、ジェスチャー判定する。あとはイベント飛ばすなどしてお好きに。

f:id:filot_nextd2:20201202130621p:plain

f:id:filot_nextd2:20201202130652p:plain

 

以上。

頑張ればモーション登録もできそう。

visual studio 2017でコンソールプロジェクト作成方法

とっても久しぶりにvisual studioを利用したところ、C++でコンソールプロジェクトの作成ができなくて戸惑いました




結論
 visual studio Installer のオプションから落としてくる必要がある




以下、やったことをそのまま(間違いも含めて)記載します

 

  1. [ファイル]->[新規作成]->[プロジェクト] C++の中をみてもコンソールプロジェクトが見つからない

  2. スタートメニューからインストーラーを起動
    f:id:filot_nextd2:20201116111422p:plain:w400

  3. 思ってた画面じゃない
    プロジェクトをインストールしたいけどどこからいくのかわからない
    f:id:filot_nextd2:20201116111644p:plain:w400

  4. 新しいプロジェクト作成の左下にリンクを発見
    f:id:filot_nextd2:20201116113210p:plain:w200

  5. 欲しかったページにたどり着く
    f:id:filot_nextd2:20201116112144p:plain:w400
    (※3の画像の変更からいける)

  6. 右のほうにあるオプションにチェックを入れる
    f:id:filot_nextd2:20201116112527p:plain:w200

  7. .....インストール.....

  8. これで作成できる!
    f:id:filot_nextd2:20201116112654p:plain:w400




オンラインにあるのかと思って探して手間取りました
迷って見つけたこちらは拡張機能でした


f:id:filot_nextd2:20201116114350p:plain:w200
f:id:filot_nextd2:20201116113816p:plain:w400


marketplace.visualstudio.com