気ままにI/O

プログラムとかものづくりのインプット・アウトプットのためのブログ。

Vuforiaでポジショントラッキングする手順とその周辺トピック

アウトプットしなきゃなーと思いつつ、全然ブログ書いてなかった!差し迫らないと書けねぇぇ!

というわけで、はじめてアドベントカレンダーに参加してみました。この記事は AR Advent Calendar 2018 10日目です。

ARアプリを作るためのライブラリにVuforiaというものがあります。マーカータイプのARライブラリとしてご存知の方が多いかと思いますが、実はマーカーレスにも対応しています。

ポジショントラッキングするだけなら非常に簡単なので、Vuforiaでポジショントラッキングを試す方法と、周辺のトピックについて書いてみたいと思います。

 

Vuforiaとは

VuforiaはPTC社が提供するARプラットフォームです。ARに関する製品をVuforiaブランドとしてまとめたようで、それぞれVuforia Engine, Vuforia Studio, Vuforia Chalkという製品/サービス名が付いています。

Vuforiaのライブラリを組み込んで独自のARアプリを作るときは、Vuforia Engineのサービスを使うことになりますが、本記事では簡潔に"Vuforia"と書いています。

VuforiaはiOS/Android/UWPのマルチプラットフォームで動作し、ネイティブまたはUnityを使って実装します。元々は画像ベースのマーカーARを作るライブラリだったのでそのイメージが強いかもしれませんが、2017年末ごろにリリースされたVuforia7ではGroundPlane(平面検出)などのマーカーレスARを実現する機能も追加されています。

また、Unity2017.2からはUnityエディタに統合されてより簡単に使えるようになっています。

 

ポジショントラッキングとは

ポジショントラッキングは、空間における対象の位置・姿勢をトラッキングする機能です。6DoFというやつですね。端末がどれくらい動いてどっちを向いたのかが分かるといったかんじです。

マーカーレスARで、3Dオブジェクトを現実に召喚→まわりこんで観察する、みたいなことをするには、ポジショントラッキングが必要になります。(というか基本的にマーカーレスARにはポジショントラッキングが必須な気がしますね。)

マーカーレスで地面を検出してオブジェクトを表示したりするのにはARKitやARCoreを使うイメージがありますが、前述の通りVuforiaにもマーカーレスARの機能が追加されており、ポジショントラッキングができます。

 

ポジショントラッキングを試す最短手順

Unity2017.2からVuforiaライブラリがUnityに統合されて、PlayerSettingsでポチッと設定するだけで使えるようになりました。画像マーカーを使う場合にはウェブ上でライセンスを取得したりマーカーを登録したりする手順が発生するのですが、ポジショントラッキングを使うだけなら非常に簡単な手順でできるので、その手順を紹介します。

 

環境 

Unityのバージョンは 2018.2.18f1 を使用しています。UnityでVuforiaを使用するには、Unityをインストールする際の追加コンポーネントを選択する画面で、Vuforia Augumented Reality Supportにチェックを入れておく必要があります。

 

f:id:k_nagamine:20181209095006p:plain

対応端末

Vuforia Fusion Supported Devices

  • 上のページの表にある「Ground Plane」対応の端末
  • もしくはページ下部にある「Ground Plane Minimum Requirements」に載っている要件を満たす端末

(GroundPlaneとあるけどポジショントラッキングも同じだと思う、たぶん)

 

手順

Unityを起動して適当なプロジェクトを作成したら、まずはPlayerSettingsを開いてVuforiaを有効にしましょう。

PlayerSettings > XR Settings > Vuforia Augumented Reality

にチェックを入れるだけでOKです。

f:id:k_nagamine:20181209095839p:plain

続いて、Vuforia用のカメラオブジェクトをシーンに作成しましょう。

CreateメニューからVuforia > AR Cameraを選択します。

f:id:k_nagamine:20181209100138p:plain

Vuforia関連のアセットをインポートするか聞かれるので、Importボタンを押してインポートしましょう。

f:id:k_nagamine:20181209100339p:plain

これでARCameraを配置することができました。

もともとあったMain Cameraは必要ないので、削除しておきます。

