Обнаружение объектов и отслеживание движения в сочетании
В этой статье описывается интеграция отслеживания 3D-объектов с функцией отслеживания движения устройства для повышения стабильности отслеживания и улучшения пользовательского опыта в сложных сценах. Рассматриваются основные принципы, ожидаемые результаты и анализ потенциальных проблем.
Основные принципы
Слияние данных о движении (Motion Fusion) объединяет данные о позиции и ориентации от отслеживания 3D-объектов и отслеживания движения устройства для получения более надежной оценки позиции. Основной процесс включает:
Синхронизация и дополнение данных
- Визуальное отслеживание: Расчет позиции (положение + вращение) текущего кадра через сопоставление особенностей изображения. Уязвимо к окклюзиям, размытости или быстрому движению.
- Отслеживание движения: Использует высокочастотные данные IMU-датчиков и визуальный поток. Подвержено накоплению дрейфовой погрешности.
- Механизм слияния:
- Согласование систем координат визуального отслеживания и отслеживания движения.
- При четкой видимости цели и стабильном движении: Приоритет визуальному отслеживанию. Постоянная коррекция данных слияния для снижения системного дрейфа.
- При потере цели, малом размере в кадре или быстром движении: Приоритет отслеживанию движения. Прогнозирование позиции на основе текущих данных IMU.
Ключевые технические аспекты
- Синхронизация временных меток: Совмещение временных меток визуальных кадров и данных движения для устранения дрожания.
- Согласование систем координат: Выравнивание траекторий визуального отслеживания и данных движения.
- Перелокализация: При повторном появлении цели визуальное отслеживание быстро корректирует накопившуюся погрешность, "возвращая" виртуальный объект в правильное положение.
Применимые сценарии и ограничения
Слияние данных о движении подходит не для всех ситуаций. Не применяйте функцию в случаях:
- Устройство не поддерживает отслеживание движения (ARCore/ARKit и т.д.). Список совместимых устройств: Поддержка устройств.
- Целевой объект динамичен (например, игрушка в руках, фигурка).
В остальных сценариях слияние значительно улучшит пользовательский опыт, включая:
- Быстрое движение: Размытие изображения при быстром перемещении устройства.
- Исчезновение цели: Выход объекта из кадра или временная окклюзия (например, человеком).
- Удаление от цели: Уменьшение объекта в кадре при отдалении.
- Слабое освещение: Снижение эффективности визуального отслеживания.
Результаты и ожидаемые эффекты
При соблюдении условий слияние обеспечит более стабильный и плавный опыт, чем чистое 3D-отслеживание объектов.
Идеальный результат
- Стабильность: Виртуальный объект не дрожит и не скачет.
- Плавные переходы: Естественное изменение позиции при потере визуального контакта.
- Устойчивость к помехам: Объект сохраняет привязку при окклюзиях, быстром движении или потере цели.
Нежелательные явления и решения
| Явление | Причина | Восприятие пользователя | Решение |
|---|---|---|---|
| Задержка инициализации | Требуется время для запуска отслеживания движения | Исчезновение контента на старте | UI-подсказки о завершении инициализации |
| Заметный дрейф | Накопление системной погрешности без визуальной коррекции | Смещение виртуального объекта | Сокращение времени окклюзий, подсказки для перелокализации |
| Снижение производительности | Длительная параллельная работа двух модулей | Падение FPS, подтормаживания | Штатная ситуация, отключение слияния через API |
Метод проверки
Тестирование на совместимом устройстве в реальных условиях:
- Наведение на цель: Убедиться в стабильности объекта.
- Закрытие объекта рукой на 2 секунды с перемещением: Проверить плавность движения виртуального объекта.
- Открытие объекта: Убедиться в быстром и бесшовном возврате на место.
Итоги и рекомендации
Слияние данных о движении значительно повышает надежность 3D-отслеживания, но требует аппаратной поддержки и достаточной производительности. Разработчикам следует включать функцию выборочно и предусматривать упрощенные режимы для слабых устройств.
API для управления слиянием в реальном времени:
- Нативный: setResultPostProcessing
- Unity: EnableMotionFusion