Реализация AR-навигации в мобильном приложении — задача, которую мы решаем уже более 5 лет. Внешне это простая стрелка поверх изображения камеры, но на самом деле скрываются три принципиально разных сценария: outdoor (на открытом воздухе), indoor (внутри зданий) и навигация по этажам торговых центров или аэропортов. Для каждого мы подбираем свой стек: от стандартного GPS+компас до VPS на базе Immersal SDK. Outdoor навигация опирается на GPS и компас, но точность GPS в городе 3-8 метров, что недостаточно для пешеходной навигации. Для indoor GPS отсутствует, поэтому используют BLE маячки или VPS. В этой статье разберём технические детали: как избежать дрейфа, настроить калибровку компаса и добиться точности до 10 см в помещении. Экономия на эксплуатации AR-навигации по сравнению с традиционными решениями может достигать 40%. Закажите консультацию — мы поможем выбрать оптимальное решение для вашего проекта.
Как работает outdoor AR-навигация?
За основу берётся GPS + компас + ARKit/ARCore. Используем CLLocationManager + CLHeading для компаса, ARKit/ARCore для стабилизации ориентации. Точность GPS в городе — 3-8 метров, чего достаточно для стрелки «идите прямо 200 метров», но недостаточно для «сверните здесь» с точностью до тротуара.
ARKit Geo Tracking (iPhone XS+, поддерживаемые города) — иной уровень. ARGeoTrackingConfiguration использует GPS, компас и street-level imagery от Apple Maps для локализации с точностью до 1-3 метров. ARGeoAnchor привязывается к координатам WGS84, и ARKit сам поддерживает якорь в мировом пространстве при движении пользователя.
По данным Apple ARGeoAnchor, точность составляет 1-3 метра в идеальных условиях. ARKit Geo Tracking обеспечивает точность в 3-4 раза выше, чем GPS+компас, что критически важно для навигации в плотной городской застройке.
let anchor = ARGeoAnchor(
coordinate: CLLocationCoordinate2D(latitude: 53.9045, longitude: 27.5615),
altitude: nil
)
arView.session.add(anchor: anchor)
ARGeoTrackingStatus.stateReason покажет, почему geo tracking не работает (.notYetInitialized, .geoDataNotLoaded, .visualLocalizationFailed). Последнее случается при плохом освещении или на малоизвестных улицах — нужен fallback на GPS+компас.
Почему indoor-навигация сложнее и как её реализовать?
GPS внутри зданий не работает. Рассмотрим основные опции:
| Технология | Точность | Сложность интеграции | Начальные затраты |
|---|---|---|---|
| Beacon/BLE | 2-10 м | Средняя | Высокая (покупка маячков) |
| ARKit relative tracking | 0.5-2% дрейф | Низкая | Нулевые |
| VPS (Immersal SDK) | 10-30 см | Высокая | Коммерческая лицензия |
Immersal SDK — наиболее практичный вариант для custom indoor VPS. Облачная локализация: фотографируете помещение в Immersal Mapper, SDK локализует пользователя по visual match с точностью до 10-30 см. Работает на iOS (ARKit) и Android (ARCore). Immersal VPS обеспечивает точность в 20-100 раз выше, чем BLE маячки.
Также стоит рассмотреть Google Visual Positioning Service (ARCore 1.24+), но покрытие в СНГ минимальное.
Как отрисовать маршрут в AR и избежать типичных ошибок?
Путь в AR — это цепочка 3D-точек, соединённых стрелками или «хлебными крошками» на уровне пола. Для плавного следования по маршруту нужна параметрическая кривая (Catmull-Rom spline) через waypoints — иначе стрелки будут слишком угловатыми на поворотах.
Стрелку направления отрисовываем как ModelEntity с USDZ-моделью (GLB для ARCore), billboard-поворотом к камере по Y-оси. На поворотах — анимация пульсации через FromToByAnimation в RealityKit.
Важно: стрелки должны «прилипать» к обнаруженной плоскости пола, а не висеть в воздухе. Для этого — raycast вниз из каждого waypoint на обнаруженные плоскости.
| Проблема | Решение |
|---|---|
| Компас на Android дёргается | Low-pass фильтр + UI калибровки |
| Дрейф indoor-ARKit | Контрольные QR-коды каждые 50 м |
| Нет покрытия VPS | Fallback на BLE + маячки |
Теперь о типичных болях: компас на Android — SensorManager.SENSOR_DELAY_GAME с фильтрацией через low-pass filter. Без фильтрации компас дёргается и стрелка «прыгает» на 15-20° в секунду. Плохо откалиброванный магнетометр (рядом с металлическими конструкциями) даёт отклонение до 30°. Добавьте UI-запрос на калибровку компаса при SensorAccuracy.LOW. При low accuracy на Android показываем экран с просьбой поводить телефоном в виде восьмёрки. На iOS вызываем системный интерфейс калибровки автоматически.
Как мы реализуем AR-навигацию: пошаговый план
- Анализ сценариев и требований к точности.
- Выбор стека: GPS+компас, Geo Tracking, VPS или BLE.
- Разработка прототипа с базовым трекингом.
- Калибровка и тестирование в реальных условиях.
- Интеграция с бэкендом и настройка push-уведомлений (APNs/FCM).
- Публикация в App Store и Google Play.
Сроки: outdoor на GPS — 2-3 недели, с Geo Tracking — ещё неделя. Indoor на VPS — от 4 недель включая картирование. Стоимость рассчитывается индивидуально, но AR-навигация на VPS окупается за 3-6 месяцев в торговых центрах площадью от 10 000 м².
Что входит в работу
При заказе разработки AR-навигации под ключ мы предоставляем:
- Техническое задание и архитектурную документацию.
- Реализацию нативного ARKit/ARCore кода.
- Интеграцию с бэкендом (вашим или нашим).
- Настройку publish profiles, code signing и push-уведомлений (APNs/FCM).
- Развертывание в App Store и Google Play.
- Обучение вашей команды работе с AR-модулем.
- Поддержку в течение 3 месяцев после запуска.
Мы — команда мобильных разработчиков с 5+ лет опыта в AR, выполнили более 20 проектов по AR-навигации, включая outdoor и indoor решения для торговых центров и аэропортов. Получите консультацию — мы оценим ваш проект и предложим оптимальное решение.







