見出し画像

自作データグローブを作ってみる 基礎編

なぜ作ろうと思ったのか


3DVtuberとして活動を始めて2年が経ちました。日々トラッキング技術は進化していますが、まだまだ個人向けのトラッキングはWEBカメラが一般的です。私自身これまで幾つかのトラッキングアプリやトラッキングデバイスを使ってきましたが、どうもハンドトラッキングの精度に満足いきませんでした。
最近ではHi5やContactGloveが出てきて比較的安価にハンドトラッキングが出来る様になってきましたがそれでもそこそこ値が張ります。

Vtuberとして配信で使うなら指の曲げと手の回転が出来れば最低限使用できますしもっと安価にleapmotionよりトラッキング範囲の広いデバイスがあっても良いのではないかと思いデータグローブを作ってみる事にしました。

今回の記事ではオープンソース、仕組みや必要なバーツ等の紹介になります。

※作成や公開したデータを利用してのトラブルに関しては自己責任でお願いします。

ハードウエア、ソフトウエア編


オープンソースについて

ドライバー
OpenGlove v0.5.1バージョンダウンして使用
https://store.steampowered.com/app/1574050/OpenGloves/

ファームウェア&ハードウェア
slimeVR
https://docs.slimevr.dev/

lucidGlove
https://github.com/LucidVR/lucidgloves

自作データグローブについて


SlimeVRFWとlucidGloveFWを結合させて1個のESP32で動作させます。SlimeVRはWiFi/2.4Ghz、LucidGloveはBluetoothでパソコンと接続します。

以上の都合でESP32のADC2chが使えず、スイッチやJoystickが付けられないのでVRGlove用途としては利用できません。(詳しい人なら解決できるかも)

OpenGloveドライバーを使用すると自作グローブをsteamVRのskeltoninputデバイスとしてエミュレート可能。バーチャルモーションキャプチャーを経由させれば指トラッキングを他アプリに送信できます。
(VMCは標準でskeltoninputデバイスが使える)

LucidGloveは元々ポテンションメータとワイヤー、巻取りバネを使用する為大型で重量が重くなってしまうのがネックになります。そこで今回は曲げ抵抗を使用し軽量化を図っています。

試作段階のグローブ

完成すればこんな感じ使用できるようになります。これはワイヤー式なので左手で抑えながら使用してます


ソフトウエアについて

自作グローブの制御に使用するソフトウエアは以下になります。

・SlimeVRServer
steamVRでは手のトラッカーがないとLucidGloveが認識しない為SlimeVRトラッカーの手の割り当てが必須です。(今回作成のグローブには内蔵されている)
また、SlimeVRトラッカーを合計12点装着しmocapmodeでmocopiみたいにHMDレスフルトラッキングする場合に手の回転として使用できます。
VMCProtcolでVseeFaceにモーション送信可能。

・steamVR
起動後、トラッカーの管理から、SlimeVRトラッカー→ハンドヘルド→左右で割り当てるとLucidGloveが認識します。HeadsetWindowの非表示にsteamVRsettingsの変更が必要。

・OpenGlove
steamVR起動後初回設定で接続方法をBTにします。

・バーチャルモーションキャプチャー(VMC)
起動後トラッカー割り当てを行うと指がトラッキングされます。
(手は回転しません)
skeltoninputデバイスとしてそのまま使えるのでVMCProtcolでVseeFace等に指のトラッキングを送信可能。

・VseeFace
各モーションを結合してVroomやWarudo、Unityに送信します。

ハードウェアについて

必要な部品は以下の通りです。後述の専用PCBに合わせ部品を選定しています。左右分の材料費はおおよそ17000円前後
費用を抑え必要個数のみお買い求めの方はAliExpress等でバラで購入してください。個数は左右分に必要な数を記載してます。

ESP32 Wroom32 2個
WayinTop社以外は動作未確認

MPU6500/BNO08X/BNO085 2個
過去に購入し動作確認済みのショップになります。BNO08X/BNO085が一番精度が良いですがお好みで選んでください。

BNO085
https://shop.slimevr.dev/products/slimevr-imu-module-bno085

BNO08X
https://ja.aliexpress.com/item/1005005121506764.html?spm=a2g0o.order_list.order_list_main.48.452f585a7vpSel&gatewayAdapt=glo2jpn

MPU6500
https://ja.aliexpress.com/item/1005001714324287.html?spm=a2g0o.order_list.order_list_main.88.704d585aIKMCXG&gatewayAdapt=glo2jpn

JST 2.0 PHコネクタ 12本
曲げ抵抗と本体PCBとの接続で使用

曲げセンサ60㎜/90㎜ 10本
60㎜なら十分だと思いますが指の長さに応じて購入してください。

ダイオード 1N5819 4本

TP4056 2個

スイッチ SK-12D07 2個
同じピッチなら他のスイッチでも代用できます。

https://amzn.to/3Limee6


抵抗 100kΩ 180Ω~220kΩ 計14本
100Ωと220Ωの計4本はSlimeVRにてバッテリー残量確認で使用。
指によって取り付ける抵抗値が多少変わります。詳細は回路図に記載。

手袋 左右セット1個
指抜きでも使用可能だと思います。お好みの物を購入してください。

Lipoバッテリー 1000mah 2個
モバイルバッテリーから給電する場合は不要。

追加で購入した部品。
表面実装低損失レギュレーター ADP3338 

そのままではバッテリーから給電してもドロップアウト電圧が大きく
ESP32が起動できないです。
ESP32に表面実装されているレギュレータと交換します。

DC-DC MT3608

バッテリーからの電圧を5vに昇圧します。
反時計回りで10回ほど回すと電圧が昇圧されます。テスターなどで確認しながら5vになるように調整してください。

PCB エクステンション基板 左右セット1個
配線を簡単にできます。JLCPCBで発注済みなので動作確認が取れたら
データ配布します。

右手用
左手用

ケース 左右セット1個
上記PCB専用のケースを設計しました。 
外付けバッテリー用ケース付き。曲げセンサ固定用パーツも別途設計します。手袋にはマジックテープ等で固定します。こちらもクリアランスの調整等できたら配布します。

バッテリー端子部分は不要であればカットしてください。
バッテリーケースは30㎜x40㎜x10㎜までなら対応
大きいバッテリーを装着する方は別途ケースを設計してください。
もしくは設計したら配布します。
角が取れている面が中心になります。センサー根元が入り込むように設計しています。

配布データ

使用は自己責任でお願いします。
ハードウエア、ソフトウエア編をよく読み必要に応じて改変しお使いください。また、当該データの販売、自作発言は一切認めません。

https://drive.google.com/file/d/1rK1ousM0hhGfgJzx7I5qQd61Xfi8POF7/view?usp=sharing

最後に

今回は3個のオープンソースを使用して自作グローブを作成する際の仕組みや必要なパーツを紹介しました。

次回届いたパーツを組み立て、動作確認が出来たらハードウェア編と
ソフトウエア編を書きたいと思います。
Youtubeのチャンネル登録Twitterのフォローもよろしくお願いします!


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