It seems you have a good GPS Condition including Delta times so the GPS Unhealthy messages Couldn’t Be for a lagged or lost Packets .
As I checked the Source Code in [AP_GPS.cpp]
const float delay_avg_max = is_rtk_rover(instance) ? 333 : 215;
Core give RTK Rover about 333 ms for average Delay between Packets .
but also in Healthy Check Conditions for RTK Rover we have
bool delay_ok = (t.delayed_count < delay_threshold) &&
t.average_delta_ms < delay_avg_max &&
state[instance].lagged_sample_count < 5;
and t.delayed_count add in
const uint16_t gps_max_delta_ms = 245; // 200 ms (5Hz) + 45 ms buffer
GPS_timing &t = timing[instance];
if (t.delta_time_ms > gps_max_delta_ms) {
t.delayed_count++;
} else {
t.delayed_count = 0;
}
so i think the 333ms actually ignored and our delay limiter will be 245ms after 2 or three packet Delayed.
Any way as your Log result this is Not Your Problem .
I checked for another Health Conditions for MB RTK Rover I Found This Part in AP_GPS_UBLOX.cpp
#if GPS_MOVING_BASELINE
if ((role == AP_GPS::GPS_ROLE_MB_BASE ||
role == AP_GPS::GPS_ROLE_MB_ROVER) &&
!supports_F9_config()) {
// need F9 or above for moving baseline
return false;
}
Actually Backend try to Get your UBLOX Hardware version and then if your Hardware isn’t above F9 then Your GPS will going to Unhealthy!!! and this Happen even your Hardware send the Yaw Data and other GPS Data Correct and in time .
Please check your Log if The Core has Been able to get your hardware it would be present in the GPS Tab.
I Think this has to Reviewed By Developers . some Users Prefer to Use the UBLOX Module just in Broadcasting mode I mean Like This :
UBLOX TX → FC RX (connected)
UBLOX RX --x-- FC TX (not connected)
Actually I preferred the UBLOX Modules Like This every time and it does work Perfect for me . but for getting the Hardware Version , Backend has to Call the Module with MSG_MON_HW Command Types so if your UBLOX RX doesn’t connect to FC TX then you will get GPS Unhealthy even with Perfect Signals.
I Think getting the Hardware Version in first Place was For set the Module Configurations if you set the
GPS_AUTO_CONFIG =1
but Why the Backend judge the Healthiness of Data by the Hardware Version ?!!
@rmackay9 If you don’t Mind check my opinion About this Condition .
@nrgs_barani and if you cant connect Your UBLOX RX try to replace this Code in AP_GPS_UBLOX.cpp and post the Result Pls
// ublox specific healthy checks
bool AP_GPS_UBLOX::is_healthy(void) const
{
#if CONFIG_HAL_BOARD == HAL_BOARD_SITL
if (gps._auto_config == AP_GPS::GPS_AUTO_CONFIG_DISABLE) {
// allow for fake ublox moving baseline
return true;
}
#endif
#if GPS_MOVING_BASELINE
if (role == AP_GPS::GPS_ROLE_MB_BASE && rtcm3_parser == nullptr && !mb_use_uart2()) {
// we haven't initialised RTCMv3 parser
return false;
}
#endif
return true;
}