Moving base GPS not Healthy just after RTK fixed

Hello, i setup the MB RTK for a Copter. The problem I have is that I receive GPS: Not healthy messages just after the GPS mode going to RTK fix from 3D GPS.
i placed the copter under open sky for a hour to check the GPS log. This is while the GPS information are excellent and have no problems.
you can see the graph related to GPA Delta in log:
delta data

NStats and HDOP chart (HDOP is 0.5 and NStats is 30) :
Nstat and Hdop

and Yaw data :
yaw data

and Status which is number 6, means GPS_OK_FIX_3D_RTK_FIXED :
Status data

this is my parameter list =>
Hexa copter param.param (18.1 KB)
please tell me what the problem is and how to solve it??
@rmackay9 as i checked this problem is common between the users try to use Moving base.
thought this is a source code problem. where i have to checkout to find about the GPS timeout??

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) {
        } 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 ((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


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 (gps._auto_config == AP_GPS::GPS_AUTO_CONFIG_DISABLE) {
            // allow for fake ublox moving baseline
            return true;
        if (role == AP_GPS::GPS_ROLE_MB_BASE && rtcm3_parser == nullptr && !mb_use_uart2()) {
            // we haven't initialised RTCMv3 parser
            return false;
        return true;

Not true. I’ve used UM982 and Septentrio based modules without issue. You are cherry-picking a single line from a single driver and assigning causality without a very full picture.

I’m not sure what the issue is here, but it’s not likely a result of an F9 firmware check (which is done because earlier uBlox firmware was incompatible).

Would be nice to know exactly what hardware is in use.

Thank you for your Reply ,
I think you not received this Error becuase you are using Unicore Base Module But I investigate in UBLOX driver which is @nrgs_barani used before .

GPS_TYPE = uBlox-MovingBaseline-Rover

And in other hand if we using the incompatible Hardware or software so The Expected Data for example


will not arrives Well and Backend Trigg the timeouts as I see for Yaw data is 2000 ms and for others packet is about 250 ms .

Once again, we do not have a full enough picture of what’s happening. Need the log and the exact hardware in use. Otherwise, it’s almost entirely speculation.

1 Like

I find amazing the lengths that forum users like Yuri need to go in order to get simple information extracted from other users that want help but fully ignore any request to provide information on their system.

@nrgs_barani you are being impolite by not providing the information requested


Hello, because my original log was very large, I got another log with a lower size to show you.

and the Hardware is :
2Pair of ZedF9p with Firmware Version 1.13
Rover UART1 → FC UART3
Rover UART2 → Moving base UART2 (for RTCM3 Crossing)

@Yuri_Rage I’m sorry it took me so long to reply :pray: :pray:

Update the F9P firmware. v1.13 has known issues.