如何使用ARCore测量距离?

2022-09-02 08:59:21

是否可以计算两个 之间的距离?HitResult

或者,我们如何使用ARCore计算实际距离(例如米)?


答案 1

在Java ARCore世界中,单位是米(我刚刚意识到我们可能不会记录这一点......aaaand看起来像没有。哎呀,错误提交)。通过减去两个 s 的平移分量,您可以获得它们之间的距离。您的代码将如下所示:Pose

首次点击时为:hitResult

startAnchor = session.addAnchor(hitResult.getHitPose());

在第二次命中时为:hitResult

Pose startPose = startAnchor.getPose();
Pose endPose = hitResult.getHitPose();

// Clean up the anchor
session.removeAnchors(Collections.singleton(startAnchor));
startAnchor = null;

// Compute the difference vector between the two hit locations.
float dx = startPose.tx() - endPose.tx();
float dy = startPose.ty() - endPose.ty();
float dz = startPose.tz() - endPose.tz();

// Compute the straight-line distance.
float distanceMeters = (float) Math.sqrt(dx*dx + dy*dy + dz*dz);

假设这些命中结果不会发生在同一帧上,那么创建一个很重要,因为每次调用时都可以重塑虚拟世界。通过使用锚点(而不仅仅是姿势)来保持该位置,其姿势将更新以跟踪这些重塑中的物理特征。AnchorSession.update()


答案 2

您可以使用 getHitPose() 提取两个姿势,然后比较它们的翻译组件 (getTranslation())。翻译定义为HitResult

...从目的地(通常是世界)坐标系到局部坐标系的位置矢量,以目的地(世界)坐标表示。

至于这个物理单位,我找不到任何评论。使用经过校准的相机,这在数学上应该是可能的,但我不知道他们是否真的为此提供了API。


推荐