存储 ARKit 点云数据并检索显示

Posted

技术标签:

【中文标题】存储 ARKit 点云数据并检索显示【英文标题】:Storing ARKit point cloud data and retrieving for display 【发布时间】:2017-07-24 07:58:52 【问题描述】:

我希望存储使用 ARKit 和 Unity 记录的点云数据,以便可以按最初记录的方式检索和显示。假设我只是按照 UnityPointCloudExample.cs 脚本的方式显示点云数据,该脚本包含在 Unity 插件中。但是,当检测并显示一个点时,我还会存储有关该点的一些相关信息。然后我完全关闭应用程序。当我再次打开应用程序时,我希望能够将数据重新加载到与最初检测到的相机相同的位置,这是否可以按原样使用 ARKit 和 Unity 插件?

我知道这需要存储一些关于相机位置相对于一个点的位置的信息,然后在重新启动应用程序时,需要在重新启动时相机的新位置与其前一个位置之间进行某种转换记录点的会话,然后使用此信息将点放置在正确的位置。浏览 ARKit 文档,我不确定如何使用本机界面实现这一点,我更不确定如何使用 Unity 插件实现它。如果有人至少可以将我引向最容易促进上述功能实现的统一插件或本机 ARKit 接口的元素,我将不胜感激。

或者,如果这超出了当前状态下的 ARKit/Unity 插件的范围,解释这种情况的发生方式和原因同样有帮助。谢谢!

【问题讨论】:

【参考方案1】:

ARKit 在 AR 跟踪首次开始时将原点设置为 0,0,0。如果不定义上一次运行的点和新运行的点之间的关系,就无法使用上一次运行的坐标在后续运行中正确重新加载 AR 场景。

为了将之前的 ARKit 运行与新的运行联系起来,我们可以使用地标,可以手动放置,也可以使用某种对象识别进行检测。让我们假设为简单起见我们手动放置地标。

这是允许我们在后续运行之间保存和恢复 ARKit 场景的管道。

    初始场景设置程序。

    开始我们的 ARKit 应用程序的第一次运行,放置对象或玩游戏。 允许 ARKit 初始化。 在我们的环境中沿水平平面选择两个参考点。例如,如果在室内,我们可以选择房间的两个角落。这些点将是我们用来重新加载 ARKit 场景的点。

    根据需要在 ARSpace 中放置对象。完成后,将我们的 AR 对象的位置和我们的两个参考点保存到一个文件中。

    重新加载时,将相同的两个参考点放置在我们之前保存的位置。定义这两个点后,现在可以通过获取它们相对于旧点的位置,然后将它们相对于新定义的点放置,从而将资源重新加载到它们之前的位置。

为了减少所需的用户交互,我们可以通过图像跟踪/检测来扩展它。当检测到地标图像或对象时,我们会自动将其在 ARSpace 中的位置设置为两个点之一。当两个地标都被检测到时,我们可以按照步骤 3 中的描述“自动”重新加载场景。这将消除初始点放置错误。

【讨论】:

以上是关于存储 ARKit 点云数据并检索显示的主要内容,如果未能解决你的问题,请参考以下文章

python-pclopen3d读取显示pcdbin等格式点云数据

急!!在MATLAB下怎样处理点云

:点云数据处理

点云可视化-点击显示点坐标

基于MATLAB的3D点云数据读取与显示

PCL OcTree——点云压缩