Table of Contents

Руководство по использованию multi-map и лучшие практики

При разработке приложений Mega часто возникает вопрос, следует ли добавлять несколько map (Block) в одну localization library. Неправильное использование multi-map не только не повышает возможности приложения, но и может привести к снижению производительности и скачкам positioning.

Это руководство поможет вам правильно понять и использовать функцию multi-map и избежать распространённых заблуждений.

Почему нужно избегать добавления нескольких map?

Ключевой принцип: не добавляйте несколько map для "расширения зоны покрытия".

В подавляющем большинстве случаев одна localization library должна содержать только одну Mega Block map для одного места. Ниже приведены распространённые ошибочные варианты использования, которых следует избегать:

  • Ошибочный сценарий A: multi-region

    • Идея: создать отдельные map для соединённых между собой "зоны A", "зоны B" и "зоны C" в туристической зоне, затем разом добавить эти три map в library приложения, ожидая, что пользователь сможет бесшовно переключаться при перемещении.
    • Проблема: между этими тремя map нет математической связи в пространственных координатах, они независимы друг от друга. Из-за несогласованности их coordinate systems бесшовное переключение при движении невозможно, поэтому на границах зон возникают скачки positioning.
    • Решение: для таких сценариев лучше всего собрать "зону A", "зону B" и "зону C" по методу сбора данных сверхбольшого пространства, обеспечив достаточное перекрытие между ними. Затем выполнить map construction по задаче fusion сверхбольшого диапазона. В результате будет создана single Block map с единой coordinate system, включающая все указанные зоны; её можно добавить в localization library.
  • Ошибочный сценарий B: multi-location

    • Идея: создать map для торгового центра в одном месте, затем создать map для одноимённого торгового центра в другом месте и использовать обе в одном приложении.
    • Проблема: это серьёзно замедляет positioning. При positioning устройство должно одновременно сравнивать данные всех map в library, вычислительная нагрузка резко растёт, а время initialization увеличивается. Пользователь в один момент может находиться только в одном торговом центре, поэтому загрузка map другого торгового центра расходует ресурсы впустую. Когда нагрузка запросов для одного торгового центра высока, это также замедляет время ответа запросов для другого.
    • Решение: создавайте разные localization libraries для торговых центров в разных местах, каждая library должна содержать только одну map. В приложении динамически обращайтесь к соответствующей localization library согласно текущему положению пользователя.
  • Ошибочный сценарий C: cross-time

    • Идея: для одного и того же места выполнить сбор и map construction днём, затем ночью, после чего добавить дневную и ночную map в library, рассчитывая на одинаковый опыт пользователя в разное время.
    • Проблема: этот сценарий похож на ошибочный сценарий A: между отдельными результатами map construction невозможно гарантировать пространственную связь.
    • Решение: объедините дневной и ночной сбор для fusion map construction по задаче fusion сверхбольшого диапазона. Добавьте итоговую single Block map в localization library.
  • Ошибочный сценарий D: cross-version

    • Идея: для одного места уже создана и используется map версии A; затем в процессе эксплуатации создаётся более новая map версии B и добавляется в исходную localization library, чтобы использовать новую map без повторного выпуска приложения.
    • Проблема: поскольку это разные версии map одного и того же места, при positioning результат может прыгать между двумя разными версиями данных.
    • Решение: обновите старую map construction по lossless full update, чтобы обновить версию данных map и при этом сохранить coordinate system неизменной. После добавления обновлённой map обязательно удалите старую версию map из localization library.
  • Ошибочный сценарий E: supplementary update

    • Идея: для одного места уже создана и используется map версии A; позже из-за изменения локальной области или необходимости досбора малого участка создаётся новая map B и добавляется в исходную localization library, чтобы использовать новую map без повторного выпуска приложения.
    • Проблема: новая map B для малого участка не имеет пространственной coordinate correlation с исходной map A, и в зоне между старыми и новыми данными возникнут скачки positioning.
    • Решение: выполните supplementary update для старой map construction, чтобы новый малый участок сохранял ту же coordinate system, что и старая map. После добавления обновлённой map обязательно удалите старую версию map из localization library.

Итог: попытка собрать большой мир из нескольких малых map не подходит для высокоточных map Mega. Философия проектирования Mega - это пространственно непрерывное, координатно единое и согласованное во времени высокоточное 3D-представление.

Сценарии, где multi-map действительно нужны

Когда же действительно нужно добавлять несколько map (Block) в одну library? Основные сценарии - это "parallel tasks" или "multi-space selection", а не "spatial stitching".

  • Сценарий 1: multi-space selection

    • Описание: ваше приложение обслуживает несколько полностью разных областей в одном месте. Но из-за структуры здания или ограничений практики сбора эти области невозможно полностью связать в данных, и пользователю может понадобиться сначала выбрать область, где он находится. Например, разные этажи крупной больницы.
    • Реализация: после выбора области пользователем используйте эту prior information, чтобы динамически активировать соответствующую single map этого места. В один момент в вычислениях positioning по-прежнему участвует только одна map в localization library. Когда пользователь переходит в новую область, нужно заново подтвердить выбор области.
  • Сценарий 2: parallel tasks

    • Описание: приложению нужно одновременно обрабатывать две или более независимые, известные задачи object tracking; эти объекты находятся в одном месте, но не связаны друг с другом и сильно отличаются признаками. Например, несколько экспонатов в музее.
    • Реализация: в таком продвинутом сценарии можно создать независимую map для каждого объекта, а затем добавить эти "object maps" в одну localization library. Но учтите: производительность positioning будет зависеть от числа объектов, добавленных в localization library. Если объектов очень много, возможно, придётся найти баланс между производительностью positioning и количеством localization libraries, например сгруппировать объекты и создать несколько localization libraries отдельно.

Поведение rendering при использовании multi-map

Важно учитывать, что при использовании multi-map positioning поведение 3D rendering отличается на разных платформах и версиях.

Рекомендации по лучшим практикам

Если ваш случай действительно относится к сценариям, где multi-map нужны, или вы вынуждены использовать multi-map, придерживайтесь следующих принципов:

  1. Активация по требованию: когда пользователь делает выбор или входит в определённую область, передавайте соответствующую prior information при отправке positioning request и загружайте только соответствующий 3D-контент.
  2. Динамическое переключение: предоставьте понятный UI для выбора scene. Перед загрузкой 3D-контента новой map сначала выгрузите 3D-контент старой map, чтобы освободить memory.
  3. State management: явно управляйте текущей активной map в коде, слушайте Block ID в результатах positioning, чтобы различать feedback positioning разных map.
  4. Performance monitoring: при использовании multi-map внимательно отслеживайте memory usage устройства, positioning latency и энергопотребление, чтобы приложение плавно работало на target device.

В целом для большинства приложений принцип "одна scene, одна map" является лучшим выбором для обеспечения производительности и стабильности Mega positioning.