Tango 开发指南(5) — 参考帧

当我们描述某样东西(比如 Tango 设备)的位置和方向时,说清楚你使用的参考帧是很重要的。

下面举个例子来帮助理解参考帧:比如“玛丽站在三米远的地方”并不能真正说明她的位置。如果你想确定她的位置,你首先得解决这个问题“离谁三英尺远?”。如果你说“玛丽站在离自由女神像入口前面三英尺的地方”,那就能够确定了,因为你在用自由女神像入作为参考帧,然后给出了相对于参考帧的距离和方向。

但是,玛丽并不是 3D 空间中一个简单的点,即她还有方向,相对于参考帧的方向。换句话,和其他 3D 物体一样,玛丽面朝某个方向。确定玛丽的位置和方向(这两种数据的集合叫 pose)的完整表述是“玛丽站在离自由女神像入口前面三英尺的地方,面朝自由女神像”。现在完整的表述里面有了关于方向的信息,如果玛丽向右转了,你可以说“玛丽现在旋转了90度”。这是描述方向的另一种表述。

现实生活如此,Tango 设备是什么样呢?运动追踪功能运行时,设备会报告它相对于参考帧的 pose(位置和方向)数据,参考帧固定于 3D 空间。例如,设备会说“相对于我开始运动追踪功能的地方,我往前进了三英尺,升高了一英尺,向右 30 度”。这样,设备就告诉你了足够的确定它位置的信息:相对于起始位置,向前三英尺,向上一英尺。除此之外还告诉你了方向信息:相对于起始位置,向右旋转了 30 度。

要使用运动追踪功能,你必须做到如下几点:

选择基础帧,这是你测量的参考点。如上所述,这是一个固定于 3D 空间的位置,比如自由女神像。举例:COORDINATE_FRAME_START_OF_SERVICE。
选择目标帧,这是你测量的目标点。对于运动追踪,目标值通常是 COORDINATE_FRAME_DEVICE,表示设备在 3D 空间移动时某个时刻的 pose。当设备移动时,目标帧的 pose 跟着改变,最大频率是 100 次/秒,但是基础帧是不变的。pose 数据流就构成了运动追踪的轨迹。
相对于基础帧的目标帧的 pose 这一量化指标回答了这个问题“相对于参考帧,设备的位置和分析怎么描述?”。

下面的章节,我们会讨论在运动追踪中使用的服务开始帧(start-of-service frame),区域描述帧(area description frame)和设备 pose 帧。对于某些应用,可能需要选择合适的帧对,才能做到精确对齐来自设备某部件的数据源。稍后我们会讨论这些帧对的类型。

关于用于参考帧的坐标系的展示,请参考坐标系转换

坐标帧对

Tango 提供了若干帧对用于运动追踪:

目标帧
COORDINATE_FRAME_DEVICE
COORDINATE_FRAME_DEVICE
COORDINATE_FRAME_START_OF_SERVICE
基础帧
COORDINATE_FRAME_START_OF_SERVICE
COORDINATE_FRAME_AREA_DESCRIPTION
COORDINATE_FRAME_AREA_DESCRIPTION
我们来看一个常见的应用案例:
问题:你的应用在一个完全虚拟的环境中控制照相机。你需要的是设备相对于服务开启时的原始位置的 pose 数据。
方案:目标帧选 COORDINATE_FRAME_DEVICE,基础帧选 COORDINATE_FRAME_START_OF_SERVICE。

下面是我们在 demo 工程 cpp_hello_motion_tracking_example 例子中使用的帧对:

TangoCoordinateFramePair pair;
   pair.base = TANGO_COORDINATE_FRAME_START_OF_SERVICE;
   pair.target = TANGO_COORDINATE_FRAME_DEVICE;
   if (TangoService_connectOnPoseAvailable(1, &pair, onPoseAvailable) !=
       TANGO_SUCCESS) {
     LOGE("TangoHandler::OnResume, connectOnPoseAvailable error.");
     std::exit(EXIT_SUCCESS);
   }

我们来详细的看下每一个帧对。

目标帧 COORDINATE_FRAME_DEVICE
基础帧 COORDINATE_FRAME_START_OF_SERVICE

这个帧对提供的是设备相对于运动追踪服务首次初始化成功时的 pose 数据。这种模式将从服务开启时持续记录设备的运动轨迹。运动追踪服务还能检测自身是否出现故障。在发生故障的时间段,系统会上报 INVALID 类型的 pose 数据。此时如果调用了 TangoService_resetMotionTracking() 方法或 服务配置中开启了 auto-reset 选项,系统将尝试重新初始化该服务。重新初始化成功后,系统将努力恢复最近一次可用的 pose 数据,and pick up where it left off。关于该问题的更多信息,请查看 pose 状态的生命周期。该帧对不包括漂移修正和定位。如果你的应用不使用漂移修正或定位,你可以关闭区域学习模式以及不装载 ADF,以此 lower processing requirements。

目标帧 COORDINATE_FRAME_DEVICE
基础帧 COORDINATE_FRAME_AREA_DESCRIPTION

该针对提供相对于装载的区域描述的 pose,且包括漂移修正。该模式需要开启区域学习模式或装载预先创建好的 ADF 文件。如果你开启了区域学习模式但是未装载 ADF,区域描述基础帧将会被初始化为服务开启帧。如果你装载了 ADF,不管你有没有开启区域学习模式,区域描述基础帧都将是存在 ADF 中起始地点,而且只有当设备定位(localize)后才会拿到 pose 数据。根据配置的不同,这种模式并不总是可用的。更多信息,请查看使用区域学习模式和装载 ADF。如果你想在 COORDINATE_FRAME_DEVICE & COORDINATE_FRAME_AREA_DESCRIPTION帧对变成VALID状态之前使用,可以临时使用 COORDINATE_FRAME_START_OF_SERVICE 作为基础帧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值