11 views 21 mins 0 comments

Build a Practical UWB Indoor Positioning System You Can Trust

In Guides, Technology
February 26, 2026
Build a Practical UWB Indoor Positioning System You Can Trust

Why UWB Indoor Positioning Is Worth Your Time

Indoor positioning is finally good enough for small teams and serious hobby projects. Ultra‑wideband (UWB) delivers decimeter‑level accuracy without the drift and guesswork of Bluetooth beacons or Wi‑Fi triangulation. The silicon is mature, the developer kits are sane, and the software stacks are simpler than they look at first glance.

This guide walks you through a complete, real‑world build: how UWB ranging works, what to buy, where to put it, how to calibrate it, how to process the data, and how to keep it private and maintainable. The target is a 50–500 m² space such as a workshop, studio, small warehouse, or lab. If you can run a few Ethernet cables and manage an MQTT broker, you can run UWB reliably.

How UWB Positioning Actually Works

Ranging 101

UWB measures distance by sending short, wideband radio pulses and timing how long they take to return. The radio keeps time in the nanosecond range, which maps to centimeter‑scale distance. Short pulses and wide bandwidth make UWB resilient to multipath reflections that plague narrowband radios.

Two common ranging modes matter for you:

  • Two‑Way Ranging (TWR): A tag exchanges a short handshake with an anchor. By comparing time stamps, both compute the round‑trip time and thus the distance. It’s simple and doesn’t require tightly synchronized anchors.
  • Time Difference of Arrival (TDoA): Tags broadcast; anchors listen. Each anchor time‑stamps the incoming pulse. With synchronized anchors, the system solves for tag position from the difference in arrival times. This scales to many tags with lower tag power draw but needs strong anchor clock sync.

Angle of Arrival (AoA) exists but needs antenna arrays and more complex calibration. For most small deployments, stick to TWR or TDoA.

TWR vs. TDoA: Pick One Based on Scale

  • TWR is best for up to ~20 tags and 4–8 anchors, with refresh rates of 5–20 Hz per tag. It’s simpler to set up and does not require wired sync between anchors.
  • TDoA shines when you have many tags (50–500) and want tags to last months on coin cells. You’ll invest more in the infrastructure (clocks and wiring), but the system scales better.

In short: Use TWR for fast, small installs. Use TDoA for crowded, battery‑sensitive installs.

A Note on Regions and Channels

UWB uses channels in the 6–9 GHz range and is regulated differently by region. Many dev kits use Channel 5 (6489 MHz) or Channel 9 (7987 MHz). Check your local rules before going live, and stick to the vendor’s defaults for output power and pulse repetition frequency (PRF).

Design Your System Before You Buy

Define Accuracy, Update Rate, and Duty Cycle

Write down three numbers first:

  • Accuracy target: 20–30 cm is realistic in line‑of‑sight. If you need 10 cm everywhere, budget for more anchors and careful placement.
  • Update rate: 5–10 Hz is smooth for casual tracking. 20–30 Hz is useful for robotics and motion capture but costs battery and airtime.
  • Tag duty cycle: How often tags are awake, ranging, and transmitting. This affects battery life more than anything else.

These three interact: higher update rate and accuracy cost more airtime and power. Start conservative and scale up.

Anchor Count and Geometry

For 2D positioning, you need at least three anchors visible to a tag; use four for robustness. For 3D, use at least four, preferably five or six. Better geometry beats sheer quantity:

  • Spread anchors across the space, avoiding a straight line or a narrow arc.
  • Mount at 2.5–3 m height to clear people and furniture. Height reduces human body shadowing.
  • Stagger heights if you want better Z accuracy.

Backhaul and Sync Choices

  • TWR: Ethernet or Wi‑Fi is fine for anchor backhaul. No wired timing needed.
  • TDoA: Plan for wired sync (e.g., Ethernet with PTP/1588 or vendor sync lines). Avoid trying to sync anchors over Wi‑Fi; it’s not stable enough for nanosecond timing.

