自作トラッカーでリーズナブルなフルトラ環境を構築する【SlimeVR】

カテゴリー: つくる
投稿日:
更新日:
書いた人: 山椒ねこまんま

趣味のブログ巡りをしていたらVRのモーショントラッカーを自作している人がいて、面白そうだったのでやってみました。

SlimeVR というオープンソースのトラッカー用ハード&ソフトウェア群があるのでそれを元にしています。

アクシデントはありつつも、市販だと数万はかかるフルトラ環境を約 6,000円 で構築できましたよ!

設計

SlimeVR用のモーショントラッカーを作る上で必要なパーツは 3つ

  • PCと通信可能なマイコン
  • 6軸以上のIMU(加速度&ジャイロ+地磁気センサ)
  • 電力源

今回は安い割に精度がいいらしい LSM6DSV という6軸のIMUを採用し、マイコンにはいつも使っている ESP32-C3 を選びました。

また、なるべくリポバッテリーを使いたくないので、単三の乾電池を3.3Vに昇圧して使うことにしました。

完成品のイメージはこんな感じ

バンドを通すための部分を除くと、本体サイズは W31/D74/H25 になります。

厚みこそあれ、単三電池を使っているわりにはかなり小型に設計できました!

組み立て

基板はこんな感じ

細かいパーツを載せるのが面倒だったので、追加料金がかからずにPCBAできるパーツは片面にまとめちゃいました。

昇圧DCDCコンバーターとIMUは足が出ていないタイプのICなので、パッドを伸ばして手はんだで修正しやすくしてあります。

ステンシルではんだペーストを印刷していきます。

今回ようやく位置調整用の穴がちゃんとあるステンシルを注文できたので、安全ピンで楽に位置合わせができました〜

半年もので固くなっているはんだペーストにしてはなかなかいい感じに印刷できています。 便利ね〜

あとは適当に組み立てて完成! とりあえず7個作ってみました。

制作費は送料抜いて 合計 6,000 円!
市販のものと比べると破格だと思います。 まぁ自作だからさもありなん

重さは電池抜きで25g、電池入りで55gでした。 気になるような重さではないね。

つかってみる

ルーターを介さずPCに直接繋いだ方が安定するらしいので、PCにアクセスポイントを立てました。

SlimeVRのサーバーアプリを立ち上げた上でトラッカーとPCをUSBで繋ぐとWiFi接続情報の設定ができます。

ファームウェアを焼くタイミングで接続情報をいれるよりも、アプリから設定した方がなぜか安定して接続できました。 なぜ…?

トラッカーの固定にはダイソーで買ったバンドを使いました。

サイズが合っていないのでちょっとずれちゃう

さっそくVRChatでフルトラを試してみたのですが…
LSM6DSVはドリフトが少ないと聞いていたのに、がっつりドリフト しています。

体を動かすと、動かしたそばからドリフトしていくのです。 動画の最後の方 足が斜めになっちゃってるよ〜!

ファームウェア改良したよ

嘆いていても仕方がないので対策を考えます。

実は1つ思い当たることがありまして…
「WhoAmI」というレジスタの値がLSM6DSVの規定値と違ったのですよね。

デフォルトのファームウェアにも元のソースコードにも、LSM6DSVのWhoAmIは「0x70」と書かれていたのですが、手元にあるものは「0x71」を返してくるのです。
もしかして君、ふつうのLSM6DSVじゃない…?

今回僕はLCSCで「LSM6DSVDTR」という型番のモデルを買いました。
LSM6DSVのデータシートには「LSM6DSV」と「LSM6DSVTR」の名前しか出てこないのですが、「想定流通ルートによる違いかな」と思って流していました…

WhoAmIの値を元に、改めてICを調べてみると「LSM6DSV16BX」というチップを発見!
そしてどうやら、LSM6DSV16BXにはHAODRという「加速度とジャイロデータのサンプリング精度を高めるモード」が搭載されていないようなのです。

LSM6DSVDTRのスペックがLSM6DSV16BXに近いのか、それともチップを入れ間違えられたのかは分かりませんが、とりあえずLSM6DSV16BXを想定してファームウェアを修正するのが良さそうです。


さて、どうやって修正するかですが…
LSM6DSV系にはIMU内部で計算されたクォータニオンを読み出す機能があるので、とりあえずそれを試してみました。

左が変更前、右が変更後の挙動です。

トラッカーを90度傾けただけなのですが、左は傾いた後に変な回転が入っているのに対し、右は倒れた後ちゃんと静止しています。

とりあえず、ちょっと動いただけでドリフトすることはなくなりました。

キャリブレーションした後、VRChatで20分ほどうろついたら50度ほどヨードリフトしていましたが、このレベルなら運用でどうにかできそうです。

「LSM6DSVは1時間弱リセットがいらないよ」と聞いていたのから比べるとだいぶ酷そうですが、「リセットがいらない」がどの程度のドリフトを指しているかが不明なのでいまいち評価しにくい。

SlimeVRにはドリフト防止機能の設定がたくさんあるので、設定を詰めればちゃんと安定するのかもしれません。



制作に必要なファイルは毎度のとおり GitHub にアップロードしてあります。 よかったら作ってみてくださいね〜


余談なのですが、僕VRChatのトラストランクVisitor(初心者)なんですよ。

だから自分のアバターではなく、サンリオVfesの「まめひなた✖️ポムポムプリン」で動画をとったのですが…
いや〜 かわいいね

ソロ勢なのでトラストランクが上がってアバターをアップロードできるようになるのはいつになることやらわかりませんが、はやくアバター買って改変してみたいなーと改めて思いました。

それまではフルトラのVisitorという変なプレイヤーとして遊んでいきますよ〜


アプリなどを作ったりしています! よかったらみていってください→ つくったもの
今のイチオシ↓

山椒ねこまんま
山椒ねこまんま

個人アプリ開発者、ブロガー。

Norロジックだけで構成されたCPUをつくっています。