simplestarの技術ブログ

目的を書いて、思想と試行、結果と考察、そして具体的な手段を記録します。

VRHMDのポジショントラッキングについて

VRHMDといっても、今の時代
HTC Vive ですか?
Oculus Rift ですか?
PSVR ですか?
と大きく三つのVRHMDを想像できる時代となりました。
(え、そんなの知らない?そんな方は、この記事は読めないかも。)

今回は Oculus Rift や PSVR で使われている HMD のトラッキングシステムについて
実際に作れるところまで原理を詳しく解説していきたいと思います。

HMD をIR成分も撮像できるカメラ越しに見てみましょう。
すると、次のように小さなLEDが何個も光っていることが確認できます。

f:id:simplestar_tech:20160828175047j:plain
url:http://virtuix1.rssing.com/chan-14788923/all_p2.html

上の写真は Oculus DK2 の頃の様子
現在リリースされている最新の製品版 Rift では次のような配置になっています。

f:id:simplestar_tech:20160828175434j:plain
f:id:simplestar_tech:20160828175442j:plain
url:https://tinhte.vn/threads/ben-trong-oculus-rift-cv1-de-sua-chua-day-gon-gang-cham-diem-7-10.2566840/

これらの LED をカメラで追跡することで、HMDの位置姿勢を求めています。
ん?どのカメラ?

それは、以下のようなカメラです。

f:id:simplestar_tech:20160828175957j:plain
url:http://www.pcworld.com/article/2138461/eyes-on-oculus-rifts-position-tracking-dev-kit-2-vr-headset-blows-the-first-dev-kit-away.html

こちらは DK2 時代のものですね。

f:id:simplestar_tech:20160828180053j:plain
url:http://www.snapvrs.org/how-to-set-up-the-oculus-rift/

そしてこちらが Rift 製品版のカメラ

これらカメラなしでポジショントラッキングを実現しようとしても、できないことに気付くでしょう。
そう、先ほども述べたように、このカメラで HMD の複数の LED を追跡することで HMD の位置姿勢を求めています。

カメラで HMD の複数の LED を追跡することってどういうこと?
とイメージできない人が多いと思いますので、実際にそれを行っている様子が載ったページを以下に紹介します。

www.roadtovr.com

ここまでの話をまとめると、HMD の LED をカメラで追跡しているということです。
あとはこの追跡情報を使って HMD の位置姿勢を求める計算の部分に焦点を当てて、説明していきます。

f:id:simplestar_tech:20160828181651g:plain
url:http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/MARBLE/high/pia/solving.htm

イメージ平面に投影された影から元の三次元空間のオブジェクトの位置姿勢を求める計算をすることになります。
ここに良い例が示されていますが、3点の対応だけでは、姿勢が一意に定まらないことがイメージできます。

数学についての知識を得るときは、図形的解釈を伴うように、つねに右脳を働かせて問題をイメージすることが大切です。(たぶん)

そして、問題を具体的に解くためには定式化しなければなりません。
ここで現在のオブジェクトの位置姿勢から考えられるイメージ平面での投影点と、実際に観測されたイメージ平面での投影点とのイメージ平面での距離(イメージスペースエラー)を小さくするように、位置姿勢を修正していくことで問題を解きたいと思います。

上の言葉で示したのが、右脳を働かせて得たイメージです。
そして、そのイメージスペースエラーは式に落とし込めます。

最終的に E = Σe^2 の誤差二乗和で評価関数を定義して
これの多次元でのお椀の底を目指して最適化問題を解きます。

この式、よく見ると求めるパラメータに対して非線形となっているため
非線形最小化問題を解くアプローチを取ることになります。

非線形最適化問題を解く方法として、さまざまなものがあります。
勾配降下法、ニュートン法ガウス・ニュートン法、レーベンバーグ・マーカート法など
微分できない場合についても含めると、もっとあるのですが、私の勉強不足のため今はこれくらいしかうまく説明できません。

さて、ポジショントラッキングは最初にある程度正しい姿勢を求めることができたなら、その後はワープでもしない限り前回の計算結果に似た姿勢となることが期待できます。
そこで、ある程度解に近いことを条件として与えられますので、ガウス・ニュートン法を選択すると効率的に答えに安定してたどり着けると考えられます。
そのガウス・ニュートン法を用いて得られるのは、姿勢情報の更新量です。
得られた更新量を初期姿勢に適用して、解となる HMD の位置姿勢を得るのです。

はい、ここまでの話をすべてまとめると

1.LEDを4点以上カメラで追跡する
2.イメージスペースエラーの式を立てる
3.最適化数学を解く

どんな問題も、最後は誤差関数の最小化に帰着されるそうです。
数学は基礎ですが、訓練が必要なので、いきなり超えられる壁ではありません。
なので、先にわかっている人からイメージを聞き出して、まずは同じイメージを持つことが大切です。

わかっている人が周りにいない場合は、理系の大学に行きましょう。
大学の准教授や教授はこうしたイメージをもっています。
お金を払って聞きましょう。

さて、書きたいことを書いたので、ここで終わりにします。