我正在尝试阅读并理解 Google ARCore 的域模型,尤其是Android SDK包。目前此 SDK 处于“预览”模式,因此没有关于如何使用此 API 的教程、博客、文章等。甚至 Google 本身也建议只阅读源代码、源代码注释和 Javadocs 以了解如何使用 API。问题是:如果您还不是计算机视觉专家,那么域模型对您来说会有些陌生和陌生。
具体来说,我有兴趣了解以下类之间的基本区别和正确用法:
根据Anchor
's javadoc:
"描述现实世界中的一个固定位置和方向。要停留在物理空间中的一个固定位置,这个位置的数值描述会随着 ARCore 对空间的理解的提高而更新。使用 getPose() 来获取这个当前的数值位置锚点。这个位置可能会在任何时候 update() 被调用时改变,但永远不会自发改变。 “
所以Anchors有一个Pose。听起来你“将 Anchor ”放在相机中可见的东西上,然后 ARCore 会跟踪该 Anchor 并不断更新它Pose
以反映其屏幕坐标的性质?
并来自Pose
的javadoc:
"表示从一个坐标系到另一个坐标系的不可变刚性变换。正如所有 ARCore API 所提供的,姿势总是描述从对象的局部坐标系到世界坐标系的变换(见下文)......这些变化意味着每一帧都应该是被认为是在一个完全独特的世界坐标系中。 ”
所以听起来aPose
只是相机的“当前帧”独有的东西,并且每次更新帧时,所有锚的所有姿势都会重新计算?如果不是,那么 Anchor、它的 Pose、当前帧和世界坐标系之间的关系是什么?究竟什么是姿势?“姿势”是否只是一种存储矩阵/点数据的方式,以便您可以将锚点从当前帧转换为世界帧?或者是其他东西?
最后,我看到帧、姿势和锚点之间存在很强的相关性,但是还有PointCloud
. 我可以在里面看到的唯一com.google.ar.core
使用这些的类是Frame
. PointClouds
似乎是(x,y,z) -坐标与第四个属性表示 ARCore 对 x/y/z 分量实际上是正确的“信心”。因此,如果 Anchor 有一个 Pose,我会想象一个 Pose 也会有一个 PointCloud 代表 Anchor 的坐标和对这些坐标的信心。但是 Pose没有PointCloud,所以我一定完全误解了这两个类模型的概念。
问题
我在上面提出了几个不同的问题,但它们都归结为一个简洁、可回答的问题:
Frame、Anchor、Pose 和 PointCloud 背后的概念有什么区别?你什么时候使用它们(以及用于什么目的)?