触覚VRデバイスGravity Grabberを作ってみた

#はじめに
触覚VRデバイスとして有名な"Gravity Grabber"を作ったので実装方法をまとめました。
今回はハードウェア中心の説明です。
・メカCAD：Autodesk Fusion 360 → DMM.makeに3Dプリント発注
・電気CAD：DesignSpark PCB → 基板をelecrowに発注。

Unity, Leapmotion との連携やモータ制御は別の記事でまとめます。

#VR技術の使い道
VR技術は3C・3Eに使える。

＊創造：**C**reation
＊制御：**C**ontrol
＊通信：**C**ommunication
＊解明：**E**lucidation
＊教育：**E**ducation
＊娯楽：**E**ntertainment

特に何かを作ったり(創造)、学び・理解する(教育)ときには、視覚・聴覚だけでなく**触覚**も重要だと考え触覚VRデバイスを作成することにしました。
創造・・・何かを作る時は**手**を使う。手・指の触覚と創作活動の間には関係性があるはず。
教育・・・いわゆる"体で覚える"ということは触覚・力覚と密接な関係がありそう。


【参考文献】
[バーチャルリアリティ学, 舘暲](https://www.amazon.co.jp/dp/4904490053/ref=cm_sw_r_tw_dp_U_x_HRHOCbM1G8TR9)


#指とモノのインタラクション
ヒトがモノに触れる時には典型的な動きがあるようです。

＊押し込む、タップする・・・硬軟感の探索
＊持ち上げる・・・重さの探索
＊輪郭をなぞる・・・形の探索
＊横になでる・・・テクスチャ感
＊手のひらをあてる・・・冷温感の探索
＊包み込んで持つ・・・体積の探索

何かモノに触れて対象物の特性(表面のディテールや硬軟感など)を理解しようとするとき、まずは**"指"**で触ったりつまんだりすることが多いですよね。
VR空間でも、指先へ触感を提示することはVR物体の特性を表現するため重要なはず。

映画ETのポスターでは人とETが指を合わせます。**指で触る**というのは未知の探索の象徴なのかもしれません。
![alt](https://eiga.k-img.com/images/movie/42364/photo/8387499997e370b1/320.jpg?1500605245)
[映画.com, ET](https://eiga.com/movie/42364/)


【参考文献】
[触感をつくる――《テクタイル》という考え方, 仲谷 正史](https://www.amazon.co.jp/dp/400029587X/ref=cm_sw_r_tw_dp_U_x_ATHOCbCS1HFHX)

#Gravity Grabberとは？
Gravity Grabberとは、東大の館研究室で開発された指先触覚提示デバイスです。２つのモータにベルトを取り付け、２つのモータを同時に同じ方向に回転させることでせん断応力を、逆回転させることで垂直な力を指先に発生させます。ググるとHP・論文やデモ動画がでてくるので、詳細はそちらを。


#部品情報
以下の部品を組み立てた完成形がこちら（写真にはモータドライバとArduinoは含まれません）
合計費用：¥13,376
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371835/f08b2108-e0b5-39be-f48b-7f33d5fd7cde.jpeg" width="480px">

メカ部品
・ボディ：Fusion360 ⇨ dmm.make（素材：ナチュラル・MJF）¥1334, 1個
・ポテンショメータ回転軸：Fusion360 ⇨ dmm.make(素材：ナチュラル・MJF）¥457, 2個
・ベルト固定軸：[uxcell カップリングジョイント3mm~3mm]
(https://www.amazon.co.jp/dp/B01IBAYZ9W/ref=cm_sw_r_cp_api_i_FZ0gDbHXFJREK), ¥531, 2個
・モータ：[EEHD-53AF  SparkFun 小型ギヤードモーター【6V~12V 140RPM~270 RPM】  ROB-12125]
(https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-53AG), ¥1560, 2個
・ベルト：[ヘッドランプ用 ゴーグル用 シリコンゴムバンド、【幅20mm】](https://www.amazon.co.jp/dp/B07DC3BG79/ref=cm_sw_r_cp_api_i_h20gDbS5FT1PQ), ¥700, 1個
・ポテンショメータ：[アルプス電気 RDC503013A](https://www.monotaro.com/p/0148/5627/), ¥299, 2個
・ネジa（モータ固定・コネクタ基板固定用）：[SNZS-M1.6-5](https://www.monotaro.com/p/4926/3103/), ¥489, 1パック
・ネジb（ポテンショメータ基板固定用）：[SNZS-M2-8](https://www.monotaro.com/p/4926/3426/), ¥439, 1パック
・ネジc（ベルト固定用）：[M3.0-5](https://www.monotaro.com/p/4174/6573/), ¥399, 1パック
・ナットa（コネクタ基板固定用：ネジa受け)：[六角ナット M1.6](https://www.monotaro.com/p/4222/1277/), ¥399, 1パック
・ナットb（ポテンショメータ基板固定用：ネジb受け)：[六角ナット M2](https://www.monotaro.com/p/2344/2938/?t.attr_f7=M2), ¥419, 1パック
・指固定ベルト：[TRUSCO マジックテープ(R)セット(強粘着タイプ)](https://www.monotaro.com/p/5723/3225/), ¥1500, 1個


電気部品
・モータドライバ：[デュアルモータードライバDRV8833](https://www.switch-science.com/catalog/1636/), ¥583, 1個
・配線コネクタa（ポテンショメータ基板〜コネクタ基板）：[Molex 基板接続用ピンヘッダ PICOBLADEシリーズ 4極 1.25mm 1列 ライトアングル] (https://jp.rs-online.com/web/p/pcb-headers/5427113/), ¥141, 1個 
・配線コネクタb（モータ〜コネクタ基板）：[Molex基板接続用ピンヘッダ PICOBLADE 2極1.25mm1列ライトアングル](https://jp.rs-online.com/web/p/pcb-headers/5427090/), ¥106, 2個
・配線コネクタc（コネクタ基板〜制御基板）：[Molex 基板接続用ピンヘッダ PICOBLADE 8極1.25mm1列ライトアングル](https://jp.rs-online.com/web/p/pcb-headers/5427157/), ¥180, 1個
・配線ケーブルa（ポテンショメータ基板〜コネクタ基板）：[電線対基板ケーブルアセンブリ Molex 4極](https://jp.rs-online.com/web/p/wire-to-board-cable-assemblies/1250731/), ¥401, 1本
・配線ケーブルb（モータ〜コネクタ基板）：[電線対基板ケーブルアセンブリ Molex 2極](https://jp.rs-online.com/web/p/wire-to-board-cable-assemblies/1250724/), ¥259, 1本
・配線ケーブルc（コネクタ基板〜制御基板）：[電線対基板ケーブルアセンブリ Molex 8極](https://jp.rs-online.com/web/p/wire-to-board-cable-assemblies/1250750/), ¥684, 1本
・マイコン：Arduino Mega



##ボディ設計
CAD : Fusion 360
3Dプリント：DMM.make
論文やデモ動画を参考に設計しました。ソリッド方式の基本はスケッチを描いて押し出しです。
3Dプリントの素材はMJFナチュラルです。強度もそれなりにあり、安価なためプロトタイピングには適切な素材かと思います。

◆設計要求
・人差し指にフィットし固定できる構造であること
・モータx2、ポーテンショメータx2を搭載できること
・ベルトをモータが巻き取れること

◆本体（向きは指先方向から）
縦 x 横 x 高さ ＝ 28 x 40 x 30mm

-斜め前
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371835/d8b30692-9ed5-5031-037f-e2bef60a3cf9.png" width="320px">
-斜め後ろ
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371835/31609b19-f7ea-dcf0-5fc6-7cd35ffc6927.png" width="320px">
-正面
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371835/26a91d1d-d461-0d94-3573-0035b48ebc33.png" width="320px">
-背面
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371835/4a3804b8-146d-3a17-6967-82caa38c9c6c.png" width="320px">
-右（左視は省略）
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371835/62c14d2b-d7f0-315f-2b5b-4c9989d18fbf.png" width="320px">
-上面
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371835/02935ab5-7610-e5ae-0b90-c7c49985b406.png" width="320px">
-下面
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371835/0b68a115-4876-6594-73f0-c27a3e9dcbbe.png" width="320px">

◆ポテンショメータ回転軸

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371835/bf2a6623-a98d-d7c7-d23e-298a598160ee.png" width="160px">


#組み立て
-1：ボディ＋モータ
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371835/b12d738b-e6a9-c7e4-f389-0be9b798b085.png" width="640px">

-2：コネクタ基板＋ベルト固定軸＋ポテンショメータ回転軸
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371835/69558349-6ee4-04b2-c50a-e54789af7834.png" width="640px">

-3：ベルト＋ポテンショメータ
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371835/5b6cec2b-d6f2-1bdd-75e6-7845a2af42bf.png" width="640px">

-4：全体（指固定用ベルトは無し）
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371835/0ccaa2b6-2952-18c5-775b-d36162dbea80.png" width="640px">

-5：全体+指
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371835/f7b22abc-f071-0aea-1c7c-a26ef0044272.png" width="640px">

-6：ボディ+ビス＋ナット
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371835/34c29bad-f669-9f1b-b7b7-84dc3de47450.png" width="640px">


##電気設計
CAD：[DesignSpark PCB](https://designspark.zendesk.com/hc/ja/articles/212966269-DesignSpark-PCB-クイックスタートガイド1-基本操作編-)
基板製造：Elecrow

DesignSpark PCBのの特徴として、
・RSコンポーネントとの連携が取りやすい
・基板データ（パターン・部品）を3Dデータとして確認可能
が挙げられると思います。

また、Library Loaderなる機能があり、デフォルトで用意されていないフットプリント（部品実装パターン）を"Search for Parts"から検索＆ダウンロード可能（実際には[Electric Component SEARCH ENGINE](https://www.rs-online.com/designspark/pcb-part-library-jp)というWebページに飛ぶ）
CADも選択可能(Eagleなどもある)なので、この機能自体はDesignSpark PCB専用というわけではなさそう。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371835/19d27848-7912-9989-bb5f-269029c6cf37.png" width="320px">


◆設計要求
・モータを正転・逆転制御可能なこと
・モータ角度を読み取れること(角度制御用。）
・PCとの通信が可能なこと
・~~モータ電流を測定可能なこと~~（←設計時、数百mAレンジの電流センサを見つけられなかったので一旦断念。DCモータの場合、電流とトルクは比例関係にあるので電流を監視すればトルク制御ができます。後日、スイッチサイエンスで[ACS723搭載 電流センサモジュール（低電流）](https://www.switch-science.com/catalog/5502/)を発見。これなら使えそう。）

◆部品選定
・モータ
千石電商の[EEHD-53AF  SparkFun 小型ギヤードモーター【6V~12V 140RPM~270 RPM】  ROB-12125]
(https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-53AG)
回転速度・トルク違い（外形寸法同じ）でいくつかバリエーションがあるので用途に応じての付け替えも考慮しての選定でもあります。（もっと小型で3000円以下のモータがあればコメントください。）

・モータドライバ
[デュアルモータードライバDRV8833](https://www.switch-science.com/catalog/1636/)。2ch分のモータドライバがBreakBoardとして販売されているのでお手軽。最大電流1.2A（ピーク2A）

・ポテンショメータ
[アルプス電気 RDC503013A](https://www.monotaro.com/p/0148/5627/)。モノタロウなどで取り扱いあり。入荷するとすぐに売り切れる・・・。在庫があれば予備も購入することをオススメします。


・コネクタ
コネクタは高さの低いMolexのPICOBLADEを使用。モータ〜基板接続はフレキシブル基板を使えるとかっこいいが、個人で製造するには数万円とコスト大なので諦めた。

[Molex 基板接続用ピンヘッダ PICOBLADEシリーズ 4極 1.25mm 1列 ライトアングル] (https://jp.rs-online.com/web/p/pcb-headers/5427113/)
[Molex基板接続用ピンヘッダ PICOBLADE 2極1.25mm1列ライトアングル](https://jp.rs-online.com/web/p/pcb-headers/5427090/)
[Molex 基板接続用ピンヘッダ PICOBLADE 8極1.25mm1列ライトアングル](https://jp.rs-online.com/web/p/pcb-headers/5427157/)
[電線対基板ケーブルアセンブリ Molex 4極](https://jp.rs-online.com/web/p/wire-to-board-cable-assemblies/1250731/)
[電線対基板ケーブルアセンブリ Molex 2極](https://jp.rs-online.com/web/p/wire-to-board-cable-assemblies/1250724/)
[電線対基板ケーブルアセンブリ Molex 8極](https://jp.rs-online.com/web/p/wire-to-board-cable-assemblies/1250750/)

◆基板設計
ポテンショメータ基板の表・裏、コネクタ基板の表・裏
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371835/d377011a-7066-ecb1-f9b8-b4df2564ffd4.jpeg" width="480px">

・コネクタ基板
ポテンショメータ、モータと制御基板を接続する回路

パターン（赤：Top Copper, 水色：Bottom Copper, 白：SolderMask, 青・黄色：Silkscreen）
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371835/6899d9bf-1cbb-e9ff-bfd3-3f358509ed31.png" width="480px">
回路図
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371835/abd76efb-5c7c-491f-e5bb-d0755e860f50.png" width="320px">

・ポテンショメータ基板
ポテンショメータのフットパターンは検索しても見つからないため自作。
Electric Component SEARCH ENGINEの問い合わせ先に作成を依頼したが、回転軸の穴を開ける必要があるパターンは対応できないとのこと。
パターン（赤：Top Copper, 水色：Bottom Copper, 白：SolderMask, 青・黄色：Silkscreen）
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371835/ceab4c42-ef4f-c67d-95dc-3371196cffcb.png" width="480px">
回路図
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371835/5c1ca719-5629-d7ec-bce8-91d185399fed.png" width="320px">

基板製造はElecrowに発注しました。Elecrow用のDesignSpark PCBのデザインルールとして以下を設定。
いくつかのサイトで調べたうち厳しい値を採用してるので厳し目に見てており、届いた基板にパターンのショートなどはありませんでした。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371835/4604c8b3-5cb5-1f7c-ec9b-3fe6407bbaf2.png" width="480px">


#モータ制御＋Unity連携
制御に関しては、別の投稿で記載しようと思います。

現在、実装中のシステムは、
・手の動きセンシング・・・Leap Motion
・VR空間の生成 ・・・ Unity
・モータ制御とPC通信・・・Arduino
で、
①指先がVRと接触（接触判定はUnity機能）
　↓
②物体表面からの指先のめり込み量の計算
　↓
③めり込み量に応じたモータ角度計算
　↓
④モータ制御
のようにしています。

#デモ動画(Youtube)
・[デバイス単体](https://youtu.be/vV-XzpFj0RM)

・[Unity+Leap Motionと連携](https://youtu.be/K_cCLwEd_lU)


#改善点
・重い
モータ２個＋ベルト固定軸が金属のため、指先で支えるには重い。より小型・軽量モータと、プラ部品への置き換えが必要

・Leap Motionでの手の動きの認識
おそらくLeap Motion自体、素手を対象にしたセンシングデバイスのため、指先に物体をつけると途端に認識精度が悪くなります。
手・指の動きセンシング方法は別の手段の方が安定した動作になりそうです。

・ポテンショメータの入手性が悪い
単純にもっと入手性の良いものを選ぶべきでした。また、電流監視ができれば位置制御は不要にできるかもしれません。

・ベルト表面形状の工夫
ベルト表面の形状を凸凹させたり、スピーカを取り付けて微振動を発生させることで、いくつかの違う刺激を組み合わせた触覚提示ができるかも。


#おわりに
“モノを握る"時の力覚提示デバイスも設計しました。
[触覚VRデバイスの実装② 人差し指への力覚提示](https://qiita.com/YI_D/items/a324db7037c2ec964c7e)