# CRM / V2I UWB work zone geometry reconstruction experimental dataset package

Repository / DOI: [https://doi.org/10.5061/dryad.xgxd254xf](https://doi.org/10.5061/dryad.xgxd254xf)

### **Description of the data and file structure**

This CRM_Experimental_Dataset.zip folder contains the experimental data and data visualizations supporting the paper Vehicle-to-Infrastructure Work Zone Geometry Reconstruction with Pose-Conditioned UWB Range Denoising*. The study evaluates multi-anchor ultra-wideband (UWB) range denoising and downstream work zone geometry reconstruction using both controlled simulation benchmarks and a real-world vehicle-to-infrastructure (V2I) field deployment.

The deposit contains the raw and processed field data, simulation configurations and datasets, fixed episode-level splits, reported result tables, and paper visualizations. The reproduction code is distributed separately; see `code_or_notebooks/README.md`. For the explicit mapping from every reported table and figure to its source data, see

\`TABLE_TO_DATA_MAP.md`.

All planar positions are expressed in meters in a local east-north coordinate frame. The simulation tag trajectory begins at `(0, 0)`. Field positions use the measured site geometry and an RTK/INS-derived local frame. Field timestamps are Unix epoch seconds; simulation timestamps are seconds after the start of an episode. UWB anchor identities are fixed within an episode. Field anchors 51–54 are mapped to array columns by 'anchor_slot_ids', while simulation anchors are indexed by their per-episode array slot.

Missing or unavailable numeric values are represented by `NaN` in `.npz` files and by blank fields where applicable in `.csv` files. In range tensors, `obs_masks` identifies valid measurements; a zero-filled range entry must not be treated as valid when its mask is 0. Several `.npz` fields are NumPy object arrays because episode length or anchor count can vary. Load these files with `allow_pickle=True` in a trusted environment.

### **Files and variables**

#### **File: CRM_Experimental_Dataset_Acceptance_Package**

**Description:** This is the package root. It contains the field dataset, simulation benchmark, result tables, visualizations, machine-readable documentation, and a pointer to the separate code release.

#### **field**

This folder contains the measured UWB and RTK/INS field data and the aligned datasets

used for the field evaluation.

#### **field/raw**

This folder contains eight dynamic UWB ranging-event logs, two static reference logs, and dynamic and static RTK/INS pose streams.

\**arduino_ranging_events_2.csv through arduino_ranging_events_6.csv and arduino_ranging_events_10.csv through arduino_ranging_events_12.csv**: Dynamic UWB

ranging events. Each row is one range observation from a cone-mounted anchor.

\* **pc_time**: PC-clock timestamp in Unix epoch seconds.

\* **anchor_id**: UWB anchor identifier; observed field identifiers are 51–54.

\* **range_m**: Raw UWB measured range in meters.

\* **rx_dBm**: Received signal power in dBm.

**100.csv and 140.csv**: Static reference logs. The numeric file names are retained as

the nominal reference labels.

\* **Timestamp**: PC-clock timestamp in Unix epoch seconds.

\* **Arduino Output**: Raw device message containing the anchor ID, measured range in

  meters, received power in dBm, or a link-status message.

**inspvax_dyna.csv and inspvax_stat.csv**: Dynamic and static NovAtel INSPVAX RTK/INS streams used to construct the field reference frame and vehicle pose trajectory.

\* **time**: Human-readable recording time.

\* **header**: Message header containing the Unix timestamp and frame identifier.

\* **nov_header**: NovAtel message metadata, GPS week/time, receiver status, and sequence information.

\* **ins_status, pos_type, ext_sol_status**: INS, position-solution, and extended solution status records.

\* **latitude, longitude**: Geodetic position in degrees.

\* **height, undulation**: Ellipsoidal height and geoid undulation in meters.

\* **north_velocity, east_velocity, up_velocity**: Velocity components in meters per second.

\* **roll, pitch, azimuth**: Vehicle attitude angles in degrees.

\* **latitude_stdev, longitude_stdev, height_stdev**: Position standard-deviation fields.

\* **north_velocity_stdev, east_velocity_stdev, up_velocity_stdev**: Velocity standard-deviation fields.

\* **roll_stdev, pitch_stdev, azimuth_stdev**: Attitude standard-deviation fields.

\* **time_since_update**: Time since the last solution update.

\* **extended_params**: Additional body-frame velocity values and variances.

#### **field/processed**

This folder contains two versions of the aligned field dataset, episode summaries, calibration parameters, and field visualizations. Both `.npz` datasets contain 10 episodes: 2 static episodes and 8 dynamic episodes. Dynamic UWB events were aggregated into 0.10 s bins.

**real_dataset_provisional.npz**: Aligned pose-range-mask sequences used as the source dataset for the reported field evaluation. The dynamic reference geometry is based on the measured site dimensions, explicit anchor-to-corner assignment, RTK/INS trajectory, and measured GPS-to-tag lever arm.

**real_dataset_calibrated.npz**: Auxiliary calibrated-geometry version of the same 10 field episodes. It retains the same observation and mask streams while providing the corresponding calibrated position, anchor-geometry, and reference-distance arrays. 

The paper-result mapping identifies `real_dataset_provisional.npz` as the evaluation source.

The two `.npz` files use the following fields:

\* **episode_names**: Episode identifiers.

\* **episode_types**: `static` or `dynamic`.

\* **source_files**: Raw UWB file associated with each episode.

\* **anchor_slot_ids**: Fixed mapping from array slots to field anchor IDs

  `[51, 52, 53, 54]`.

\* **timestamps**: Per-episode arrays of Unix timestamps.

\* **positions**: Vehicle-mounted UWB tag positions, shaped `[episode][T, 2]`, in the local east-north frame.

\* **gps_positions**: Interpolated RTK/INS antenna positions, shaped `[episode][T, 2]`, in the same frame.

\* **obs_distances**: Observed per-anchor UWB ranges, shaped `[episode][T, 4]`, in meters.

\* **obs_masks**: Validity mask for `obs_distances`, shaped `[episode][T, 4]`.

\* **rx_power**: Per-anchor received signal power, shaped `[episode][T, 4]`, in dBm.

\* **provisional_gt_distances**: Retained provisional reference-distance array used by the field-processing pipeline.

\* **gt_distances**: Geometry-derived reference ranges for dynamic episodes, in meters; unavailable static entries are `NaN`.

\* **cones**: Per-episode 2D anchor/cone coordinates, shaped `[episode, 4, 2]`; unavailable static geometry is `NaN`.

\* **nominal_truth_label**: Static-file reference label (`100` or `140`); dynamic entries  are `NaN`.

**real_dataset_provisional_summary.csv and real_dataset_calibrated_summary.csv**:

One row per processed episode.

\* **episode_name, episode_type, source_file**: Episode identity, category, and raw source.

\* **num_steps**: Number of aggregated time steps.

\* **time_start, time_end**: First and last Unix timestamps.

\* **anchors_seen**: Number of anchors observed in the episode.

\* **anchor_ids_seen**: Comma-separated field anchor IDs observed.

\* **nominal_truth_label**: Static reference label; blank for dynamic episodes.

#### **field/processed/calibration**

This folder keeps calibration parameters separate from evaluation labels.

**real_raw_affine_calibration.json**: Per-anchor input-range calibration parameters and fit diagnostics for the dynamic field episodes.

\* **affine_a, affine_b**: Slope and intercept of the affine input calibration.

\* **offset_only_b**: Intercept of the offset-only alternative.

\* **raw_mse, raw_mae**: Error before calibration.

\* **affine_mse, affine_mae**: Error after affine calibration.

\* **offset_mse, offset_mae**: Error after offset-only calibration.

\* **overall**: Metrics aggregated across field anchors.

**stagea_real_postcal.json**: Per-anchor degree-1 output calibration for the field-adapted proposed model.

\* **affine_a, affine_b**: Output-calibration slope and intercept.

\* **mse, mae**: Per-anchor and overall calibrated errors.

\* **degree**: Polynomial degree, equal to 1.

\* **base_stagea_ckpt**: Checkpoint identifier from the separate code release.

\* **input_affine_json**: Input-calibration file used by the pipeline.

**stagea_real_postcal_deg2.json**: Per-anchor degree-2 output calibration used for the reported field-calibrated proposed-method row.

\* **poly_coeffs**: Quadratic, linear, and intercept coefficients.

\* **mse, mae**: Per-anchor and overall calibrated errors.

\* **degree**: Polynomial degree, equal to 2.

\* **base_stagea_ckpt, input_affine_json**: External checkpoint identifier and input calibration dependency.

#### **field/processed/figures**

This folder contains the field-data visualizations.

\* **settings.png**: Cone-mounted UWB-RSU, vehicle tag/RTK mounting, lever arm, and trapezoidal work zone layout.

\* **visualization.png**: Progressive reconstruction of the work zone geometry.

\* **gps_event_segments.png**: Dynamic UWB episode segmentation along the RTK/INS stream.

\* **real_dynamic_geometry.png**: Driven trajectory and field anchor layout.

\* **real_sequence_examples.png**: Example raw and denoised range sequences by anchor.

## **simulation**

This folder contains the clean and challenging simulation benchmarks, generation configurations, fixed episode-level splits, held-out test sets, and visualizations. The datasets are deterministic given the released configuration and RNG seed 0.

#### **simulation/configs**

**challenging_v2.json and clean_v2.json**: Simulation-generation parameters.

\* **num_zone_shapes, trajectories_per_shape, steps_per_trajectory**: Benchmark size and episode length.

\* **cones_range**: Inclusive range of per-episode anchor counts.

\* **area_size**: Simulated planar area in meters.

\* **frequency**: Sampling frequency in Hz.

\* **init_speed, speed_noise, heading_noise, speed_range**: Vehicle trajectory parameters.

\* **noise_std, sigma_dist_slope, ar1_rho**: Base, distance-dependent, and temporally correlated range-noise parameters.

\* **outlier_prob, outlier_scale**: Impulsive outlier parameters.

\* **p_nlos, nlos_offset_range**: NLOS occurrence probability and added offset range.

\* **nlos_burst**: Challenging-regime NLOS-burst start probability, mean duration, and offset range.

\* **dropout_burst**: Challenging-regime dropout-burst start probability, mean duration, and corruption scale.

\* **bias_per_anchor_std, bias_drift_std**: Anchor-specific bias and drift parameters.

\* **fov_deg, fov_dropout_scale**: Vehicle field-of-view and out-of-view corruption parameters.

\* **sim_data_clean_path, sim_data_challenging_path**: Generator output path settings.

#### **simulation datasets**

**sim_data_challenging_v2.npz**: Challenging benchmark with 1,440 episodes and 250 steps per episode.

**sim_data_clean_v2.npz**: Clean benchmark with 800 episodes and 220 steps per episode.

Both files contain:

\* **positions**: Tag trajectory, shaped `[episode, T, 2]`, in meters.

\* **velocities**: Planar tag velocity, shaped `[episode, T, 2]`.

\* **accelerations**: Planar tag acceleration, shaped `[episode, T, 2]`.

\* **gt_distances**: Ground-truth tag-to-anchor distances,

  shaped `[episode][T, N]`, in meters.

\* **obs_distances**: Corrupted observed ranges, shaped `[episode][T, N]`, in meters.

\* **nlos_mask**: Per-anchor NLOS indicator, shaped `[episode][T, N]`.

\* **cones**: Per-episode anchor coordinates, shaped `[episode][N, 2]`, in meters.

\* **timestamps**: Time vector in seconds after episode start.

#### **simulation/splits**

**sim_data_challenging_v2_splits_seed0.json**: Episode indices for the challenging 70/15/15 split: 1,008 train, 216 validation, and 216 test episodes.

**sim_data_clean_v2_splits_seed0.json**: Episode indices for the clean 70/15/15 split: 560 train, 120 validation, and 120 test episodes.

\* **train, val, test**: Mutually exclusive episode-index lists. Splitting is performed at the episode level to avoid trajectory leakage.

**sim_data_challenging_v2_test.npz and sim_data_clean_v2_test.npz**: Held-out test episodes used for all reported simulation results. They use the same fields as the full simulation datasets.

#### **simulation/figures**

\* **scenario_overview.png**: NLOS rates and range-error tails in the clean and challenging regimes.

\* **distance_vs_time_challenging.png**: Observed, reference, and denoised range behavior for one anchor stream in an NLOS-heavy episode.

### **results**

This folder contains one `.csv` file per reported result table. The values are the exact

numbers reported in the paper.

The common result variables are:

\* **Method or Variant**: Evaluated method, checkpoint, or ablation.

\* **MSE**: Mean squared range error in square meters.

\* **MAE**: Mean absolute range error in meters.

\* **Anchor_Error_w**: Mean Euclidean cone-position error over valid anchors, in meters.

\* **IoU**: Intersection-over-union of reconstructed and reference work zone polygons.

\* **Hausdorff**: Symmetric Hausdorff distance between polygon boundaries, in meters.

\* **LOS, NLOS, Overall**: Line-of-sight, non-line-of-sight, and all-valid-sample subsets.

**simulation_range_mse.csv**: LOS, NLOS, and overall range MSE for every method in the challenging and clean test sets.

\* **Challenging_MSE_LOS, Challenging_MSE_NLOS, Challenging_MSE_Overall**: Challenging benchmark metrics.

\* **Clean_MSE_LOS, Clean_MSE_NLOS, Clean_MSE_Overall**: Clean benchmark metrics.

**polygon_tuned_checkpoints.csv**: Comparison of the base and polygon-tuned propose model checkpoints.

\* **MSE_Overall**: Overall range MSE.

\* **IoU, Hausdorff**: Downstream polygon metrics.

**bootstrap_robustness.csv**: Episode-weighted bootstrap range-MSE summaries.

\* **Challenging_mean_CI, Clean_mean_CI**: Formatted `mean [lower, upper]` confidence interval for each benchmark.

**tail_burst_metrics.csv**: Range-error tail and contiguous NLOS-burst diagnostics on the challenging test split.

\* **Tail_p95, Tail_p99**: 95th and 99th percentiles of absolute range error in meters.

\* **Burst_max_mean, Burst_max_p95**: Mean and 95th percentile of the maximum absolute error within each NLOS burst, in meters.

\* **Recovery_p95**: 95th percentile of the number of steps after a burst required for absolute error to fall below the recovery threshold.

**anchor_stress_robustness.csv**: Overall range MSE under missing anchors and anchor re-indexing.

\* **Drop_0_0, Drop_0_1, Drop_0_3, Drop_0_5**: Mean MSE at dropout rates 0, 0.1, 0.3, and 0.5.

\* **Perm_MSE_mean_std**: Formatted mean ± standard deviation over 20 episode-consistent anchor permutations.

**cone_localization_downstream.csv**: Cone-position accuracy under canonical anchor ordering and polygon stability under anchor permutations.

\* **Anchor_Error_w**: Weighted mean cone-position error in meters.

\* **IoU_perm_mean, IoU_perm_std**: Polygon IoU mean and standard deviation over 20  episode-consistent anchor permutations.

**dropout_downstream_iou.csv**: Polygon quality under anchor dropout.

\* **IoU_at_drop_0_0, IoU_at_drop_0_3, IoU_at_drop_0_5**: Polygon IoU at dropout rates 0, 0.3, and 0.5.

**component_ablation.csv**: Proposed-model component and runtime-removal sensitivity.

\* **MSE_Overall, MSE_NLOS**: Overall and NLOS range MSE.

\* **IoU**: Downstream polygon IoU.

**pose_noise_sensitivity.csv**: Range MSE after injecting zero-mean planar noise into the model pose input at test time.

\* **MSE_at_0_0, MSE_at_0_25, MSE_at_0_5**: Overall MSE at pose-noise levels 0, 0.25 m, and 0.50 m.

**field_dynamic_episode_results.csv**: Aggregate method comparison on the eight dynamic field episodes.

\* **MSE, MAE**: Range error relative to the field geometry reference.

\* **Anchor_Error_w, IoU, Hausdorff**: Downstream field-geometry metrics.

#### **results/figures**

\* **tail_error_cdf_ccdf.png**: Absolute-error CDF and complementary CDF.

\* **dropout_robustness.png**: Range MSE versus anchor-dropout rate.

\* **downstream_robustness_summary.png**: Polygon robustness under permutation and dropout.

\* **pose_noise_sensitivity.png**: Range and downstream sensitivity to injected pose noise.

### **Package documentation and integrity files**

**data_dictionary.csv**: Machine-readable definitions for the principal field, simulation, and evaluation variables.

\* **field_name**: Variable name.

\* **type_or_unit**: Data type, array type, or unit.

\* **definition**: Variable meaning and, where relevant, array shape.

**dataset_manifest.csv**: File-level integrity manifest.

\* **relative_path**: Path relative to this package root.

\* **size_bytes**: File size in bytes.

\* **sha256**: SHA-256 checksum.

\* **status**: File role, such as raw data, simulation dataset, calibration, reported result table, documentation, or data visualization.

**qa_checklist.csv**: Machine-readable acceptance checklist and current completion status.

\* **check_item**: Acceptance requirement.

\* **status**: Current state (`ready` or `needs_update`).

\* **notes**: Evidence or remaining action.

**TABLE_TO_DATA_MAP.md**: Mapping from every paper table and figure to the package file and source dataset used to produce it.

**code_or_notebooks/README.md**: Pointer and data-routing notes for the separate reproduction-code release.

### **Code/software**

This deposit contains data and data visualizations only. The separate reproduction release contains the simulation generator, preprocessing, model training, evaluation, and plotting scripts. That release requires Python 3.10 or later; a CUDA-capable GPU is recommended for training, while evaluation can run on CPU. NumPy is required to read the compressed `.npz` datasets.

The simulation benchmarks can be regenerated from `simulation/configs/*.json` with RNG seed 0. Evaluation of the paper results uses the held-out files in `simulation/splits/`. The field pipeline aligns `  field/raw/` into `field/processed/real_dataset_provisional.npz` and applies the separately stored calibration files under `field/processed/calibration/`.

### **Access information**

Other publicly accessible locations of the data:\
Repository / DOI: [https://doi.org/10.5061/dryad.xgxd254xf](https://doi.org/10.5061/dryad.xgxd254xf).

The simulation data were generated from the configurations included in this package. The field data were collected for the CRM/UWB V2I work zone geometry reconstruction project.

Contact:

\* Author email:  [jliu2487@wisc.edu](mailto:jliu2487@wisc.edu)

\* License / access terms: Data files in this Dryad deposit are released under the CC0 1.0 Universal Public Domain Dedication. 

**Supplemental Information**

The associated final report and other creative materials deposited as Supplemental Information through Zenodo are released under the Creative Commons Attribution 4.0 International (CC BY 4.0) license.

Suggested citation:

Liu, J., Li, H., Cheng, Y., Fu, S., Gan, R., You, J., Tang, W., Zhang, P., Parker, S. T., Li, X., and Ran, B. *Vehicle-to-Infrastructure Work Zone Geometry Reconstruction with Pose-Conditioned UWB Range Denoising*. CCAT Final Report dataset package, 2026.
