VRChatにかなりのめり込んでいるHaruです.
格安でFull Body Tracking,実現したくありませんか?
私はしたいです.
かと言って,FBTを実現するために,Viveトラッカー*4,ベースステーション(必要分)を揃える金銭的な余裕はありません.
OwO Track+SlimeVRを使用して実現することも考えましたが,それに対応した携帯電話が足りませんし,装着が面倒です.
Arduino Uno R3を使用してトラッカーを自作することも試みましたが,どの分野も理解が浅く,作成できそうにありませんでした.
この影響でMPU6050が余ってしまったので,ここを参考にして,トラッカーを作ることにしました.
注意事項
この記事は,公式ドキュメントを参考に,私に必要な部分だけを作成しています.
公式ドキュメントとの違いは
- 内蔵バッテリなし(外部電源,モバイルバッテリからの供給を想定)
- 作成するトラッカは4点のみ
- LEG(L,R)
- ANKLE(L,R)
- FOOT(L,R)←ここでは作成しません
- WAISTは携帯電話(OwO Track)で代用
膝,足首以外に足もトラッキングしたい場合は,膝を単体で作成,足首と足先を1つにまとめて作成する必要があります.
また,この記事は一部間違いを含んでいる可能性があります.随時更新していきますのでご指摘ください.
とりあえず足が動けば問題ない人はこのまま進んでください.
装着イメージ
ハードウェアを作成する
使ったもの
適当にAmazonで揃えました.
リード線やユニバーサル基板は実店舗で買ったのでノーカウント.
商品名 | 価格(購入時) |
---|---|
WeMos D1 Mini x2 | 999 |
MPU6050 x4 | 699 |
合計 | 1,698 |
作業する
WeMos D1 MiniとMPU6050はピンヘッダがついていないので,ピンヘッダをハンダ付けします.
直にケーブル接続する場合は不要です.
久々の半田付けなので,かなり手こずりました.
接続する
以下の表のように接続します.
ここではユニバーサル基板に載せていますが,別に基板でなくても大丈夫です.
WeMos D1 Mini | MPU6050(膝) | MPU6050(足首) |
3V3 | VCC | VCC,ADD |
G | GND | GND |
D1 | SCL | SCL |
D2 | SDA | SDA |
ハードウェアはこれで完成です.
固定方法は割愛します
ファームウェアを作成する
トラッカーのファームウェアをビルドし,トラッカーに適用させます.
設定書く程度なのでそこまで難しくないです.
環境構築
VSCodeのインストール
https://azure.microsoft.com/ja-jp/products/visual-studio-code/ からダウンロード,インストールします
PlatformIO IDEのインストール
ここから,またはVSCodeの拡張機能からインストールします.
ドライバのインストール
ここからデバイスドライバをダウンロード,解凍し,インストールします.
Gitのインストール
ここから自分のPCにあったGitをダウンロード,インストールしてください
トラッカーのソースコードをクローンする
開始(Start)内のGitリポジトリのクローンを選択し,出てくるテキストボックスへ,以下のように入力します.
https://github.com/SlimeVR/SlimeVR-Tracker-ESP.git
保存先のディレクトリを選択すると,クローンが完了します.
ディレクトリが開かれなかったら手動で開いてください
設定を書く
設定を変更するファイルは次のとおりです.
- platformio.ini
- src/defines.h
platformio.iniを編集する
27,28行目のコメントを解除し,SSIDを接続するWiFiネットワークのSSIDに,PASSWORDを接続するWiFiネットワークのパスワードに置換してください.
クォーテーションマーク'” “‘は削除しないでください.
src/defines.hを編集する
29-33行目を以下のように編集します
#define IMU IMU_MPU6050
#define SECOND_IMU IMU_MPU6050
#define BOARD BOARD_WEMOSD1MINI
#define IMU_ROTATION DEG_任意の値(0,90,180,270)
#define SECOND_IMU_ROTATION DEG_任意の値(0,90,180,270)
IMU_ROTATIONについて
以下の画像に対応しています.
画像上側が頭です.
ファームウェアのビルド,転送
はじめはMicroUSBケーブルを接続して転送する必要がありますが,1度ファームウェアを転送し,WiFiに接続できるようになると,ネットワーク経由で転送することができるようになります.
ビルドする
VSCode下部のバーにある,✔をクリックするとビルドが開始します.
問題がなければSUCCESSと表示されます.表示されなかったらなにか間違えています.エラーを読みましょう.
転送する
VSCode下部のバーにある→をクリックすると,転送が開始します.
SUCCESSと表示されると転送成功です.うまく行かない場合は,ボードを再接続,ケーブルを交換するなど試してください.
OTA経由での更新
WiFi,ネットワーク経由でファームウェアを転送できます.
platformio.iniをの34-37行目のコメントを解除します.
upload_portに書かれているIPアドレスを,トラッカーに割り当てられているIPアドレスに変更します.
トラッカーのIPアドレスは,DHCPサーバの払い出し状況や,SlimeVR Serverから確認できます.
# show status dhcp DHCPスコープ番号: 1 ネットワークアドレス: 10.128.1.0 ... 割り当て中アドレス: 10.128.1.4 クライアントイーサネットアドレス: ホスト名: SlimeVR FBT Tracker リース残時間: 2日 14時間 1分 52秒 割り当て中アドレス: 10.128.1.6 クライアントイーサネットアドレス: ホスト名: SlimeVR FBT Tracker リース残時間: 2日 14時間 1分 52秒 ...
設定後,再ビルドし,トラッカーを再起動してからアップロードすると,更新できます
SlimeVRのセットアップ
注意(2022-11-29更新)
以下の内容はSlimeVR Server 0.3.0まで(旧GUI)での設定方法です.
0.3.1以降は以下の記事を参照してください.
インストール
https://github.com/SlimeVR/SlimeVR-Server にあるWebインストーラでインストールすると楽です.
体の設定
https://docs.slimevr.dev/server-setup/body-config.html を参考に設定してください.ここでは割愛します.
トラッカーの割当
接続直後はトラッカーの割当がされていません.
手動でトラッカーを割り当てる必要があります.
以下の表に対応しています.(2022-08-20更新)
SlimeVRの表示(0.1.x) | SlimeVRの表示(0.2.x~) | 装着位置 |
---|---|---|
NONE | NONE | 割当なし |
HMD | HMD | VRHMD |
NECK | 首(不明) | |
CHEST | CHEST | 胸部 |
WAIST | WAIST | 腰 |
HIP | HIP | 尻(不明) |
LEFT_LEG | LEFT_UPPER_LEG | 左膝 |
RIGHT_LEG | RIGHT_UPPER_LEG | 右膝 |
LEFT_ANKLE | LEFT_LOWER_LEG | 左足首 |
RIGHT_ANKLE | RIGHT_LOWER_LEG | 右足首 |
LEFT_FOOT | LEFT_FOOT | 左足先 |
RIGHT_FOOT | RIGHT_FOOT | 右足先 |
LEFT_CONTROLLER | LEFT_CONTROLLER | 左手(コントローラ) |
RIGHT_CONTROLLER | RIGHT_CONTROLLER | 右手(コントローラ) |
LEFT_ELBOW | 左肘 | |
RIGHT_ELBOW | 右肘 | |
LEFT_LOWER_ARM | 左前腕(不明) | |
RIGHT_LOWER_ARM | 右前腕(不明) | |
LEFT_UPPER_ARM | 左上腕(不明) | |
RIGHT_UPPER_ARM | 右上腕(不明) | |
LEFT_HAND | 左手(トラッカー) | |
RIGHT_HAND | 右手(トラッカー) | |
LEFT_SHOULDER | 左肩(不明) | |
RIGHT_SHOULDER | 右肩(不明) |
正面に装着する場合はFRONTで問題ありません.
トラッカーを使う
電源を接続するとトラッカーが起動します.
自動的にキャリブレーションが始まるので,動かさずに待ちます.
SlimeVR Serverに表示される値がふらつかなくなったらキャリブレーション終了です.
トラッカーを所定の位置に装着してください.
次にSteamVRに割り当てるトラッカーを設定します.
SlimeVR Server(0.1.x)内のSteamVR Trackersで,WaistとLegsにチェックを入れます.
SlimeVR Server(0.2.x)の場合は,WaistとFeetにチェックを入れます
これで腰と足がSteamVRに表示されます.
VRChatのik-betaでは膝のトラッキングにも対応している(はず)ので,Kneesを有効にしたら膝トラッカーが出現します.
SlimeVRでのキャリブレーション
装着直後は各トラッカーが変な場所にいるので,位置をリセットする必要があります.
直立状態でCTRL+ALT+SHIFT+YかResetボタンを押します.
Resetボタンに表示されるカウントダウンが終了すると,トラッカーの位置が初期位置に戻ります.
また,ResetやFast Resetはコントローラに割り当てることが可能です.
VRChat等のVRゲームでキャリブレーションをすれば完了です.
お疲れ様でした.
使用感
絶対位置を取っているわけではないため,定期的にキャリブレーションしないと少しずつズレていきます.
Fast Resetをクリックすると,直立姿勢でなくても簡易的にトラッカーの位置を調整してくれます.
また,左右対称の位置にトラッカーを装着しないと,左右でズレが生じます.着席時がわかりやすい例です.
本格的に動きたい場合は,Viveトラッカーを使用するメソッドのほうが良いでしょう.
↑の件ですが,私の膝の可動域が左右で若干違うため発生している事象でした.
普通に使う上では特に問題ないと思われます.(2022-11-29追記)
Demo
あとで撮ります…
作成中に問題が発生した場合
動作しない,接続できない等,気になったことがありましたらお気軽に私までどうぞ.
DMでもリプライでも構いません.
できる限り相談に乗りますが,私も素人なため,解決できないかもしれません.ご了承下さい.
「[SlimeVR]2000円から作る格安トラッカー」への1件のフィードバック