【雑記】【メモ】ARCore(google)のCloudAnchorについて調べてみた
はじめに
最近ARについて、軽く調べることがあり Googleが提供する CloudAnchorというARの位置情報を他端末と同期する機能についてサンプルコードをつくって動かしたときのメモです。 基本、公式ページに記載してある内容であり、実装コードなども特に載せていないので開発の参考にしようとされている方は期待しないでいただけると幸いです。
CloudAnchorとは
Googleが提供するARライブラリ(ARCore)で第三者とARの空間情報を共有するための仕組み。 ARの空間情報をGoogleのARCoreサーバへ送ることでGoogleが空間情報のIDを返してくれる。 デベロッパはそのIDをサーバ側で補完しておき、他端末と同期する。
主な流れ
(アップロード側)
- ARCore(クライアント)が予め空間情報(カメラのテクスチャや方角、特徴点など)を監視している
- なにかのトリガーでARアンカーのホスト命令を投げると、その30秒前からキャプチャしていた空間座標をARCoreのサーバへアップロードする
- アップロードが正しくできた場合は、
cloudAnchorId
という識別IDをARCoreのサーバが返してくれる - サービス側は、この
cloudAnchorId
を自分たちのサーバで管理する
(復元側)
- アップロード時と同様にARCoreが予め空間情報(カメラのテクスチャや方角、特徴点など)を監視している
- 復元時は、復元要求前の30秒前の空間情報と cloudAnchorId
をARCoreサーバーへ問い合わせ、一致するアンカー情報があればそのアンカーの情報をクライアントに返す
- クライアントはアンカー情報をもとにAR空間にアンカーを復元する
備考
- アップロードされたアンカーは24時間しか保存されない
- そのうち永続的に持てる仕組みを用意したいと書いてある。興味があればエンジニア募集中らしい。
- ARCoreへアップロードしたビジュアルデータ自体は開発側から確認することはできない
- なるべく広範囲からビジュアルデータを取得する
- 直前30秒は、送信したいアンカーを中心に広範囲(いろんな角度)から画像をキャプチャすると精度が上がるらしい
- 白い壁や暗い部屋は避ける
検証してみた感想
これと同じような仕組みで、ARKit(iOS)のWorldMapというものがあるが、WorldMapよりも大分仕組みがわかりやすく精度もいい気がした。 (ただし、クラウドと通信している分タイムラグがある気がする)
iOS、Unity、UnrealにSDK提供しているので検証はしやすい。
気になること
- どのくらいの空間まで同期できるのか?
- サンプルコードを見るとRoomという概念をつかっているが、どの程度の広さで区切ればいいのか
- リアルタイムで動くものの同期方法