首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >谷歌ARCore领域模型的实例分析

谷歌ARCore领域模型的实例分析
EN

Stack Overflow用户
提问于 2017-09-03 09:58:29
回答 2查看 2.2K关注 0票数 4

我试图阅读并理解Google的域模型,特别是Android SDK包。目前,此SDK处于“预览”模式,因此在理解如何使用此API方面没有教程、博客、文章等。甚至Google本身也建议只阅读源代码、源代码注释和Javadocs来理解如何使用API。问题是:如果你还不是一个计算机视觉专家,域模型会让你觉得有点陌生和不熟悉。

具体来说,我对理解以下类的基本区别和正确用法感兴趣:

根据Anchor的javadoc:

“描述现实世界中固定的位置和方向。为了在物理空间中的固定位置上停留,随着ARCore对空间的理解的提高,对这个位置的数字描述将更新。使用getPose()获取这个锚的当前数字位置。这个位置在任何时候调用update()都可能改变,但不会自动改变。”

所以Anchors有一个姿势。听起来像你“放下一个锚”在摄像机中可见的东西上,然后ARCore跟踪那个锚,并不断更新它的Pose以反映屏幕上坐标的本质?

来自Pose的javadoc:

表示从一个坐标系到另一个坐标系的不可变的刚性转换。正如所有ARCore API所提供的那样,提出总是描述从对象的本地坐标框架到世界坐标框架的转换(见下文)...These的变化意味着每一个帧都应该被认为是一个完全独特的世界坐标框架。

因此,这听起来像是一个Pose是唯一的东西,只有“当前帧”的相机和每一次帧被更新,所有的姿势为所有锚是重新计算,也许?如果没有,那么一个锚、它的姿态、当前的框架和世界坐标框架之间的关系是什么?那么到底是什么样子的呢?“姿态”仅仅是存储矩阵/点数据的一种方式,这样就可以将锚从当前框架转换为世界框架吗?还是别的什么?

最后,我看到框架、姿势和锚之间有很强的相关性,但是还有PointCloud。我在com.google.ar.core中看到的唯一使用这些类的类是FramePointClouds似乎是(x,y,z)-coordinates,具有第4个属性,表示ARCore对x/y/z组件实际上是正确的“信心”。因此,如果一个锚有一个姿势,我会想象一个姿势也会有一个PointCloud代表锚的坐标&对这些坐标的信心。但是Pose 没有有一个PointCloud,所以我必须完全误解这两个类所建模的概念。

问题是

我在上面提出了几个不同的问题,但它们都归结为一个简单的、可回答的问题:

框架、锚、姿态和PointCloud背后的概念有什么不同?你什么时候使用它们(以及为了什么目的)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-03 17:46:45

Pose是一种结构化转换。它是一个固定的数值转换,从一个坐标系(通常是目标局部)到另一个坐标系统(通常是世界)。

Anchor表示世界上一个物理上固定的位置。随着对世界变化的理解,getPose()将会更新。例如,想象一下,你有一栋大楼,外面有一条走廊。如果你沿着走廊一路走来走去,传感器漂移会导致你不能在相同的坐标下绕线。但是,ARCore可以(使用可视化功能)检测到它在启动它的同一空间。当这种情况发生时,它扭曲了世界,使你目前的位置和原来的位置排列起来。作为这种扭曲的一部分,锚的位置也将被调整,以使它们停留在相同的物理位置。

由于这种失真,相对于世界的Pose只能在返回帧的持续时间内被认为是有效的。当你下一次给update()打电话时,世界可能已经改变了这个姿势,这可能是无用的。如果需要保持一个比帧更长的位置,请创建一个Anchor。只需确保不再使用removeAnchors()锚点,因为每个活动锚都有持续的成本。

Frame在瞬间捕获当前状态,并在对update()的两个调用之间进行更改。

PointCloud是世界上检测到的一组三维视觉特征点。它们位于自己的本地坐标系中,可以从Frame.getPointCloudPose()访问。希望比平面探测提供更好的空间理解的开发人员可以尝试使用点云来了解更多关于3D世界的结构。

这有用吗?

票数 8
EN

Stack Overflow用户

发布于 2019-04-17 18:03:24

使用以下链接可以找到并回答关于 FrameAnchorPose的信息:

ARCore -会话、帧、摄像机和姿态

此外,以下是关于Point Cloud is的信息

Point Cloud 是世界空间中由点组成的视觉云(通常是黄色的),它代表了用于在真实物体上进行三维跟踪的点的可靠位置。点云如下所示:

下面是Google对Point的看法:

PointCloud包含一组观察到的三维点和置信度值。这个类实现Closeable,通常应该在Java with或Kotlin块中使用,例如:

要获得PointCloud,请使用以下代码:

代码语言:javascript
复制
Frame frame = session.update();

try (PointCloud pointCloud = frame.acquirePointCloud()) {
    // Accessing point cloud data.......
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46022227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档