使用云锚点(Cloud Anchors)分享AR体验

使用云锚点(Cloud Anchors)分享AR体验

ARCore中云锚点的内容介绍。

原文地址:https://developers.google.com/ar/develop/java/cloud-anchors/overview-android#how-hosted

使用云锚点创建Android和iOS用户可以共享的多人或协作式AR体验。

云锚点是什么?

通过使用云锚点,您的应用程序允许用户将虚拟对象添加到AR场景中。然后,多个用户可以从共享的物理空间中的不同位置同时查看这些对象并与之交互。

云锚点的行为和功能与锚点类似,但不同之处在于它们托管在ARCore云锚点服务上。该托管使用户可以共享体验。

云锚如何工作?

为了实现这些共享体验,ARCore连接到ARCore云锚点服务,以托管解析锚点。这需要有效的网络连接。

托管和解析涉及以下步骤:

  1. 用户在自身所处环境中创建本地锚点。
  2. 托管期间,ARCore将锚点的数据上传到ARCore云锚点服务,该服务会返回该锚点的唯一ID。
  3. 该应用程序将唯一ID分发给其他用户。
  4. 解析期间,具有唯一ID的用户可以使用ARCore云锚点服务重新创建相同的锚点。

cloud-anchor-exchange

要使用云锚点创建良好的用户体验,重要的是要详细了解托管过程,以便您可以调整应用程序的设计以帮助用户成功使用。

建立并托管锚点

为了建立和托管锚点,ARCore使用锚点(兴趣中心[the center of interest])周围空间的3D特征图(feature map)。要获取此特征图,设备的后置摄像头必须在主机呼叫(hostCloudAnchor()))前30秒内从不同的视角和位置映射兴趣中心及其周围的环境。

从ARCore SDK 1.12开始,此主机调用使ARCore将来自设备相机的最近30秒内的选定可视数据上传到ARCore 云锚点服务,该服务处理可视数据以构建3D特征图并返回云锚点 ID。

正确创建3D特征图对于获得出色的用户体验至关重要。否则,映射质量可能会受到限制,从而使解析更加困难。为了提高特征图质量,我们建议用户界面(UI)明确指示用户围绕锚点从不同的视角和位置移动设备,从而在兴趣中心周围尽可能多地绘制特征图。

托管云锚点:

  1. 在会话开始之前,请等待几秒钟,以使跟踪时间稳定下来,然后再尝试托管锚点。
  2. 在选择用于放置锚点的位置时,请尝试查找具有易于区分的视觉特征的区域。例如,具有视觉特征的角落。
  3. 将后置设备相机指向感兴趣的中心,即您要放置锚点的位置周围的区域。
  4. 保持相机瞄准兴趣中心的位置,并大致保持设备与兴趣中心之间的物理距离。同时,移动设备以从不同的视角和位置映射环境信息最多30秒。在空间中四处走动,同时使设备摄像机对准兴趣中心的位置,这将使您能够从各个角度捕获兴趣区域的视觉特征,从而使解析更加牢固。
  5. 调用hostCloudAnchor())函数发起托管请求。
  6. ARCore通过ARCore Cloud Anchor API上传视觉数据、设备姿势和锚点姿势。
  7. ARCore 云锚点服务创建空间的3D特征图,并为设备的锚返回唯一的云锚点 ID。
  8. 使用Anchor.CloudAnchorState检查托管锚点(包括错误处理消息)的状态。

ARCore 云锚点服务会创建空间的3D特征图,并将唯一的云锚点 ID返回到设备。

锚点应该被托管着。

Anchor.CloudAnchorState 使您可以检查托管锚点的状态(包括错误处理消息)。

解析之前托管的锚点

当同一环境中的另一个用户将其设备摄像头指向托管云锚点的区域时,解析请求(resolveCloudAnchor()))使ARCore 云锚点服务定期将场景中的视觉特征与创建的3D特征图进行比较。 ARCore用于确定用户相对于云锚点的位置和方向。这就是为什么在托管请求之前的30秒内尽可能在兴趣中心周围映射环境很重要。

您可以依次启动多个云锚点的解析。最多可以同时解析20个云锚点。

使用与托管设备相同或不同的设备,请按照以下步骤解析托管锚点。

  1. 在会话开始之前,请等待几秒钟,以使跟踪时间稳定下来,然后再尝试解析锚点。

  2. 在与托管锚相同的环境中,扫描原始的兴趣区域,确保:

    • 设备摄像头对地图区域的视图清晰
    • 设备摄像头到托管锚点的距离与最初托管锚点的设备相近。
  3. 调用resolveCloudAnchor())并使用 Anchor.CloudAnchorState定期检查解决请求的状态

    如果您想取消请求,请调用detach())。

  4. ARCore不断轮询ARCore Cloud Anchor API,将可视数据发送到ARCore 云锚点服务。

  5. ARCore 云锚点服务将场景中的视觉特征与创建的3D特征图进行比较。找到匹配项后,服务器将返回云锚点的姿势

    云锚点应该可以解析了。测试一下吧。

Anchor.CloudAnchorState使您可以检查托管锚的状态(包括错误处理消息)。当您使用完云锚点后,请调用detach())。

云锚点隐私要求

为了符合我们更新的使用ARCore SDK 1.12或更高版本的隐私要求,您必须显着披露云锚点的使用。有关详细信息,请参阅用户隐私要求

数据存储和访问限制

云锚点具有以下数据存储和访问限制:

  • 云锚点可以在托管后的24小时之内被解析
  • 托管锚点时上传到云的可视数据将在24小时之内被丢弃。
  • 根据3D特征图在服务器上解析锚点。
  • 之前上传的视觉数据永远不会发送到用户的设备。

良好用户体验的最佳做法

以下最佳做法可帮助创建良好的云锚点用户体验。

  • 请记住,发起主机呼叫会使用前30秒的映射来创建3D特征图。确保您应用的用户界面已将此考虑在内。
  • 考虑在用户围绕兴趣中心移动时创建对用户来说有趣或可能有用的动作或特征,并且这也可以完成创建正确的3D特征图的任务。
  • 避免在某些类型的表面上托管或解析云锚点。
    • 为了获得最佳效果,用户应避免使用反射性表面或无视觉特征的表面,例如空白、光滑的白色墙壁。
  • 确保房间内的照明充足。

开始使用

要开始使用云锚点,请参阅云锚点快速入门

如果您不熟悉锚点,请参阅使用锚点以获取介绍。