RTK
The RTK HAT (NEO-F9P) supports centimeter-level positioning using RTCM3 corrections.
NoteHAT Compatibility — RTK is available only on the L1/L5 RTK HAT (NEO-F9P).
| Field | C++ Type | Description |
|---|---|---|
mode | ERtkMode | Base or Rover |
base | optional<BaseConfig> | Base station configuration. Required when mode = Base |
| Value | C++ | Python | Description |
|---|---|---|---|
| Base | ERtkMode::Base | gnsshat.RtkMode.BASE | Generate RTCM3 corrections |
| Rover | ERtkMode::Rover | gnsshat.RtkMode.ROVER | Consume RTCM3 corrections for cm-level fix |
The base station needs to know its precise position. Two modes:
The module auto-determines its position by observing satellites over a configurable period and accuracy threshold.
| Field | Type | Description |
|---|---|---|
minimumObservationTime_s | uint32_t | Minimum observation time in seconds |
requiredPositionAccuracy_m | double | Required 3D position accuracy in meters |
Provide known coordinates directly, skipping the survey phase. Supports ECEF or LLA.
ECEF (Earth-Centered, Earth-Fixed):
| Field | Type | Description |
|---|---|---|
x_m | double | X coordinate in meters |
y_m | double | Y coordinate in meters |
z_m | double | Z coordinate in meters |
positionAccuracy_m | double | Position accuracy in meters |
LLA (Latitude, Longitude, Altitude):
| Field | Type | Description |
|---|---|---|
latitude_deg | double | Latitude in degrees |
longitude_deg | double | Longitude in degrees |
height_m | double | Height above ellipsoid in meters |
positionAccuracy_m | double | Position accuracy in meters |
config.rtk = RtkConfig {
.mode = ERtkMode::Base,
.base = BaseConfig {
.mode = BaseConfig::SurveyIn {
.minimumObservationTime_s = 60,
.requiredPositionAccuracy_m = 2.0
}
}
};
config['rtk'] = {
'mode': gnsshat.RtkMode.BASE,
'base': {
'base_mode': gnsshat.BaseMode.SURVEY_IN,
'survey_in': {
'minimum_observation_time_s': 60,
'required_position_accuracy_m': 2.0
}
}
}
config.rtk = RtkConfig {
.mode = ERtkMode::Base,
.base = BaseConfig {
.mode = BaseConfig::FixedPosition {
.position = BaseConfig::FixedPosition::Lla {
.latitude_deg = 52.2297,
.longitude_deg = 21.0122,
.height_m = 120.0
},
.positionAccuracy_m = 0.01
}
}
};
jp_gnss_gnss_config_t config;
jp_gnss_gnss_config_init(&config);
config.rtk.mode = JP_GNSS_RTK_MODE_BASE;
config.rtk.base.base_mode = JP_GNSS_BASE_MODE_FIXED_POSITION;
config.rtk.base.fixed_position.type = JP_GNSS_FIXED_POSITION_LLA;
config.rtk.base.fixed_position.lla.latitude_deg = 52.2297;
config.rtk.base.fixed_position.lla.longitude_deg = 21.0122;
config.rtk.base.fixed_position.lla.height_m = 120.0;
config.rtk.base.fixed_position.position_accuracy_m = 0.01;
jp_gnss_hat_start(hat, &config);
config['rtk'] = {
'mode': gnsshat.RtkMode.BASE,
'base': {
'base_mode': gnsshat.BaseMode.FIXED_POSITION,
'fixed_position': {
'lla': {
'latitude_deg': 52.2297,
'longitude_deg': 21.0122,
'height_m': 120.0
},
'position_accuracy_m': 0.01
}
}
}
config.rtk = RtkConfig {
.mode = ERtkMode::Rover
};
jp_gnss_gnss_config_t config;
jp_gnss_gnss_config_init(&config);
config.rtk.mode = JP_GNSS_RTK_MODE_ROVER;
jp_gnss_hat_start(hat, &config);
config['rtk'] = {
'mode': gnsshat.RtkMode.ROVER
}
See RTK Feature for runtime correction flow and NTRIP usage.