ArCore :: anchor - 始终使用 ArSession_acquireNewAnchor API 出现在镜头前

ArCore :: anchor - To appear in front of camera always using ArSession_acquireNewAnchor API

应用信息:

我正在开发一个基于 ArCore (NDK) 的 Android 应用程序,以在真实相机画面上增强某些对象(从 blender 工具生成)。现在我可以将对象绘制为 anchors,它会根据相机位置的变化缩放 up/down。

我正在使用 ArSession_acquireNewAnchor API 来承载一个距离相机几英寸的锚点,如下所示。

ArPose_create(ar_session_, nullptr, &camera_pose);
ArPose_getPoseRaw(ar_session_, camera_pose, raw_camera_pose);
ArAnchor *anchor = nullptr;
if (ArSession_acquireNewAnchor(ar_session_, raw_camera_pose, &anchor)!=AR_SUCCESS) {          
    LOGE("Anchor is not successfully acquired");
    } 

启动应用程序并向同一方向握住设备后,可以看到上面的锚点。

问题陈述:

当相机 location/direction 发生变化时,这些锚点不会按预期出现。请帮助 - PFB 问题的图示。

我的观察:

  1. 因为我是根据相机姿势获取锚点,所以我假设锚点的方向和姿势属性将仅基于相机姿势,即当相机移动(平移)时,锚点也会移动因此 - 我的理解正确吗?

    ArSession_acquireNewAnchor(ar_session_, raw_camera_pose, &anchor)

  2. 使用基于hitResult的锚点获取后,一切正常,即当设备在适当的位置从一个方向改变到另一个方向时锚点对象出现(触摸坐标) - 但是我的用例不依赖于触摸输入事件。我需要在给定场景的预定义位置坐标处实现相同的效果。

    if(ArHitResult_acquireNewAnchor(ar_session_, ar_hit_result, &anchor)!= AR_SUCCESS) { 逻辑("NOT SUCCESSFUL"); return; }

请注意,这是使用 ArCore NDK 开发的。

我可以通过调整锚点对象的姿势值来实现。

相机原始姿势由 7 个参数组成,如下所示。

  raw_pose = {0, 0, 0, 1.0, driftx, 0,-5.0};

API获取anchor-

  ArSession_acquireNewAnchor(ar_session_, raw_pose, &anchor);

在这里,第 7 个索引值将锚点放置在距离相机 5 个单位的位置。 第 5 个索引值 (driftx) 指示 ArCore 对给定的锚点在 x 中进行必要的(driftx 单位)变换。 当设备从一侧转向另一侧时,属性 driftx 用于跟踪相机姿势的漂移(仅相机姿势的第 5 个索引值)。

driftx 计算所用的方法未产生准确的解,但接近预期的结果。正在进一步调查以提高 driftx 的准确性。