物體追蹤與運動追蹤結合
本篇介紹如何將 3D 物體追蹤與設備運動追蹤功能相融合,以提升複雜場景下的追蹤穩定性和用戶體驗。內容包括核心原理、預期效果及潛在問題分析。
基本原理
運動融合(Motion Fusion) 結合 3D 物體追蹤的位姿數據和設備運動追蹤的位姿數據,實現更魯棒的位姿估計。以下是其核心流程:
數據同步與互補
- 視覺追蹤:通過圖像特徵點匹配計算當前幀的位姿(位置+旋轉),但易受遮擋、模糊或快速移動影響。
- 運動追蹤:利用 IMU 傳感器高頻輸出以及視覺圖像的輸出獲得設備運動數據,但存在累積飄移誤差。
- 融合機制:
- 將視覺追蹤的位姿與設備運動追蹤的位姿進行坐標系對齊。
- 當目標物體清晰可見、穩定運動時:以視覺追蹤為主。不斷地將視覺追蹤位姿送入融合模塊進行修正,以減少整個系統的累積漂移。
- 當目標物體丟失或者在畫面中佔比過小、快速運動時:此時視覺追蹤失效,以運動追蹤為主。根據當前的運動追蹤位姿進行融合位姿預測。
關鍵技術點
- 時間戳對齊:將視覺幀的時間戳與運動追蹤數據對齊,避免因延遲導致抖動。
- 坐標系對齊:根據視覺追蹤的軌跡和運動追蹤的軌跡進行坐標系對齊。
- 重定位:目標物體重新出現時,視覺追蹤接管快速校正可能的累積誤差,將虛擬物體「拉回」正確位置。
適用場景與限制
運動融合並不適合所有場景下的使用。有以下情形之一的將 不適用 運動融合功能:
- 目標設備不支持 ARCore/ARKit 等運動追蹤功能。詳細的設備支持列表參考:運動追蹤設備支持。
- 目標物體在場景中是動態的,例如拿在手上的玩具、手辦。
除此之外的場景,使用運動融合將極大的提升 3D 物體追蹤的用戶體驗,包括但不限於以下使用情景:
- 快速運動:用戶手持設備快速移動,運動模糊會導致視覺追蹤失效。
- 目標消失:畫面離開目標本身或者目標被動態物體(如行人)遮擋時,依然保持整個場景裡虛擬內容的呈現。
- 遠離目標:用戶手持設備遠離導致目標物體在畫面中佔比過小,依然穩定持續追蹤。
- 低光照條件:視覺追蹤性能下降,需要維持體驗。
效果與預期結果
在場景適用的前提下,使用運動融合將比單純的使用 3D 物體追蹤帶來更穩定、平滑的用戶體驗。
理想效果
- 更穩定的追蹤:虛擬物體不抖動、不跳變。
- 平滑過渡:視覺追蹤失效時,融合位姿的變化連續自然。
- 抗干擾能力:目標物體丟失或被遮擋、設備快速運動等情形下,虛擬物體仍能跟隨設備運動持續追蹤。
不理想情況與應對
| 現象 | 原因 | 用戶感知 | 解決方案 |
|---|---|---|---|
| 初始未生效 | 運動追蹤需要一定時間進行初始化 | 在初始階段出現內容消失 | 一定的 UI 提示,確保系統運動追蹤初始化完成 |
| 飄移明顯 | 系統誤差累積,且長時間無視覺校正 | 虛擬物體偏離原位置 | 引導用戶縮短遮擋時間,或增加視覺重定位的提示 |
| 性能下降 | 長時間同時運行兩個功能 | 幀率下降畫面卡頓 | 正常現象,可通過接口關閉運動融合 |
預期結果驗證方法
使用支持的設備在真實場景中測試:
- 對準目標物體,確認虛擬物體穩定。
- 用手遮擋物體2秒並移動設備,觀察虛擬物體是否平滑移動。
- 移開手,確認虛擬物體快速回正且無跳變。
總結與最佳實踐
運動融合顯著提升了 3D 物體追蹤在許多場景下的魯棒性,但需要設備的硬件支持且性能足夠。開發者應根據目標用戶設備選擇性啟用該功能,並在低性能設備上提供降級方案。
實時打開/關閉運動融合功能的 API 參考:
- 原生: setResultPostProcessing
- Unity:EnableMotionFusion