Skip to content

MRTKLIB v0.3.3 Release Notes

Release date: 2026-03-07 Type: Minor (benchmark tooling — no functional changes to the library)


Overview

v0.3.3 introduces a kinematic positioning benchmark for evaluating MRTKLIB's three positioning modes against real-world urban driving data from the PPC-Dataset (Precise Positioning Challenge 2024). Six vehicle runs recorded in Nagoya and Tokyo are covered, with sub-centimetre ground truth from an Applanix POS LV 220 GNSS/INS system.

Three positioning modes are benchmarked:

Mode Engine Correction Ambiguity
CLAS PPP-RTK QZSS L6D (IS-QZSS-L6-003) Integer AR
MADOCA PPP QZSS L6E (MADOCA-PPP) Float only
RTK Kinematic RTK Rover + base RINEX Integer AR

No library code, positioning algorithms, or public API changed in this release.

Disclaimer: The configuration parameters used here have not been tuned or optimised for maximum accuracy. Results are provided for reference only and should not be taken as representative of the best achievable performance.


What Changed

Kinematic Benchmark Infrastructure (scripts/benchmark/)

Four new Python scripts provide an end-to-end kinematic evaluation pipeline:

Script Purpose
cases.py Metadata for all 6 PPC-Dataset runs (GPS week/TOW, city/run IDs)
download_l6.py Auto-download QZSS L6D (CLAS) and L6E (MADOCA) archive files
compare_ppc.py Compare rnx2rtkp NMEA output against reference.csv ground truth
run_benchmark.py Orchestrator: download → run rnx2rtkp → compare → summary table

Key features: - Three positioning modes: --mode clas|madoca|rtk|both|all (both=clas+madoca, all=clas+madoca+rtk, default all) - L6D archive: https://sys.qzss.go.jp/archives/l6/ (CLAS) - L6E archive: https://l6msg.go.gnss.go.jp/archives/ (MADOCA, PRN auto-probe) - Result caching: skips rnx2rtkp if output file is newer than all inputs - Per-case PNG plots (--plot) via matplotlib - Full CLI with --mode, --case, --skip-epochs, --force, -v

Three-Tier Accuracy Breakdown

compare_ppc.py now reports three solution-quality tiers for CLAS and RTK, plus a separate PPP tier for MADOCA:

Tier GGA Q Description
FIX 4 Integer ambiguity fix epochs only
FF 4, 5 Fix + float; excludes SPP fallback
ALL any Every matched epoch including SPP
PPP 3 All valid PPP-float epochs (MADOCA)

Each row now also reports nSV (mean satellite count used in that tier). TTFF is defined as the first epoch of a ≥30-consecutive Q=4 run.

Benchmark Configurations (conf/benchmark/)

Five configuration files cover all hardware/mode combinations:

File Purpose Key parameters
clas.conf CLAS PPP-RTK ant1-anttype=*, pos2-isb=off, NMEA output
madoca.conf MADOCA PPP pos1-dynamics=on, ant1-postype=single, NMEA output
rtk.conf Kinematic RTK pos1-frequency=l1+2+3, pos1-ionoopt=off, snrmask_r=on
nagoya.conf Nagoya overrides Precise base LLH, ant1/ant2-anttype, ant2-antdelu
tokyo.conf Tokyo overrides Precise base LLH, ant1/ant2-anttype, ant2-antdelu

The mode conf and city conf are layered via two -k flags; city settings take precedence. City confs supply the precise base-station marker coordinates and the ANTENNA DELTA H from each base.obs RINEX header (ant2-antdelu).

RTK triple-frequency AR: With pos1-ionoopt=off, NF(opt)=3 and all three raw frequencies (L1/L2/L5) participate in double-difference ambiguity resolution. This is effective for the PPC-Dataset baselines (13–27 km) because the rover and base are both open-sky stations with good L5 visibility.

Receiver-specific notes (CLAS/MADOCA): - Rover RINEX files carry Unknown Unknown in ANT # / TYPEant1-anttype = * - Septentrio mosaic-X5 has no ISB table entry → pos2-isb = off

Bug Fixes (Benchmark Tooling)

Component Fix
rnx2rtkp multi--k loading resetsysopts() was called inside the -k loop, resetting values set by earlier conf files; moved to before the loop
loadopts() leading whitespace Value strings after the = separator now have leading whitespace stripped
MADOCA misc-timeinterp Was inadvertently set to off in the original conf; restored to on (matches upstream behaviour)

Documentation (docs/benchmark.md)

Updated benchmark guide covers: - PPC-Dataset manual download instructions - L6 archive auto-download (python download_l6.py) - Full benchmark execution walkthrough including RTK mode - Complete option reference - Three-tier metric definitions (FIX / FF / ALL / PPP) - Updated result tables for all three modes - Configuration notes explaining the layered conf approach - Known limitations (urban multipath, long RTK baselines, no ISB, etc.)


Indicative Benchmark Results

Results on all six PPC-Dataset runs, GNSS-only (no IMU), --skip-epochs 60. Parameters are not tuned; see the disclaimer at the top of this document.

Nagoya

