Skip to content

rsasaki0109/gnssplusplus-library

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

258 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

libgnss++

Modern C++17 GNSS toolkit for non-GUI positioning.

Native SPP, RTK, PPP, CLAS/MADOCA, RTCM, UBX, and direct QZSS L6 handling without an external RTKLIB runtime.

UrbanNav Odaiba social card

What You Get

  • Solvers: gnss spp, gnss solve, gnss ppp
  • Inputs/tools: RINEX, RTCM, UBX, SBF, NMEA, BINEX, QZSS L6
  • Products: SP3, CLK, IONEX, DCB
  • Extras: benchmarks, web dashboard, Python bindings, Docker, ROS 2 playback

Feature overview

Results

Area Public comparison Current result
RTK PPC Tokyo/Nagoya vs RTKLIB demo5 +17.0 pp positioning, +28.1 pp official score, -11.96 m P95 H delta
CLAS PPP QZSS CLAS vs CLASLIB 3.57 mm vs 7.29 mm RMS 3D
Urban RTK UrbanNav Tokyo Odaiba vs RTKLIB demo5 More fixes, lower Hp95/Vp95; --preset odaiba closes Hmed
SPP PPC SPP adaptive robust + policy gate No P95 regression with <=1 pp positioning drop

PPC RTK vs RTKLIB demo5

These are public PPC Tokyo/Nagoya moving-RTK replays using the same rover/base/nav observations for libgnss++ and RTKLIB demo5.

Run gnssplusplus Positioning RTKLIB Positioning Delta gnssplusplus Fix RTKLIB Fix PPC official score RTKLIB official score Official delta P95 H delta
Tokyo run1 90.0% 66.3% +23.7 pp 54.4% 30.5% 34.9% 0.0% +34.9 pp +3.39 m
Tokyo run2 95.3% 84.3% +11.0 pp 64.1% 27.6% 69.0% 16.9% +52.1 pp -18.51 m
Tokyo run3 95.7% 93.1% +2.5 pp 63.0% 40.5% 60.6% 35.6% +25.0 pp -0.24 m
Nagoya run1 88.8% 65.8% +23.0 pp 64.5% 33.8% 49.5% 22.4% +27.1 pp -23.78 m
Nagoya run2 85.6% 69.8% +15.8 pp 51.4% 18.8% 20.9% 11.0% +9.9 pp -27.24 m
Nagoya run3 93.8% 67.7% +26.1 pp 27.1% 13.9% 27.4% 7.6% +19.7 pp -5.37 m

Across these six public runs, the coverage profile averages +17.0 pp Positioning-rate lead, +28.1 pp PPC official-score lead, and -11.96 m P95 horizontal-error delta versus RTKLIB demo5.

PPC RTK coverage scorecard

CLAS PPP vs CLASLIB

QZSS CLAS PPP from raw L6 binary, 2019-08-27 static dataset, 1 hour (3599 epochs):

Metric libgnss++ --claslib-parity CLASLIB
Matched fixed epochs 3594 / 3599 (99.86%) 3594 / 3599 (99.86%)
RMS 3D fixed-only 3.57 mm 7.29 mm
3D bias mean offset 1.66 mm 4.84 mm
RMS East 1.15 mm 1.52 mm
RMS North 1.21 mm 0.92 mm
RMS Up 3.15 mm 7.07 mm
First fix epoch epoch 6 epoch 6
Runtime dependency no CLASLIB runtime CLASLIB runtime
CLASLIB 2D libgnss++ 2D
CLASLIB 2D libgnss++ CLAS 2D
RTKLIB Odaiba 2D libgnss++ Odaiba 2D
RTKLIB Odaiba 2D libgnss++ Odaiba 2D

Quick Start

Choose the entrypoint that matches your job:

  • Robotics quick start: RTK replay, local web inspection, ROS2 receiver launch, and rosbag capture.
  • Research quick start: repeatable sign-off runs, profile comparisons, Python inspection, and artifact layout.
  • Dataset gallery: current public dataset lanes and the adapter contract for adding more.

Build:

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j
python3 apps/gnss.py doctor
python3 apps/gnss.py ros2-doctor --device /dev/ttyUSB0
python3 apps/gnss.py ros2-bag-doctor --bag /path/to/rosbag --summary-json output/ros2_bag_doctor_summary.json
python3 apps/gnss.py field-report --out output/field_report.md
python3 apps/gnss.py robotics-smoke --profile realtime

ros2-bag-doctor reads sqlite ROS2 bags for message-level rates/gaps. For MCAP bags it uses the optional Python mcap package when available, and otherwise falls back to MCAP metadata.yaml for topic presence, counts, and duration. gnss web auto-discovers output/field_report*.json and shows the report links, Markdown preview, setup/ROS2/bag/smoke status, and next debug commands.

Run a solution:

python3 apps/gnss.py spp \
  --obs data/rover_static.obs \
  --nav data/navigation_static.nav \
  --out output/spp_solution.pos

RTK example:

python3 apps/gnss.py solve \
  --rover data/rover_kinematic.obs \
  --base data/base_kinematic.obs \
  --nav data/navigation_kinematic.nav \
  --mode kinematic \
  --out output/rtk_solution.pos

Run the web UI:

python3 apps/gnss.py web --port 8085

Then open http://127.0.0.1:8085.

List commands:

python3 apps/gnss.py --help

Docker

docker build -t libgnsspp:latest .
docker run --rm -it -p 8085:8085 -v "$PWD:/workspace" \
  libgnsspp:latest web --host 0.0.0.0 --port 8085 --root /workspace

Benchmarks

Docs

Install

cmake --install build --prefix /opt/libgnsspp
/opt/libgnsspp/bin/gnss --help

Tests

ctest --test-dir build --output-on-failure

License

MIT License. See LICENSE.