如何在 TangoARPoseController 中使用 ADF 持久化标记

How to persist markers using ADF in TangoARPoseController

我正在尝试在增强现实游戏中保留标记。这是我正在做的事情的要点:

我让我的用户记录一个区域并将其保存到 ADF。然后他们将标记放入场景中并将其在 Unity 世界坐标中的位置数据保存到文本文件中。然后我重新启动应用程序,加载并本地化到 ADF 并加载标记。

为了让它正常工作,我修改了 Unity 演示包中的 ARPoseController.cs 文件,以使用区域描述作为其基础框架。在 _UpdateTransformation 方法中,我交换了帧对

pair.baseFrame = TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_START_OF_SERVICE;
pair.targetFrame = TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_DEVICE;

为了

pair.baseFrame = TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_AREA_DESCRIPTION;
pair.targetFrame = TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_DEVICE;

我还添加了一些代码来确认我已成功定位到 ADF,但我注意到我在 Unity World Space 中的标记位置相对于真实环境没有正确定位。

我可以确认我的标记基于 START_OF_SERVICE 来源正确保存和加载,所以我假设它们正确序列化和反序列化。是什么原因造成的?我假设这应该只是通过将基本帧对切换为 Area_Description 而不是 START_OF_SERVICE 来工作,我错了吗?

我在集成 AR 和 ADF 时遇到了类似的问题,我不得不修改 TangoPointCloud 以检查您是否在 OnTangoDepthAvailable() 中使用 AreaDescription 并根据需要调整 baseFrame 目标。

即:

if (m_tangoDeltaPoseController.m_useAreaDescriptionPose)
{
    pair.baseFrame = TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_AREA_DESCRIPTION;
    pair.targetFrame = TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_DEVICE;
}
else
{
    pair.baseFrame = TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_START_OF_SERVICE;
    pair.targetFrame = TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_DEVICE;
}

这样,点云的几何形状会根据 ADF 偏移量而不是从设备开始进行自我调整。

更改后,当我使用 AR 的示例代码放置标记时,它会正确注册表面,因此我将标记放置在正确的位置和方向。我仍然遇到一些问题,标记在重新定位时没有调整,但必须查看 AreaLearningInGameController 以了解循环关闭事件。

希望对您有所帮助!