⚽️ Outdoor Tracking with Ultra-Wideband (UWB) Networks
One of the projects I’m currently working on is real-time location tracking of football players on a field. The setup: a few mobile anchors (antennas) around the field + trackers worn by players.
Sounds simple? Not quite. But let’s break it down.
Why Not Use GPS?
Good question. GPS is great for getting you to your nearest Starbucks, but not so great for telling if a striker’s boot was actually offside by 15 cm.
- GPS accuracy: often ±3–5 meters (and worse in stadiums with poor satellite visibility)
- UWB accuracy: typically ±10–30 cm
What is UWB?
Ultra-Wideband (UWB) isn’t just “Wi-Fi but better.”
It’s a short-range, low-power radio technology that operates over a very wide
frequency spectrum (3.1 to 10.6 GHz). The anchors/antennas talk to each other using
these signals. And what do they say? time of flight (ToF) - the time it takes
for a signal to be send/receive from one another. So essentially you calculate distance
in terms of time since these signals are EM waves having speed = the speed of light
(c).
Hence you can calculate distance as -
Fun fact: the raw distance data from UWB chips is measured in DecaWave Ticks (DWT) — a standard unit used across most UWB chipsets.
Building a Coordinate System
Now, you have a group of anchors which can tell how far they are from each other. These anchors can also communicate with trackers or tags in the same manner and using ToFs, calculate distance of each tag from themselves.
But how do we turn those distances into positions? Imagine a football field
which has bottom left corner marked as origin and each player as a tiny dot on this
field having (x,y) coordinates with respect to the origin. How do you calculate
these coordinates using distance-telling anchors?
Trilateration (2D Positioning)
Now, these anchors can tell distances from each other but not the direction. Assume
we have 2 anchors A, B. Let the distance between anchor A and B is dAB. Then, B
can lie in a circle of radius dAB with its center at A and vice versa.
Place three anchors (A, B, C) around the field so they form a triangle.
- Let A be the origin →
A = (0,0) - Place B to act as x-axis →
B = (dAB, 0) - Place C to act as y-axis →
C = (0, dAC)
where dAB is the distance between A and B, dAC is the distance between A and C.
Now, suppose we have a tag T somewhere on the field. The distances from each
anchor are - dAT, dBT, dCT
We can write three equations using circles around each anchor:
Solving equations (1) and (2) gives:
Substitute x into (1):
Boom — we have (x, y)!
Sanity Check
But what use is equation (3) then? Since the coordinates can be inaccurate in real
life, we use equation 3 to validate and fit the values of x and y such that they
are in a happy place satisfying all 3 equations. An error value can be calculated
by substituting x,y in equation (3) -
We need this error gone. Therefore, we move onto the error minimization step. How do you minimize something? Differentiation! In the world of computers, you solve it iteratively with algorithms like Gradient descent, Gauss-Newton, or Nelder-Mead. But I would not go too deep on that in this article.
Trilateration Demo: Try Trilateration Yourself!
Drag the yellow tag (T) on the soccer field to see its coordinates and distances to anchors A, B, and C. The red, blue, and green circles show the distances from each anchor.
Controls
Tag Distances
dAT (A→T): 55.90 meters
dBT (B→T): 60.42 meters
dCT (C→T): 65.95 meters
Trilateration Result
Calculated Position: (50.00, 25.00)
Equations
x² + y² = 55.90²
(x - 105)² + y² = 60.42²
x² + (y - 68)² = 65.95²
Multilateration (3D Positioning)
Want x, y, and z (height)? Same idea — but instead of circles, we draw spheres around each anchor. The math gets messier, but the principle is the same: solve simultaneous equations to find where all the spheres intersect.
FAQs
Q: What if I want my coordinates to be more accurate?
Add more anchors. More anchors = more equations = less error.
But beware: more math = slower updates.
Q: How do I keep it accurate and real-time?
Use multithreading/multiprocessing (if you’re in Python) to parallelize the math
across multiple CPU cores.
Q: How do you receive data from anchors?
Either plug them in over USB or stream via BLE (Bluetooth Low Energy) to a laptop,
Raspberry Pi, or even a smartphone.
Q: What’s the update rate?
Typically 25–50 Hz, some high-end setups go up to 100 Hz.
That’s 100 position updates per second — more than enough to track that one winger
who’s too fast for everyone else.
Q: What’s the range?
Usually 20–50 m with good accuracy. Beyond that, performance drops — think of it
like a wireless tape measure, not a satellite.
Q: What if I have hundreds of anchors and trackers?
That’s a GPU party. You’ll want to leverage CUDA/OpenCL or distributed compute for
real-time performance.
Conclusion
UWB is a fascinating technology for sports tracking, robotics, warehousing, and automation. When I first dove into it, it felt like a maze. But at its core, it’s just classical geometry + error minimization. The possibilities are endless from player analytics to live AR overlays and there’s still plenty of room for innovation.
Hopefully, I was able to share something informative. Cheers!