Vuforia官方文档自学,只为学习交流,肯定会有错误与肤浅之处,仅供参考
1、Pose Status and Status Info:
- 更多详细相关问题查看官方文档:Pose Status and Status Info | VuforiaLibrary
- Vuforia Engine会为场景中每个Observer提供目标的跟踪状态信息。如果场景发生变化,此信息将有助于维持用户的AR体验,并为用户提供方向(例如,将设备指向目标或在跟踪丢失时减慢移动(可能是减慢摄像机移动的意思))
- 状态类型Status type和可用性取决于Observer类型。例如,IlluminationObserver和VirtualButtonObserver不提供姿势和状态信息。
- 一般来说,Observations收集Target的信息、姿势Pose(如果可用)、状态Status和状态信息。Status描述跟踪生命周期中Target的每个状态。在某些跟踪故障情况下,Vuforia Engine API会提供有关故障可能原因的信息
- 在检测到第一个目标之前,姿势状态将报告为无姿势。
2、VuMark, Object, Image, Multi, and Cylinder Targets Status Poses and Status Info:
- 以下类型的Observer提供可用status pose:图像目标、圆柱体目标、多目标、对象目标和VuMark提供的status pose是相同的,它们的状态随VuObservationPoseStatus. vuObservationStatusInfo一起返回。
- 对于被跟踪的目标,它们的状态可以是NORMAL正常的,也可以是RELOCALIZING重新定位的,对于未被跟踪的目标,它们的状态可以是NOT_OBSERVED未被观察到的。下表列出了可用的跟踪状态值:
STATUS | Description | STATUS_INFO | 对开发者建议 |
Unity NO_POSE 没有Pose | 没有可用的有效姿势。目标未被检测到或跟踪丢失 | Unity NOT_OBSERVED 未观察到 | 为用户提供视觉帮助,以识别可跟踪的对象。 |
Unity TRACKED 正在跟踪 | 正在跟踪目标-表示正常操作. | Unity NORMAL | 跟踪工作正常,可以渲染增强。 |
Unity EXTENDED_TRACKED 拓展跟踪 | Target正在被间接跟踪。它要么看不见,要么被遮挡,要么太远或太近,无法直接跟踪,但其Pose姿势由Device Pose Observer保持。 | Unity NORMAL | 跟踪工作正常 |
Unity LIMITED 受限的/有限的 | 正在跟踪Target,但精度很低。 如果应用程序需要精确的目标对齐,建议放弃目标的有限姿势。如果精确对齐不太重要,那么使用有限的姿势可以提供更连续的跟踪体验。 | Unity RELOCALIZING 重定位 | 如果需要,激励用户返回目标。 |
3、Model Targets Status Poses and Status Info:
- vuModelTargetObservation从VuObservationPosStatus继承相同的姿势状态信息,但还使用VuModelTargetObservationStatusInfo报告错误缩放的模型目标:
STATUS | Description | STATUS_INFO | 对开发者建议 |
Unity NO_POSE | Vuforia正在尝试检测目标,但尚未提供姿势。 | Unity NOT_OBSERVED 未观察到 | 报告此状态信息时无需执行任何操作。 |
Unity INITIALIZING 正在初始化 | 目标是尚未识别的高级模型目标。我们建议为多个目标显示取景器UI,或为单个目标显示符号导向视图。 | ||
Unity RECOMMENDING_GUIDANCE 推荐_指导 | 目标没有高级向导视图。我们建议显示向导视图覆盖,以帮助用户移动到可以开始跟踪的位置。 | ||
Unity TRACKED | 正在跟踪目标并指示正常操作。 | Unity NORMAL | 环境很好,可以进行增强渲染。 |
Unity WRONG_SCALE 错误的Scale | Vuforia检测到目标和物理对象之间存在显著差异。 目标大小要么太小,要么太大,与被跟踪对象的实际字长大小相比超过50倍。 目标仍会被跟踪,但报告的Pose将不在度量坐标中。目标将出现在HoloLens或MagicLeap的错误深度上。 建议校正Scale | ||
Unity EXTENDED_TRACKED | 目标正被间接跟踪。它要么看不见,要么被遮挡,要么太远或太近,无法直接跟踪,但其姿势由Device Pose Observer保持。 | Unity NORMAL | 如果需要,激励用户返回目标。 |
Unity WRONG_SCALE | 同上 | ||
Unity LIMITED | 正在跟踪Target,但精度很低。 如果应用程序需要精确的目标对齐,建议放弃目标的有限姿势。如果精确对齐不太重要,那么使用有限的姿势可以提供更连续的跟踪体验。 | Unity RELOCALIZING | 如果需要,激励用户返回目标。 |
Unity WRONG_SCALE | Vuforia检测到目标和物理对象之间存在显著差异。 目标大小要么太小,要么太大,与被跟踪对象的实际字长大小相比超过50倍。 跟踪将无法可靠地工作。 确保查看并更正模型目标的比例。 |
3、Area Targets and Anchors Status Poses and Status Info:
- Area Targets:区域目标,Vuforia支持的环境跟踪功能,可用于跟踪和扩大区域和空间。可以用于创建游戏、导航应用程序和空间指令,将环境作为交互元素进行探索。办公室、工厂、公寓、公共空间、博物馆和更多区域是区域目标的理想位置。
- Anchors:锚点,Vuforia Ground Plane使数字内容能够放置在环境中的水平表面上,如地板和桌面。它支持检测和跟踪水平表面,还允许使用Anchor Points将内容放置在半空中。
STATUS | Description | STATUS_INFO | 对开发者建议 |
Unity EXTENDED_TRACKED | 利用Device Pose Observer间接跟踪目标,并设置为正常工作。 | Unity NOT_OBSERVED | 建议用户返回起始位置重新启用或开始跟踪环境 |
Unity NORMAL | 正常的目标跟踪条件。可以使用精确对齐来渲染增强。 | ||
Unity LIMITED | 正在跟踪Target,但精度很低。 如果应用程序需要精确的目标对齐,建议放弃目标的有限姿势。如果精确对齐不太重要,那么使用有限的姿势可以提供更连续的跟踪体验。 | Unity RELOCALIZING | 已知Target的有限姿态LIMITED比正常扩展跟踪姿态EXTENDED_TRACKED具有更大的误差。一旦目标或锚的推断姿势得到更准确的估计,它将再次开始报告扩展的跟踪姿势。 |
- 注意:VuareTargetObservationStatusInfo和VuanCorobbservationStatusInfo对于扩展跟踪姿势始终报告为STATUS_INFO_NORMAL,对于有限姿势则报告为STATUS_INFO_RELOCALIZING。
- 通过选中目标的DefaultObserverEventHandler组件,可以在Unity编辑器中选择那个状态来激活。
4、Device Tracking Status Poses and Status Info:
- Device Tracking:Vuforia Engine支持设备跟踪和六自由度运动。使用Device Pose Observer ,可以根据环境跟踪设备,同时支持对目标的扩展跟踪。
- 六自由度:物体在空间具有六个自由度,即沿x、y、z三个直角坐标轴方向的移动自由度和绕这三个坐标轴的转动自由度 。因此,要完全确定物体的位置,就必须清楚这六个自由度。
- Device Pose Observer 代表目标中的一种特殊情况,因为它不跟踪摄像机前面对象的姿势,而是跟踪设备相对于周围环境的姿势。
STATUS | STATUS_INFO | 对开发者建议 | ||
Unity NO_POSE | 没有可用的设备姿势 | Unity NOT_OBSERVED | Vuforia无法确定设备姿势或提供有关原因的信息 | 当情况持续报告一定时间(例如10秒)时,重置设备姿势观察者或指示用户重新启动整个AR |
Unity UNKNOWN | ||||
Unity INITIALIZING | 设备跟踪正在初始化 | 指示用户等待并稍微移动设备。 | ||
Unity RELOCALIZING | 设备正在尝试重新连接到世界并恢复锚点位置。 | 指示用户返回先前所看的区域。当情况持续一定时间(例如10秒)时,重置设备姿势或指示用户重启整个AR。 重新定位后可能不会报告某些锚点。建议在重新定位后某个时间清理这些锚点。 注意:时间长度取决于预期的用户行为和您的用例。 | ||
Unity LIMITED | 设备姿势质量下降。应用程序可能会建议用户去帮助恢复更好的设备跟踪。 不建议创建锚点。无法保证新锚点的准确性或一致性,如果没有足够的场景几何体,创建可能会失败。 | Unity UNKNOWN | Vuforia无法提供限制姿势原因的信息。 | 建议用户保持设备静止,并检查照明条件是否合适,以及跟踪区域是否具有足够的视觉特征。 降级的3自由度姿势可作为后撤姿势使用。 |
Unity INITIALIZING | 设备跟踪正在初始化 | 指示用户移动设备以实现更好的跟踪质量。 | ||
Unity RELOCALIZING | 设备正在尝试重新连接到世界并恢复锚点位置。 | 指示用户返回到此前所看区域。如果在一定时间内(如10秒)报告该情况,则重置设备姿势或指示用户重新启动整个AR。 重新定位后,可能不会报告某些锚/目标。我们建议在重新定位后的某个时间清理这些。 注意:时间长度取决于预期的用户行为和您的用例。 | ||
Unity EXCESSIVE_MOTION 过度运动 | 设备移动得太快了。 | 指示用户放慢移动速度或保持设备静止 | ||
Unity INSUFFICIENT_FEATURES 特征不足 | 设备指向的区域几乎没有视觉特征。虽然传感器读数支持设备跟踪,但视觉里程计系统也依赖于环境中的视觉特征。 | 指示用户指向具有更多视觉特征的区域,或检查照明和对比度是否正确。 | ||
Unity INSUFFICIENT_LIGHT 光照不足 | 由于照明条件差,运动跟踪丢失。 | 指示用户移动到更明亮的区域。 | ||
Unity TRACKED | 提供可靠的设备姿势,并根据环境锚定体验。 | Unity NORMAL | 正常的设备跟踪条件。 | 是时候呈现您的完整增强体验了! 注意:在某些情况下(例如,如果底层平台发现场景几何体不足,或者指向没有要碰撞的曲面的方向),命中测试可能仍然失败 |
5、在Unity中处理Status和Status Info:
- Unity中的大多数ObserverBehavior,包括图像目标、模型目标、区域目标和锚点,都附带了DefaultObserverEventHandler,用于处理即时状态更新。
- 默认情况下,此事件处理程序将根据当前状态显示和隐藏目标游戏对象的父级增强。inspector中的下拉列表允许您配置在显示增强时应考虑哪些状态值。
- 对于更复杂的用例,可以直接订阅ObserverBehavior的OnTargetStatusUpdate事件。此事件适用于所有ObserverBehavior,包括DevicePoseObserver,并将在Status或StatusInfo更改时调用。
- 以下示例显示订阅和处理此事件的设置:
using UnityEngine;
using Vuforia;
public class StatusEventHandler : MonoBehaviour
{
//ObserverBehaviour引用
private ObserverBehaviour mObserverBehaviour;
//获取当前对象的ObserverBehaviour组件,并注册OnStatusChanged事件
void Awake()
{
ObserverBehaviour mObserverBehaviour = GetComponent<ObserverBehaviour>();
if (mObserverBehaviour != null)
mObserverBehaviour.OnTargetStatusUpdated += OnStatusChanged;
}
//当检测目标的状态发生改变,执行代码
void OnStatusChanged(TargetStatus status)
{
Debug.LogFormat("Status is: {0}, statusInfo is: {1}", status.Status, status.StatusInfo);
}
//注销事件
void OnDestroy()
{
if (mObserverBehaviour != null)
mObserverBehaviour.OnTargetStatusUpdated -= OnStatusChanged;
}
}