Hardware That Won’t Waste Your Weekend

Modules and Dev Kits

  • Qorvo (Decawave) DW series: Popular choices include the DWM1001‑DEV and newer DW3000‑based modules. They’re well‑documented and widely used in examples and forums.
  • Pozyx kits: Higher‑level systems with friendlier dashboards and APIs, good if you want to skip some firmware work.

If you like to tinker, pick DW3000‑based modules for better interference resilience and FiRa‑aligned features. If you want quick results, a Pozyx kit is a fast path to a baseline.

Anchors Need Clean Power and Clear Mounts

  • Power: Use PoE for anchors when possible. It simplifies mounts and gives you wired backhaul plus central power.
  • Mounts: Avoid metal beams or strap anchors at least 30 cm away from large metal surfaces. Keep antennas upright and unobstructed.
  • Label everything: Anchor IDs, MACs, and coordinates should be on the device and in your notes. You’ll thank yourself during calibration.

Tags: Coin Cells vs. Rechargeable

  • Coin cell tags are light and cheap. At 1–5 Hz with aggressive sleep, they can last weeks to months.
  • Rechargeable tags handle 10–30 Hz updates and can stream extra sensor data (IMU). Good for tool tracking and mobile robots.

Site Planning and Calibration That Actually Works

Map Your Space and Set a Coordinate Frame

Pick an origin (0,0,0) in a convenient corner of the room. Define X and Y along walls to make life easy. Note ceiling height. A simple sketch with a few measured distances is enough. This is your ground truth.

Place Anchors for Geometry, Not Convenience

Don’t cluster anchors over a single aisle or wall. A rough rule:

  • Space anchors 4–10 m apart, depending on room size.
  • Avoid co‑linear placements. Aim for a convex polygon in plan view.
  • Give each anchor at least two non‑parallel “sight lines” to neighbors (helps troubleshooting and TDoA sync sanity).

Measure Anchor Coordinates Carefully

Use a laser distance measurer and record anchor positions to the nearest centimeter. For 3D accuracy, measure floor‑to‑anchor height. If you can, cross‑check diagonals (Pythagorean) to catch mistakes. Many positioning errors trace back to sloppy anchor coordinates.

Time Sync for TDoA

If you go TDoA, keep anchor clocks tight. Options include:

  • PTP/IEEE 1588 over wired Ethernet with PTP‑aware switches for sub‑microsecond sync.
  • Vendor sync cabling between anchors (simpler for small layouts).

Sync a few anchors, then validate with built‑in diagnostics. A well‑synced system behaves predictably even under load.

Radio Settings That Tame Multipath

Start With Vendor Defaults

Default settings are sensible for most rooms. Use them to establish a baseline, then adjust only what you must. Keep a log of changes.

When to Touch the Knobs

  • Channel: If you see heavy interference near Channel 5 (e.g., from other UWB gear), try Channel 9.
  • PRF and preamble length: Higher PRF and longer preambles improve robustness but reduce maximum tag counts and raise airtime. Use them in cluttered rooms.
  • Data rate: Lower data rate increases range and reliability but increases airtime. Trade‑off depends on tag density.

Detect and Handle NLOS

Non‑line‑of‑sight (NLOS) is the biggest enemy of accuracy. Many UWB chips expose the Channel Impulse Response (CIR) and diagnostics that hint at NLOS. Use these flags in your solver:

  • Drop or down‑weight ranges with suspicious diagnostics.
  • Fuse IMU data in tags (accel/gyro) to bridge short dropouts.
  • Favor anchors with better geometry when solving (weighted least squares).

Software Stack: From Ranges to Useful Positions

Data Flow You Can Maintain

Keep the pipeline plain:

  • Anchors/Tags: Do the ranging. Stream ranges, diagnostics, and preliminary positions (if available) to a gateway.
  • Gateway: Runs the solver if anchors don’t. Publish positions over MQTT. Log raw data to a time‑series DB for debugging.
  • Consumers: Dashboards, alerts, and automations subscribe to MQTT topics like uwb/tag/123/pose.