Case Mode Tier N Fix% RMS 2D 95% TTFF (s)
nagoya_run1 CLAS FIX 1 276 17% 1.105 m 0.402 m 0.452 m 0
ALL 7 525 42.8 m 4.089 m 53.2 m
nagoya_run1 MADOCA PPP 1 968 17.4 m 2.108 m 4.684 m
nagoya_run1 RTK FIX 2 140 30% 1.536 m 0.112 m 0.151 m 799
nagoya_run2 CLAS FIX 2 522 27% 1.088 m 0.717 m 0.826 m 0
ALL 9 390 305.6 m 8.323 m 73.9 m
nagoya_run2 MADOCA PPP 7 494 39.3 m 2.967 m 19.4 m
nagoya_run2 RTK FIX 1 489 16% 1.081 m 0.154 m 0.196 m 0
nagoya_run3 CLAS FIX 325 6% 0.318 m 0.339 m 0.397 m 9
ALL 5 141 12.7 m 6.606 m 27.9 m
nagoya_run3 MADOCA PPP 2 753 2.649 m 2.246 m 4.285 m
nagoya_run3 RTK FIX 416 8% 0.307 m 0.128 m 0.150 m 72

Tokyo

Case Mode Tier N Fix% RMS 2D 95% TTFF (s)
tokyo_run1 CLAS FIX 612 5% 0.868 m 0.239 m 2.483 m 15
ALL 11 867 627.1 m 7.914 m 277.3 m
tokyo_run1 MADOCA PPP 3 084 1.825 m 0.979 m 1.957 m 0
tokyo_run1 RTK FIX 380 3% 0.711 m 0.027 m 0.643 m 1840
tokyo_run2 CLAS FIX 1 972 22% 0.590 m 0.117 m 1.041 m 368
ALL 9 091 33.4 m 2.389 m 33.5 m
tokyo_run2 MADOCA PPP 8 159 2.894 m 1.181 m 4.580 m 464
tokyo_run2 RTK FIX 1 517 18% 17.993 m 0.010 m 0.059 m 806
tokyo_run3 CLAS FIX 1 129 7% 0.801 m 0.075 m 1.831 m 28
ALL 15 241 41.5 m 3.737 m 29.6 m
tokyo_run3 MADOCA PPP 2 795 0.724 m 0.750 m 1.062 m 26
tokyo_run3 RTK FIX 3 669 25% 0.293 m 0.013 m 0.051 m 335

Interpretation:

  • CLAS FIX accuracy: 0.3–1.1 m RMS 2D across all runs — consistent with PPP-RTK performance under urban multipath. Fix rates of 5–27% are expected given the dense canyon environments shown in the dataset's fisheye imagery.
  • RTK FIX accuracy: Most runs achieve sub-metre FIX RMS with triple-frequency AR (l1+2+3, ionoopt=off), e.g. nagoya_run3: 0.31 m, tokyo_run3: 0.29 m. tokyo_run2 FIX RMS is elevated (18 m) despite tiny 1σ/95% values — a small number of wrongly-fixed epochs at this ~27 km baseline dominate the RMS.
  • RTK FF = ALL: RTK outputs Q=4 (fix) or Q=5 (float) only — no SPP fallback — so the FF and ALL tiers are identical.
  • CLAS ALL RMS: The large ALL-epoch values (13–627 m) reflect Q=1 SPP fallback epochs that dominate in the deepest canyons. The FF tier (24–78%) removes these.
  • MADOCA: Float-only PPP; N reflects epochs with a valid filter solution. In nagoya_run1 (heavy multipath) only 27% of epochs produce a solution. In more open environments (tokyo_run2) coverage reaches ~100%.
  • These results establish a baseline for future improvements.

Note: Kinematic benchmark results are not part of the CTest regression suite (PPC-Dataset requires a manual download). Run manually with python scripts/benchmark/run_benchmark.py.


Acknowledgements

The kinematic benchmark relies on the PPC-Dataset from the Precise Positioning Challenge 2024 (高精度測位チャレンジ2024), organised by the Institute of Navigation Japan (測位航法学会):

Taro Suzuki, Chiba Institute of Technology. PPC-Dataset — GNSS/IMU driving data for precise positioning research. https://github.com/taroz/PPC-Dataset

The dataset provides six urban vehicle runs (Nagoya × 3, Tokyo × 3) with 5 Hz triple-frequency multi-GNSS observations, 100 Hz IMU data, and sub-centimetre ground truth from an Applanix POS LV 220. We gratefully acknowledge Prof. Suzuki for making this dataset publicly available.


Test Suite (unchanged at 57 tests)

No new CTest entries in this release. All 57 tests from v0.3.2 continue to pass.

Test Suite Tests
Unit tests 12
SPP regression 2
Receiver bias 2
rtkrcv real-time 1
MADOCA PPP / PPP-AR / PPP-AR+iono 10
CLAS PPP-RTK (single-ch / dual-ch / ST12 / L1CL5) 10
CLAS VRS-RTK (single-ch / ST12 / dual-ch) 9
ssr2obs / ssr2osr 3
BINEX reading 1
Tier 2 absolute accuracy 2
Tier 3 position scatter 2
Fixtures (setup/cleanup/download) 3