自然非言語処理第4日目： 触覚を用いた非言語処理

![romance-couple-1209046_1920.jpg](https://qiita-image-store.s3.amazonaws.com/0/78052/24d3b3a4-2b78-65ed-b66b-fd49219db3fb.jpeg)

# 触覚によるコミュニケーション

みなさんはスキンシップ足りてますか？
異性とのスキンシップは人生においてとても大切です。
幸福感を引き起こすオキシトシンが脳内で分泌されるため[1]です。
また、オキシトシンを感じさせてくれる相手を信用するようになる効果もあり、これが夫婦仲をいい感じに保ってくれる一因となっています。
奥さんがディスプレイから出てこれなくて触れられない人はいい加減現実を見て結婚相談所でも行きましょう。

閑話休題、触覚によるコミュニケーションには、握手からハグ、キス、性交渉など親密な関係を持つ相手しか行われません。視覚や聴覚によるコミュニケーションと比べると著しく対人距離が近く、攻撃される危険があるためだと考えられます。(このあたりは空間の日で詳しく説明します)

逆に言えば、親密さを表す指標にもなります。例えば、大統領同士が握手しないだけでニュースになります[2]。

この流れで行くと、実装も下ネタで行くと期待したあなた。
残念です。
とても残念です。
真面目に生きましょう。

今回は真面目に身近に溢れている振動モータと振動センサを使って、振動によるコミュニケーションをはかって見ましょう。

ではその前に触覚のメカニズムを解説します。

# 触覚のメカニズム
触覚とは実は皮膚の中にある4種類の感覚器を元に生み出される複雑な感覚です。それぞれパチニ小体、マイスナー小体、メルケル細胞、ルフィ二終末と呼ばれます。また、触覚の感覚器が内蔵されている皮膚には温度覚や痛覚などたくさんほかの器官があり、それらを合わせて皮膚感覚と言います。皮膚とは体内部と外部の境界にあるただの保護膜のように見えますが、それだけではなく桁外れの感覚器からなるセンサでもあるのです。このため、視覚や聴覚に比べ、ロボットに皮膚感覚を与えるのは困難と言えます。この辺りの詳細は体性感覚の日に回します。

## 物理的刺激から記号が認識されるまでのメカニズム
さて、今回は振動を司るパチニ小体を中心にメカニズムを説明しましょう。概略を図1に示します。
![IMG_0113.jpg](https://qiita-image-store.s3.amazonaws.com/0/78052/6e339b19-c4af-4827-39d7-32b3d3752169.jpeg)
図1 パチニ小体が刺激されてから記号化されるまでの神経経路

プルプル震える物体に触れると皮膚の深い層にあるパチニ小体が皮膚が引っ張られた瞬間と縮む瞬間に反応します。その信号は脊髄を経由し、脳幹、視床を通り、一次体性感覚野に入ることで振動を知覚することができます。一次体性感覚野では振動を感じる体の部位に応じて対応する細胞が決まっています。この様子をわかりやすく可視化した図で表したものをホムンクルスと呼びます。ホムンクルスの例を図2に示します。わかりやすいけど、キモいですね。感覚ホムンクルスを見ると、口や手、性器に多くの領域が割り当てられています。愛情表現にこれらの口や手、性器を使うのはこういった理由があるのかもしれません。

![464px-Somatosensory_cortex_ja.png](https://qiita-image-store.s3.amazonaws.com/0/78052/746b6b83-8b5c-9926-8d8a-e3676c519d67.png)
図2 （感覚）ホムンクルスの例

# 触覚の特性

- 触覚は触れないと刺激できないと思いがちですが、空気などの媒体を通じて、非接触でも刺激することはできます。
- 触覚は様々な感覚を感じることができます。以下にその一覧を書きます。
    - 圧覚： 圧力を検知できます
    - 振動覚： 大体1000Hzぐらいの振動まで検知できます。
    - 擦れ： 皮膚が擦れたことを検知できます。
    - 触れたものの単純な形状の知覚
- しかし、体性感覚という一般化した概念で普通取り扱われるため、触覚単体でみると意外と特性が少なく感じます。

# 触覚に関わる非言語処理
触覚に関わる非言語処理はハードウェアを中心に研究が進められています。

## ソフトウエア
触覚に関わるソフトウェアは視覚や聴覚ほど発達していないように思います。

初心者はおそらくArduino IDEか、Processingを使う人が多いと思います。
最近はopenFrameworksを可視化に使う人が多いみたいですね。

## ハードウェア
触覚に関わる代表的な入力装置はタッチパネルがあります。他にも圧力センサー、力覚センサなどがあります。

一方、代表的な出力装置は振動モーターです。触覚の出力装置はいまだ研究の余地があり、これといって定まっていないように思えます。マッサージ機のような人を押すアクチュエータがあります。また、糸や縄の張力を使うこともあります。非接触の出力装置として、超音波スピーカーや空気噴出機があります。変わり種としてはドローンを使う研究もありました。

入出力の制御にはリアルタイム性を考慮してマイコンやFPGAが使われることが多いです。ちなみにマイコンとFPGAが一つのチップになった製品もあります。他にもリアルタイムOSを搭載したCPU、時間に精密さが必要でなければ通常のパソコンも使われます。

# 実装: 振動コミュニケーション
さて、今回はパチニ小体を模した振動センサをユーザーが振動させると、遅れて振動モータがユーザのパチニ小体を動かす。両手で振動システムと謎のコミュニケーションをはかりましょう。これまでの中で一番ものづくりっぽい実装になります。

## 材料
材料は以下の通りです。

- マイコンボードArduino Uno 1
- 振動モーターFM34F 1
- 振動センサSW-420 1
- 開発環境を動かすためのMac Mini 1
- その他ジャンパワイヤ多数

## 回路図
回路図は以下のとおりです。
![IMG_0111.jpg](https://qiita-image-store.s3.amazonaws.com/0/78052/840e28cc-f50e-3f57-f6c5-bc999de46e28.jpeg)

また実装した写真は以下のとおりです。
![IMG_4181.jpg](https://qiita-image-store.s3.amazonaws.com/0/78052/31789b3a-d2dc-9ff0-6930-185e314f49fb.jpeg)


## ソースコード
そのマイコンに開発環境経由で以下のプログラムを書き込みました。

```C:ShakeItNow.ino
const int sensorPin=3;
const int motorPin=2;
const int BPM=100;
const int BEAT_PER_BER=3;
const int MSPB=1000/(BPM/60.0);

void setup() {
  // put your setup code here, to run once:
  pinMode(motorPin, OUTPUT);
  pinMode(sensorPin, INPUT);
  Serial.begin(115200);
}

void loop() {
  // put your main code here, to run repeatedly:
  const int NUM_SAMPLING=60;
  int beat[NUM_SAMPLING];
  int i;

  // example
  Serial.write("Repeat after me!");
  delay(MSPB); 
    
  for(i=0;i<NUM_SAMPLING;i++){
    if(i%(NUM_SAMPLING/BEAT_PER_BER)<NUM_SAMPLING/4)
      digitalWrite(motorPin,HIGH);
    else
      digitalWrite(motorPin,LOW);
    delay(BEAT_PER_BER*MSPB/NUM_SAMPLING);
  }
  
  delay(MSPB);  

  // input
  for(i=0;i<NUM_SAMPLING;i++){
    beat[i]=digitalRead(sensorPin);
    Serial.write(beat[i]+'0');
    delay(BEAT_PER_BER*MSPB/NUM_SAMPLING);
  }
  
  delay(MSPB);   
  
  // output
  for(i=0;i<NUM_SAMPLING;i++){
    digitalWrite(motorPin,beat[i]);
    delay(BEAT_PER_BER*MSPB/NUM_SAMPLING);
  }
  Serial.write('\n');
  digitalWrite(actuaterPin,LOW);
}
```

## 実験結果
実験では、
1.  機械からのお手本タイミングを振動モータで教えてもらい、
2.  そのタイミングで人間が振動センサを震えさせ、
3.  その後、振動センサを震えさせたタイミングで機械に振動モーターを震えさせてもらっています。
という手順を踏みました。
実際の動画は以下の通りになります。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">震動デモ動画 <a href="https://t.co/SKoe7aRLsm">pic.twitter.com/SKoe7aRLsm</a></p>&mdash; あるふ (@alfredplpl) <a href="https://twitter.com/alfredplpl/status/937160086010474497?ref_src=twsrc%5Etfw">2017年12月3日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


## 感想
やってるとなんだかだんだんハイになってくる。
なんだろう、リズムのビートと振動の合わせ技で、
どんどんハイになってくる。
まぁ一回やったら飽きるけど。

# 応用例
![IMG_0112.jpg](https://qiita-image-store.s3.amazonaws.com/0/78052/6f5d0cf7-ec59-fe29-d514-0cda0dd5f124.jpeg)

さて、ハグに始まり、ハグに終わろうということで、
石黒先生のテレノイド[4]を紹介しようと思います。
こちらはいわば電話の強化版で、
テレイグジスタンスロボットというロボットを使い、
通話者が遠隔地にあたかも存在するように
感じさせるロボットの一種になります。
テレノイドはいろいろな感覚情報を遠隔地に届けることができますが、
その中でも特に新規性があるところは、
ハグして通話すると通話者の存在感が上がるという点です。
ハグには無限の可能性がありますね。

# まとめ
今回は触覚による非言語処理ということで振動に関する初歩的な話を紹介しました。
最初はハグの話をやたら強調して、年齢指定の話に持っていこうとするものの、
あえてずらして、そしてハグできるロボットについて紹介するという高等テクニックも披露しました。
触覚はまだまだ未開拓なところもある一方、需要も視覚や聴覚に及ばないものの一定数あり、
インタラクションでは人気の領域と言えましょう。

次回は、触覚を一般化した概念、体性感覚か、聴覚の話をしていきたいと思います。

# 参考文献
[1] http://www.nhk.or.jp/kaisetsu-blog/400/232063.html
[2] http://gendai.ismedia.jp/articles/-/53468
[3] https://ja.m.wikipedia.org/wiki/%E4%BD%93%E6%80%A7%E6%84%9F%E8%A6%9A
[4] http://telenoid-planning.jp/telenoid/telenoid-2
[5] http://www.rm.mce.uec.ac.jp/sice/2006HapticsCommiteePPt.pdf