プログラマー見習いの独り言

PCに関することからアイドルに関することから様々

HMDなしでViveトラッカーを使いたい

はじめに

Viveトラッカーを使って様々な場面で位置トラッキングをしたい。

でも、HMDは使いたくない。そんなときのお話。

(研究の過程で調べたことをまとめた感じ)

 

使用したもの

HTC Vive(Viveトラッカー)

SteamVR 

 

参考にしたページ

SteamVR Tracking without an HMD | Triad Semi Help Center

 

shop-0761.hatenablog.com

手順

  1. SteamVRなどHTCViveのセットアップに必要なものをインストール
  2. SteamVRの設定を変更する
    • 設定ファイルの場所:C:\Program Files (x86)\Steam\steamapps\common\SteamVR\resources\settings\default.vrsettings
    • requireHmd を false にする
    • activateMultipleDriversをtrueにする
  3. Viveトラッカー同梱のドングルをPCに接続する
  4. SteamVRを再起動

 

位置の取得

OpenVR APIを使用

C#, Pythonで取得可能であることを確認

 

C#の場合は以下を参考

Initializing OpenVR manually in C# :: SteamVR Developer Hardware General Discussions

以下のコードで、トラッキングされているデバイスの位置を取得できる(allPosesに結果が格納される)

vrSystem.GetDeviceToAbsoluteTrackingPose(ETrackingUniverseOrigin.TrackingUniverseStanding, 0, allPoses);

ラッキングの状態を取得することもできる(allPoses[deviceID].eTrackingResult)

結果は以下のEnum

public ETrackingResult
{
  Uninitialized=1,
  Calibrating_InProgress=100,
  Calibrating_OutOfRange=101,(トラッキング範囲外)
  Running_OK=200,(トラッキングされている)
  Running_OutOfRange=201,
}

 

Pythonの場合は以下を参考(pyopenvrを使用)

github.com 

 

注意点とか

ドングルの使用を忘れない

HMD使用時は、HMDに2個分のドングルが内蔵されているため、接続ができるが

Viveトラッカー単体の使用の際にはその個数分のドングルが必要

 

 Viveトラッカー単体で位置トラッキングできると

ロボットとかドローンとかいろんなものの位置トラッキングに使えて夢が広がります

C#でViveトラッカーの位置や情報を取得するコードを書いたので

暇な時にでもリファクタリングしてGitHubにあげれるようにしたい(願望)