HTC Vive Trackerの仕様・使い方まとめ

HTC Vive Trackerの仕様・使い方まとめ

おととい、ついにHTC Vive Trackerが発売開始しました!

格安3DトラッキングシステムであるところのLighthouseの空間の中で高い精度で位置・角度を取得できるデバイスで、VRだけでなく様々な分野に応用できる可能性を秘めています。

デベロッパー向け先行注文分の4個が届いたので早速使ってみました。

使い方と、その際に気づいた事などをまとめておきます。

公式資料

  1. Viveトラッカー開発者ガイドライン
  2. Viveトラッカー3Dモデル

ペアリング方法

  1. USBワイヤレスドングルをPCに接続
  2. SteamVRメニューから、デバイス>コントローラーのペアリング
  3. 電源ボタン(Viveマーク)長押しでLEDが青く点滅
  4. ペアリングに成功するとLEDが緑に点灯

ワイヤレスドングルはUSBハブを使って1ポートに4台接続しても大丈夫でした。

充電方法

  1. ACアダプタでMicroUSB接続
    • 最大5V/1000mA。最大充電時間1.5時間。
  2. PCとMicroUSB接続
    • 最大5V/500mA。最大充電時間3時間。
  3. Pogo Pinの3番に5V給電
    • 最大5V/500mA。最大充電時間3時間。

最大充電時の連続稼動時間は6時間程度のようです。

ファームウェアアップデート

  1. USB接続してSteamVRメニューから、デバイス>ファームウェアの更新
  2. 設定からBluetoothコミュニケーションを有効化しておくと無線での更新が可能。(管理者ユーザーじゃないとBluetoothドライバが正しく入らない可能性有り)

Pogo Pin(ポゴピン)

Tracker下部に配置された6個のスプリングタイプのピン。

電源供給や、ボタン押下のシミュレーションができる。

アウトプットピンも一つ備えていて、アクセサリー側のバイブレーションやLED等とも連携できる。

ピン配置
  1. Digital output(アクセサリーとの連携用)
  2. GND
  3. Digital / Power input(グリップボタン)
  4. Digital input(トリガーボタン)
  5. Digital input(トラックパッドボタン)
  6. Digital input(メニューボタン)

ピン情報
  • 3.5mmピッチ
  • パッド部は縦幅4.1mm x 横幅2mm
  • 謎規格すぎてどこにも対応コネクタが見つからない…。あまりに酷すぎるので、公式がそのうちコネクタ販売開始するんじゃないかな?

使用方法
  1. ボタンシミュレーション
    • Digital inputピンをGNDにショートさせるとボタン押下状態になる
  2. 外部アクセサリー(バイブレーションなど)との連携
    • 1ピンからのDigital outputをアクセサリ側で受け取って、アクチュエーター等と連携させる。

とりあえずボタン押下状態になるのは確認。

   

ワニ口クリップで試すの大変なので、使いやすいボタンアタッチメントみたいなものを作るとデバッグが捗りそう。

↓ カメラ用のマウント作った。

1/4インチネジはAmazonで5個1050円で購入。

パッド部分には銅箔テープを貼ってスイッチ等につなぐ想定で設計しています。

後ほどデータの調整終わったら3Dプリント用データも公開しようと思います。

お楽しみに。

USB接続

Vive TrackerはUSBでアクセサリと接続することで、HID(ヒューマンインタフェースデバイス)として機能する。

アクセサリ→Vive Trackerへのキー情報などの情報送信は、USB HIDクラスのFeature Reportという単位で送信する必要がある。

このあたり詳しくないのでちょっと調べてみた。

このあたりを見ながら頑張れば作れるかも?

こっちも見てみたけど全然どうすればいいか理解できない。だれか詳しい人教えて…。

ちなみに、TrackerをUSBでPCと接続すると、HID準拠ベンダー定義デバイスとUSB入力デバイスが3つも増えた。

Arduinoのシリアルモニタから接続できるかなと思ったけど、シリアルポートは表示されず。

Unity上での使い方

いくつかあるけど、一番楽そうな方法はこれ。

  1. 公式のSteamVRプラグインをインポート
  2. [CameraRig]プレハブのControllerをコピーして名前をTrackerとかに変えておく。
  3. [CameraRig]にアサインされているSteamVR_ControllerManagerのObjectsにTrackerのゲームオブジェクトを追加すれば使える。
  4. ボタンの入力を取得したい場合は、TrackerのゲームオブジェクトにSteamVR_TrackedControllerをAddして、キーに応じたイベントリスナーを登録しておく。

_controller = GetComponent<SteamVR_TrackedController>();

_controller.TriggerClicked += TriggerClickedFunction; //トリガーがクリックされたらTriggerClickedFunction()を実行

_controller.MenuButtonClicked += MenuButtonClickedFunction; //メニューボタンがクリックされたらMenuButtonClickedFunction()を実行

_controller.PadClicked += PadClickedFunction; //パッドボタンがクリックされたらPadClickedFunction()を実行

_controller.Gripped += GrippedFunction; //グリップボタンがクリックされたらGrippedFunction()を実行

_controller.SteamClicked += SteamClickedFunction; //SteamボタンがクリックされたらSteamClickedFunction()を実行

Unityで使うときの注意

DeviceIndexが何番に割り当てられるかわからない問題

Viveコントローラーにも言えるが、認識外れや復帰でコントローラーとTrackerの役割が入れ替わったりすることがある。

  • renderModelName(描画されるモデルの名前)によって処理を分岐させると良い。

string renderModelName = GetComponentInChildren().renderModelName;

if (renderModelName.IndexOf(“{htc}vr_tracker_vive_1_0”) == -1)

{

   // Trackerの時だけ実行

}

  • ViveTrackerの場合はモデル名は「{htc}vr_tracker_vive_1_0」
  • Viveコントローラーの場合はモデル名は「vr_controller_vive_1_5」
  • これらの名前はSteamVRやデバイスのファームウェアのアップデートによって変わるかもしれない。
Viveコントローラー2本の接続が必要?
  • Viveコントローラー2本が接続されていない状態ではTrackerの挙動が安定しなかった。(位置や角度がおかしくなる)
  • SteamVR PluginデフォルトのプレハブについてるSteamVR_ControllerManagerでは左手右手のコントローラーを指定しなければいけないためかもしれない。コントローラーを登録せずにTrackerのみ登録すればいけるかも?
アクセサリーの位置合わせ
  • 公式ドキュメントには毎フレームGameObject.Find()かけて位置と角度を代入するというすごい重そうなサンプルスクリプトが書いてある。
  • スクリプトからやらなくてもTrackerゲームオブジェクトの子にアクセサリー用の3Dモデルを配置して位置合わせするだけでよさそう。
HTC VIVE本体(HMD)も接続が必要
書き出したアプリを実行中に何度かViveコントローラー&Trackerの接続が切れた
  • 電池の問題ではなさそうだった。
  • SteamVRのバグ?

プロトタイプ作ってみた

Vive Tracker + ペーパークラフト +アーケードボタンでプロトタイプを作ってみた。

PogoPinをハックするのが中々大変でしたが、銅箔テープを巻いた基板をPogoPinに押し付けるようにしてボタンを接続してます。

プロトタイプなので勝ち負けの機能は実装していませんでしたが、デモしてると自然と人が集まってきて盛り上がってました。

やっぱり全員で空間を共有できるインタラクティブなプロジェクションマッピングは楽しいですよね。

VRに限らずVive Trackerにはもっと色んな分野で活用できる可能性を秘めているので、これから色々と試していこうと思います。

Leave a reply

Your email address will not be published.

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>