Table of Contents

控制 mega 追蹤過程

本文介紹瞭如何控制 mega 追蹤過程中的各項功能和參數,以滿足不同應用場景的需求。

開始之前

調整設備支援等級

MegaTrackerFrameFilterMegaTrackerFrameFilter.MinInputFrameLevel 屬性用於指定 mega 支援的最低設備等級。

alt text

mega 可以在幾乎所有類型的幀資料源上運行,但不同的幀資料源對追蹤效果有不同的影響。

預設情況下,mega 會選擇設備支援的最高等級的幀資料源進行追蹤。預設配置下的支援 mega 的 session 已經配置了支援 6DoF 和 5DoF 的幀資料源。

在 mega 運行時要支援某個等級的幀資料源需要滿足兩個條件:

比如,要在預設 session 中支援 3DoF 追蹤,需要:

又比如,要在預設 session 中刪除 5DoF 追蹤支援,需要:

在沒有滿足條件的幀資料源可用時,session 組裝會失敗。

追蹤目標管理

使用 mega 時,需要指定 MegaTrackerFrameFilter 使用的 target 即 block。

block 來源控制

大部分情況下,建議保持預設配置,即在編輯器中使用 mega studio 匯入 block。

選中 session 下的 Mega Tracker 物體,Block Root Source 選項應該保持為 External(預設)。

alt text

同時,需要指定 Block Root 為場景中的 MegaBlocks 物體。

alt text

修改 Block Root Source 選項可以指定其它 block 來源方式,比如使用 ema 匯入資料時,通常會選擇 InternalMixed 選項。

在指令碼中,可以修改 BlockHolder.BlockRootSource 來達到同樣的效果。

多目標追蹤控制

在大部分的 mega 使用場景下,沒有使用多目標的必要。在熟練掌握如何避免多個 block 互相影響之前,建議一個定位庫中只放一個block。

提示

原理上,mega 會計算設備在所有 block 中的位置,而不是從定位庫中抽選設備看到的 block。考慮不周的使用可能會因資料混淆等原因導致效果劣化。

選中 session 下的 Mega Tracker 物體,修改 Multi Block 選項可以啟用或停用多目標追蹤功能。

alt text

在指令碼中,可以修改 BlockHolder.MultiBlock 來達到同樣的效果。

警告

一般情況下,一個定位庫裡只能同時有一個 block。

修改多目標配置會影響追蹤效果,一般不建議修改。請在 easyar 技術支援的指導下使用。

如果應用執行過程中該配置被修改過,向 easyar 反饋問題時請務必說明這一點。

瞭解當前系統狀態

在預設 session 配置下,UI 訊息 會顯示在螢幕上,其中包含了 mega 追蹤狀態的資訊。

在定位成功時,mega block 下會包含 Found 狀態文字以及當前追蹤的 block 名稱和 ID:

alt text

在定位失敗時,mega block 下會包含 NotFound 狀態文字:

alt text

提示

NotFound 是正常狀態,在 mega 工作的整個過程中經常會出現該狀態,出現該狀態時追蹤仍然在繼續。通常應用開發中不需要對 NotFound 狀態進行特殊處理。

使用 MegaTrackerFrameFilter.LocalizationRespond 事件可以獲取當前的定位狀態,從而瞭解系統當前是否找到了追蹤目標。

以下程式碼展示瞭如何使用該事件,以及常見的需要應用關注的異常狀態的處理方法:

private void Awake()
{
    megaTracker.LocalizationRespond += HandleLocalizationStatusChange;
}
        
private void HandleLocalizationStatusChange(MegaLocalizationResponse response)
{
    var status = response.Status;
    wakingUpCount = status == MegaTrackerLocalizationStatus.WakingUp ? wakingUpCount + 1 : 0;
    if (wakingUpCount >= 5)
    {
        // 服務正在喚醒中,需要讓終端使用者等待
    }

    if (status == MegaTrackerLocalizationStatus.QpsLimitExceeded)
    {
        // QPS 超限,會隨機有終端使用者定位失敗(總體追蹤質量下降)
        // 這時一般需要付費提升 QPS 上限以保障當前使用者量下的追蹤質量
    }

    if (status == MegaTrackerLocalizationStatus.ApiTokenExpired)
    {
        // Token過期,這只會出現在使用 Token 介面存取服務時
        // 接近該問題需要應用請求自己的後臺獲取 Token,並呼叫 MegaTrackerFrameFilter.UpdateToken 進行更新
    }
}

如果應用經常遇到 MegaTrackerLocalizationStatus.RequestTimeout 狀態,通常說明裝置連線服務的網路狀況不佳,建議優化網路環境以提升追蹤質量。在網路狀況無法改善的場景下,可以考慮增加請求逾時時間。

附註

無法通過該事件獲取定位返回的 pose。

事實上,定位返回的 pose 在應用開發中是不需要的,easyar 會在定位返回後通過本地演算法計算出更準確的 pose 並返回給開發者使用,而該 pose 已經體現在 block 的 transform 中,可以參考 獲取 session 的執行結果

暫停和繼續

mega 的追蹤和定位功能可以分別暫停和繼續。

暫停追蹤

設定 MegaTrackerFrameFilter.enabled 為 false 可以暫停追蹤。

預設在追蹤暫停後,所有 block 節點下的內容都會隱藏。

暫停定位

設定 MegaTrackerFrameFilter.EnableLocalization 為 false 可以暫停定位。

警告

暫停定位會影響追蹤效果,一般不建議修改。請在 easyar 技術支援的指導下使用。

如果應用執行過程中定位被暫停過,向 easyar 反饋問題時請務必說明這一點。

服務和請求控制

可以通過修改 MegaTrackerFrameFilter 元件的參數來控制請求服務的行為。

請求間隔和逾時

選中 session 下的 Mega Tracker 物體,修改 Request Time Parameters 下的選項可以調整請求服務的時間間隔和逾時時間。

alt text

在指令碼中,可以修改 MegaTrackerFrameFilter.RequestTimeParameters 來達到同樣的效果。

警告

修改請求間隔會影響追蹤效果,一般不建議修改。請在 easyar 技術支援的指導下使用。

如果應用執行過程中請求間隔被修改過,向 easyar 反饋問題時請務必說明這一點。

切換定位庫

使用 MegaTrackerFrameFilter.SwitchEndPoint(ExplicitAddressAccessData, BlockRootController) 可以在執行時切換定位庫。使用這個介面時相機畫面及 session 不會中斷。

相關主題