Реализация 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 и разработки. Рассчитываем после аудита объекта.







