Table of Contents

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

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

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

Рабочий процесс tracker

Рабочий процесс tracker выглядит так:

flowchart LR
  subgraph startup_graph[Запуск]
    direction TB
    sstart((Запуск session))
    create[Нативное создание]
    load(Загрузить target)
    verify[Проверка trial]
    init_g[[Инициализация]]
  end
  
  subgraph init_graph[Инициализация]
    direction TB
    init_{Инициализация 6DoF успешна<br>или не 6DoF}
    init[[Процесс инициализации локального tracking]]
    detecting[[Обнаружение]]
    tracking_g[[Tracking]]
  end

  subgraph tracking_graph[Tracking]
    direction TB
    tracking[[Непрерывный tracking]]
  end

  subgraph stopping_graph[Остановка]
    direction TB
    unload(Выгрузить target)
    dispose[Нативное уничтожение]
    sstop([Остановка session])
  end

  sstart --> create --> load --> verify --> init_g
  init --> init_ --> |Yes| detecting --> tracking_g
  unload --> dispose --> sstop
  init_ --> |No| init

  startup_graph --> init_graph
  init_graph --> tracking_graph
  tracking_graph --> stopping_graph

Процесс в целом делится на несколько этапов:

  • Запуск:
    • После запуска session создаётся tracker на нативном уровне.
    • После Start() у target он загружается в соответствующий tracker.
    • Для пробных данных требуется онлайн-проверка права на пробное использование; только после успешной проверки переходят к следующему этапу.
  • Инициализация:
    • При использовании frame source 6DoF начинается процесс локальной инициализации tracking.
      • Локальная инициализация tracking может занять некоторое время; это зависит от сложности сцены и возможностей устройства, а также обычно связано с алгоритмом, используемым нижним уровнем frame source.
    • При использовании frame source, не относящегося к 6DoF, этап локальной инициализации пропускается, и сразу начинается обнаружение.
    • Процесс обнаружения тоже может занять некоторое время, в зависимости от того, насколько легко локализуется сцена, и от качества захвата и построения карты.
    • При настройках по умолчанию содержимое этого этапа не показывается; поведение можно управлять через параметры компонента ActiveController.
  • Tracking:
    • tracker непрерывно отслеживает текущий block.
    • При настройках по умолчанию отображается только содержимое под узлами target, находящимися в состоянии tracking (TargetController.IsTracked == true); это поведение можно управлять через параметры компонента ActiveController.
  • Остановка:
    • После остановки session target выгружается, а tracker на нативном уровне уничтожается.

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

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

alt text

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

По умолчанию Mega выбирает для tracking frame source самого высокого уровня, поддерживаемого устройством. Session, совместимая с Mega Go в настройках по умолчанию, уже настроена с frame source, поддерживающими 6DoF и 5DoF.

Чтобы Mega поддерживал frame source определённого уровня во время выполнения, должны выполняться два условия:

Например, чтобы поддержать tracking 3DoF в session по умолчанию, нужно:

Другой пример: чтобы убрать поддержку tracking 5DoF из session по умолчанию, нужно:

Если ни одна frame source, удовлетворяющая условиям, недоступна, сборка session завершится с ошибкой.

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

При конфигурации session по умолчанию на экране отображаются UI-сообщения, содержащие информацию о состоянии Mega Go.

Состояние tracker отображается рядом с Mega Go: , например Tracking или VerifyingTrial. Во время обнаружения и tracking ниже также показываются обновления локализации.

alt text

Состояние tracking текущего загруженного block отображается под Mega Go: в формате Block (<trackingStatus>): <name> (<id>). <name> — имя block, <id> — ID block. trackingStatus может быть Tracking или NotTracking, что соответственно указывает, отслеживается ли текущий block.

alt text

Свойство MegaGoTrackerFrameFilter.Status позволяет получить текущее состояние и понять, как работает tracker. При возникновении ошибки можно получить её состояние через MegaGoTrackerFrameFilter.Error и обработать соответствующим образом.

Следующий код показывает, как использовать эти свойства и как обрабатывать распространённые нештатные состояния, на которые приложению следует обратить внимание:

void HandleTrackerStatus()
{
    if (tracker.Status == MegaGoTrackerStatus.Error)
    {
        if (tracker.Error == MegaGoTrackerError.ServiceVerificationFailed)
        {
            // локальная проверка не пройдена; рекомендуется проверить, не истек ли срок data и не стали ли данные недействительными (тестовые данные становятся недействительными после перехода с тестовой версии на официальную).
        }
        else if (tracker.Error == MegaGoTrackerError.LocalVerificationFailed)
        {
            // локальная проверка не пройдена; рекомендуется проверить, полон ли файл target.
        }
        else
        {
            // другие ошибки.
        }
    }
    else if (tracker.Status == MegaGoTrackerStatus.VerifyingTrial)
    {
        // идет проверка пробного target. Если проверка долго не завершается, рекомендуется проверить сетевое подключение.
    }
    else if (tracker.Status == MegaGoTrackerStatus.VIOInitializing)
    {
        // инициализируется вход VIO. Если инициализация долго не завершается, рекомендуется подсказать пользователю оптимизировать способ использования.
        // например: "попробуйте направить камеру по диагонали вперед и 5 раз широко переместить устройство влево и вправо."
    }
}

Для получения обновлений локализации используйте событие MegaGoTrackerFrameFilter.LocalizationRespond.

Пауза и продолжение

Установите для MegaGoTrackerFrameFilter.enabled значение false, чтобы приостановить tracking.

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

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