SteamVR・HTC Vive のトラッキング品質の改善


はじめに

SteamVR Device Monitor は、主に HTC Vive の HMD、ベースステーション、コントローラー、トラッカー等のデバイスのトラッキング状況とステータスを表示する為のソフトウェアです。

広い空間内で大量のデバイスを使う環境で、しっかりとした精度を出したい VR ビジネスやエンターテインメントの現場で特に有用です。

スクリーンショット

※ Valve Index 他、Steam VR 対応のデバイスなら対応している(ハズ)HTC Vive Cosmos も、おそらく。

--

HMD を装着する必要はなく、マウスを使ってカメラを自由に移動してルーム内のさまざまな場所での認識精度やトラッキングの安定性を確認でき、設置する現場環境において十分な精度が出るまで、勘に頼ることなく Base Station の位置を見直す事が出来ます。

また、以下に示すような状況では、トラッキング精度が悪いのか特定のトラッカーだけが不規則な挙動を示すのか、まず最初に何がどうなっているのかをしっかりと確認し、その上で問題の修正に取り組む事が出来るようになります。

※ 複数人で作業して、「ちょっと移動してみて」「後ろ向いてみて」等、デバイスを動かしながら、SteamVR Device Monitor で確認をするのがおススメです。

動作画面

動作中の画面は以下の通りです。

使い方

アプリを起動すると、トラッキングされたデバイスの 3D モデルと各種ステータスの一覧が表示されます。

起動方法

「SteamVR_DeviceMonitor」フォルダにある、「SteamVR_DeviceMonitor.exe」をダブルクリックして起動してください。

※ Hobbyist Edition の場合は、
「SteamVR_DeviceMonitor_HobbyistEdition」フォルダにある、「SteamVR_DeviceMonitor_HobbyistEdition.exe」をダブルクリックしてください。

各種操作方法

カメラ操作

  • マウス左ボタン
    • カメラが旋回します。
  • マウス中ボタン
    • カメラが上下左右に移動します。
  • マウス右ボタン
    • その場で上下左右を見まわします。
  • マウスホイール / Alt + マウスの右ボタン
    • カメラを前後に移動します。
  • R キー
    • カメラを初期位置に移動。

ステータス表示

  • ↑ / ↓ キー
    • デバイス上にオーバーレイ表示されるステータスのサイズを変更します。

フリッカー検出機能

初期設定では移動する方向が一瞬(1フレーム)で 60 度以上変わり、かつ 1.0cm 以上移動した場合、フリッカーとして検出します。

  • P / O キー
    • 移動量の閾値を設定。
  • D / S キー
    • 移動方向の閾値。

SteamVR プラグインのバージョン

SteamVR Device Monitor の各バージョンで使用している SteamVR プラグインは以下の通りです。

  • v1.0.0(2019-10-09)
    • SteamVR Unity Plugin - v2.3.2 (sdk 1.4.18)

おわりに

SteamVR のトラッキングステータスの扱い

このソフトウェアでデバイスの動作を見ていると、SteamVR の提供するステータスを鵜呑みにしてエラーを吐くのはちょっと違う、というのが分かります。

TrackedDevicePose_t の ETrackingResult が Calibrating_OutOfRange となっている場合、名前の印象とは裏腹に Calibrating_TrackingUnstable ぐらいの感覚で、実際にはデバイスのトラッキングは継続しています。

※ 実際にトラッキングエリアからデバイスが外れてベースステーションが見失った場合は、デバイスリストからデバイスそのものが消えます。

OutOfRange の場合は大抵、デバイスが小刻みに震えているかスライドしている状態なので、エラーを出さず、最後に Running_OK だった位置を使うなどして上手くスムージングを掛けて処理してあげると良いかもしれません。
※ トラッカーやコントローラーでなく HMD の座標をいじる場合は要注意です。

--

Apple に買収されたと噂の IKinema は律義にデバイスステータスを捉えていて、精度的には十分な動きをしているのにステータスが変わったせいで止まる、という問題(?)がありました。
そういう実装でリリースされた場合、ステータスを確認せずに動作していた旧バージョンを使い続ける羽目になったりします。

ルームど真ん中でトラッキングしていても、ほんの一瞬、ステータスが変わってしまうことは(多分)防ぎようがないので、OutOfRange が1秒続いたらエラー、など、ステータスは上手く捌いてやると良いと思います。

public enum ETrackingResult
{
    Uninitialized = 1,
    Calibrating_InProgress = 100,
    Calibrating_OutOfRange = 101,
    Running_OK = 200,
    Running_OutOfRange = 201,
    Fallback_RotationOnly = 300,
}

--

ダウンロードはこちら

BOOTH

Steam

Steamworks に申請中。