Junqi Ma, Fusang Zhang, Beihong Jin, Siheng Li, and Zhi Wang
Thanks for your interest in MULoc. This repository contains source code and sample datasets of the paper "MULoc: Towards Millimeter-Accurate Localization for Unlimited UWB Tags via Anchor Overhearing" (accepted by IEEE INFOCOM 2025).
Abstract: Recent years have seen rapid advancements in ultra-wideband (UWB)-based localization systems. However, most existing solutions offer only centimeter-level accuracy and support a limited number of UWB tags, which fails to meet the growing demands of emerging sensing applications (e.g., virtual reality). This paper presents MULoc, the first system that can localize an unlimited number of UWB tags with millimeter-level accuracy. At the core of MULoc is the innovative use of UWB phase, which can provide finer-grained distance measurement than traditional time-of-flight (ToF) estimates. To accurately obtain phase estimates from unsynchronized devices, we introduce a novel localization scheme called anchor overhearing (AO) and eliminate raw signal errors through a signal-difference-based technique. For precise tag localization, we resolve phase ambiguity by combining a fusion-based filtering method and frequency hopping. We implement MULoc on commercial UWB modules. Extensive experiments demonstrate that our system achieves a median localization error of 0.47 cm and 90-th percentile error of 1.02 cm, reducing the error of traditional method by 91.12%.
📌 Erratum - 2025/7/29
We would like to clarify a typo in the abstract of our published paper:
"MULoc achieves a median localization accuracy of 0.47 mm..."
The correct statement should be:
"MULoc achieves a median localization accuracy of 0.47 cm..."
This repository contains three main components:
- UWB Firmware Code
- ESP32 Firmware Code
- MATLAB Algorithm Code
A Keil uVision project that includes firmware code for MULoc Anchors and Tags.
An ESP32-S3 project designed to forward data output by UWB tags to a PC via a WiFi connection. It requires the ESP toolchain for compilation.
Signal processing algorithms written in MATLAB.
To compile this project, your environment must have the following installed:
- Keil uVision 5
- ARM Compiler 5.06
- STM32F103T8 library functions
The compiled binary files can be directly run on Jiulin X1 UWB modules. The most important files in this project are:
anchor_main.ctag_main.cbphere_uwb.cbphere_uwb.h
These files describe the MULoc anchor scheduling process. If you want to port MULoc to your own UWB module, you only need to modify these three files and integrate them into your project.
- Connect the ESP32-S3 and your PC to the same WLAN.
- Configure the PC's IP address and UDP port in the ESP32-S3 firmware.
- Collect UWB raw data by setting up a UDP server on the PC:
python ./utils/udp_receive.pyYou can also connect UWB tags directly to your PC via USB and collect data by reading the serial port:
python ./utils/serial_receive.pyFor each data collection, you will get multiple files:
data.txt: Raw data in byte formatdata_str.txt: Raw data parsed into string formatdata_tag.txt: Tag overhearing datadata_anchor_i.txt: Anchor overhearing data extracted from Anchor i
We provide two sample datasets in the ./matlab/sample_data directory. You can calculate the UWB tag positions by running data_analyse.m in MATLAB.
@inproceedings{ma2025muloc,
title={MULoc: Towards Millimeter-Accurate Localization for Unlimited UWB Tags via Anchor Overhearing},
author={Ma, Junqi and Zhang, Fusang and Jin, Beihong and Li, Siheng and Wang, Zhi},
booktitle={IEEE INFOCOM 2025-IEEE Conference on Computer Communications},
year={2025},
organization={IEEE}
}