Реалізація AR-навігації в мобільному додатку — задача, яку ми вирішуємо вже понад 5 років. Ззовні це 3D-стрілка, відмальована за допомогою Metal або SceneKit, але насправді ховаються три принципово різні сценарії: outdoor (на відкритому повітрі), indoor (всередині будівель) та навігація по поверхах торгових центрів або аеропортів. Для кожного ми підбираємо свій стек: від стандартного GPS+компас до VPS на базі Immersal SDK. Outdoor навігація спирається на GPS і компас, але точність GPS у місті 3-8 метрів, що недостатньо для пішохідної навігації. Для indoor GPS відсутній, тому використовують BLE маячки або VPS. У цій статті розберемо технічні деталі: як уникнути дрейфу за допомогою зливки даних GPS/IMU, налаштувати калібрування компаса через фільтр Калмана та досягти точності до 10 см у приміщенні. Економія на експлуатації AR-навігації порівняно з традиційними рішеннями може сягати 40%. Вартість розробки стартує від $5,000 для outdoor рішення та від $15,000 для indoor VPS. Економія на експлуатації до $50,000 на рік для великих об'єктів. Ми маємо сертифікати Apple ARKit та Google ARCore, а також 5-річний досвід реалізації понад 20 проектів. Гарантія на роботу AR-модуля 12 місяців. Замовте консультацію — ми допоможемо обрати оптимальне рішення для вашого проекту.
Як працює 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 сам підтримує якір у світовому просторі при русі користувача. Порівняно з GPS, ARKit Geo Tracking точніше в 3-4 рази, що підтверджено тестами Apple.
За даними 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 маячки, а середній час локалізації становить 1-2 секунди. Порівняно з GPS, AR-навігація з VPS до 100 разів точніша.
Також варто розглянути 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 рішення для торгових центрів та аеропортів. Отримайте консультацію — ми оцінимо ваш проект і запропонуємо оптимальне рішення.







