Implementing UWB-Based Object Tracking Inside Buildings in Mobile Apps
Object tracking is different from human positioning. We determine phone location there. Here we track objects—warehouse pallets, medical equipment in hospitals, expensive tools on production floor, baggage at airport. Object carries UWB tag (tag), anchor infrastructure determines coordinates, mobile app shows real-time map and lets you find specific object.
RTLS Architecture (Real-Time Location System)
Typical UWB-RTLS scheme:
UWB tags (on objects)
↓ TWR/TDoA
UWB anchors (ceiling, 10-15m apart)
↓ Ethernet/Wi-Fi
Location Engine (server)
↓ WebSocket/REST
Mobile application
Location Engine—computation server receiving raw ToA measurements from anchors and calculating tag coordinates. Commercial solutions: Pozyx SaaS, Sewio UWB RTLS, Zebra MotionWorks. Open source: MOSAIC-uwb (Python), custom based on IEEE 802.15.4a.
Accuracy: TWR (Two-Way Ranging)—10-30 cm. TDoA (Time Difference of Arrival)—15-50 cm, requires synchronized anchors. For warehouse object tracking 30 cm sufficient.
Mobile App: Key Screens
Real-Time Object Map
2D building map (floor plan from SVG or CAD file) with moving markers. Each marker—UWB tag attached to specific object (pallet #A-123, cart, device).
Position updates: WebSocket subscription. Location Engine publishes tag.position_updated events with {tag_id, x, y, floor, timestamp}. Client receives stream and updates marker positions. Frequency: 2-10 Hz per tag, for 50 tags—100-500 events per second via single WS stream.
Render optimization: don't update each marker per event—batch updates through requestAnimationFrame analog. iOS: accumulate positions over 100ms → single bulk update via CATransaction with disableActions. Android Compose: LazyColumn with key(tagId) + animateItemPlacement.
Smooth marker movement: UWB gives position every 100-500 ms. Between updates—linear interpolation (lerp) or Kalman prediction. Without interpolation markers "jump", with it—smooth motion.
Finding Specific Object
User searches for pallet #A-456. Search through database → object found → highlighted on map, camera centers on it with animation. Distance from user's current position to object + "how to get there"—route via A*.
If object on different floor—switch to respective plan with highlight.
Optionally: AR arrow mode via NearbyInteraction (if object carries Apple-compatible UWB tag, like AirTag or Qorvo accessory). NISession with isCameraAssistanceEnabled = true → AR pointer directly through camera.
Movement History
Trail (trace) of object over period: LineString from historical positions. SELECT x, y, timestamp FROM tag_positions WHERE tag_id = ? AND timestamp > ? ORDER BY timestamp—draw as polyline on map. Helps investigate "where did pallet go Friday evening".
Zone utilization heatmap: aggregated data from all tags → heatmap—which warehouse zones used more intensively. MapboxHeatmapLayer or custom render via Core Graphics through grid-cells.
Geofencing Zones
Virtual zones on map (receiving zone, storage zone A, shipment zone) → rules for objects:
- tag entered forbidden zone → push to security
- object outside its zone > 2 hours → alert manager
- pallet left warehouse without documentation → alarm
Geofencing computed on Location Engine server—it knows all zone and tag coordinates. Mobile app only displays events and manages zone rules.
Tag Management
Add tag to system: enter tag ID (printed on device), attach to object (name, type, photo), assign zone. Batch input via CSV for large warehouse.
Tag battery status: most UWB tags (Pozyx Tag, Sewio Tag) transmit charge level in packet. Location Engine parses and delivers via API. App—"tags with low battery" filter + notification at < 20%.
Signal loss: if tag invisible to anchors > N minutes (configurable)—status "out of coverage", marker gray. Event in feed.
WMS/ERP Integration
Warehouse works with WMS (Warehouse Management System)—1C:WMS, SAP EWM, Odoo. Task data come from there → in app display "where should this pallet go". RTLS provides "where it is now". Difference = deviation from plan → signal to operator.
Integration: REST API or message queue (Kafka/RabbitMQ) between Location Engine and WMS. Mobile app works with Location Engine API, not directly with WMS.
Hardware Selection: Recommendation
| System | Accuracy | Frequency | Anchor Coverage | Anchor Cost |
|---|---|---|---|---|
| Pozyx Creator | 10-30 cm | 10 Hz | ~50 m² | ~€300 |
| Sewio RTLS | 15-50 cm | 10 Hz | ~100 m² | ~€400 |
| Zebra MotionWorks | 30-50 cm | 5 Hz | ~200 m² | ~€600 |
| Qorvo DWM3001 | 10-20 cm | 100 Hz | ~30 m² | ~€80 |
For 1000 m² warehouse: Pozyx—20-25 anchors, ~€6000-8000 hardware without installation. Plus Location Engine software and mobile app development.
Timeline
Pilot with 4 anchors and basic app (map + 5 tag positioning)—3-4 weeks. Full warehouse system with geofencing, history, WMS integration—3-5 months. Project cost includes hardware, Location Engine licenses, development. Estimated after facility audit.







