Кастомный SLAM для AR-навигации: точное отслеживание

Потеря tracking в AR-приложении на монотонных стеллажах или в длинном коридоре — это проблема консистентности SLAM-карты. SLAM (Simultaneous Localization and Mapping) одновременно строит карту неизвестного пространства и определяет положение устройства в этой карте. Стандартный ARKit использует Visu

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Кастомный SLAM для AR-навигации: точное отслеживание
Сложный
от 2 недель до 3 месяцев

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    898
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    784
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1219
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1081
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    1004
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    601

Потеря tracking в AR-приложении на монотонных стеллажах или в длинном коридоре — это проблема консистентности SLAM-карты. SLAM (Simultaneous Localization and Mapping) одновременно строит карту неизвестного пространства и определяет положение устройства в этой карте. Стандартный ARKit использует Visual-Inertial Odometry (VIO), который отлично работает при хорошем освещении и текстуре, но критически сбоит на белых стенах, в больших пространствах (дрейф до 5 метров на 100 метров пути) и при динамических сценах. Если встроенного трекинга недостаточно, мы внедряем кастомный SLAM на базе ORB-SLAM3, LiDAR+IMU или ArUco-маркеров. Наш опыт — более 50 проектов с AR-навигацией в сложных условиях: складские помещения, торговые центры, промышленные объекты. Кастомные алгоритмы в пять раз точнее стандартного VIO в больших пространствах, что подтверждено метриками ATE (Absolute Trajectory Error). Мы используем современный стек: Swift 5.9, Kotlin, Flutter, C++. Экономия времени на разработку трекинга составляет до 40%, что позволяет существенно сократить time-to-market и сосредоточиться на бизнес-логике приложения. При этом мы гарантируем стабильность трекинга в 95% времени работы.

Ограничения стандартного ARKit в сложных условиях

ARKit использует VIO: feature points из камеры + IMU-данные. Это отлично работает при хорошем освещении и богатой текстуре. Но сбои возникают в четырёх типовых сценариях:

  • Динамические сцены: люди создают ложные feature points, дрейф растёт.
  • Монотонные поверхности: длинный белый коридор без зацепок.
  • Большие пространства: на 200+ метрах накопленная ошибка VIO становится неприемлемой.
  • Низкая освещённость: ночные склады, тёмные коридоры.

Для таких сценариев мы применяем кастомные алгоритмы или дополнительные сенсоры.

Основные SLAM-варианты для мобильного AR

Технология Точность Сложность Срок внедрения
ORB-SLAM3 (C++ Monocular/Stereo/RGB-D) 0.1–0.5 м Высокая (NDK/JNI) 8–16 недель
ARKit + Core Location (GPS+IMU+Barometer) 1–5 м Средняя 4–6 недель
LiDAR + IMU (iOS Depth+RGB+ICP loop closure) 0.05–0.2 м Средняя 6–10 недель
ArUco-маркеры + PDR (Indoor, offline) 0.5–1.5 м Низкая 2–4 недели

ORB-SLAM3 — open-source, компилируется через CMake для iOS (Metal) и Android (NDK). На iPhone 13 Pro достигаем 25–30 FPS, что приемлемо для AR. Требует C++ bridging: ObjectiveC++ wrapper под iOS, JNI под Android. Используем, когда нужен полный контроль над алгоритмом.

ARKit + Core Location fusion — для outdoor/large-scale indoor: интегрируем GPS (CLLocationManager), компас и барометр с ARKit-tracking через Extended Kalman Filter. Дрейф корректируется каждые N метров при появлении GPS-сигнала. Фильтр реализуем на C++ через Eigen или на Swift через Accelerate framework.

LiDAR + IMU SLAM (iOS) — ARWorldTrackingConfiguration с sceneReconstruction даёт depth data с LiDAR. Комбинация depth + RGB + IMU — это RGB-D SLAM. Строим dense map из ARMeshAnchor, используем ICP для loop closure. Это даёт сантиметровую точность в indoor.

Как loop closure решает проблему дрифта?

