Реалізація Persistent AR (збереження AR-сцен між сесіями)

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Реалізація Persistent AR (збереження AR-сцен між сесіями)
Складний
~3-5 днів
Часті запитання

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

Етапи розробки

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

Реалізація Persistent AR (збереження AR-сцен між сеансами)

Користувач розставив меблі в AR, закрив додаток, відкрив знову — і все на місці. Саме це робить Persistent AR. ARKit реалізує це через ARWorldMap — снимок карти світового простору, який можна серіалізувати, зберегти та завантажити у наступному сеансі.

Звучить просто. На практиці — кілька нетривіальних проблем з якістю карти, відновленням локалізації та обробкою edge-кейсів.

Як працює ARWorldMap

ARWorldMap містить feature points — візуальні орієнтири, які ARKit використовує для локалізації. Чим більше їх та чим вони різноманітніші, тим точніше відновлення сцени. Карта зберігається через:

arView.session.getCurrentWorldMap { worldMap, error in
    guard let worldMap = worldMap else { return }
    let data = try? NSKeyedArchiver.archivedData(withRootObject: worldMap, requiringSecureCoding: true)
    // зберігаємо data на диск або у хмару
}

Завантаження у новому сеансі:

let worldMap = try? NSKeyedUnarchiver.unarchivedObject(ofClass: ARWorldMap.self, from: data)
let config = ARWorldTrackingConfiguration()
config.initialWorldMap = worldMap
session.run(config, options: [.resetTracking, .removeExistingAnchors])

Після запуску сесії з initialWorldMap ARKit намагається релокалізуватись — знайти поточний вид камери у збереженій карті. Статус відстежується через session(_:cameraDidChangeTrackingState:): чекаємо .limited(.relocalizing).normal.

Проблеми, які реально зустрічаються

Погана якість карти. ARWorldMap має властивість mappingStatus: .notAvailable, .limited, .extending. Зберігати карту у статусі .limited — отримати погану релокалізацію. Потрібно блокувати кнопку "Зберегти" до досягнення .extending та показувати користувачу підказку: "Повільно обійдіть кімнату".

Релокалізація не відбувається. Приходимо в ту саму кімнату, але освітлення змінилось (день/ніч, зашторили вікно). ARKit використовує visual feature points — у умовах кардинально іншого освітлення орієнтири не збігаються. Рішення часткове: зберігати карту при різних умовах освітлення та вибирати ближчу до поточних умов. Повного рішення на рівні ARKit немає — це фундаментальне обмеження Visual-Inertial Odometry.

Якорі дрейфують при відновленні. Анкори зберігаються всередину ARWorldMap. При відновленні позиція анкора восстановлюється з точністю до якості карти. Критичні об'єкти (наприклад, розмітка на підлозі) можуть змістись на 2–5 см. Для таких випадків додаємо ARAnchor з іменем та після релокалізації підтягуємо їх до ближчої поверхні через raycast.

Розмір карти. ARWorldMap великої кімнати — 5–20 МБ. Зберігати на пристрої — нормально. Синхронізувати в CloudKit без стиснення — дорого. Використовуємо Data.compressed(using: .lzfse) (iOS 16+) або Compression.lzma для зменшення до 1–4 МБ.

Зберігання користувацьких даних з картою

Анкори зберігаються в ARWorldMap.anchors. Але дані додатку (що саме стоїть на анкорі — диван, лампа, таблиця цін) потрібно зберігати окремо та пов'язувати за ARAnchor.identifier:

// При збереженні
let metadata: [String: Any] = [
    anchor.identifier.uuidString: ["type": "sofa", "modelName": "ikea_kallax"]
]

// При відновленні — матчимо за UUID

Це стандартна практика, але її часто пропускають, намагаючись запихати дані в ARAnchor.name — строка з 256 символів та без типізації.

Кейс

Додаток для interior design, 3000 активних користувачів. Збереження плану розстановки меблів між сеансами. Головна боль: користувачі зберігали карту одразу після запуску (.limited mapping status) — скаржилися, що об'єкти "плавають". Додали UI-індикатор якості карти (зелений/жовтий/червоний) з блокуванням збереження до зеленого. Скарги знизилися радикально.

Сроки

Функціональність Сроки
Базове збереження/відновлення сцени 1–2 тижні
Облачна синхронізація карт + мульти-пристрій 3–4 тижні
Інтелектуальна релокалізація + управління якістю 2–3 тижні

Вартість розраховується індивідуально після аналізу вимог.