はじめまして!インターン生の河野です!今回は、SteamVR Knuckles EV3 というコントローラを実際にARアプリを製作して試してみました!この記事では、SteamVR での複数ペアの SteamVR Knuckles EV3 コントローラの接続方法や、アプリ製作時に必要になった諸所のことについて書いたものです。
目次
1. SteamVR Knuckles EV3とは?
SteamVR Knuckles EV3 とは、Steam を運営する Valve社の開発したコントローラ「Knuckles シリーズ」の3代目です。2019年年初には、ハード面での性能改良版である Knuckles DV が登場しています。

特徴は、手をホールドするストラップ付きコントローラの形状と、5指の感知機能です。各指の当たる、スティック・タッチパッド、トリガ、グリップは感圧式なので、指の押し具合を取得することができます。そのため、どの指を開いているか、手をどの程度開いているか・握っているかを検知することができるのが、このコントローラの強みです。

このコントローラを Unity で使うには、 SteamVR Unity Plugin v2 を用います。コントローラの概要・開発は、Steam 公式サイト「Steam コミュニティ :: ガイド :: Knuckles EV3: What’s New」を参照することになりますが、ドキュメントがある訳ではなく、デモアプリ「Moondust」のプロジェクト・プログラムを見て、調べることになります。

2. 今回の開発要件と、突き当たったこと・解決法
今回、このコントローラを使ったARアプリを製作し、実際に特長を感じることができました。ただ、そのアプリ開発では、いくつかの大きい要件がありました。
- iPhone を用いて、複数台で同時に行えるARアプリを製作する
- 1PC のみ使用し、2ペア以上のコントローラを接続する(PC や使わないけれど必須の HMD などの機材を少なくするため)
- PC でコントローラの情報を取得し、サーバを介して iPhone にその情報を送る
それら要件をクリアするのに突き当たったことについて、特筆すべきことを以下に書き留めます。各項の詳細な方法やプログラムについてはリンクを貼っていますので、見てみてください。
2.1. 1PC に複数ペアを接続するには ~ SteamVR との格闘~
まず、最初にコントローラを複数ペアつなげるところから始めました。Unity で SteamVR を使う際には、SteamVR Unity Plugin v1・v2を用いますが、
あれ?姿勢は全て取れるけど、3台目以降のコントローラのアクションが取れない?
SteamVR Unity Plugin v2 は2018年9月頃にリリースされましたが、v1 との急な大幅な仕様変更が問題になっていました。そういう急な仕様変更の一部かと思って v1 も試しましたが、結果としては、SteamVR Unity Plugin でなく SteamVR 自体のアップデートが問題でした。解決法は今のところ、「SteamVR と SteamVR Unity Plugin v1 を2018年夏以前のバージョンへダウングレードすること」のみ。今回は、2018年5月頃のものに戻したら解決できました。
ダウングレードした結果、複数ペアのコントローラを 1PC に接続することができました!しかし、ダウングレードバージョンは SteamVR Unity Plugin v2 のない時代、つまり、Knuckles EV3 の特長である中指~小指は取れません!完
SteamVR のダウングレード方法については、以下の記事を見てください。
【Unity×SteamVR】複数ペアのコントローラの情報を1PCで取得する方法 ~ダウングレード~ (2019年3月時点) – Techno sports2.2. Unity で SteamVR コントローラの情報を取得する方法
ここでは、今回使用した SteamVR Unity Plugin v1 でのコントローラの情報の取得方法と、SteamVR Knuckles EV3 コントローラから取れる情報(v1 なので、中指~小指以外の情報)について説明します。これについては各サイトで方法が紹介されています。ただ、Knuckles EV3 での情報取得の話やその他いろいろ、コントローラの情報取得方法の詳細の記事も書きましたので、見てくださると幸いです。
【SteamVR Unity Plugin v1】UnityでSteamVRコントローラの情報を取得する方法 – Techno sports2.3. ARKit アプリと SteamVR アプリの基準点を合わせるには
複数人でAR世界を共有するには、アプリの”基準点”を合わせる必要があります。問題は、今回は“AR”世界だけでなく“VR”世界も共有する必要があることです。今回は、1項のおかげでVR世界が1つだけなので、VIVE トラッカーをVR空間の基準点とし、ARアプリの認識画像の上に直に置くことで、基準点を同じにする方法を取りました。 詳細な方法は、以下の記事を見てください。
【ARKit×SteamVR】AR世界とVR世界を共有する方法 – Techno sports
3. アプリ製作で、できたこと・できなかったことまとめ
今回は、以下の動画のように、コントローラで UnityCube をつかんで投げるアプリを製作しました。ここには2つしかコントローラはでていませんが、投げる用と当てられるターゲット用のコントローラをペアにして使うことで、1対1対戦が可能になっています。
できたこと
- SteamVR Knuckles EV3 などのコントローラを 1PC に複数ペア接続できて、位置・姿勢とアクションの情報(普通の VIVE コントローラのもののみ)を取得できた。
- PC からサーバにコントローラの位置・姿勢情報を投げて、iPhone 上で可視化できた
- VR世界とAR世界×2の基準点を合わせて、同じ世界で動かすことができた
- コントローラを使って、ARカメラを通して仮想物体をつかんで投げることができた
- ARKit の機能の1つの自動生成床メッシュ(ARPlaneAnchor の ARPlaneGeometry) にコライダをつけて、仮想物体を現実の床・壁に合わせて当たったり落ちたりと、現実・仮想をミックスできた
できなかったこと
- 1PC に複数ペア接続した状態で、中指~小指の情報が取れなかった
- ARKit の床メッシュ画像の変え方がわからなかった:今回の重要なことではなかったので、途中で放置した
4. アプリを通して得られたコントローラの使用感と、課題
・使用感:身体性が高くて良い!とはいえ、コントローラ感はある。
SteamVR Knuckles EV3コントローラを実際に使って、身体性の高さを確かに感じられました。コントローラ重心がほぼ手の平にあるので、コントローラを振っている感覚が少なく、手・腕を大きく動かすにはぴったりです。ただ、親指ボタン・人差し指トリガがコントローラ感を主張しているのと、ヘッドセットを付けるとボタンが見えにくいので、慣れは少なくともあります。
・残った課題:1PC複数ペア接続で、中指~小指の情報を取ること
今回は、アプリでは中指~小指が取れず、完全な能力を発揮させることはかないませんでした。開発における課題は、「1PC で複数ペア」ができないSteamVR と SteamVR Unity Plugin (v2) でしょう。ただ、今回の調査は SteamVR のみで、SteamVR Unity Plugin の下にいる OpenVRや、Windows Mixed Reality などは検証できていません。特に、OpenVR なら HMD 要らずでコントローラが使えるようにできるという情報もあり、これらの課題がクリアできる可能性があるので、今後の調査・検証が求められます。
5. 最後に
今回、SteamVR Knuckles EV3 コントローラを用いたアプリを製作しましたが、私自身これが初めてのVR・ARアプリ製作でした。常々xRには未来への可能性があると感じていましたが、アプリを製作し動かしてみて、バーチャルとリアルのただの混合でない、その先の世界を垣間見た気がします。
HADO は、TechnoSports という新世界にあります。今回のコントローラのように手を柔軟に使うことを目的としたデバイスを用いて、更なるユーザ体験の深化ができること間違いなしだと感じられました。ただ、まだデバイスが HADO の高機動性・可能性に追いついてきていません。これからの技術革新と、 HADO のより一層の進化と発展を期待しつつ、私自身もこの領域の革新に寄与していきたいと、そう思えた今回のインターン活動でした。