Solvers and Filters

  • Least squares or extended Kalman filters are enough for most rooms. They smooth motion and reject outliers.
  • Particle filters help in occlusion‑heavy spaces but cost CPU. Save them for dense, tricky layouts.
  • Geofences are your friend. Snap positions to “inside room” polygons if a point lands a hair outside a wall.

APIs and Dashboards

Keep it simple. Expose a REST endpoint and/or MQTT topics. For dashboards, Grafana over InfluxDB is easy. For quick visuals, render a 2D map with your anchor layout and draw tag trails. If you need 3D, send positions to a lightweight viewer or game engine scene.

Privacy and Security Without Drama

Keep It Local by Default

Run your broker and database on a local mini‑PC or server. Most UWB gear speaks serial, USB, or TCP—no cloud needed. If you must remote in, use a VPN you control.

Use Secured Ranging and Fresh Keys

Modern UWB stacks support Secure Ranging with cryptographic time stamping to resist relays and spoofing. Rotate keys per tag, and don’t reuse them across sites. Disable debug interfaces on anchors once set up.

Limit and Anonymize

  • Use ephemeral IDs on MQTT topics for guest tags or rentals.
  • Don’t retain raw ranges indefinitely. Store fused positions and summarized statistics.
  • Log configuration changes and firmware versions so you can audit later.

Commissioning: A Reliable Playbook

Zero the System With a Walk Test

Before you track anything important, do a slow loop through the space with a test tag. Compare the path to known obstacles and walls. Look for offsets:

  • Constant offset: Usually a bad origin or anchor coordinate. Fix the map.
  • Bias in one area: Likely NLOS from a specific anchor. Move or tilt it.
  • Random jumps: Airtime saturation or bad filter tuning. Lower update rate and retest.

Ground Truth Spots

Mark a few floor points with tape and record their coordinates. Park a tag on each for 10–20 seconds and log the reported positions. You should see a tight cluster within your accuracy target. Repeat after any anchor move or firmware update.

Operations: Battery, Airtime, and Change Control

Tag Battery Life You Can Predict

Rough estimates for a coin cell tag:

  • 1 Hz updates, sleepy in between: weeks to months
  • 5 Hz updates, light filtering: several weeks
  • 10 Hz+, frequent broadcasts: days to a week

Duty cycle and IMU sampling dominate. Use motion triggers to wake the tag when it moves and sleep when idle.

Airtime Budgeting

Don’t let tags step on each other. Stagger TWR sessions by assigning time slots or randomizing start times slightly. For TDoA, ensure the network can ingest the anchor traffic without jitter. Watch your broker and DB CPU during stress tests.

Document and Lock Your Setup

  • Keep a site file with anchor coordinates, firmware revisions, radio settings, and MQTT topics.
  • Change one thing at a time. Record the timestamp and the reason.
  • Schedule a monthly walk test. Battery swaps are a good time to validate performance.

Use Cases That Deliver Immediate Value

Workshops and Makerspaces

Tag shared tools and rolling carts. Build a simple dashboard that shows what’s missing from a bay and highlights idle items to return. Add geofences that notify a Slack channel when a tool leaves the shop boundary.

Studios and Labs

Attach tags to camera rigs, tripods, and pelican cases. Know what’s staged, what’s in storage, and what crossed the loading dock. For labs, tag carts and samples to reduce hunt time and improve chain‑of‑custody logs (store positions, not personal IDs).

Robots and AGVs

Use UWB as a supervision layer. Robots can rely on their own odometry and SLAM but cross‑check with UWB beacons for drift correction or to enforce no‑go zones. You don’t need sub‑10 cm precision for this to be useful; reliable 20–30 cm updates keep maps honest.

Lightweight Motion Capture