f:id:k_nagamine:20181209100816p:plain

ここまではVuforiaのどの機能を使用する場合でも共通して必要な手順です。

ここからが本番です。ポジショントラッキングを有効にするための作業をしていきましょう。

ARCameraオブジェクトについているVuforia Behaviourの「Open Vuforia configuration」から、Vuforiaの設定ウィンドウを開きましょう。

Device TrackerのTrack Device Pose にチェックを入れると、Tracking modeを選択するドロップダウンが出てくるので、POSITIONALを選択します。

f:id:k_nagamine:20181209103640p:plain

はい、これで準備完了です。たったこれだけで、ポジショントラッキングを使用することができます。簡単ですね!!

ただ、これだけだとちゃんとトラッキングできているのか分からないので、確認用に豆腐(Cube)でも配置してみましょう。

アプリを起動したときの端末の位置が原点(0, 0, 0)になるため、Cubeのポジションを(X,Y, Z) = (0, 0, 2)としてあげると、アプリ起動地点から2メートル先に1辺1メートルの巨大豆腐が出現することになります。

f:id:k_nagamine:20181209103702p:plain

さて、ではビルドして試してみたいと思います。今回はiOSでビルドしてみます。

ここで1点注意が必要なのが、iOSでデバイスのカメラを使用する場合には、PlayerSettingsのOtherSettingsにあるCamera Usage Descriptionの項目にカメラを使用する目的を入力する必要があります。このテキストは初回起動時にユーザーの許可を求めるアラートの文言として使用されます。

どこかのバージョンから自動的にデフォルトのテキストを設定してくれるようになったのですが、たしか以前は自分で設定しないといけなかったような記憶があります。

これを入力しないと起動時にそのままクラッシュして原因不明で泣くことになるので、古いバージョンで試している場合は確認しておきましょう。

f:id:k_nagamine:20181209104141p:plain

ビルドして起動するとこのようになります。

豆腐が現実空間に出現し、デバイスを持って動きまわっても豆腐は同じ場所に留まり続けていますね。ポジショントラッキングが上手くいっていることが確認できました!

f:id:k_nagamine:20181210182628g:plain


 

手順のまとめ

手順をまとめると以下のようになります。

  1. PlayerSettings > XR Settings > Vuforia Augumented Realityを有効にする
  2. ARCameraを配置する(Main Cameraは削除)
  3. Vuforia Configuration > Device Tracker > Track Device Poseを有効に
  4. Vuforia Configuration > Device Tracker > Tracking modeをPOSITIONALに

GroundPlaneとMidAir

今回は確認のためのCubeは単純にシーンに配置しただけでしたが、マーカーレスでオブジェクトを空間に固定して配置するためのオブジェクトして、Ground Plane StageとMid Air Stageというものが用意されています。

Ground Plane Stageは平面に対して、Mid Air Stageは空中に対してオブジェクトを固定します。(使用方法は公式のドキュメントに書いているのでそちらを今回は割愛します。)

単純にシーンにオブジェクトを配置することとの違いはまだしっかり理解できていないのですが、どちらのオブジェクトにもAnchorBehaviourというコンポーネントが付いています。

GroundPlaneの解説 でAnchorについて言及されており、6DoFで追跡されるポイントだというようなことが書いてあるので、カメラ画像やセンサー情報を用いて現実空間からズレが発生しづらいように何かしらの処理が行われるのかもしれません。

また、 VuforiaFusionの解説のRelocalizationの項目にもanchorが出てきているので、このあたりにも関係してきそうです。

 

マーカーとの併用 、ExtendedTracking

通常のマーカータイプのARではマーカーがカメラから見えなくなるとトラッキングできませんが、Vuforiaにはマーカー位置を推測してトラッキングを継続するExtendedTrackingという機能があります。

以前から使えていた機能ではあるのですが、あまり精度は良くない印象でした。しかし、現行バージョンではExtendTrackingにポジショントラッキングの情報が利用されるようになり、使い勝手が良くなりました。

マーカーをAR空間の入り口として設定し、そこから空間全体を使ったコンテンツに展開する、というような使い方ができます。

