Repository navigation
libgnss++ v0.3.0
This release adds receiver-free position, velocity and attitude evaluation,
received-event GNSS/IMU output, and compiler-free distribution paths. The
library/CPack/CMake package version is 0.3.0. Existing estimator defaults
are preserved; publishing the evaluation tools does not promote the frozen
experimental vehicle constraints.
Highlights
- Online API/CSV exports fresh timestamped quaternion, FRD/NED Euler angles,
heading initialization/health, fixed local frame and estimated IMU biases. gnss pva-evaluatereplays public PPC logs and scores position, velocity and
attitude with RMSE, P95, maximum, full SO(3) error, exact time matches,
coverage, scene populations and censored initialization/recovery delays.- Fixed GNSS outage and IMU gap scenarios record missing output, reset,
recovery and displacement-error growth without truth-based estimation or
fitted time/mount/heading alignment. gnss pva-demoincludes a project-authored, 12-snapshot synthetic scoring
witness with missing initialization and an unhealthy 180-degree error.- Docker runtime, Linux TGZ/DEB and Windows ZIP include the PVA command
surface. POSIX installation normalizes executable script newlines while
preserving frozen/raw data. DEB builds include the ELF inspection utility.
Downloads
- Windows x64 ZIP and Windows SHA-256
- Ubuntu 24.04 amd64 DEB, Linux TGZ, and Linux SHA-256
- Docker:
ghcr.io/rsasaki0109/gnssplusplus-library:v0.3.0(linux/amd64) - Publication verification record: tagged source, workflow results, anonymous downloads and registry access, installed package/demo/public-log checks.
Get started
docker run --rm -v "$PWD/output:/out" \
ghcr.io/rsasaki0109/gnssplusplus-library:v0.3.0 \
pva-demo --output-dir /out/new-pva-demo --plotThe witness validates scoring and packaging; it does not run sensor inference
or establish field accuracy. For an external public log, mount PPC read-only:
docker run --rm -v /datasets/PPC-Dataset:/datasets/PPC-Dataset:ro \
-v "$PWD/output:/out" ghcr.io/rsasaki0109/gnssplusplus-library:v0.3.0 \
pva-evaluate --run-dir /datasets/PPC-Dataset/tokyo/run1 \
--output-dir /out/new-tokyo1 --max-epochs 600 --plotOmit --max-epochs for a full run. Output directories must be new. No PPC raw
data are bundled. The replay simulates receipt at rover epochs and admits
navigation by toc/tof; it does not measure live network latency.
Distribution requirements
Release automation builds tag-matched TGZ/DEB for Ubuntu 24.04 amd64 and
publishes checksums after a fresh DEB install smoke. The Windows x64 ZIP is
built separately from the same tagged source and has its own checksum. The
versioned GHCR image includes Python/numpy/matplotlib. TGZ targets Ubuntu
24.04 x86_64 and requires its system runtime and Python dependencies.
Windows requires Python 3.10+, the x64 MSVC runtime, and matplotlib for plots;
its optional binding is built for Python 3.12. Linux optional bindings use
PYTHONPATH=<prefix>/lib/python3.12/site-packages (/usr for DEB). C++ SDK
consumers need Eigen headers. See the PVA guide for installation details.
Accuracy and validation scope
The six existing PPC runs are development/regression data, not holdouts.
Ground truth is used only for offline scoring and scene labels. Frozen
control/candidate normal, GNSS-outage and IMU-gap runs comprise 36 replays.
The vehicle-constraint candidate is No-Go: one strong improvement does
not offset position, velocity and rotation regressions on other runs. Default
candidate-none behavior is preserved. The measured online estimator still
has large errors on several runs and is not validated for navigation use.
Position/freshness/heading health must be interpreted alongside accuracy;
unhealthy outputs remain in primary error statistics. Offline batch estimates
with future-input preprocessing are a separate comparison, not proof of
received-event causality. Previously closed application holdouts and paused
smartphone work were not reopened for this release.
The online API, PVA scoring/comparison, production prefix/parity and installed
packaging checks pass. The feature PR passes Linux GCC/Clang core CI, strict
docs, hygiene and static analysis. Historical Windows CTest retains nine
platform/immutable-record/external-fixture failures; local ROS2 is unavailable.
See the PVA guide, frozen development results,
online event API, and release runbook.
What's Changed
- fix: upload only validated release assets by @rsasaki0109 in #472
- docs: add community onboarding by @rsasaki0109 in #473
- docs: add runnable use-case guides by @rsasaki0109 in #474
- docs: add 200-star growth launch kit by @rsasaki0109 in #475
- CLAS: nfix-limited post-reset quarantine eliminates nagoya_run2 bad-burst by @rsasaki0109 in #477
- CLAS: enable post-reset quarantine by default (floor=5.0, max_nfix=7) by @rsasaki0109 in #478
- feat(io): parse RINEX 4 SBAS GEO ephemeris records by @rsasaki0109 in #476
- feat: TOML config, GeoJSON output, and improved KML for gnss_ppp by @rsasaki0109 in #479
- feat(python): extend solve_ppp_file and add solve_clas_kinematic_file by @rsasaki0109 in #480
- feat: live per-epoch output and web dashboard live PPP view by @rsasaki0109 in #481
- feat(web): polish live PPP dashboard controls and trajectory view by @rsasaki0109 in #482
- feat: NTRIP auto-reconnect and stream stats dashboard by @rsasaki0109 in #483
- refactor: repo cleanup, solver TU splits, and fully green ctest by @rsasaki0109 in #484
- refactor(core): split navigation.cpp into per-product TUs by @rsasaki0109 in #485
- refactor(ppp/io): TU splits for ppp_clas, rtcm, ppp_clas_dd/epoch/osr by @rsasaki0109 in #486
- Add visual evidence channel and status-trajectory web view by @rsasaki0109 in #487
- Fix macOS clang build: value-initialize const PositionSolution in test_types by @rsasaki0109 in #488
- feat: guide users to their next GNSS workflow by @rsasaki0109 in #489
- feat: guide users from solutions to inspection by @rsasaki0109 in #490
- Improve moving CLAS PPP to beat MRTKLIB on all PPC runs by @rsasaki0109 in #492
- feat: close RTK and raw-only native smartphone FGO at accepted 1.077 m by @rsasaki0109 in #491
- feat(next): guide bundle results to inspection by @rsasaki0109 in #493
- build: exclude archived smartphone experiments from Linguist stats by @rsasaki0109 in #494
- test: skip sealed-artifact contracts when preconditions are absent by @rsasaki0109 in #496
- docs: make the docs homepage task-oriented by @rsasaki0109 in #497
- docs: restructure navigation around audiences and hide research logs by @rsasaki0109 in #498
- docs: collapse navigation sections by default by @rsasaki0109 in #499
- docs: make navigation sections actually collapsible by @rsasaki0109 in #500
- feat(smartphone): surveyed base position + IMU time-offset overrides by @rsasaki0109 in #501
- docs(smartphone): base-surveyed dev-route results (A 1.36 -> 0.30 m) by @rsasaki0109 in #503
- feat(smartphone): allow base compensation with sparse-p staging (LAX-T 3.10 -> 0.71 m) by @rsasaki0109 in #504
- feat: PPC RTK-only vs tightly-coupled GNSS/IMU figure + heavy-tail front-end fix by @rsasaki0109 in #502
- fix: align fixed-lag covariance and integrity recovery evidence by @rsasaki0109 in #505
- feat(gsdc): native GSDC 2023 taroz-parity options and evidence by @rsasaki0109 in #506
- fix(gsdc): clock continuity and validated 0.984 m Private recipe by @rsasaki0109 in #507
- refactor: remove dead Python commands, support modules and scripts by @rsasaki0109 in #508
- refactor: remove dead C++ declarations, uncalled functions and orphan files by @rsasaki0109 in #511
- chore: remove archived smartphone phase research harnesses and records by @rsasaki0109 in #510
- chore: remove finished native-FGO/GSDC research commands, scripts and unused models by @rsasaki0109 in #509
- docs(readme): drop the previous GSDC submission comparison by @rsasaki0109 in #512
- docs: align README results with their evidence and restore FGO plot script by @rsasaki0109 in #513
- feat: add gnss reproduce lanes for README results by @rsasaki0109 in #514
- feat(gnss_ppp): add --progress reporting for long runs by @rsasaki0109 in #515
- perf(clas): ~16x faster CLAS OSR (memoize held tokens, avoid token-map copies) by @rsasaki0109 in #516
- docs(reproduce): clas-ppc lane verified; --check-only without binaries by @rsasaki0109 in #517
- feat(reproduce): add fgo-tokyo lane (GNSS/IMU FGO vs tc-fgo) by @rsasaki0109 in #518
- feat(reproduce): add gsdc-dev-routes lane for the GSDC base-surveyed dev routes by @rsasaki0109 in #519
- feat(reproduce): add score-only ppc-goal lane by @rsasaki0109 in #520
- feat(reproduce): add gsdc-official lane rebuilding Kaggle submission 56625084 by @rsasaki0109 in #521
- docs(readme): mark PPC goal section as score-only reproduction by @rsasaki0109 in #522
- docs(reproduce): scope gsdc-official verification to the per-drive subset by @rsasaki0109 in #523
- chore: remove unreferenced use-case records by @rsasaki0109 in #525
- build(tests): fix Ninja 'multiple rules generate tests/run_tests' on Linux by @rsasaki0109 in #524
- test: register orphan Python tests in ctest by @rsasaki0109 in #526
- fix(rtk): restore --preset odaiba with arc-smoothed wide-lane AR by @rsasaki0109 in #527
- refactor(apps): share duplicated native CLI helpers via apps/native headers by @rsasaki0109 in #528
- refactor(src): share duplicated SPP/PPP and MADOCA time helpers by @rsasaki0109 in #529
- test(benchmark): fix python_benchmark_tests after odaiba-benchmark args (#514) by @rsasaki0109 in #530
- fix: initialize PositionSolution vectors to NaN instead of stack garbage by @rsasaki0109 in #531
- chore: prune unpublished smartphone native-FGO docs and orphaned records by @rsasaki0109 in #532
- docs: CLAS PPP below 10 cm without a base station (GIF demo) by @rsasaki0109 in #495
- build: make the full default build compile and link with MSVC by @rsasaki0109 in #533
- fix(bench): score UrbanNav Odaiba with the surveyed base position by @rsasaki0109 in #534
- feat: Galileo HAS float PPP via HAS IDD (RTCM SSR) + has-idd-ppp lane by @rsasaki0109 in #535
- perf(clas): index parsed atmosphere keys; resolve grid references once per selection by @rsasaki0109 in #536
- fix(ppp): commit one measurement update per epoch in kinematic PPP by @rsasaki0109 in #537
- fix(ppp): commit one measurement update per epoch in kinematic MADOCA IF PPP by @rsasaki0109 in #538
- ci(madoca): widen kinematic IF smoke tolerance for gcc/MSVC spread by @rsasaki0109 in #539
- test(rcv): wait for background receivers before temp-dir cleanup (flaky python_cli_tests) by @rsasaki0109 in #540
- fix(ppp): BeiDou group delays, single-frequency ionosphere and residual screening for broadcast kinematic PPP by @rsasaki0109 in #541
- feat: Galileo HAS signal-in-space (E6-B) decoder for float PPP by @rsasaki0109 in #542
- fix(io): reject off-orbit GLONASS records in RINEX 4 navigation files by @rsasaki0109 in #543
- fix(io): decode UBX-RXM-SFRBX with the documented payload layout by @rsasaki0109 in #544
- fix(iers): evaluate the IERS solid-earth tide with Earth-fixed Sun and Moon by @rsasaki0109 in #545
- fix(ppp): relativistic clock term, precise-only satellite set and satellite PCO for SP3/CLK PPP by @rsasaki0109 in #546
- fix(ppp): commit one measurement update per epoch in static PPP by @rsasaki0109 in #547
- fix(japan-survey): fetch igs20.atx from the immutable IGS PCV archive by @rsasaki0109 in #548
- fix(io): write Galileo data sources and SISA in metres to RINEX navigation by @rsasaki0109 in #550
- fix(ppp): BeiDou-3 broadcast PPP — B1I/B3I pairing and BDS receiver clocks by @rsasaki0109 in #551
- fix(ppp): make --use-dynamics-model work outside CLAS by @rsasaki0109 in #552
- fix(ppp): MADOCA static ionosphere-free commits one update per epoch, no SPP anchor blend by @rsasaki0109 in #553
- ci(madoca): tighten ppp-profile ceilings to the post-#553 values by @rsasaki0109 in #554
- ci(scope): run heavy lanes when CI-consumed data under docs/ changes by @rsasaki0109 in #555
- fix(cli): read --base-ecef components in sequence in gnss_live and gnss_replay by @rsasaki0109 in #556
- feat(python): expose satellite identity on CorrectedMeasurement by @rsasaki0109 in #557
- feat(python): expose raw observables and satellite motion on CorrectedMeasurement by @rsasaki0109 in #558
- feat: add reproducible PPC evaluation, online RTK/IMU and observation analysis by @rsasaki0109 in #559
- feat: add hardware-free online PVA evaluation and distributions by @rsasaki0109 in #560
- release: v0.3.0 PVA evaluation and native distributions by @rsasaki0109 in #561
Full Changelog: v0.2.0...v0.3.0