見出し画像

自作ハプティクスベストを作ってみた。

なぜ作ろうと思ったか


最近、各VR周辺機器メーカーからハプティクスデバイスが発表され、ペルチェ素子を使用しVRSNSワールドの温度を再現するもの、振動を伝えて触感を再現するもの、伸縮性の素子を使用したグローブなど様々なデバイスが出ており興味を持ちました。

触感フィードバックって大したことないのかなって思っていましたが、バイブモーターで動くデバイスを見つけたので面白そうだなと思い作ってみる事にしました。

それでは早速作ってみましょう…!

SenseShift Hardwareについて


海外の有志の方が開発、公開してるプロジェクトで安価にハプティクスデバイスが作れるようになっており、ハードウエア別の回路図、ファームウェア等の資料が無料で公開されています。

今回、グローブやフェイス用、ベストとある中で実用性が高くx40は大変なのでハプティクスベストx16を作成することにしました。
基本的にモータの数とFWが違うだけです

必要な部品と回路図

ESP32単体でも制御可能ですが、PCA9685 PWM Driverを使用する方を参考にしました。バッテリー及び充電回路はESP32に直接モバイルバッテリーを接続するので不要です。購入したURLも記載しておきます。

部品代は大体6000円ほどです。(服、バッテリー除く)

こちらより抜粋
https://github.com/senseshift/senseshift-hardware/tree/main/Devices/X16%20Vest/ESP32%20+%20PCA9685


ESP32-DevKitC V4 1個


PCA9685 PWM Driver 1個


ULN2803A 2個


3V/5V バイブモーター 2個(20個)


熱収縮チューブ 1個(ビニールテープでも可)

ケーブル 1個(もう少し長いほうが良いかも)

マジックテープ モーター16個分

100円ショップで販売、10㎝x10㎝の両面テープ付きを4枚購入

BTアダプタ


その他

今回専用のエクステンション基板とケース、モーター固定兼振動版を設計しました。商用以外であれば改変等も問題ありません。STLファイルとEasyEDAのバックアップファイル公開しますので3Dプリンターで印刷するなりJLCPCBで発注してお使いください。
※使用は自己責任でお願いします。

ダウンロードはこちら

エクステンション基板
これがあると配線がめっちゃ楽になります。
※ESP32DEVKITC V4を取り付けると少し奥まった感じになります。
お好みで調整してください。
※実際に作った基板はサーボドライバ側のSCLとSDAが逆になっていました。配布しているデータは修正済みです。念の為ご確認ください。

110㎜x61㎜

ケース
ネジはM2を使用してください。
USBポートはケーブルに応じて穴を拡張してください。

14.5mmx65x27mm

振動版
モーターの固定と均一に振動が伝えられるような板を作成
マジックテープで服に張り付けると良いです。16個作成してください。
縫い付け用ホールは必要に応じて加工し使用してください。

50mmx50mm(モーターは10㎜x4㎜まで可)

ハードウエア組み立て

届いた部品を組み立てましょう。エクステンション基板を使用する場合、部品をはめてはんだ付けをすればOKです。

購入した部品

PCA9685は不要なピンヘッダをヒートガンなどで外しPWMピンと片側の信号ピンだけ逆向きに付けます

半田ごてだけでピンヘッダ外すのは大変かも
ULN2803Aは向きを間違えないようにしてください
全ての部品を取り付けた
モーターの延長加工。フロントは15㎝で足りるがバックは50㎝くらいないと短いかも
モーターと振動版の取り付け。ピッタリなので接着は不要。ケーブルはホットボンドで固定。マジックテープも裏面に接着
ハードウエアの完成
今回はTシャツにマジックテープ張り付け脱着できるようにした
見た目はアレだがそれっぽくなった。少しダボダボなので脇腹をクリップで止めた。
ケースは適当なマジックテープで固定。裏面にも同様に8個張り付けてます

ファームウェア書き込み

FWはWebSerial Flasherを使うと簡単に書き込みできます。
自分は何故かGooglechromeではエラーになったのでEdgeで書き込みました。
まずは通信用microUSBケーブルでESP32とPCを接続しましょう。

