Table of Contents

運行驗證(bring-up)頭顯擴展

爲使 EasyAR 在設備上工作,最重要的工作同時也是最棘手的部分是確保輸入數據正確性。在一個新設備上首次運行 EasyAR 時,超過 90% 的問題都是由錯誤的數據造成的。

如果可能,建議在沒有 EasyAR 存在的時候,僅通過設備及設備接口使用一些測試方法來直接驗證數據的正確性。本文會介紹一些使用 EasyAR 功能來驗證數據的經驗方法,這個過程能幫助理解 外部輸入幀數據,但由於 EasyAR 自身也存在誤差,使用這個耦合在一起的系統驗證數據正確性並不是最佳選擇。

開始之前

運行基礎功能示例

第一次在設備上運行驗證 EasyAR 時,需要確保順序運行這些功能,尤其是不要急於運行 Mega,因爲 Mega 有一些容錯性,在短時間運行或單一現實場景中運行的時候難以發覺問題。

  1. 觀察眼前顯示的 session 信息,確保沒有意外情況發生,並確保 frame count 在持續增長。

  2. 運行 Image ,即 圖像跟蹤 功能,與手機運行效果對比一致(建議以 iPhone 爲標準)。關注跟蹤狀態和目標覆蓋顯示。

    在未開啓運動融合時,圖像跟蹤的效果會有明顯延遲感,這是符合預期的。運動過程正確、設備停下來的時候位置能對齊即可。

  3. 運行 Dense ,即 稠密空間地圖 功能,與手機運行效果對比一致(建議以 iPhone 爲標準)。關注網格位置、生成速度和質量。

    如果輸入數據幀率較低,網格生成速度會變慢,但質量不會明顯變差。

    該功能無法在部分 Android 設備上運行,網格質量也會根據設備而變化。

重要事項

頭顯擴展包所使用的輸入擴展是一個 自定義相機 實現。

在自定義相機或頭顯上使用試用產品(個人版 license、試用版 XR license 或試用版 Mega 服務等)時,EasyAR Sense 每次啓動後會在 100 秒(Mega 用戶可經由 EasyAR 商務在審批後調整時間長度)後停止響應。使用付費版本的 EasyAR Sense 和付費的 EasyAR Mega 服務沒有這個限制。

如果 Image 以及 Dense 都和手機上的效果表現一致或更好,那麼大部分 EasyAR 的功能就都可以在設備上正常工作,可以開始測試 Mega 了。

解決運行中的異常情況:問題分解

如果無法重現與手機上相同的結果,那接下來是一個詳細的問題分解過程,可以參考它來尋找根因。建議始終關注系統日誌輸出。

步驟零:理解頭顯自身系統誤差

還記得 爲 AR/MR 準備設備 中所描述的運動跟蹤和顯示需求嗎?

重要事項

運動跟蹤/VIO 誤差會始終以不同方式影響 EasyAR 算法的穩定性。

重要事項

顯示系統誤差可能會導致虛擬物體和現實物體無法完美對齊。

在一些誤差比較大的情形下,虛擬物體會看起來懸浮於真實物體上面或下面,然後(看起來)一直在漂移。這個現象可以在 Pico 4E 上觀察到,即使不使用 EasyAR 只打開它自己的 VST 也有同樣的現象。

步驟一:查看 session 運行狀態

UI 消息 中的 session 狀態顯示正常所必須正常的功能或數據:

如果看不到 session 狀態信息的顯示,需要嘗試修改選項爲 Log 然後在系統日誌中閱讀 session 的狀態和正在使用的 frame source 的名字。

可以嘗試刪除 ARSession 節點下所有其它 frame source,然後查看是否有什麼變化。

步驟二:確認 EasyAR 接收到的相機幀計數

必須正常的功能或數據:

  • ExternalFrameSource相機幀數據 在 Unity 代碼層的通路(不包含數據正確性以及到原生層的數據通路)

這個數據應該隨時間增長,否則會在幾秒之後顯示警告信息。

如果發現這個數值不增長,應該最先解決。

步驟三:在設備上錄製 EIF,然後在 Unity 編輯器中回放

必須正常的功能或數據:

  • ExternalFrameSource相機幀數據 輸入原生層的通路(不包含數據正確性)
  • 相機幀數據 中的 raw camera image data
  • 相機幀數據 中的 timestamp (不包括時間點和數據同步)

點擊 EIF 來啓動錄製,再次點擊停止。

提示

必須正常停止錄製才能獲取到可隨機索引的 EIF 文件。

在 Unity 編輯器中運行 EIF 數據時最好使用純淨的 EasyAR 場景或使用 EasyAR 的示例以避免場景中存在不正確的配置。

可以在 Unity 編輯器中看到 相機幀數據 的回放。圖像數據並不是字節相等的,整個流程中存在有損編解碼。

EasyAR 會在計算中使用畸變參數但顯示時不會對圖像做反畸變。所以如果輸入了這些數據,當在 Unity 中回放 EIF 文件時,會觀察到沒有反畸變的數據,這是符合預期的。

提示

修改 Unity game 窗口的比例與輸入相同,否則數據會被裁剪顯示。

如果數據播放偏快或偏慢,需要檢查 timestamp 輸入。

附註

使用 EIF 可以做很多事情,可以在 Unity 編輯器中使用 EIF 運行 圖像跟蹤稠密空間地圖 。注意在設備上運行時顯示效果有可能是不一樣的。

步驟四:使用 EIF 運行圖像跟蹤

必須正常的功能或數據:

  • 相機幀數據 中的 raw camera image data
  • 相機幀數據 中的 intrinsics (數據正確性不能完全保證,因爲算法對誤差存在容忍度)

