Реалізація UWB-трекінгу об'єктів всередину приміщень у мобільному додатку
Трекінг об'єктів — це інша задача порівняно з позиціонуванням людини. Там ми визначаємо де знаходиться телефон. Тут ми відстежуємо об'єкти — палети на складі, медичне обладнання в лікарні, дорогостойний інструмент на виробництві, багаж в аеропорту. Об'єкт носить UWB-мітку (tag), інфраструктура якорів визначає його координати, мобільний додаток показує карту в реальному часі та дозволяє знайти конкретний об'єкт.
Архітектура RTLS (Real-Time Location System)
Типова схема UWB-RTLS:
UWB-теги (на об'єктах)
↓ TWR/TDoA
UWB-якоря (стеля, 10-15м між собою)
↓ Ethernet/Wi-Fi
Location Engine (сервер)
↓ WebSocket/REST
Мобільний додаток
Location Engine — вичислювальний сервер, який приймає сирі ToA-вимірювання від якорів та обчислює координати тегів. Комерційні рішення: Pozyx SaaS, Sewio UWB RTLS, Zebra MotionWorks. Opensource: MOSAIC-uwb (Python), власний на basis IEEE 802.15.4a.
Точність: TWR (Two-Way Ranging) — 10-30 см. TDoA (Time Difference of Arrival) — 15-50 см, вимагає синхронізованих якорів. Для трекінгу об'єктів на складі 30 см достатньо.
Мобільний додаток: ключові екрани
Карта об'єктів у реальному часі
2D-карта будівлі (план етажу з SVG або CAD-файлу) з рухомими маркерами. Кожен маркер — UWB-тег, прив'язаний до конкретного об'єкту (палета №A-123, тележка, прибір).
Оновлення позицій: WebSocket підписка. Location Engine публікує события tag.position_updated з {tag_id, x, y, floor, timestamp}. Клієнт приймає потік та оновлює позиції маркерів. Частота: 2-10 Гц на тег, для 50 тегів — 100-500 событій на секунду через один WS-стрім.
Оптимізація рендеру: не оновлювати кожен маркер при кожній подією — батчинг оновлень через requestAnimationFrame-аналог. На iOS: накопичуємо позиції за 100ms → один bulk update через CATransaction з disableActions. На Android Compose: LazyColumn з key(tagId) + animateItemPlacement.
Плавне рух маркерів: UWB дає позицію кожні 100-500 мс. Між оновленнями — лінійна інтерполяція (lerp) або Kalman-передбачення. Без інтерполяції маркери «стрибають», з нею — плавно рухаються.
Пошук конкретного об'єкту
Користувач шукає палету №A-456. Пошук по базі → об'єкт знайдений → на карті підсвічується, камера центрується на ньому з анімацією. Відстань від поточної позиції користувача до об'єкту + «як пройти» — маршрут по A*.
Якщо об'єкт на іншому поверсі — переключення на відповідний план з highlight.
Опціонально: режим AR-стрілки через NearbyInteraction (якщо об'єкт носить Apple-сумісний UWB-тег, наприклад AirTag або Qorvo-аксесуар). NISession з isCameraAssistanceEnabled = true → AR-указівник прямо через камеру.
Історія переміщень
Trail (слід) об'єкту за період: LineString по історичним позиціям. SELECT x, y, timestamp FROM tag_positions WHERE tag_id = ? AND timestamp > ? ORDER BY timestamp — рисуємо як polyline на карті. Допомагає розібратися «куди делась палета в п'ятницю вечером».
Heatmap навантаження зон: агрегойовані дані по всім тегам → теплова карта — які зони складу використовуються інтенсивніше. MapboxHeatmapLayer або кастомний рендер через Core Graphics по grid-cells.
Геофенсинг зон
Віртуальні зони на карті (зона приймання, зона зберігання А, зона відправлення) → правила для об'єктів:
- тег вошов в забороняючену зону → push-сповіщення охороні
- об'єкт знаходиться поза своєю зоною більше 2 годин → alert менеджеру
- палета покинула склад без оформлення → тривога
Геофенсинг вичисляется на Location Engine сервері — він знає всі координати зон та тегів. Мобільний додаток тільки відображає события та керує правилами зон.
Управління тегами
Додати тег в систему: ввести ID тегу (надруковано на пристрої), прив'язати до об'єкту (назва, тип, фото), призначити зону. Batch-ввід через CSV-імпорт для великого складу.
Статус батареї тегу: більшість UWB-тегів (Pozyx Tag, Sewio Tag) передають рівень заряду в пакеті. Location Engine парсить та отдає через API. В додатку — фільтр «теги з низьким зарядом» + сповіщення при < 20%.
Втрата сигналу: якщо тег не видний якорям більше N хвилин (конфігурується) — статус «не в зоні видимості», маркер на карті сірий. Подія в лінті.
Інтеграція з WMS / ERP
Склад працює з WMS (Warehouse Management System) — 1С:WMS, SAP EWM, Odoo. Дані про завдання на переміщення беруть звідти → в додатку відображаємо «куди повинна йти ця палета». RTLS надає «де вона є сейчас». Різниця = відхилення від плану → сигнал оператору.
Інтеграція: REST API або черга сообщень (Kafka/RabbitMQ) між Location Engine та WMS. Мобільний додаток працює з Location Engine API, не напрямки з WMS.
Вибір обладнання: рекомендації
| Система | Точність | Частота | Покриття якоря | Ціна якоря |
|---|---|---|---|---|
| Pozyx Creator | 10-30 см | 10 Гц | ~50 м² | ~€300 |
| Sewio RTLS | 15-50 см | 10 Гц | ~100 м² | ~€400 |
| Zebra MotionWorks | 30-50 см | 5 Гц | ~200 м² | ~€600 |
| Qorvo DWM3001 | 10-20 см | 100 Гц | ~30 м² | ~€80 |
Для складу 1000 м²: Pozyx — 20-25 якорів, ~€6000-8000 залізо без монтажу. Плюс ПО Location Engine та розроблення мобільного додатку.
Тривалість проекту
Пілот з 4 якорями та базовим додатком (карта + позиціонування 5 тегів) — 3-4 тижні. Повноцінна система для складу з геофенсингом, історією, інтеграцією з WMS — 3-5 місяців. Вартість проекту складається з апаратної частини, ліцензій Location Engine та розроблення. Розраховуємо після аудиту об'єкту.







