瞭解如何在自己的應用程式中使用 Cloud Anchors。
必要條件
請務必先瞭解基本 AR 概念,以及如何設定 ARCore 工作階段,再繼續操作。
如果您是 Cloud Anchors 新手:
- 請務必瞭解錨點和 Cloud Anchors 的運作方式。
- 請參閱 Cloud Anchors 快速入門,瞭解系統需求、設定和安裝說明。
啟用 ARCore API
在應用程式中使用 Cloud Anchors 前,您必須先在應用程式中啟用 ARCore API。
在工作階段設定中啟用 Cloud Anchor 功能
在應用程式中啟用 Cloud Anchors 功能後,請在應用程式的 AR 工作階段設定中啟用 Cloud Anchors 功能,讓應用程式能夠與 ARCore API 通訊:
Java
Config config = new Config(session); config.setCloudAnchorMode(Config.CloudAnchorMode.ENABLED); session.configure(config);
Kotlin
val config = Config(session) config.cloudAnchorMode = Config.CloudAnchorMode.ENABLED session.configure(config)
託管 Cloud Anchor
開始時,只要呼叫 hostCloudAnchorAsync()
即可。ARCore 會將視覺資料、裝置姿勢和錨定姿勢上傳至 ARCore API。接著,API 會處理這項資訊來建構 3D 地圖,最後傳回錨點的專屬 Cloud Anchor ID 給裝置。
您也可以使用 ARCore Cloud Anchor Management API 延長代管錨點的生命週期。
應用程式應按照下列步驟完成 Cloud Anchor 代管作業:
- 呼叫
hostCloudAnchorAsync()
。 - 等待回呼,或持續檢查 Future 狀態,直到完成為止。
- 檢查結果狀態,判斷作業是否成功,或在作業失敗時解讀錯誤代碼。
- 與其他用戶端分享結果 Cloud Anchor ID,並使用
resolveCloudAnchorAsync()
解析 Cloud Anchor。
檢查地圖資料點的對應品質
Session.FeatureMapQuality
代表 ARCore 在特定相機姿勢中,前幾秒內看到的特徵點品質。使用較高品質功能代管的雲端錨點,通常能更準確地解析。使用 Session.estimateFeatureMapQualityForHosting()
估算特定相機姿勢的特徵圖品質。
值 | 說明 |
---|---|
INSUFFICIENT |
在前幾秒內從姿勢辨識出來的特徵點品質不佳。這個狀態表示 ARCore 在解析 Cloud Anchor 可能較困難。鼓勵使用者移動裝置,以便從不同角度查看他們想要代管的 Cloud Anchor 所需的位置。 |
SUFFICIENT |
儘管在前幾秒根據姿勢辨識出特徵點的品質,ARCore 應該就能順利解析 Cloud Anchor,但這可能會降低解決姿勢的準確度。鼓勵使用者移動裝置,以便從不同角度查看他們想要代管的 Cloud Anchor 所需的位置。 |
GOOD |
在前幾秒內從姿勢辨識出的特徵點品質,可能已足以讓 ARCore 成功解析雲端錨點,並達到高精確度。 |
解析先前代管的錨點
呼叫 resolveCloudAnchorAsync()
解析代管的 Cloud Anchor。ARCore API 會定期將場景中的視覺特徵與錨點的 3D 特徵地圖進行比對,以便精確定位使用者相對於錨點的位置和方向。如果找到相符項目,API 會傳回代管 Cloud Anchor 的姿勢。
您可以依序啟動多個 Cloud Anchor 的解析作業。最多可同時執行 40 個 Cloud Anchor 作業。
取消作業或移除 Cloud Anchor
呼叫 cancel()
可取消待處理的 Cloud Anchor 作業。呼叫 detach()
即可從應用程式中移除已解析的 Cloud Anchor。
檢查 Cloud Anchor 作業的結果狀態
使用 Anchor.CloudAnchorState 檢查主機或解析作業的結果狀態,包括錯誤。
值 | 說明 |
---|---|
ERROR_CLOUD_ID_NOT_FOUND |
ARCore API 找不到提供的 Cloud Anchor ID,因此無法解析。 |
ERROR_HOSTING_DATASET_PROCESSING_FAILED |
主機服務失敗,因為伺服器無法成功處理指定錨點的資料集。等裝置從環境中收集到更多資料後,再試一次。 |
ERROR_HOSTING_SERVICE_UNAVAILABLE |
無法存取 ARCore API。導致這個問題的原因可能不只一個。裝置可能處於飛航模式,或未連上網際網路。傳送至伺服器的要求可能已逾時,且沒有回應。可能有網路連線不良、DNS 無法使用、防火牆問題,或其他可能影響裝置連線至 ARCore API 的因素。 |
ERROR_INTERNAL |
此錨點的託管或解析工作已完成,但發生內部錯誤。應用程式不應嘗試從此錯誤復原。 |
ERROR_NOT_AUTHORIZED |
應用程式提供的授權無效。請參閱「排解 ARCore API 授權問題」。 |
ERROR_RESOLVING_SDK_VERSION_TOO_NEW |
無法解析 Cloud Anchor,因為用來解析錨點的 SDK 版本較新,且與用來代管錨點的版本不相容。 |
ERROR_RESOLVING_SDK_VERSION_TOO_OLD |
無法解析 Cloud Anchor,因為用來解析錨點的 SDK 版本較舊,且與用來代管錨點的版本不相容。 |
ERROR_RESOURCE_EXHAUSTED |
應用程式已用盡指定 Google Cloud 專案的要求配額。請透過 Google Developers Console 為專案申請更多 ARCore API 配額。 |
SUCCESS |
此錨點的代管或解析工作已順利完成。 |
主機和解析要求的 API 配額
ARCore API 針對要求頻寬設有以下配額:
配額類型 | 上限 | 持續時間 | 套用對象 |
---|---|---|---|
錨點數 | 無限制 | 不適用 | 專案 |
錨定主機要求 | 30 | 分鐘 | IP 位址和專案 |
錨定解析要求 | 300 | 分鐘 | IP 位址和專案 |
提供良好使用者體驗的最佳做法
請告知使用者如何在應用程式中獲得良好的使用者體驗:
- 工作階段開始後,請稍候幾秒鐘,然後再嘗試代管錨點 (例如放置物件等)。如此一來,追蹤就會一段時間趨於穩定。
- 選擇要放置錨點的位置時,請盡量選擇視覺特徵容易區分的區域。為獲得最佳成效,請避免使用會反光的表面,或沒有視覺特徵的表面,例如空白的白牆。
請讓相機對準感興趣的中心,並在該中心周圍移動裝置,以不同角度繪製環境地圖,並在移動時維持大致相同的實際距離。這麼做有助於擷取更多視覺資料,並強化解析能力。
確保實際環境中的照明充足,同時託管及解決 Cloud Anchors。
廢止政策
- 使用 ARCore SDK 1.12.0 以上版本建構的應用程式,適用於Cloud Anchor API 淘汰政策。
- 使用 ARCore SDK 1.11.0 以下版本建構的應用程式無法代管或解析 Cloud Anchors,因為 SDK 使用了已淘汰的舊版 ARCore API。
後續步驟
- 使用 ARCore Cloud Anchors with persistent Cloud Anchors codelab 建立 Cloud Anchors 應用程式。
- 參考 Cloud Anchors 快速入門導覽課程中的兩個範例應用程式,逐步瞭解託管和解決 Cloud Anchors 的方式。
- 使用 Cloud Anchors Management API 管理 ARCore 應用程式以外的 Cloud Anchor。
- 如要進一步瞭解如何在應用程式中使用 ARCore,請參閱 Android 參考說明文件。