编程语言
首页 > 编程语言> > java – Google ARCore域模型示例

java – Google ARCore域模型示例

作者:互联网

我正在尝试阅读并理解Google ARCore的域模型,尤其是Android SDK软件包.目前,此SDK处于“预览”模式,因此没有关于如何使用此API的教程,博客,文章等.即使谷歌本身也建议只阅读源代码,源代码注释和Javadocs以了解如何使用API​​.问题是:如果你还不是计算机视觉专家,那么域名模型会感觉有点陌生.对你不熟悉

具体来说,我有兴趣了解以下类之间的根本区别和正确用法:

> Frame
> Anchor
> Pose
> PointCloud

根据Anchor的javadoc:

Describes a fixed location and orientation in the real world. To stay at a fixed location in physical space, the numerical description of this position will update as ARCore’s understanding of the space improves. Use getPose() to get the current numerical location of this anchor. This location may change any time update() is called, but will never spontaneously change.

所以主持人有一个姿势.听起来像是“把一个锚点”放到相机中可见的东西上,然后ARCore跟踪Anchor并不断更新它的Pose以反映其屏幕坐标的性质?

从Pose的javadoc:

Represents an immutable rigid transformation from one coordinate frame to another. As provided from all ARCore APIs, Poses always describe the transformation from object’s local coordinate frame to the world coordinate frame (see below)…These changes mean that every frame should be considered to be in a completely unique world coordinate frame.

所以听起来像Pose只是相机的“当前帧”所独有的东西,并且每次更新帧时,所有锚点的所有姿势都可能重新计算?如果没有,那么锚点,它的姿势,当前帧和世界坐标系之间的关系是什么?什么是Pose真的,反正呢? “姿势”只是存储矩阵/点数据的一种方式,以便您可以将锚点从当前帧转换为世界帧吗?或者是其他东西?

最后,我看到Frames,Poses和Anchors之间存在很强的相关性,但之后就是PointCloud.我在com.google.ar.core中可以看到的唯一一个使用它的类是Frame. PointClouds似乎是(x,y,z) – 与第4个属性协调,表示ARCore的“置信度”,即x / y / z组件实际上是正确的.因此,如果一个Anchor有一个Pose,我会想象一个Pose也会有一个PointCloud代表Anchor的坐标&对那些坐标的信心.但是Pose没有PointCloud,所以我必须完全误解这两个类建模的概念.

这个问题

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

Frame,Anchor,Pose和PointCloud背后的概念有什么不同,你何时使用它们(以及用于何种目的)?

解决方法:

姿势是一种结构化的转变.它是从一个坐标系(通常是对象本地)到另一个坐标系(通常是世界)的固定数值转换.

Anchor代表世界上物理上固定的位置.随着对世界的理解发生变化,它的getPose()会更新.例如,假设您有一个建筑物,外面有走廊.如果你一直走在那个走廊上,传感器漂移会导致你不能在你开始的同一坐标处收拾.但是,ARCore可以检测(使用视觉特征)它在启动它的同一空间.当发生这种情况时,它会扭曲世界,使您当前的位置和原始位置对齐.作为这种扭曲的一部分,锚的位置也将被调整,以便它们保持在同一物理位置.

由于这种失真,相对于世界的姿势应该被认为仅在其返回的帧的持续时间内有效.一旦你下次调用update(),世界可能已经重新塑造了那个姿势可能是无用的.如果需要保持位置长于框架,请创建锚点.只需确保删除不再使用的Anchor()锚点,因为每个实时锚点都有持续成本.

Frame会立即捕获当前状态,并在两次update()调用之间进行更改.

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

这有帮助吗?

标签:android-sdk-2-3,arcore,java,computer-vision,android-augmented-reality
来源: https://codeday.me/bug/20190727/1551245.html