この記事は「NEXTSCAPE Advent Calendar 2022」の9日目です。
はじめに
こんにちは。デバイスソリューション部 HoloLensチームの道下です。
前年のアドベントカレンダーではMRTK Figma Bridge for Unityを試す - NEXTSCAPE blogという記事を書きました。
今年は何かと話題だったARDKのLightship VPSを試したことについて記述します。
ではまず、「VPSとは」というところからいきましょう。
VPSとは
VPS(Visual Positioning Service/System)とはカメラから取得した場所の情報と、予め登録されている場所の情報を元に自身の位置を測定するシステムです。
これまでAR、MRなどで位置合わせをする場合はQRコードやユーザーが配置する手法を用いてきました。VPSを使うと例えば街中のこの場所にオブジェクトを配置したいなどが実現できます。
VPSはその場所の3Dマップの情報が無いと実現できない技術で、各社様々な方法を用いて3Dマップを作成しています。
本記事で扱うNianticの「Lightship VPS」はIngressやPokémon GOのアプリからユーザーが登録した情報を元に3Dマップ(Nianticではこの場所のことをWayspotと呼びます)を作成しています。例えばPokémon GOは「ポケストップ候補を申請する」という機能があります。ユーザーがとある場所の写真や説明文などを登録して審査→承認というフローによって作成されます。そのため、アプリのユーザーが多い地域はVPSを使用できる場所の数が多く、地方などは少ない傾向にあります。
ポケストップの申請についてはこちら で詳しく書かれていますのでご興味あれば。
Lightship VPSとは
Lightship ARDKで提供されている一部の機能で、Wayspotを使用してVPSを利用できます。
Lightship VPS の概念と用語で詳しく説明されています。
(Lightship ARDKはNianticがPokémon GOの開発などで使用している技術を他のアプリにも使用できるようにした開発キットです。)
Wayspotについて
WayspotとはLightship VPSを使用することができる場所のことです。
Wayspotの場所は公式ページのダッシュボードのVPS Coverage Mapで確認することができます。
上記のWayspotは既にパブリックに展開されているものです。また、プライベートのWayspotを作成することも可能です。
今回はLightship VPSの公式サンプルを拝見しつつLightship VPSを試してみたいと思います。
開発環境
-
Windows11
-
Unity2020.3.25f1
-
ARDK2.3.1
-
OPPO Reno A(Android9)
-
iPhone SE2(Wayspot作成用)
ARDKのセットアップ
ARDKのセットアップのページを参考にセットアップをしてください
サンプルを実行する
Lightship VPSに関するサンプルシーンは3つあります
※UnityエディタはMacでのみ動作するとのことなので、Windowsの場合はAndoroidまたはiOS実機での確認が必要です。
Windows で ARDK を使用してアプリを開発できますが、現在、ARDK のネイティブ プラグインは iOS、Android、および MacOS 用に構築されており、Windows マシンには読み込まれません。
引用:Windows での開発
1. VpsCoverageExample
このシーンは自身のGPS情報から登録されている一番近いWayspotの画像を表示するものです。
インスペクタのQuery Radiusを0~500変更することで、半径0~500mの範囲のVPSスポットの画像を表示することができます。
Unityエディタでも実行することは可能ですが、その場合はPCにGPS機能が無い場合はデフォルト(Spoof Location)の座標を自身のGPS座標として使用します。
デフォルトでは緯度:37.7953192175098経度:-122.393604296397なのでサンフランシスコ辺りのWayspotが表示されます。
(この座標はおそらくNiantic本社の座標ですね笑
2. VpsCoverageListExample
上のVpsCoverageExampleは表示するWayspotが1つでしたが、VpsCoverageListExampleでは範囲内のWayspotをリストで表示することができます。現在地から最寄りのWayspotを探すのには大変重宝すると思います。
実機で実行すると、下記のように場所の写真と名前、現在地から何mの距離にあるかをリストで表示します。
Directionsを押すとGoogleマップが起動し、スポットまでの場所を教えてくれます。
ちなみに、私の自宅で実行した時は範囲内にWayspotは無かったです(悲しい...
3. WayspotAnchors
このシーンはWayspotにアンカーを作成、保存、復元できるものです。
アンカーはその名の通り船のアンカーのようなもので、空間にオブジェクトを配置した場合、空間に対するオブジェクトの位置や方向を留めておく役割を果たします。
数日後に同じ位置にアンカーを復元することができたり、ユーザー間でオブジェクトを共有することもできます。
では実際にWayspotに行き、アプリを起動してみます。今回は新宿のとある場所のWayspotを使用しました。
Localization statusがLocalizedとなり現在の場所をWayspotとして認識が完了しました。
次にオブジェクトを配置して「Save」ボタンを押し、空間に対して配置した情報をセーブします。
アプリを再起動してもう一度Wayspotとして認識させ、ロードを押します。すると、先ほど配置したオブジェクトが同じ位置に表示されました。
並べると表示される位置がほぼ同じことが分かります。
このように配置したオブジェクトの位置を保存、復元することができます。
ただ、Wayspotを十分に認識していない場合にLoadするとオブジェクトは少し離れた位置に表示されることがありました。
位置がピッタリの時とズレた時を見比べると、ピッタリの時は左面も認識していることが分かります。逆にズレた時は右面のみの認識で配置したため、少し右にズレたのだと推測されます。
そのため、カメラでWayspotの全体を映す、周りを回るなどしてあげると精度が良くなるように思います。
プライベートのWayspot
先ほどはパブリックのWayspotを利用しましたが、次はプライベートでWayspotを作成してみます。
プライベートのWayspotは個人や開発用に使用されるもので他のユーザーからは認識されません。そのためパブリックの審査と異なり比較的短時間で作成することができます。
Wayspotを作成する
プライベートなWayspotを作成するには「Niantic Wayfarer」というアプリを使用します。
詳しい手順についてはVPSのためのスキャンを生成するをご覧ください。
今回部屋の中でも特にごちゃごちゃしている(特徴点が多そう)3Dプリンター周りをWayspotとしました。
作成する場合は下記のようにほとんど変化のない場所にする必要があるため、気を付けながら作成していきます。
一日を通して、オブジェクトにほとんど変化がない場所をスキャンする。たとえば、机の上にノートパソコンを置いてスキャンし、その後、ノートパソコンを移動してローカライズしようとすると、失敗することがあります。
申請して数時間→登録が完了するとLightshipの開発ページのMy Meshesで確認することができます。
登録したデータはダウンロードすることもできます。
中身を確認してみる
ダウンロードしてフォルダの中身を見てみます。
上からテクスチャ(.jpg)、jsonファイル(.json)、モデルデータ(.fbx)、が格納されていました。
jsonファイルにはアンカーのペイロードなどの文字列が格納されていました。
モデルデータを試しにUnityで読み込んでみると、スキャンしたモデルを確認することができます。
(左側の青い2つのファンがPCのタワー、真ん中が3Dプリンター棚、右側が窓です。
私のiPhoneはSE2でLiDERが付いていないため、単眼カメラのみで取得したモデルになります。
全体的に表面の凸凹が目立ちますが、カメラで数十秒撮っただけでここまでの3Dモデルができるってすごいですね。
Wayspotとして使用する
パブリックの時と同様にLocalizedとなり、Wayspotとして認識することができました。
(ちなみに、自宅でも別の場所で行うとFailedとなり、Wayspotとして認識しませんでした。)
Wayspotを認識後、オブジェクトを配置してセーブします。
アプリを再起動してもう一度Wayspotとして認識させ、ロードを押します。
すると、オブジェクトが同じ位置に表示されることが確認できます。
プライベートのWayspotでも保存、復元をすることができました。
SaveとLoadで並べてみると、多少の誤差はあるものの、ある程度復元されていることが分かります。
正面の比較
側面の比較
もっと精度を安定させるにはLiDER搭載のスマートフォンを使用することや公式の以下のページ辺りを参考にすると良いかと思います。
また、パブリックのWayspotを作成する際のベストプラクティス動画を見ると、一周したり、慎重に近づいて認識させていることがわかります。
まぁ作成する場合はこれくらいやらないとですよね。。
おわりに
今回はARDK Lightship VPSを試してみました。これまでAR,MRの位置合わせにおいては主にQRコードを使用してきましたが、街中などではVPSが代替される時が来るかもしれませんね。
今後もXRに関連する記事を書いていきたいと思っております!
最後まで読んでいただきありがとうございました。
ネクストスケープでは共に働く仲間を絶賛募集中です。
ご興味ある方は下記のURLからお気軽に。