①バージョンの選択、ファームウェアの選択を行いコンテニューを押す。
今回はPCA9685有なのでbhaptics tactsuit x16 pca9685.zipを選択します。

②ダウンロードを押してzipを保存します。保存したzipファイルを
Drop downloaded firmware archive here, or click to selectにドラックします。

③接続を要求する画面が立ち上がるのでCP2102をクリックし、
ESP32のbootボタンを押しながら接続を押してください。

ファームウェアが書き込まれます。

完了したらUSBケーブルを取り外してください。ここまで出来たら後はソフトとアバターのセットアップです。

ソフトウエアインストール

bHaptics Playerをダウンロードしてインストールしてください。

①起動後ユーザーの設定を済ませてください。

②ハプティクスベストにモバイルバッテリーを接続しデバイス→スキャン中からペアリングを行ってください。
※WindowsのBluetooth設定からペアリングすると接続が不安定になるので
必ずbHaptics Playerからペアリングしてください。

ペアリング完了

③フィードバックテストでベストのモーターを選択して対応する箇所が正しく動作するか確認してください。必要に応じてモーターを繋ぎ変えてください。番号を決めてシールを張ると良いでしょう

アバターの準備

ここからはUnityの作業になります。既にアバターのアップロードは完了している状態を前提とします。

参考にさせて頂いた記事

必要な物


bHapticsOSC_v2.1.2_VRCSDK
https://github.com/HerpDerpinstine/bHapticsOSC/releases/download/v2.1.2/bHapticsOSC_v2.1.2_VRCSDK.unitypackage

av3-animator-as-code
https://github.com/hai-vr/av3-animator-as-code

①VCCからアバターのプロジェクトを起動してassets直下に
解凍したav3-animator-as-codeをドラックアンドドロップする。

②bHapticsOSC_v2.1.2_VRCSDKをインポートする

③アバターを選択しAvatar Descriptorがあることを確認。InspectorのAdd componentからbHapticsOSC Integrationを追加します

④ベストを着たキャラクターが追加されるので+ADD DEVICEをクリック。

アバターにベストが追加されます。アバターに合わせてScaleを変更してください。アバター内のVestを選択し角度や移動もできます。
ShowMeshのチェックを外すとベストが非表示になります。

調整前
調整後

⑤最後にAPPLY INTEGRATIONをクリックして適用しVRchatにアバターをアップロードしてください。以上がアバターのセットアップになります。

実際に使ってみる

①bHaptics Playerを起動しハプティクスベストに電源を入れる。

②VRchat等からOSCでハプティクスベストへフィードバックを送信するツールを使用します。
bHapticsOSC_v2.1.2をダウンロードして解凍しbHapticsOSC.exeを起動する。
セキュリティの警告等出ますがOKで進めてください。
起動するだけで特に操作は不要です。閉じる必要はありません。

bHapticsOSC_v2.1.2
https://github.com/HerpDerpinstine/bHapticsOSC/releases/download/v2.1.2/bHapticsOSC_v2.1.2.zip  

起動後の画面

③HMDを装着しVRchatを起動してセットアップしたアバターに着替える。
パイメニューからOSCが有効になっていることを確認。

④セットアップしたコライダーに触れてみる。
Self Interactが有効になっていないと自分では触れません。相手からはもちろん触れますが、ワールドのコライダーには反応しないそうです。

分かりやすいようにコライダーを表示しています。

まとめ

以上が自作ハプティクスベストの作り方になります。
使ってみた感想は自分で触るとそうでもないですが他人から触られたときは構えてないので本当に触られているような感覚に陥りました。振動だけとはいえフィードバック恐るべし…!
着用する服や固定方法、バイブモーターの種類によっては差が出てくるかもしれません。
既製品の10分/1の価格で作れて簡単にフィードバックが体験できますので工作好きの方ぜひ試してみてはいかがでしょうか。
今後デバイスを作る際に応用できそうなので作ってよかったと感じます。

これからもデバイスの開発や作成を行っていきますのでよろしくお願いします。チャンネル登録Twitterのフォローもお願いします!


この記事が気に入ったらサポートをしてみませんか?