Skip to main content
GNSS Documentation
GitHub Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage
Edit page

RTK Base & Rover

Complete RTK setup with NTRIP client for centimeter-level positioning.

Source: examples/CPP/RTK/, examples/Python/rtk_base.py, examples/Python/rtk_rover.py

Note
HAT Compatibility — RTK is available only on the L1/L5 RTK HAT (NEO-F9P).

Python NTRIP Rover

from jimmypaputto import gnsshat
from pygnssutils import GNSSNTRIPClient

config = {
    'measurement_rate_hz': 1,
    'dynamic_model': gnsshat.DynamicModel.STATIONARY,
    'timepulse_pin_config': {
        'active': True,
        'fixed_pulse': {'frequency': 1, 'pulse_width': 0.1},
        'polarity': gnsshat.TimepulsePolarity.RISING_EDGE
    },
    'rtk': {'mode': gnsshat.RtkMode.ROVER}
}

hat = gnsshat.GnssHat()
hat.start(config)

# NTRIP client feeds corrections (see full example for setup)
hat.rtk_apply_corrections(corrections)

nav = hat.wait_and_get_fresh_navigation()
# nav.pvt.fix_quality == FixQuality.FIXED_RTK → ~1-2 cm accuracy

C++ Base + Rover

// Base station
config.rtk = RtkConfig {
    .mode = ERtkMode::Base,
    .base = BaseConfig {
        .mode = BaseConfig::SurveyIn {
            .minimumObservationTime_s = 60,
            .requiredPositionAccuracy_m = 2.0
        }
    }
};
hat_base->start(config);
auto corrections = hat_base->rtk()->base()->getTinyCorrections();

// Rover
config.rtk = RtkConfig { .mode = ERtkMode::Rover };
hat_rover->start(config);
hat_rover->rtk()->rover()->applyCorrections(corrections);

Running

pip install pygnssutils
python3 examples/Python/rtk_rover.py

Fix Quality Progression

  1. GPS 2D/3D — standard fix (~2–5 m)
  2. Float RTK — corrections applied, ambiguities resolving (~0.2–1 m)
  3. Fixed RTK — full centimeter accuracy (~1–2 cm)

See RTK Feature and RTK Config.