How UWB makes a wagon follow you
For years, the default way to make something follow you wirelessly was Bluetooth RSSI – and anyone who tried it knows the problem: the signal strength swings by 10 dB when you turn your body, and the follower lurches. Cameras struggle in sun, fog, and the flat light of a parking lot. The answer we landed on is ultra-wideband. But before explaining why, it is only fair to acknowledge that Bluetooth is no longer the dumb RSSI technology it once was.
The ranging problem
A follower needs to know two things: where the human is, and how far away. UWB gives you the second one almost for free. Two ultra-wideband radios exchange very short pulses; the time of flight maps directly to distance at the speed of light. At 10 meters you read 10.00 m, give or take a few centimeters. Several vendors make UWB chips today – Qorvo (formerly Decawave), NXP, and others – and the good news is they all speak the same underlying physics. The kit is not wedded to one part.
Where Bluetooth has caught up
BLE 5.1 added Angle of Arrival (AoA) and Angle of Departure (AoD), giving Bluetooth directional finding through antenna arrays – the same concept as UWB’s PDOA. BLE 6.0 goes further with Channel Sounding, which uses phase-based ranging (PBR) alongside round-trip time to reach decimeter-level accuracy, far better than raw RSSI. In a clean indoor environment, modern BLE can rival UWB for short-range proximity.
Where UWB still pulls ahead outdoors
The advantage is not in the spec sheet. It is in the physics. UWB transmits across at least 500 MHz of bandwidth with pulses around 2 ns wide. That extreme bandwidth is what lets the receiver isolate the first arriving path from reflections – the leading edge. BLE Channel Sounding, even with phase ranging, operates in a much narrower band and cannot resolve multipath the way UWB can. Outdoors, where every fence, car, and wall surface is a reflector, that multipath resolution is the difference between a stable 10 cm error and a wandering half-meter.
There is also robustness under body blocking, which we will get to shortly. And UWB ranging does not require the tight antenna-array geometry and calibration that BLE AoA demands, which makes it more forgiving in a rough, outdoor form factor.
The chart above is not cherry-picked. We logged it walking a 20 m straight line ten times with the tag on a lanyard, then ten with the tag in a back pocket. UWB barely moved. The BLE estimate swung by over a meter whenever the wearer turned.
A follower that does not know its distance cannot decide whether to speed up, hold, or stop. Everything downstream – the pursuit loop, the avoidance layer – is only as good as this number.
How time-of-flight actually works: TWR
Saying “the radio measures distance” sounds like magic until you look inside. The technique is called two-way ranging, or TWR, and it is the backbone of every UWB follower. followwagon uses the double-sided variant (DS-TWR), which exchanges three frames. The tag sends a Poll; the anchor answers with a Response; the tag closes with a Final. From the six timestamps recorded across that three-message exchange you can solve for time of flight without needing the two clocks to be perfectly synchronized.
Concretely, the tag records when it sent the Poll (Tsp), when it received the Response (Trr), and when it sent the Final (Tsf_tag). The anchor records when it received the Poll (Trp), when it sent the Response (Tsr), and when it received the Final (Trf). DS-TWR combines all four intervals in a ratio that cancels most of the clock-rate skew – the residual error single-sided TWR cannot remove.
Time of flight times the speed of light is distance. Light travels roughly 30 cm per nanosecond, so a 10-meter round trip is about 67 ns each way. That is why UWB ranging lands in the centimeter band: the pulses are short enough (around 2 ns) that the receiver can lock onto the leading edge of the first arriving pulse rather than averaging over a long, muddy waveform.
Why leading edge, not strongest
Outdoors the direct path is often weaker than a reflection off a car door, a fence, or your own body. A receiver that locks onto the strongest peak will measure the bounce, not the true range. UWB’s wide bandwidth (at least 500 MHz per channel) shrinks the pulse so much that the direct path shows up as a distinct early spike, separate from the reflections that trail behind it.
The leading-edge threshold is the single most important tuning knob on the ranging chip. Set it too low and noise registers as the first path; set it too high and a weak (but real) direct path gets skipped in favor of the next reflection. We tune it per environment – a golf-course fairway wants a different value than a parking garage.
Measuring angle: PDOA
Distance alone tells the wagon how far behind to sit, but not which way to steer. For that we use Phase Difference of Arrival, or PDOA. Instead of one antenna, the anchor module carries two (sometimes three) antennas spaced a few centimeters apart. The same pulse arrives at each antenna at a slightly different time, depending on the angle the tag sits off the array’s broadside.
Because UWB measures phase, not just amplitude, the difference between the two antennas maps cleanly to an angle through a little trigonometry. A pulse that hits the array dead-on (broadside) arrives at both antennas in phase; one that comes from the side arrives at the nearer antenna first. The wider the baseline, the more sensitive the angle – but also the more prone to phase-wrap ambiguity, which is why most anchor arrays keep the spacing to about half a wavelength.
In practice we measure bearing accuracy of a few degrees within a roughly 120-degree field of view in front of the array. Outside that cone the geometry gets poor and the angle estimate noisier, which is why a follower that needs to track you all the way around will use more than one anchor, or fuse the PDOA bearing with IMU data to smooth and validate the estimate.
Putting them together: range plus bearing
followwagon combines TWR and PDOA on the same UWB frames. Every ranging exchange that solves for distance also carries the phase samples the anchor needs to estimate bearing. So out of a single three-frame DS-TWR burst you get both how far and which way – a full polar coordinate from the wagon to the tag, refreshed tens of times per second.
TWR gives you the radius. PDOA gives you the angle. Together they give the wagon a live pointer to where you are, in one frame, without a camera watching your face.
That polar pair – (r, theta) – is the raw input the pursuit loop consumes. It is far more compact and far more reliable than a pixel blob from a camera or a heatmap from a radar.
Why centimeters matter for a follower
Follow distance is a design choice. Some people want the wagon a meter behind; others want two. To hold that setpoint, the controller needs an error signal accurate to roughly a tenth of the gap. If your gap is 1.5 m, you want ranging good to about 15 cm. UWB delivers that outdoors, consistently. BLE Channel Sounding can approach that in a clean lab, but outdoors with multipath it degrades.
Body blocking
This is the hardest problem in UWB following, and we want to be honest about it: human body blocking is real and it hurts. When the person turns around and the tag sits flush against their back, the direct line of sight is cut. We measured this directly. On channel 9 (the higher UWB band), body blocking with the tag pressed against a person who is facing away from the wagon effectively kills the direct path – the ranging either drops out or jumps to a reflection. On channel 5 (the lower band), it survives a little better because the longer wavelength diffracts around the body more readily, but the degradation is still significant.
There is no magic fix for this in the physical layer. The mitigations are system-level: mount the tag so it has some air gap from the body (a lanyard rather than a back pocket), fuse the UWB with IMU dead reckoning so the wagon can coast through brief dropouts, and design the pursuit loop to hold its last good distance rather than chase a glitch. But the honest truth is that body blocking remains the single biggest reliability challenge for any UWB follower, and anyone who tells you otherwise has not tested it with a real person turning around.
We anchor the tag at chest height and keep the base module at least 30 cm off the deck. Below that, ground reflections start to corrupt the leading edge of the pulse and the centimeter-grade numbers degrade to decimeter-grade.
From polar coordinates to motion
The TWR range and the PDOA bearing together give a complete relative position (r, theta) in the wagon’s own body frame – the wagon knows where the tag is relative to its own nose, without needing to know its absolute orientation in the world. Steering is then straightforward: turn until the bearing theta points forward, drive until the range r matches the target follow distance. No compass heading is required for this.
So what does the IMU do? It does not provide the bearing – PDOA does that. The IMU’s gyro and accelerometer feed a Kalman filter that smooths the UWB measurements, rejects physically impossible jumps, and enables dead-reckoning through brief UWB dropouts (like the body-blocking scenarios above). When the direct path vanishes for half a second, the wagon can coast on its last known heading instead of lurching toward a phantom reflection. The IMU also tracks absolute heading for features like path memory and return-to-home, but for real-time following the body-frame (r, theta) is enough on its own.
We feed that filtered polar pair into a pursuit loop tuned to lag slightly rather than chase exactly. That lag is the whole point: a follower that rides your wake feels natural, while one that matches every step feels creepy.
# simplified pursuit update
# positive when the person pulled away from the setpoint -> chase
error = measured_distance - target_distance
accel = Kp * error - Kd * velocity
drive_motors(accel, bearing)
The tuning of that loop is its own article. For now, the takeaway is that none of it is possible without a distance and a bearing you can trust – and that is what TWR plus PDOA buys you outdoors, in the sun, through a crowd.
What this means for the kit
Every followwagon ships with two UWB radios. One is a single-antenna tag you carry; the other is a multi-antenna anchor that rides on the wagon and runs both the TWR distance solve and the PDOA bearing solve on every frame. That pair is the ranging-and-bearing core the rest of the kit builds on – the motor drive, the lidar avoidance, the pursuit loop. Strip the UWB out and you no longer have a follower, you have a remote-control cart.
If you want to see the same idea rendered as a cursor-following canvas, scroll back up to the hero on the home page. The math here is what that animation is quietly simulating.