[SlimeVR]2000円から作る格安トラッカー

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 x2999
MPU6050 x4699
合計1,698
腰,胸を作成する場合,WeMos D1 Miniが+1,MPU6050が+2必要になります

作業する

Image

WeMos D1 MiniとMPU6050はピンヘッダがついていないので,ピンヘッダをハンダ付けします.
直にケーブル接続する場合は不要です.
久々の半田付けなので,かなり手こずりました.

Image
失敗

接続する

以下の表のように接続します.
ここではユニバーサル基板に載せていますが,別に基板でなくても大丈夫です.

WeMos D1 MiniMPU6050(膝)MPU6050(足首)
3V3VCCVCC,ADD
GGNDGND
D1SCLSCL
D2SDASDA
Image
クソみたいなハンダ付け

ハードウェアはこれで完成です.

固定方法は割愛します

ファームウェアを作成する

トラッカーのファームウェアをビルドし,トラッカーに適用させます.
設定書く程度なのでそこまで難しくないです.

環境構築

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~)装着位置
NONENONE割当なし
HMDHMDVRHMD
NECK首(不明)
CHESTCHEST胸部
WAISTWAIST
HIPHIP尻(不明)
LEFT_LEGLEFT_UPPER_LEG左膝
RIGHT_LEGRIGHT_UPPER_LEG右膝
LEFT_ANKLELEFT_LOWER_LEG左足首
RIGHT_ANKLERIGHT_LOWER_LEG右足首
LEFT_FOOTLEFT_FOOT左足先
RIGHT_FOOTRIGHT_FOOT右足先
LEFT_CONTROLLERLEFT_CONTROLLER左手(コントローラ)
RIGHT_CONTROLLERRIGHT_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でもリプライでも構いません.
できる限り相談に乗りますが,私も素人なため,解決できないかもしれません.ご了承下さい.

Related Posts:

Share

「[SlimeVR]2000円から作る格安トラッカー」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です