MoAR を実現するのに必要な VPS (Visual Positioning System) を選定する話、その2。
その1はこちら。
ARCore / Geospatial API
Immersal 調査後、数ヶ月中断しているあいだに Google から Geospatial API なる VPS が発表され、もしやこれは Immersal より楽ちんなのでは?と思って検証を開始。
Geospatial API で AR オブジェクトを配置するには緯度経度を指定する必要があるので、PLATEAU から WHEREVER ビルのモデルと緯度経度をひっぱってきて配置。API から取得できる精度は 30〜50cm 程度と出ているけど見た感じではそれ以上にピッタリしている印象。
自分で図面からモデリングしたビルモデルを配置すると PLATEAU でやったときよりはズレが目立ったけど位置を微調整すれば問題なさそうだった。Immersal みたく自分で特徴点データつくらなくてよくて精度もよいってことでこの時点で Immersal から Geospatial API に乗り換え。
アプリインストール後の初回起動時だけ精度が悪くなる問題
Geospatial API は GARGeospatialTransform
の horizontalAccuracy
, verticalAccuracy
プロパティでトラッキング中の精度を取得できるようになってるのだけど、初回起動時はなぜかこの値が 1.0m 以下になることがほとんどない。
2回目以降の起動時には全く同じ場所で 0.2m 程度の精度が出ていることが確認できて実際の見た目ズレもそのぐらいになっている。実際の見た目は初回起動時も2回目以降と同じでそこまでズレてなくて単純にこのプロパティの値がおかしいっぽい。
これがどういう問題につながるかというと、ある一定精度 (0.5m) までトラッキング精度があがってからコンテンツを起動しようとしても初回だけ絶対に起動しないっていうことになる。対処法はコンテンツ起動の精度を 1.5m とかまで下げてしまうこと。これすると初回はいいけど2回目以降は逆に精度が悪い状態でスタートすることになるんだけど、今回のアプリの特性上2回目ってのはあまりないのでまあいっかと精度下げる方向で対処。
Lightship VPS
Geospatial API をいろいろ調査しているあいだに今度は Niantic の Lightship に VPS が搭載されるってことで調査してみたけど、VPS と言っても数メートル程度の範囲をトラッキングするのが主な使い方っぽくて今回のようなビルスケールに適用できるものではなかったのでスルー。
ARKit / Location Anchors
Lightship VPS をいろいろ調査してるあいだに今度は WWDC で ARKit 6 が発表されてこれまでアメリカ国内でしか使えなかった Location Anchors が東京でも使えるようになったということでそちらも調査…
Geospatial API と比べてもそんなに精度の違いはないように見えたけど見る位置によっては若干 Geospatial API のがよさそうな感じだったので Geospatial API のまま進めることにした。
結論
VPS | 総評 |
---|---|
Immersal | 精度は悪くないがセットアップがめんどくさい |
Geospatial API | 使えるエリア内だし精度よい |
Lightship VPS | トラッキングできる範囲が狭すぎるし使い方がよくわからん |
Location Anchors | 使えるエリア内だし精度よい |
ということで、Location Anchors より Geospatial API のが動かした感じ精度がよさそうってことで Geospatial API で開発することに決定〜(したけどその後いろいろあった話はまたこんど…
おまけ
VPS をいろいろ調べたのでいいとこ悪いとこを並べた記事を書いた。