また、複数人が同一空間で体験するようなマルチプレイARの場合は、各ユーザーに共通した座標系を用意する必要があるので、現実空間に固定したマーカーを認識して座標系の原点とすることで、共通したAR空間を構築することができます。

この方法で、以下のようなマルチプレイARを実現することができました。

序盤で映っているロゴが共通座標系の原点になるマーカーです。

マーカー認識後は共通座標系での位置・姿勢を各ユーザー同士で同期し続けています。

ちなみにツイートにもありますが、このコンテンツはホストPCとも情報を共有しており、床に映っている犬の影はプロジェクターで現実環境に投影しています。

共通座標系で正しく位置・姿勢を正確に同期できていると、端末でレンダリングしている犬とプロジェクターで投影している影の位置がぴったり合います。

この動画はかなり良い状態で撮れましたが、実際は環境や状況によってズレてくるので、コンテンツのフローとしてマーカー認識を挟むことで位置を補正しています。

 

Vuforia FusionとARKit/ARCore

GroundPlaneの項目でさらっとVuforia Fusionという言葉が出てきました。

これは特定の機能というわけではなくて、Vuforiaの各機能のベースとなる仕組みの話です。

カメラ・センサーの能力やARKit/ARCoreといったフレームワークの対応状況など、デバイスごとに異なる様々な要素をVuforiaEngineが検知して組み合わせることで、そのデバイスが発揮しうる最適なAR体験を実現してくれるよ、みたいなことだと理解しています。

ポジショントラッキングに関して言えば、ARKit対応デバイスであれば内部的にARKitを使うし、非対応であれば独自のトラッキング処理を使う、ということになります。ARCoreについても同様です。

ただし、VuforiaFusion自体も対応端末が決まっているため、すべての端末で動作するというわけではないようです。(対応端末の一覧

理想としては、Vuforiaを使えばARKit/ARCoreを意識しなくても内部的にイイかんじに使ってくれて最適なAR体験ができます、マルチプラットフォームで!というところを目指しているのかもしれません。

今のところは、光源の推定や環境の映り込みなどはVuforiaではできないので、こういった機能が必要な場合はそれぞれのフレームワークを使って実装する必要がありそうです。

 

ライセンスキーについて

前述のポジショントラッキングの手順の説明で、おや?と思った方がいるかもしれませんが、通常、Vuforiaを使用するためはライセンスキーを取得してVuforiaConfigurationに設定する必要があります。

試用や開発中に利用するDevelopment License Keyは無料で取得でき、リリースする場合は形態や企業規模に応じてClassic, Cloud, Proの有料ライセンスを購入します。

ところが、今回の記事を書くにあたりドキュメントをいろいろ眺めていたところ、Pricing and Licensing Options  の「Can I create an app at no charge?」の項目に、

You can also deploy Unity apps that take advantage of our Ground Plane, Device Tracker and Stereo Rendering features for free without a License Key.

と載っているのを見つけました。 

なんと、Unityでマーカーレスの機能を使う場合はライセンスキーはいらないとのこと。

ホンマかいなと思ってライセンスキーを入力せずに試してみたのが前述の手順なのですが、特に問題なく動かすことができました。

Unityだけで完結するので、試す分には非常にお手軽ですね。

その下に

Once you intend to commercialize your app, you should review the available licensing options. 

と書いてあるので、商用としてアプリをリリースする場合はやはりライセンスを購入する必要がありそうです。

ライセンスに関してはアプリの形態や使用する機能によっても異なるので、リリースする場合には一度公式に問い合わせるのが良いかなと思います。

 

最後に

ARKit/ARCoreの名前をよく聞く昨今ですが、何かARのアイデアを思いついたとき、 パッとデモを作ってみる分にはVuforiaもお手軽なのでおすすめです。

Nianticneonがやりたいけど行けなかったから作ってみたデモもVuforiaでマーカーとポジショントラッキングを組み合わせています。

 

他にも作ってみたデモなどをモーメントにまとめているので、よかったら見てみてください。(AR関係ないのもあるけど)

twitter.com