Skip to content

libgnss++ v0.3.0

Latest

Choose a tag to compare

@github-actions github-actions released this 06 Oct 09:40
· 142 commits to develop since this release
72f3b7c

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-evaluate replays 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-demo includes 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

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 --plot

The 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 --plot

Omit --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