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.
- 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
| 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 |
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.
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 |
|---|---|
![]() |
![]() |
| RTKLIB Odaiba 2D | libgnss++ Odaiba 2D |
|---|---|
![]() |
![]() |
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 realtimeros2-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.posRTK 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.posRun the web UI:
python3 apps/gnss.py web --port 8085Then open http://127.0.0.1:8085.
List commands:
python3 apps/gnss.py --helpdocker 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- https://rsasaki0109.github.io/gnssplusplus-library/
- Documentation index
- Quick start
- Robotics quick start
- Research quick start
- Dataset gallery
- Interfaces
- Architecture
- Reference analyses
- Contributing
cmake --install build --prefix /opt/libgnsspp
/opt/libgnsspp/bin/gnss --helpctest --test-dir build --output-on-failureMIT License. See LICENSE.






