2014年12月17日

ARマーカーの位置・姿勢計測とコンテンツの制御

 ARではマーカーの位置や姿勢に応じてその上に表示されるCGの見え方も変化します。この技術は、画像処理を用いたマーカーの位置や姿勢のリアルタイム推定によって実現されています。
 metaioなどのツールでは通常、これらの技術を意識することなく簡便にマーカーの上へのCGの重畳を行えます。しかしリファレンスなどをよく見ると、マーカーの位置・姿勢を数値として取得する関数が用意されていて、下の図のように「xyz座標t」と「姿勢行列R」という形式で取得できます。

1.png

 今回はマーカーの位置・姿勢を利用することで作れるちょっと動的なコンテンツのアイデアをまとめておきます。これからARを勉強する人やCGを表示するだけでは物足りない人の参考になれば幸いです。

1.カメラとマーカーの距離
 まず一番シンプルな例として、カメラとマーカーの距離の利用について紹介します。カメラを基準としたマーカーの位置の取得はAR開発用のSDKを使えばできるので、あとは以下の式で示す三平方の定理を用いて距離は算出するだけです。
   2_2.png
2_1.png

 この距離情報を用いることによって、以下の動画のようにカメラが対象物に近づいたタイミングで情報を表示させたり、離れたら非表示にしたりといったコンテンツが実現できるようになります。




2.マーカー間の距離
 続いて、複数のマーカーを使用してたときのマーカー間の距離の活用方法について紹介します。SDKで取得できる各マーカーの位置と以下の式を用いれば両者の距離は算出できます。
   3_2.png
3_1.png

 活用例としては、マーカーどうしが近づいたらコンテンツが動き出すARカードゲームが考えられます。このコンテンツでは事前に基準となる距離(threshold)を決めておき、リアルタイムに計算したマーカー間の距離(distance)との関係が threshold > distance となったらアニメーションが開始されるようになっています。また反対に、一定距離以上は離れた際にはコンテンツをリセットすることも可能になっています。



3.マーカー間の位置関係
 片方のマーカー(marker@)を基準としたときの、もう一方のマーカー(markerA)の位置が分かると更にリッチなコンテンツを実現することができます。ところが、SDKではカメラを原点としたマーカーの位置・姿勢しか取得できないため、marker@の位置・姿勢とmarkerAの位置を用いて以下の座標変換を行う必要があります。
   4_2.png
4_1.png
 
 この結果を用いた例として、CGキャラクターのコントローラーを試作しました。このコンテンツでは上記の式で算出したmarkerAの座標(x,y,z)にキャラクターを誘導しています。これの他にも複数のマーカーが決められた配置に並べられたときに何かが発動するARパズルなども作れそうです。


 以上のようにマーカーの位置や姿勢を使うと、ただCGを表示させるだけのコンテンツよりも少しだけインタラクティブになります。色々と作ってみましたが結構面白かったです。


本記事はAR Advent Calendarに登録しました。




posted by yoshinaga at 14:18 | Comment(0) | 技術
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: