在ARKit使记录的世界地图与当前环境保持一致之后,为什么锚的位置不会改变?

时间:2018-12-05 03:35:38

标签: arkit world-map

环境:ARKit 2.0,iPhone X,iOS 12.1

ARSeesion状态下运行ARWorldMappingStatusMapped时,

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

然后关闭该应用并重启ARSession

  1. 配置加载保存的世界地图并将其分配给ARKitWorldTrackingSessionConfiguration.initialWorldMap
  2. 运行选项重置跟踪并删除现有锚点
  3. 然后通过使用上面的 configuration run选项调用ARSession.runWithConfiguration重新启动会话。
  4. ARSession的状态指示已将记录的世界地图与当前环境进行对帐时,请从ARWorldMap.anchors中读取锚点( #B )的位置。< / li>

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

因为手机的初始位置是坐标原点的位置。应用程序一度关闭,并且手机被移至另一个地方。因此,重新启动ARSeesion后,坐标原点的位置发生了变化。然后ARSession还应该将保存在世界地图中的ARAnchors的位置调和到正确的位置,因此ARAnchors的位置应该已经更改。

2 个答案:

答案 0 :(得分:0)

摘自initialWorldMap文档:

  

如果成功,则跟踪状态会在短时间后变为ARCamera.TrackingState.normal,表示当前世界坐标系和锚点与记录的世界地图中的匹配

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

答案 1 :(得分:0)

我找到了原因。我重新启动会话进行对帐后,开始了其initialWorldMapnil且运行选项为0的初始会话。因此,它与协调会话冲突。取消对帐。因此,已加载的锚点的位置不会改变,因为ARSession不知道它们。