分享方式:


Azure Spatial Anchors 中的錨點關聯性和指向作業

透過運用錨點關聯性,可在空間中建立連接的錨點,再提出如下問題:

  • 附近有無錨點?
  • 錨點距離多遠?

範例

可在如下情況中使用連接的錨點:

  • 工作人員需完成的工作內容涉及到前往工業廠房中的各種位置。 工廠在每個位置都有其空間錨點。 HoloLens 或行動裝置應用程式可協助引導工作人員從某個位置移動到下一個位置。 應用程式會先要求附近的空間錨點,然後將工作人員引導至下個位置。 應用程式會將下個位置的大致方向和距離以視覺化方式呈現。

  • 某家博物館建立了公開展覽的空間錨點。 這些錨點共同形成一小時的導覽,可供探索博物館的基本公開展覽。 參觀公開展覽時,訪客可以在自己的行動裝置上開啟博物館的混合實境應用程式。 接著可將手機相機指向周圍空間,查看導覽內上其他公開展覽的大致方向和距離。 當使用者逐步引導公開顯示器時,應用程式會更新大致方向和距離,以協助指引使用者。

設定指向

若應用程式使用視線方向和錨點之間的距離,用以提供引導功能,即是運用了指向技術。 指向技術不同於轉向建議導航。 使用轉向建議導航時,會引導使用者避開牆壁、穿越門口和在樓層之間移動。 使用指向功能時,會為使用者提示前往目的地的大致方向。 但是對空間的推斷或知識,也有助於使用者找到穿越建築物前往目的地的方向。

若要建立指向的體驗,請先準備該體驗的空間,並開發應用程式讓使用者與之互動。 概念性步驟如下:

  1. 規劃空間:決定空間內的哪些位置將屬於指向體驗的一部分。 在我們的案例中,可能是由工廠主管或博物館導覽安排人員來決定指向體驗所包含的位置。

  2. 連接錨點:造訪所選的位置以建立空間錨點。 可在使用者應用程式的管理員模式下進行,或完全在不同的應用程式中處理。 需連接各個錨點,或讓每個錨點彼此建立關聯。 本服務會維護這些關聯性。

  3. 啟動使用者體驗:使用者執行應用程式來定位錨點,錨點可位在任何所選的位置。 應透過整體設計來決定使用者可展開體驗的位置。

  4. 尋找附近的錨點:使用者找到錨點之後,應用程式可要求附近的錨點。 此程序會傳回裝置與這些錨點之間的型態。

  5. 引導使用者:應用程式對這些錨點個別使用該型態,為使用者提供大致的方向和距離。 例如,應用程式中的相機饋送可能會顯示圖示和箭號來代表每個可能的目的地,如下圖所示。

  6. 改善導航指示:當使用者行走時,應用程式可以定期計算裝置與目的地錨點之間的新型態。 應用程式會持續改善協助使用者抵達目的地的導航提示。

    An example of how an app can show way-finding guidance

連接錨點

若要建立指向體驗,必須先將錨點放在所選的位置。 本節會假設應用程式的管理員已完成這項工作。

在單一工作階段中連接錨點

如何連接錨點:

  1. 步行前往第一個位置,並使用 CloudSpatialAnchorSession 來建立錨點 A。
  2. 步行前往第二個位置。 底層的 MR/AR 平台會追蹤移動。
  3. 使用相同的 CloudSpatialAnchorSession 來建立錨點 B。 錨點 A 和 B 現在為連接狀態。 Spatial Anchors 服務會維持此關聯性。
  4. 繼續其餘錨點的程序。

在數個工作階段中連接錨點

您可以透過數個工作階段連接空間錨點。 使用這個方法,您可以一次建立和連接一些錨點,然後再建立並連接更多錨點。

如何透過數個工作階段連接錨點:

  1. 應用程式會在一個 CloudSpatialAnchorSession 中建立一些錨點 (錨點 A 和 B)。
  2. 應用程式會在不同時間點使用新的 CloudSpatialAnchorSession 尋找其中一個錨點 (例如錨點 A)。
  3. 步行前往新位置。 底層的混合實境或擴增實境平台會追蹤移動。
  4. 使用相同的 CloudSpatialAnchorSession 來建立錨點 C。 錨點 A、B 和 C 現在為連接狀態。 Spatial Anchors 服務會維持此關聯性。

您可以繼續此程序,隨時間逐步取得更多錨點和更多工作階段。

確認錨點的連接

應用程式可以發出對附近錨點的查詢,以便確認兩個錨點是否已連接,在 CloudSpatialAnchorWatcher 上設定 NearAnchorCriteria 即可。 當查詢的結果包含目標錨點時,則確認錨點已連接。 如果錨點未連接,應用程式可嘗試再次連接錨點。

以下為錨點可能無法連接的一些原因:

  • 在連接錨點的過程中,底層的混合實境或擴增實境的平台失去追蹤。
  • 由於與 Spatial Anchors 服務通訊期間發生網路錯誤,因此無法讓錨點保持連接。

尋找範例程式碼

如需如何連接錨點和執行鄰近查詢的範例程式碼,請參閱 Spatial Anchors 範例應用程式