Flash an anchor
A0 is the time master. Flash each remaining unit once as A1, A2, and—only for 3D—A3. After flashing, anchors need power only; do not connect them to the visualizer.
Firmware Console
Hold BOOT0 on the tag, plug it in as STM32 DFU, then flash a role. Replug normally to connect over serial. Follow the quickstart for the complete sequence, or see the build notes.
Both tags connect during setup. The responder reports the measured distance.
- mm /
Mean: - mm /
Stdev: - mm /
Rate: - Hz /
Missing: 0 /
RSSI: - dBm /
N: 0
1524 mm
Connect both tags, place them at a known distance with clear line of sight, then collect samples and write a new antenna-delay offset to the responder.
Fixed anchors synchronize and report arrival timestamps over UWB. The mobile tag computes each fix onboard, then sends positions to this computer over one USB cable for visualization and testing.
Every image below is configured from the coordinates in the room planner. Reflash a device whenever its anchor number or surveyed position changes.
A0 is the time master. Flash each remaining unit once as A1, A2, and—only for 3D—A3. After flashing, anchors need power only; do not connect them to the visualizer.
The tag receives all anchor reports, solves 2D or 3D onboard, and streams x, y, z over USB.
Yes—TDOA should be calibrated. Put the tag at one accurately measured point with clear line of sight. The tag compares measured arrival differences with the geometry, then applies one bias per slave anchor. Leave it at that point afterward to populate the live accuracy metrics below.
Measure each antenna phase-center coordinate—not the enclosure edge. Keep A0 in direct line of sight to every slave, then calibrate per-anchor delay.
Use fixed surveyed points first, then a measured path. Log raw fixes and RF quality before applying a motion filter so bias and jitter stay visible.
Use 3D, horizontal, and vertical RMSE; median and P95 error; axis bias; fix rate; and loss rate. A single “average accuracy” hides failure modes.
Load a CSV from a surveyed static point or path. Required columns: true_x_ft,true_y_ft,true_z_ft,est_x_ft,est_y_ft,est_z_ft. Optional: timestamp_ms,seq,rssi_dbm,valid.
Three anchors provide two independent time differences for a 2D solve at a known tag height. Four anchors provide three differences for a 3D solve; they must not be coplanar or vertical accuracy collapses. The preview computes GDOP from the local TDOA Jacobian and colors the sampled room volume from strong to weak geometry. GDOP predicts noise amplification, not real-world multipath or calibration bias.
The setup follows the line-of-sight, square-coverage, wall-clearance, surveyed-phase-center, and RMSE guidance in Zhang et al. (2022), the clock-drift and weighted least-squares findings in Krobka et al. (2018), and Qorvo’s range, NLOS, and antenna-delay notes.