Table of Contents

Управление процессом отслеживания Mega

В этой статье описывается, как управлять различными функциями и параметрами процесса отслеживания Mega для удовлетворения потребностей различных сценариев применения.

Перед началом

Настройка уровня поддержки устройства

Свойство MegaTrackerFrameFilter.MinInputFrameLevel компонента MegaTrackerFrameFilter используется для указания минимального уровня устройства, поддерживаемого Mega.

alt text

Mega может работать практически с любым типом источника кадров данных, но разные источники по-разному влияют на результаты отслеживания.

По умолчанию Mega выбирает источник кадров данных с наивысшим уровнем поддержки устройства для отслеживания. Сессия с поддержкой Mega в конфигурации по умолчанию уже настроена с источниками кадров данных, поддерживающими 6DoF и 5DoF.

Для поддержки источника кадров данных определенного уровня во время работы Mega должны выполняться два условия:

  • Требуемый источник кадров данных должен входить в группу доступных источников сессии.
  • MegaTrackerFrameFilter.MinInputFrameLevel должен быть больше или равен уровню CameraTransformType требуемого источника кадров данных.

Например, для поддержки 3DoF-отслеживания в сессии по умолчанию необходимо:

Например, чтобы удалить поддержку 5DoF-отслеживания в сессии по умолчанию, необходимо:

При отсутствии доступного источника кадров данных, соответствующего условиям, сборка сессии завершится неудачей.

Управление целями отслеживания

При использовании Mega необходимо указать target (цель), то есть block (блок), который будет использоваться компонентом MegaTrackerFrameFilter.

Управление источником block

В большинстве случаев рекомендуется сохранять конфигурацию по умолчанию, то есть импортировать блоки с помощью Mega Studio в редакторе.

Выберите объект Mega Tracker в сессии, параметр Block Root Source должен оставаться External (по умолчанию).

alt text

Кроме того, необходимо указать Block Root как объект MegaBlocks в сцене.

alt text

Изменение параметра Block Root Source позволяет указать другие способы получения блоков, например, при импорте данных через ema обычно выбирают опцию Internal или Mixed.

В скриптах аналогичного эффекта можно достичь, изменив BlockHolder.BlockRootSource.

Управление отслеживанием нескольких целей

В большинстве сценариев использования Mega нет необходимости в отслеживании нескольких целей. Пока вы не научитесь уверенно избегать взаимного влияния нескольких блоков, рекомендуется размещать в библиотеке локализации только один блок.

Совет

В принципе, Mega вычисляет позицию устройства во всех блоках, а не выбирает из библиотеки локализации блок, который видит устройство. Непродуманное использование может привести к ухудшению результатов из-за путаницы в данных и других причин.

Выберите объект Mega Tracker в сессии, изменение параметра Multi Block позволяет включить или отключить функцию отслеживания нескольких целей.

alt text

В скриптах аналогичного эффекта можно достичь, изменив BlockHolder.MultiBlock.

Предупреждение

Как правило, в одной библиотеке локализации может находиться только один блок одновременно.

Изменение конфигурации множественных целей влияет на качество отслеживания и обычно не рекомендуется. Используйте только под руководством технической поддержки EasyAR.

Если эта конфигурация изменялась во время выполнения приложения, обязательно сообщите об этом при обращении в службу поддержки EasyAR.

Понимание текущего состояния системы

В конфигурации сессии по умолчанию сообщения UI отображаются на экране, включая информацию о состоянии отслеживания Mega.

При успешной локализации под Mega Block будет отображаться статус Found (Найдено), а также имя и 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)
    {
        // Срок действия токена истек (это происходит только при использовании API Token для доступа к сервису)
        // Для решения этой проблемы приложению необходимо запросить токен у своего серверного компонента и вызвать MegaTrackerFrameFilter.UpdateToken для обновления
    }
}

Если приложение часто сталкивается со статусом MegaTrackerLocalizationStatus.RequestTimeout, это обычно указывает на плохое сетевое соединение устройства с сервисом. Рекомендуется оптимизировать сетевую среду для повышения качества отслеживания. В сценариях, где улучшить сетевое состояние невозможно, можно рассмотреть увеличение времени ожидания запроса.

Примечание

Через это событие невозможно получить pose (позицию и ориентацию), возвращаемую локализацией.

Фактически, в разработке приложений pose, возвращаемая локализацией, не требуется. EasyAR после возврата локализации с помощью локального алгоритма вычисляет более точную pose и возвращает ее разработчику для использования. Эта pose уже отражена в transform блока, см. Получение результатов работы сессии.

Приостановка и возобновление

Функции отслеживания и локализации Mega можно приостанавливать и возобновлять отдельно.

Приостановка отслеживания

Установка свойства MegaTrackerFrameFilter.enabled в значение false приостанавливает отслеживание.

По умолчанию после приостановки отслеживания все содержимое под узлами block будет скрыто.

Приостановка локализации

Установка свойства MegaTrackerFrameFilter.EnableLocalization в значение false приостанавливает локализацию.

Предупреждение

Приостановка локализации влияет на качество отслеживания и обычно не рекомендуется. Используйте только под руководством технической поддержки EasyAR.

Если локализация приостанавливалась во время выполнения приложения, обязательно сообщите об этом при обращении в службу поддержки EasyAR.

Управление сервисом и запросами

Поведение запросов к сервису можно контролировать путем изменения параметров компонента MegaTrackerFrameFilter.

Интервал запросов и таймаут

Выберите объект Mega Tracker в сессии, изменение параметров в разделе Request Time Parameters позволяет настроить интервал запросов к сервису и время ожидания.

alt text

В скриптах аналогичного эффекта можно достичь, изменив MegaTrackerFrameFilter.RequestTimeParameters.

Предупреждение

Изменение интервала запросов влияет на качество отслеживания и обычно не рекомендуется. Используйте только под руководством технической поддержки EasyAR.

Если интервал запросов изменялся во время выполнения приложения, обязательно сообщите об этом при обращении в службу поддержки EasyAR.

Переключение библиотеки локализации

Использование метода MegaTrackerFrameFilter.SwitchEndPoint(ExplicitAddressAccessData, BlockRootController) позволяет переключить библиотеку локализации во время выполнения. При использовании этого интерфейса изображение с камеры и работа сессии не прерываются.

Связанные темы