为什么在 ARKit 将记录的世界地图与当前环境协调后锚点的位置没有改变?

Why anchors' position doesn't change after ARKit reconciling the recorded world map with the current environment?

环境:ARKit 2.0,iPhone X,iOS 12.1

虽然 运行在 ARWorldMappingStatusMapped 状态下 ARSeesion

  1. 通过 ARSession.AddAnchor.
  2. 将指定位置的一些自定义锚点 (#A) 添加到世界地图中
  3. 世界地图已保存到文件。

然后关闭应用并重启ARSession,

  1. 配置加载保存的世界地图并将其分配给ARKitWorldTrackingSessionConfiguration.initialWorldMap
  2. 运行 选项 重置跟踪并删除现有锚点
  3. 然后通过使用上面的配置运行选项调用ARSession.runWithConfiguration重新启动会话。
  4. ARSession的状态表明它已经将记录的世界地图与当前环境相协调时,从[=中读取锚点(#B)的位置17=].

但是我发现读取锚点(#B)的位置与保存时的位置(#A相比没有变化). 这是不正确的。为什么?

因为phone的初始位置就是坐标原点的位置。并且该应用程序一度关闭并且 phone 被移动到另一个地方。所以重启ARSeesion后坐标原点的位置发生了变化。那么ARSession也应该将保存在世界地图中的ARAnchors的位置调到合适的位置,所以ARAnchors的位置应该已经改变了。

来自 initialWorldMap 文档:

If successful, the tracking state becomes ARCamera.TrackingState.normal after a short time, indicating that the current world coordinate system and anchors match those from the recorded world map.

这些锚点的位置应该相同,但是世界坐标系的原点在重新定位后应该改变。

我找到了原因。初始session,其initialWorldMapnil,运行选项为0开始,我重新启动了session 用于协调。所以和调和session有冲突。这取消了协调。因此,加载锚点的位置不会改变,因为它们对于 ARSession.

是未知的