(实验性的)漂移校正工作了吗?

Is (experimental) Drift-Correction working yet?

我正在寻找有关如何正确使用漂移校正(使用 Unity SDK)的更多信息。

在 Tango 网站上它说 "Drift-corrected frames come through the Area Description reference frame",帧对开始服务 -> 设备 "does not include drift correction" 和区域描述 -> 服务开始 "provides updates only when a localization event or a drift correction occurs"。

我想使用漂移校正姿势的方式就像在 TangoPointCloud 预制件中一样,其中深度点乘以矩阵 startServiceTDevice,它来自帧对 SoS -> 设备。假设漂移校正帧在 AD 帧中,我需要 SoS -> AD。由于只有 AD -> SoS 可用,所以我尝试使用这个及其逆函数。生成的姿势太小但没有任何意义(即使使用错误的方向,如果我一直在走来走去,平移也不应该接近于零)。然后我考虑到 AD 框架实际上可能类似于漂移校正的服务启动,但我再次找不到 AD -> 设备和 SoS -> 设备之间的任何 significant/visible 差异,绝对没有闭环在里面。我在完成扫描后请求并应用姿势,因此到那时应该已经检测到漂移。

在 Tango 网站上进一步说 "There will be a period after Startup during which drift-corrected frames are not available.",但 AD -> SoS 姿势从一开始就可用(并且有效),我还不能产生它不可用的情况(例如,无动作、快速动作...)。

漂移校正是否有效?还是我用错了?

PS:在 上,漂移校正听起来好像仅用于跟踪损失后的重定位。然而,我觉得这很难相信,因为 Tango 网站将漂移校正描述为 "When the device sees a place it knows it has seen earlier in your session, it realizes it has traveled in a loop and adjusts its path to be more consistent with its previous observations."。

漂移校正目前作为实验性功能运行,它会打破一些极端情况。稍后我会详细介绍。

为了使用漂移校正姿势,您将需要使用 ADF_T_Device 帧对(ADF 是基础帧,设备是目标帧)。在使用漂移校正姿势将点投影到世界space的示例中,您不需要进行Adf_T_ss * ss_T_device变换,而是直接使用ADF_T_device帧即可。如果这是在 Unity 中,您只需检查 PointCloud 预制件上的 use area description pose

破坏漂移校正的极端情况:

  1. 用户在开始体验后立即摇晃设备。

在引擎盖下,漂移校正正在构建更密集但更准确的 ADF 版本。如果用户在一开始就遮住相机或摇动设备,那将导致缓冲区中没有保存 ADF(或功能)。因此 API 可能会进入一种状态,该状态永远不会给出来自 ADF_T_Device 帧对的任何有效姿势。

  1. 设备丢失跟踪,用户移动到新的space而没有重新定位。

这与第一种情况类似。如果用户在丢失跟踪后移动到新的 space 而没有重新定位,设备将永远不会重新定位,因此通过 ADF_T_device 帧将无法获得有效姿势。

漂移校正 API 仍处于实验阶段,我们也在尝试从 API 级别解决上述问题。