ななさいの備忘録

備忘録がわりです

VMTとARCoreでAndroidスマホをトラッカーにした話

急ぎで書いたので校閲できてない。汚いのであとで書き直す。

VMTは凄いよって話

Segmentation Faultさん(@Seg_Fauil)がVirtualMotionTrackerという素晴らしいソフトウェアを公開してくださいました。

github.com

これによって気軽に自作デバイスをトラッカーにすることが出来るようになりました。 折角なので私も何か作ろうということで 全然手に入らないViveトラッカーの代わりを自作しようと踏み切ったわけです。

幸い手元にあるAndroid端末(Xperia XZ3)がARCoreに対応してましたので適当に実装してみることにしました。 (手探りで実装したため公開するのが恥ずかしい実装になりました。)

やったこと

AndroidVRTracker

github.com

使い方

VMTの環境を整える。

腰にスマホを張り付ける準備をする←重要

f:id:ChameleonO2:20200712233245j:plain
腰トラ?

タイトル画面

1 上にPCのIPアドレスを入れる。

2 下にVMTのトラッカIDを入れる。

f:id:ChameleonO2:20200712215533p:plain
タイトル画面

3 SteamVR上の原点に立つ(やや後ろ)

4トラッキングスタート ボタンを押してすぐに腰の位置にスマホを掲げる

↑ これをしないと原点がズレる(まぁあとから一応補正できますが・・・)

ラッキング

f:id:ChameleonO2:20200712215816p:plain
ラッキング画面

リセットボタンを押すとトラッカーが原点に戻る。←回転もリセットされる。

Leftボタンを押すとトラッカーが1cm左に動く。Rightボタンを押すと右に動く Backは後ろに、Frontは前に動く。 プラスボタンは腰の位置が下がる。マイナスボタンは上がる(これは要修正

技術的な話

実装はめちゃくちゃ簡単です。(数行しか書いていないレベル)

ARCore Unity SDK

github.com

ARプログラミング自体、大昔に少し触った程度なので正直初見もいいいところですが、本当に簡単に基本機能をつかうことができました。

最初のシーンにあるカメラを削除し、 ARCoreDeviseをシーン放り込むだけです。

f:id:ChameleonO2:20200712212110p:plain
ARCoreDevice

ARCoreのカメラの座標はこれだけでいいらしい。

Frame.Pose.position.x
Frame.Pose.position.y
Frame.Pose.position.z
Frame.Pose.rotation.x
Frame.Pose.rotation.y
Frame.Pose.rotation.z
Frame.Pose.rotation.w

あとはこれを腰の位置に補正してやって OSCプロトコルでPCに送信してあげる。

uOSCで送信

github.com

ARCore Unity SDKが素直にビルドできるなら1時間かからずできると思う。

私はUnity上でプログラミングしたことがなかったのでそこらへんも四苦八苦したので時間かかりましたが・・・。