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 服務沒有這個限制。

ImageDense 表現皆與手機效果一致或更佳,則多數 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 運行圖像跟蹤

必須正常的功能或數據:

  • camera frame data 中的 raw camera image data
  • camera frame 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 功能的預期執行效果