sme*_*eeb 4 computer-vision augmented-reality android-sdk-2.3 android-augmented-reality arcore
我正在尝试阅读并理解Google ARCore的域模型,尤其是Android SDK包.目前,此SDK处于" 预览 "模式,因此没有关于如何使用此API的教程,博客,文章等.甚至谷歌本身也建议只阅读源代码,源代码注释和Javadocs以了解如何使用API.问题是:如果您还不是计算机视觉专家,那么域模型对您来说会有点陌生和陌生.
具体来说,我有兴趣了解以下类之间的根本区别和正确用法:
根据Anchor's javadoc:
" 描述现实世界中固定的位置和方向.为了保持物理空间中的固定位置,当ARCore对空间的理解得到改善时,该位置的数字描述将更新.使用getPose()获取当前数字位置任何时候调用update()都会改变这个位置,但永远不会自发地改变. "
所以主持人有一个姿势.听起来像是" 把一个锚点 "放到相机中可见的东西上,然后ARCore跟踪Anchor并不断更新它Pose以反映其屏幕坐标的性质?
从Posejavadoc:
" 表示从一个坐标系到另一个坐标系的不可变刚性变换.正如所有ARCore API所提供的那样,Poses总是描述从对象的局部坐标系到世界坐标系的变换(见下文)......这些变化意味着每一帧应该是被认为是一个完全独特的世界坐标框架. "
所以它听起来像Pose只是相机的" 当前帧 "所独有的东西,并且每次更新帧时,所有锚点的所有姿势都可能重新计算?如果没有,那么锚点,它的姿势,当前帧和世界坐标系之间的关系是什么?什么是Pose 真的,反正呢?"姿势"只是一种存储矩阵/点数据的方式,以便您可以将Anchor从当前帧转换为世界帧吗?或者是其他东西?
最后,我看到Frames,Poses和Anchors之间有很强的相关性,但接下来就是PointCloud.我能看到的唯一com.google.ar.core一个使用这些的类是Frame.PointClouds似乎是(x,y,z) - 与第4个属性协调,表示x/y/z组件实际上正确的表示ARCore的"置信度".所以如果一个Anchor有一个Pose,我会想象一个Pose也会有一个PointCloud来表示Anchor的坐标和那些坐标的置信度.但是Pose 没有 PointCloud,所以我必须完全误解这两个类建模的概念.
我在上面提出了几个不同的问题,但它们都归结为一个简洁,可回答的问题:
Frame,Anchor,Pose和PointCloud背后的概念有什么不同,你何时使用它们(以及用于何种目的)?
A Pose是结构化转型.它是从一个坐标系(通常是对象本地)到另一个坐标系(通常是世界)的固定数值转换.
An Anchor代表世界上物理上固定的位置.getPose()随着对世界的理解的变化,它将会更新.例如,假设您有一个建筑物,外面有走廊.如果你一直走在那个走廊上,传感器漂移会导致你不能以你开始时的相同坐标进行清理.但是,ARCore可以检测(使用视觉特征)它在启动它的同一空间.当发生这种情况时,它会扭曲世界,使您当前的位置和原始位置对齐.作为这种扭曲的一部分,锚的位置也将被调整,以便它们保持在同一物理位置.
由于这种失真,Pose相对于世界的相对应仅被认为在其返回的帧的持续时间内有效.一旦你update()下次打电话,世界可能已经重塑了那个姿势可能毫无用处.如果您需要保留比帧更长的位置,请创建一个Anchor.只需确保removeAnchors()您不再使用的锚点,因为每个活锚都有持续成本.
A Frame瞬间捕获当前状态,并在两次呼叫之间发生变化update().
PointClouds是世界上检测到的三组视觉特征点.它们位于自己的本地坐标系中,可以从中访问Frame.getPointCloudPose().希望比平面检测提供更好的空间理解的开发人员可以尝试使用点云来了解有关3D世界结构的更多信息.
这有帮助吗?
| 归档时间: |
|
| 查看次数: |
1553 次 |
| 最近记录: |