在3D重建中使用区域描述文件(ADF)

时间:2016-03-18 07:18:25

标签: android google-project-tango 3d-reconstruction drift

我一直在使用谷歌的Tango项目探索3D扫描和重建。

到目前为止,我尝试过的一些应用程序Project Tango ConstructorVoxxlr在短时间内做得很好(我很乐意为其他潜在的扫描应用程序提供建议)。问题是,无论应用程序如何,如果我运行得足够长,扫描会累积很多漂移,最终所有内容都会错位并毁掉。

每当我将设备指向像空白墙这样无特征的空间时,或者当我将摄像机向上指向扫描天花板时,也会发生很大的漂移机会。该设备暂时迷失方向,从而破坏了未来扫描的对齐。无论如何,让设备知道它在哪里以及它指向的是我的问题。

我知道有些3D扫描应用程序在某种程度上使用区域学习,因为这些应用程序要求我允许在启动应用程序时允许区域学习。我认为这是为了帮助本地化设备并稳定其姿势(如果这是不准确的,请纠正我)。

从我尝试过的应用中,我从来没有选择加载自己的ADF。我的理解是,在精心学习的功能丰富的ADF中加载有助于更好地锚定设备姿势。是否存在允许用户加载其自制ADF的应用程序缺乏的原因?这很难/不可能吗?当前的应用程序是否已经最佳地利用区域学习进行本地化,并且我所提供的自我录制的ADF无法做得更好吗?

我很感激有关此主题的任何指示/说明 - 在3D扫描和重建中使用ADF的方法和功效尚未明确记录。最终,我正在寻找一种方法来使用Tango进行高质量的3D扫描。如果图片中不需要ADF,那很好。如果答案是我正在努力完成一项不可能完成的任务,我也想知道。

如果尚未提供现成的解决方案,我也愿意尝试自己处理点云,不过我觉得它可能说起来容易做起来难得多。

1 个答案:

答案 0 :(得分:3)

不幸的是,Tango目前还没有任何应用可以做到这一点,你需要为此开发自己的应用程序。如果您想知道如何在代码中执行此操作,请执行以下步骤: 首先,应该开启应用程序的学习模式。当我们打开学习模式时,系统将开始记录ADF,这允许应用程序查看它已到达的现有区域。对于我们保存的每个点云,我们也应该保存与点相关联的时间戳。

在四处走动并收集点之后,我们需要从API调用TangoService_saveAreaDescription函数。此步骤对系统中保存的每个键姿势进行一些优化。保存完成后,我们需要使用点云保存的时间戳再次查询优化姿势,为此,我们使用functionTangoService_getPoseAtTime。在此步骤之后,您将看到点云设置为正确的变换,并且点将重叠在一起。

正如回顾一下步骤:

  1. 在Tango配置中打开学习模式。

  2. 四处走动,保存点云以及与点云相关联的时间戳。

  3. 调用save TangoService_saveAreaDescription函数。

  4. 保存完成后,调用TangoServcie_getPoseAtTime根据点云保存的时间戳查询优化姿势。