Table of Contents

Диагностика и исправление дрожания и дрейфа контента в приложении

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

Эта статья поможет понять причины дрожания и дрейфа контента и предлагает систематический процесс диагностики и оптимизации.

Отличайте "нормальное дрожание" от "аномального дрейфа"

Сначала нужно сформировать реалистичные ожидания. Высокоточное AR-tracking на мобильных устройствах само по себе является сложной задачей. Следующие ситуации находятся в нормальном диапазоне. Их нельзя полностью устранить, но можно оптимизировать:

  • Небольшое высокочастотное дрожание:

    • Проявление: Виртуальный объект слегка дрожит на уровне миллиметров.
    • Причина: Это вызвано физическим шумом датчиков устройства, пределами точности алгоритмов visual tracking и небольшим дрожанием рук при удержании устройства.
    • Пример: При наблюдении с близкого расстояния, например если разместить виртуальный объект на столе и подойти ближе, такое небольшое дрожание нормально.
  • Кратковременный дрейф:

    • Проявление: Когда пользователь быстро перемещает или поворачивает устройство, виртуальный объект на короткое время (0.5-1 секунду) получает смещение позиции, а затем восстанавливается.
    • Причина: При быстром движении накопленная ошибка IMU (инерциального измерительного блока) и задержка visual localization в SLAM-системе устройства могут вызывать кратковременный дрейф позиции.
    • Пример: В динамических сценах это допустимо. Если объект быстро "возвращается" в правильную позицию, значит система работает эффективно.

А следующие ситуации являются аномальными проблемами, которые нужно диагностировать и исправлять:

  • Постоянный значительный дрейф позиции: Виртуальный объект медленно и непрерывно уходит от своего правильного положения и не восстанавливается или восстанавливается только через долгое время.
  • Сильные скачки или мерцание: Виртуальный объект сильно прыгает на экране или то появляется, то исчезает.
  • Несогласованная относительная позиция с реальными объектами: Виртуальный объект не может стабильно "закрепиться" на реальном объекте.
Примечание

Также есть важный момент:
Для устройств, работающих в режимах 0DoF, 3DoF или 5DoF, ощущение совмещения и реалистичности изначально слабее, чем у устройств 6DoF. Когда пользователь быстро движется, поворачивает или идет по лестнице, виртуальные объекты не могут следовать идеально.
Поэтому в таких режимах явления вроде "парения" контента в воздухе или "смещения позиции" являются фундаментальными ограничениями возможностей устройства, а не неисправностью "дрожания или дрейфа контента", рассматриваемой в этой статье.
О различиях опыта между разными режимами xDoF см. введение в Лучшие практики навигации.

Систематический процесс диагностики

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

Шаг 1. Внешняя среда и аппаратные факторы (изменение кода не требуется)

  1. Проверка физической среды:

    • Насыщенность текстурами
      Не слишком ли однообразна тестовая среда? Большие однотонные белые стены, гладкие полы и стеклянные поверхности могут приводить к отказам или ошибкам visual localization.
    • Динамические объекты
      Есть ли в среде много движущихся объектов, например толпы людей или движущиеся автомобили? Динамические объекты мешают visual localization, но такая проблема обычно кратковременная.
    • Путаница сцен
      Есть ли в среде очень похожие области, например лифтовые холлы у разных входов? Визуально похожие зоны влияют на localization и могут заставлять результаты локализации прыгать между похожими областями. Такие проблемы можно избежать, заранее задав подходящую prior information.
  2. Проверка аппаратной части устройства:

    • Нагрев устройства
      Сильно ли нагревается устройство после длительной работы? Перегрев может вызывать снижение частот CPU/GPU и влиять на tracking performance собственной SLAM-системы устройства. Это самая частая причина постоянного дрейфа.
    • Производительность устройства
      Некоторые старые устройства ограничены производительностью hardware и точностью компонентов, поэтому на них легче возникает scale drift, из-за чего виртуальный контент также дрейфует. Попробуйте заменить устройство для сравнительного теста, чтобы понять, вызвана ли проблема ограничениями самого устройства.

Шаг 2. Анализ качества карты и локализации (с использованием внешних инструментов)

  1. Используйте Mega Toolbox:

    • Запустите Mega Toolbox в той же точке и наблюдайте за стабильностью localization.
    • Если localization в Toolbox также дрейфует или прыгает: Проблема находится в самой карте или текущая среда не подходит для localization.
    • Если localization в Toolbox стабильна: Проблема находится в вашем приложении. Перейдите к шагу 3.
  2. Запустите EIF data в PC simulation:

    • Воспроизведите EIF data, записанные на месте.
    • Если воспроизведение также дрейфует или прыгает: Это означает, что сама сцена не подходит для localization, или есть проблема в самой карте, или у устройства, записавшего EIF, есть scale drift в motion tracking.
    • Если воспроизведение стабильно: Это означает, что сама сцена дружелюбна к localization, а проблема может быть связана с факторами при realtime-запуске вашего приложения, например нагревом устройства и throttling.

Шаг 3. Проверка внутренней логики приложения

  1. Обновление pose:

    • Проверьте, не применяете ли вы к pose data ненужное дополнительное сглаживание, например чрезмерные Lerp или SmoothDamp, которые наоборот могут вызывать задержку и ощущение дрейфа.
    • В большинстве случаев самым стабильным подходом является прямое использование исходного Pose, возвращенного Mega.
  2. Соответствие coordinate system:

    • Убедитесь, что связи node между виртуальными объектами, scene camera, MegaTracker и похожими объектами корректны, а значения local transform у nodes под MegaBlocks не изменялись.
    • Неправильная настройка node может привести к неверным преобразованиям coordinate system и вызвать непредсказуемое поведение rendering контента.

Особое напоминание: проблемы visual overlay на OST-headset

После проверки localization и rendering logic, если вы используете OST (optical see-through) headset, нужно также учитывать особую категорию проблем.

Даже если само устройство обладает хорошей способностью 6DoF motion tracking, иногда virtual object все равно плохо совмещаются с physical space. Обычно это не сбой Mega localization service, а присущее явление, вызванное оптическими принципами OST-устройств, например ошибками optical alignment или различиями eye calibration.

Подробное объяснение и способы оценки таких проблем см. в Особых примечаниях для OST-устройств.

Итоги и лучшие практики

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

Тип проблемы Возможная причина Лучшая практика
Небольшое дрожание Шум датчиков, пределы алгоритма Такое небольшое дрожание является нормальным и обычно не требует особого внимания
Дрейф после быстрого движения Задержка SLAM, коррекция алгоритма Можно направлять пользователя двигать устройство плавно. Если быстрое восстановление невозможно, уделите этому дополнительное внимание
Постоянный большой дрейф Сбой SLAM, различия устройств Используйте другое устройство для cross-validation
Сильные скачки/мерцание Похожая сцена, среда неблагоприятна для localization Задайте auxiliary prior information или направляйте пользователя
Несогласованная относительная позиция с реальными объектами Ошибка localization/map, ошибка code logic Тестируйте с нескольких viewpoints, наблюдайте позицию virtual object и исправьте возможные ошибки кода

Если после описанной диагностики и исправлений проблема все еще существует, отправьте подробный отчет через Issue reporting, приложив screen recordings, EIF data recordings и подробные logs.