For interactive installations or training, 10–20 Hz tracking with three or four anchors gives smooth 2D motion. Add an IMU to a tag on a limb for a basic pose estimate. It won’t replace optical mocap, but it’s fast to set up and robust to lighting.

Costs, Trade‑Offs, and a Sensible Starter Kit

Budget Snapshot

  • Anchors: 4–6 anchors at $80–$250 each (module + enclosure + PoE injector if needed).
  • Tags: $30–$100 each, coin cell or rechargeable with IMU.
  • Backhaul: A small PoE switch and a mini‑PC for the broker and dashboard.

You can get a robust 4‑anchor TWR system with a couple of tags for $500–$1,200, depending on finish and enclosures.

A Starter Config That Works

  • 4 anchors at room corners, 2.5–3 m high.
  • TWR mode at 5 Hz per tag.
  • MQTT for positions, InfluxDB for logs, Grafana for visuals.
  • One rechargeable tag for frequent use, plus a few coin cell tags for assets.

Once stable, add anchors to improve accuracy in trouble spots, or switch to TDoA if you scale tag count and need longer battery life.

Interoperability and What’s Next

FiRa, Phones, and Ecosystems

FiRa Consortium guidelines shape modern UWB. Choosing FiRa‑aligned hardware improves the odds that future phones and wearables can participate. Some smartphones already support UWB interactions for proximity and direction. For indoor positioning, this means you can invite a phone into your system for ad‑hoc tasks like locating a pallet or confirming a handoff.

Integrations That Take an Afternoon

  • Home Assistant: Use MQTT discovery to show tags as device trackers. Drive automations on geofences (lights on when a cart enters a bay).
  • Web dashboards: Publish positions on a websocket, draw paths with a simple floorplan SVG. Keep it light for mobile devices.
  • Exporters: Push events to a spreadsheet or a ticketing tool when items cross checkpoints.

Common Pitfalls and How to Avoid Them

  • Bad anchor coordinates: Measure twice. Most “mysterious drift” is a map error.
  • Metal near antennas: Re‑mount with standoffs. Metal detunes antennas and warps ranges.
  • All anchors on one wall: Fix the geometry. Spread them out.
  • Over‑tuned radios: Start with defaults. Only tweak when you can describe the symptom.
  • Untamed airtime: Drop update rate or add anchors. Saturation shows up as random dropouts and jitter.
  • No walk tests: Always validate after changes, even “small” ones.
  • Cloud‑only dashboards: Keep core services local. You want this to work during internet hiccups.

Compliance and Etiquette

Before deployment, check local UWB regulations and vendor regional settings. In mixed environments, let neighbors know about the system if you share walls with other labs. Keep transmit power at defaults and document your frequency plan.

Taking It From Prototype to “We Rely on This”

Version Your Layout

Give every change a version: Layout v1.2. Tag your logs and dashboards with it. You’ll be able to correlate behavior changes with a specific anchoring tweak or firmware update.

Service Windows and Spare Parts

  • Keep a spare anchor and two spare tags ready to swap.
  • Set maintenance windows for firmware updates. Validate with a short walk test.
  • Back up your broker and DB nightly. Positions don’t need retention forever; roll up to hourly medians after a week.

Summary:

  • UWB delivers room‑scale accuracy with robust line‑of‑sight ranging and smart filtering.
  • Pick TWR for small/simple installs and TDoA for many tags and long battery life.
  • Anchor geometry and precise coordinates matter more than exotic radio tuning.
  • Start with vendor defaults, then adjust channel, PRF, and preamble only as needed.
  • Use local MQTT, simple filters, and clear dashboards for maintainable data flow.
  • Keep it private: secure ranging, local brokers, and minimal data retention.
  • Commission with walk tests and ground truth spots; repeat after any changes.
  • Plan for battery life, airtime budgets, and spare parts for smooth operations.

External References:

/ Published posts: 215

Andy Ewing, originally from coastal Maine, is a tech writer fascinated by AI, digital ethics, and emerging science. He blends curiosity and clarity to make complex ideas accessible.