在 Unity 編輯器中使用 EIF 運行圖像跟蹤示例 ImageTracking_Targets,需要錄製一個圖像可以被跟蹤到的 EIF。

附註

圖像跟蹤 需要跟蹤目標占據整個圖像的一定比例,如果無法跟蹤到圖像,嘗試移動頭到更加接近圖像的位置。

如果跟蹤持續失敗或虛擬物體顯示在圖像中遠離目標的位置,則很有可能 intrinsics 存在問題。

如果圖像數據有畸變,可能會看到虛擬物體不會完美的覆蓋圖像上的跟蹤目標,這是符合預期的。當跟蹤目標處於圖像邊緣時這個現象會更加明顯。

步驟五:在設備上運行圖像跟蹤

必須正常的功能或數據:

  • 設備自身的顯示系統
  • 相機幀數據 中的 raw camera image data
  • 相機幀數據 中的 intrinsics (數據正確性不能完全保證,因爲算法對誤差存在容忍度)
  • 相機幀數據 中的 extrinsics
  • 相機幀數據渲染幀數據device pose 的座標一致性
  • 相機幀數據渲染幀數據device pose 的時間差
附註

圖像跟蹤 需要跟蹤目標占據整個圖像的一定比例,如果無法跟蹤到圖像,嘗試移動頭到更加接近圖像的位置。

圖像跟蹤 需要圖像橫向邊長與真實世界中物體的大小一致,在示例中需要跟蹤一個橫向邊長撐滿水平擺放的 A4 紙長邊的圖像,因此不要跟蹤顯示在電腦屏幕上的圖像,除非使用一把尺子並參照尺子將圖像橫向邊長調整到 A4 大小。

如果在使用 EIF 時圖像跟蹤很完美但在設備上卻不同,需要在繼續其它測試前解決它。在後續步驟中解決問題要困難得多。

如果虛擬物體懸浮顯示在某個遠離真實物體的地方,而且即使人不動也是如此,那很有可能 intrinsicsextrinsics 不正確或 相機幀數據渲染幀數據device pose 不在同一個座標系,或者顯示系統產生了這個誤差。

如果虛擬物體在移動頭部的時候持續移動並且看起來就像是有延遲一樣,那有很大可能性 device pose 不夠健康。這經常發生於幾種情況(不能排除有其他問題的可能性),

  • device poseraw camera image data 的數據時間不同步
  • 相機幀數據渲染幀數據 中使用了相同的 pose

步驟六:使用 EIF 並在設備上運行稠密空間地圖

必須正常的功能或數據:

  • 設備自身的顯示系統
  • 相機幀數據 中的 raw camera image data
  • 相機幀數據 中的 intrinsics (數據正確性不能完全保證,因爲算法對誤差存在容忍度)
  • 相機幀數據 中的 extrinsics
  • 相機幀數據 中的 device pose

如果網格生成速度非常慢和/或地面重建坑坑窪窪,那非常有可能 device pose 有問題。也有可能 pose 的座標系不正確或 pose 的時間點不對。

提示

如果輸入數據幀率較低,網格生成速度也會變慢,但質量不會明顯變差。這種情況是符合預期的。

通常分辨精確的網格位置不是非常容易,所以在使用 稠密空間地圖 時顯示系統誤差不一定能觀察出來。

運行 Mega 示例

閱讀以下內容瞭解如何在 Unity 中使用 Mega。如果您還沒有開通 Mega 服務,需聯繫 EasyAR 商務獲取試用資格。

然後在設備上運行 Mega ,與手機運行效果對比一致(建議以 iPhone 爲標準)。關注

  • 物體顯示位置是否正確
  • 遠處(10M 及以外)物體顯示位置和大小是否正確
  • 視線中心以外物體顯示位置和大小是否正確
  • 轉動頭部時物體顯示位置和大小是否正確

解決運行中的異常情況

必須正常的功能或數據:

  • 設備自身的顯示系統
  • 相機幀數據渲染幀數據 中的所有數據

在完成 圖像跟蹤 以及 稠密空間地圖 兩個功能的驗證後,理論上 EasyAR Mega 應該已經被支持了。如果在頭顯上運行的表現明顯比手機上差,需要關注以下內容,

  • 關注 相機幀數據渲染幀數據 中的 pose 數據和 timestamp
  • 關注運動跟蹤/VIO 系統輸出。XR Origin 下面的熊貓會是一個好的參考

另外,還需要重點關注設備自身的顯示系統,尤其是遠處、視線中心以外以及轉動頭部時的物體顯示效果。這類場景在設備自身測試時經常會被忽略,但通常問題依然是設備自身的顯示系統導致的,您需要向 EasyAR 說明這些問題和可能的影響,併爲開發者提供合理效果預期。

重要事項

用戶使用時會非常關注這些顯示問題,而很多設備也確實無法在大空間場景提供非常完美的顯示效果。EasyAR 無法解決設備自身的顯示問題,這需要設備廠商迭代解決,與此同時,用戶也需要理解這些問題。

後續步驟

相關主題

可以在手機上運行的示例:

  • 圖像跟蹤示例 ImageTracking_Targets,可以通過它瞭解 圖像跟蹤 功能的預期執行效果功能
  • 稠密空間地圖示例 SpatialMap_Dense_BallGame,可以通過它瞭解 稠密空間地圖 功能的預期執行效果
  • 運動融合示例 ImageTracking_MotionFusion,可以通過它瞭解 運動融合 功能的預期執行效果
  • Mega 示例 MegaBlock_Basic,可以通過它瞭解 Mega 功能的預期執行效果