物体跟踪与运动跟踪结合
本篇介绍如何将 3D 物体跟踪与设备运动跟踪功能相融合,以提升复杂场景下的跟踪稳定性和用户体验。内容包括核心原理、预期效果及潜在问题分析。
基本原理
运动融合(Motion Fusion) 结合 3D 物体跟踪的位姿数据和设备运动跟踪的位姿数据,实现更鲁棒的位姿估计。以下是其核心流程:
数据同步与互补
- 视觉跟踪:通过图像特征点匹配计算当前帧的位姿(位置+旋转),但易受遮挡、模糊或快速移动影响。
- 运动跟踪:利用 IMU 传感器高频输出以及视觉图像的输出获得设备运动数据,但存在累积飘移误差。
- 融合机制:
- 将视觉跟踪的位姿与设备运动跟踪的位姿进行坐标系对齐。
- 当目标物体清晰可见、稳定运动时:以视觉跟踪为主。不断地将视觉跟踪位姿送入融合模块进行修正,以减少整个系统的累积漂移。
- 当目标物体丢失或者在画面中占比过小、快速运动时:此时视觉跟踪失效,以运动跟踪为主。根据当前的运动跟踪位姿进行融合位姿预测。
关键技术点
- 时间戳对齐:将视觉帧的时间戳与运动跟踪数据对齐,避免因延迟导致抖动。
- 坐标系对齐:根据视觉跟踪的轨迹和运动跟踪的轨迹进行坐标系对齐。
- 重定位:目标物体重新出现时,视觉跟踪接管快速校正可能的累积误差,将虚拟物体“拉回”正确位置。
适用场景与限制
运动融合并不适合所有场景下的使用。有以下情形之一的将 不适用 运动融合功能:
- 目标设备不支持 ARCore/ARKit 等运动跟踪功能。详细的设备支持列表参考:运动跟踪设备支持。
- 目标物体在场景中是动态的,例如拿在手上的玩具、手办。
除此之外的场景,使用运动融合将极大的提升 3D 物体跟踪的用户体验,包括但不限于以下使用情景:
- 快速运动:用户手持设备快速移动,运动模糊会导致视觉跟踪失效。
- 目标消失:画面离开目标本身或者目标被动态物体(如行人)遮挡时,依然保持整个场景里虚拟内容的呈现。
- 远离目标:用户手持设备远离导致目标物体在画面中占比过小,依然稳定持续跟踪。
- 低光照条件:视觉跟踪性能下降,需要维持体验。
效果与预期结果
在场景适用的前提下,使用运动融合将比单纯的使用 3D 物体跟踪带来更稳定、平滑的用户体验。
理想效果
- 更稳定的跟踪:虚拟物体不抖动、不跳变。
- 平滑过渡:视觉跟踪失效时,融合位姿的变化连续自然。
- 抗干扰能力:目标物体丢失或被遮挡、设备快速运动等情形下,虚拟物体仍能跟随设备运动持续跟踪。
不理想情况与应对
| 现象 | 原因 | 用户感知 | 解决方案 |
|---|---|---|---|
| 初始未生效 | 运动跟踪需要一定时间进行初始化 | 在初始阶段出现内容消失 | 一定的 UI 提示,确保系统运动跟踪初始化完成 |
| 飘移明显 | 系统误差累积,且长时间无视觉校正 | 虚拟物体偏离原位置 | 引导用户缩短遮挡时间,或增加视觉重定位的提示 |
| 性能下降 | 长时间同时运行两个功能 | 帧率下降画面卡顿 | 正常现象,可通过接口关闭运动融合 |
预期结果验证方法
使用支持的设备在真实场景中测试:
- 对准目标物体,确认虚拟物体稳定。
- 用手遮挡物体2秒并移动设备,观察虚拟物体是否平滑移动。
- 移开手,确认虚拟物体快速回正且无跳变。
总结与最佳实践
运动融合显著提升了 3D 物体跟踪在许多场景下的鲁棒性,但需要设备的硬件支持且性能足够。开发者应根据目标用户设备选择性启用该功能,并在低性能设备上提供降级方案。
实时打开/关闭运动融合功能的 API 参考:
- 原生: setResultPostProcessing
- Unity:EnableMotionFusion