瞭解如何在自己的應用程式中使用 Cloud Anchors。
必要條件
請務必先瞭解基本 AR 概念,並瞭解如何設定 ARCore 工作階段,再繼續操作。
如果您是第一次使用 Cloud Anchors,請務必瞭解錨點和 Cloud Anchors 的運作方式。
啟用 ARCore API
在應用程式中使用 Cloud Anchors 前,您必須先在應用程式中啟用 ARCore API。
在工作階段設定中啟用 Cloud Anchor 功能
在應用程式中啟用 Cloud Anchors 功能後,請在應用程式的 AR 工作階段設定中啟用 Cloud Anchors 功能,以便與 ARCore API 通訊:
// Create a new ARCore session. ArSession* session = NULL; CHECK(ArSession_create(env, context, &session) == AR_SUCCESS); // Create a session config. ArConfig* config = NULL; ArConfig_create(session, &config); ArSession_getConfig(session, config); // Enable Cloud Anchor mode. ArConfig_setCloudAnchorMode(session, config, AR_CLOUD_ANCHOR_MODE_ENABLED); // Configure the session. ArSession_configure(session, config); ArConfig_destroy(config);
代管 Cloud Anchor
主辦人功能的啟動方式是呼叫 ArSession_hostCloudAnchorAsync()
。ARCore 會將視覺資料、裝置姿勢和錨點姿勢上傳至 ARCore API。接著,API 會處理這項資訊來建構 3D 地圖,最後傳回錨點的專屬 Cloud Anchor ID 給裝置。
您也可以使用 ARCore Cloud Anchor Management API 延長代管錨點的生命週期。
應用程式應按照下列步驟完成 Cloud Anchor 代管作業:
- 呼叫
ArSession_hostCloudAnchorAsync()
。 - 等待回呼,或持續檢查 Future 狀態,直到完成為止。
- 檢查結果狀態,判斷作業是否成功,或在作業失敗時解讀錯誤代碼。
- 將結果 Cloud Anchor ID 提供給其他用戶端,並使用該 ID 透過
ArSession_resolveCloudAnchorAsync()
解析 Cloud Anchor。
檢查地圖資料點的對應品質
ArFeatureMapQuality
代表 ARCore 在特定相機姿勢下,在前幾秒內看到的特徵點品質。使用較高品質功能代管的雲端錨點,通常可獲得較準確的解析結果。使用 ArSession_estimateFeatureMapQualityForHosting()
取得特定相機姿勢的特徵圖品質估計值。
值 | 說明 |
---|---|
INSUFFICIENT |
在前幾秒內從姿勢辨識出來的特徵點品質不佳。這個狀態表示 ARCore 可能會更難解析 Cloud Anchor。鼓勵使用者移動裝置,以便從不同角度查看他們想要代管的 Cloud Anchor 所需的位置。 |
SUFFICIENT |
在前幾秒內從姿勢辨識出來的特徵點品質,可能已足以讓 ARCore 成功解析雲端錨點,但解析姿勢的準確度可能會降低。鼓勵使用者移動裝置,以便從不同角度查看他們想要代管的 Cloud Anchor 所需的位置。 |
GOOD |
在前幾秒內從姿勢辨識出的特徵點品質,可能已足以讓 ARCore 成功解析雲端錨點,並達到高精確度。 |
解析先前代管的錨點
呼叫 ArSession_resolveCloudAnchorAsync()
解析代管的 Cloud Anchor。ARCore API 會定期將場景中的視覺特徵與錨點的 3D 特徵地圖進行比對,以便精確定位使用者相對於錨點的位置和方向。找到相符項目後,API 會傳回代管 Cloud Anchor 的姿勢。
您可以依序啟動多個 Cloud Anchor 的解析作業。最多可同時執行 40 個 Cloud Anchor 作業。
取消作業或移除 Cloud Anchor
呼叫 ArFuture_cancel()
可取消待處理的 Cloud Anchor 作業。呼叫 ArAnchor_detach()
可停止追蹤,並忘記已解析的 Cloud Anchor。您必須透過呼叫 ArAnchor_release()
分別釋放錨點參照。
檢查 Cloud Anchor 作業的結果狀態
使用 ArCloudAnchorState 檢查代管或解析作業的結果狀態,包括錯誤。
值 | 說明 |
---|---|
AR_CLOUD_ANCHOR_STATE_ERROR_CLOUD_ID_NOT_FOUND |
ARCore API 找不到提供的 Cloud Anchor ID,因此無法解析。 |
AR_CLOUD_ANCHOR_STATE_ERROR_HOSTING_DATASET_PROCESSING_FAILED |
主機服務失敗,因為伺服器無法成功處理指定錨點的資料集。等裝置從環境中收集到更多資料後,再試一次。 |
AR_CLOUD_ANCHOR_STATE_ERROR_HOSTING_SERVICE_UNAVAILABLE |
無法存取 ARCore API。導致這個問題的原因可能不只一個。裝置可能處於飛航模式,或未連上網際網路。傳送至伺服器的要求可能已逾時,且未收到回應。可能發生網路連線不良、DNS 無法使用、防火牆問題,或其他可能影響裝置連線至 ARCore API 的情況。 |
AR_CLOUD_ANCHOR_STATE_ERROR_INTERNAL |
此錨點的託管或解析工作已完成,但發生內部錯誤。應用程式不應嘗試從這個錯誤中復原。 |
AR_CLOUD_ANCHOR_STATE_ERROR_NOT_AUTHORIZED |
請參閱「排解 ARCore API 授權問題」。 |
AR_CLOUD_ANCHOR_STATE_ERROR_RESOLVING_SDK_VERSION_TOO_NEW |
無法解析 Cloud Anchor,因為用於解析錨點的 SDK 版本較新,且與用於代管錨點的版本不相容。 |
AR_CLOUD_ANCHOR_STATE_ERROR_RESOLVING_SDK_VERSION_TOO_OLD |
無法解析 Cloud Anchor,因為用來解析錨點的 SDK 版本較舊,且與用來代管錨點的版本不相容。 |
AR_CLOUD_ANCHOR_STATE_ERROR_RESOURCE_EXHAUSTED |
應用程式已用盡指定 Google Cloud 專案的請求配額。您應透過 Google Developers Console 為專案要求額外的 ARCore API 配額。 |
AR_CLOUD_ANCHOR_STATE_SUCCESS |
此錨點的代管或解析工作已順利完成。 |
主機和解析要求的 API 配額
ARCore API 針對要求頻寬設有以下配額:
配額類型 | 上限 | 持續時間 | 套用對象 |
---|---|---|---|
錨點數 | 無限制 | 無 | 專案 |
錨點主機要求 | 30 | 分鐘 | IP 位址和專案 |
錨定resolve要求 | 300 | 分鐘 | IP 位址和專案 |
提供優質使用者體驗的最佳做法
請告知使用者如何在應用程式中獲得良好的使用者體驗:
- 工作階段開始後,請稍候幾秒鐘,然後再嘗試代管錨點 (例如放置物件等)。這可讓追蹤功能穩定下來。
- 選擇要放置錨點的位置時,請盡量選擇視覺特徵容易區分的區域。為獲得最佳成效,請避免使用會反光的表面,或沒有視覺特徵的表面,例如空白的白牆。
請讓相機對準感興趣的中心,並在該中心周圍移動裝置,以不同角度繪製環境地圖,並在移動時維持大致相同的實際距離。這麼做有助於擷取更多視覺資料,並強化解析能力。
請務必在主辦和解析雲端錨點時,確保實體環境有足夠的光線。
廢止政策
- 使用 ARCore SDK 1.12.0 以上版本建構的應用程式,適用於Cloud Anchor API 淘汰政策。
- 使用 ARCore SDK 1.11.0 以下版本建構的應用程式,由於 SDK 使用較舊的已淘汰 ARCore API,因此無法代管或解析 Cloud Anchor。
後續步驟
- 如要進一步瞭解如何在應用程式中使用 ARCore,請參閱 Android NDK 參考資料說明文件。