Главная проблема VIO без loop closure: пользователь обходит зал по кругу и возвращается к старту, а SLAM думает, что start и finish — разные места. Drift накопился. Loop closure детектирует возврат в знакомое место (по feature descriptors — ORB, SIFT, SuperPoint) и закрывает петлю, корректируя всю карту. В ARKit loop closure происходит автоматически через relocalization — если tracking потерян и восстановлен в известном месте. Для кастомных систем применяем bag-of-words (DBoW2, FBoW) для быстрой индексации ключевых кадров.

Что такое visual-inertial odometry и когда она не справляется?

VIO объединяет визуальные данные камеры с инерциальными измерениями IMU. Это основа ARKit и ARCore. VIO отлично работает при достаточном количестве feature points и стабильной освещённости. Но она не справляется в трёх случаях: полное отсутствие текстуры (белые стены), резкие движения (blur), и длительное перемещение без возврата (накопленный drift). В этих ситуациях кастомный SLAM с loop closure и дополнительными сенсорами даёт устойчивость.

Практический кейс: AR-навигация на складе 8000 кв. м

Для склада площадью 8000 кв. м мы строили AR-навигацию для комплектовщиков. Стандартный ARCore терял tracking на монотонных стеллажах через 40–60 секунд. Наше решение: сетка ArUco-маркеров каждые 15 м как relocalization anchors + PDR между маркерами через Android Step Counter API. Точность позиционирования — 0.5–1.5 м, достаточно для указания конкретного стеллажа. Система работает в offline без сервера — карта маркеров зашита в приложение и обновляется при изменении планировки через внутренний CMS.

Сравнение точности: кастомное решение ArUco+PDR в 3 раза стабильнее VIO на площади более 1000 кв. м.

Пошаговая настройка ORB-SLAM3 на iOS

  1. Компиляция ORB-SLAM3 для iOS через CMake с Metal backend.
  2. Создание Objective-C++ wrapper для интеграции со Swift.
  3. Калибровка камеры: матрица intrinsics, коэффициенты дисторсии.
  4. Запуск трекинга: настройка параметров ORB (количество фич, масштаб).
  5. Включение loop closure: привязка к DBoW2 словарю.
  6. Оптимизация производительности: фильтрация кадров (пропуск при малом движении), снижение разрешения для RGB.

Сравнение точности различных SLAM-подходов

Подход ATE (средняя ошибка) Дрейф на 100 м Необходимые сенсоры
VIO (ARKit) 0.5–2 м 2–5 м Камера + IMU
ORB-SLAM3 (mono) 0.1–0.5 м 0.2–1 м Камера (монокуляр)
ORB-SLAM3 (stereo) 0.05–0.2 м 0.1–0.5 м Две камеры
LiDAR + IMU 0.02–0.1 м 0.05–0.2 м LiDAR + IMU
ArUco + PDR 0.5–1.5 м 1–3 м Маркеры + IMU

Подробнее о SLAM можно прочитать на Wikipedia.

Что входит в работу

Мы проводим анализ условий эксплуатации и выбираем SLAM-архитектуру. Реализуем или интегрируем алгоритм (ORB-SLAM3, OpenVSLAM, кастомный), обеспечиваем fusion с дополнительными сенсорами (GPS, UWB, barometer). Настраиваем параметры трекинга под конкретное окружение и оцениваем точность по метрикам ATE и RPE (Relative Pose Error).

Сроки: интеграция готового SLAM SDK с кастомизацией — 4–8 недель. Кастомный SLAM-модуль с нуля + настройка под окружение — 3–6 месяцев. Стоимость рассчитывается индивидуально.

Мы используем современный стек (Swift, Kotlin, Flutter, C++) и проводим нагрузочное тестирование в реальных условиях. Все решения проходят проверку на стабильность при динамических сценах и низкой освещённости. Более 5 лет на рынке — более 50 успешных AR-проектов. Свяжитесь с нами для консультации — оценим ваш проект. Закажите пилотный проект — мы покажем точность на вашем объекте.