# GPS quality drop

URL: /rules/gps-quality-drop

Flags a stretch where the receiver's horizontal accuracy or satellite count crosses the threshold for two seconds. It observes a weaker fix, not a wrong position and not the cause of the drop.



<RuleHeader id="gps_quality_drop" />

## What it reads [#what-it-reads]

The rule reads two fields of `sensor_gps` in the flight log, and both come from the GNSS receiver:

```text title="SensorGps.msg" caption="PX4 v1.16.0, the two fields this rule reads"
float32 eph                     # GPS horizontal position accuracy (metres)
uint8 satellites_used           # Number of satellites used
```

`eph` is the receiver's own estimate of its horizontal accuracy, in meters. It is not an error measured against a known position.

In INC-0141 the timeline draws both as lanes. **Satellites** plots `sensor_gps.satellites_used` against the line **Below 8**, and **Horizontal accuracy** plots `sensor_gps.eph` against **Above 2.5 m**.

## When it fires [#when-it-fires]

A finding is produced when, for 2 s, `eph` stays above 2.5 m or fewer than 8 satellites are in use. The event sits on the first sample that crosses, and the finding is confirmed 2 s later. In the INC-0141 flight log a `sensor_gps` sample arrives every 200 ms, so 2 s spans 11 samples.

| Value              | Example from INC-0141                              |
| ------------------ | -------------------------------------------------- |
| First sample below | 11:06:23.802, eph 2.61 m, 7 satellites             |
| Confirmed at       | 11:06:25.802, eph 3.30 m, 7 satellites             |
| Threshold          | eph above 2.5 m or fewer than 8 satellites for 2 s |

The sample before, at 11:06:23.602, read 2.48 m with 11 satellites, inside both limits. The finding's title is **GPS quality below threshold: eph 2.61 m, 7 satellites**.

## Wording and evidence level [#wording-and-evidence-level]

Every finding reads **Observed: GPS quality degraded**. The flight log shows the receiver's figures directly, so the level is observed.

## What the finding does not mean [#what-the-finding-does-not-mean]

* **It does not say the position was wrong.** The rule reads the receiver's own accuracy estimate and satellite count. It cannot check a position against the ground truth.
* **It does not give the cause.** A weaker fix has several possible causes, and the rule reads none of them. In INC-0141 the receiver reported jamming 0.8 s after this finding's first sample, which [gnss\_jamming](/rules/gnss-jamming) records as a finding of its own.
* **It is not PX4's position failsafe.** PX4 judges its estimator's position error, not the receiver's `eph`, as the section below explains.

## Threshold and overrides [#threshold-and-overrides]

The two limits and the 2 s duration share one threshold text: **eph above 2.5 m or fewer than 8 satellites for 2 s**. The scope is **All vehicles**. A change under **Rules** with **Edit** saves as `gps_quality_drop 1.1`, and findings already produced keep version 1.0 and its threshold.

For reference, the PX4 Flight Review guide looks for satellites used "around 12 or higher" and a horizontal accuracy "below 1 meter". The rule's 8 satellites and 2.5 m mark a clear drop, not a fix short of ideal.

### PX4's related threshold [#px4s-related-threshold]

The closest PX4 parameter is `COM_POS_FS_EPH`, the horizontal position error threshold for hovering systems, 5 m by default. PX4 compares it with its estimator's horizontal error in `vehicle_global_position` and `vehicle_local_position`, not with `sensor_gps.eph`. Once a position is valid, PX4 declares it invalid only above 2.5 times the value: 12.5 m at the default.

The example Q4 vehicles run `COM_POS_FS_EPH` at 5 m, and the vehicle page lists it under **Failsafe parameters**. This rule reads a different number and sits well below that line.

## Example finding [#example-finding]

In INC-0141 UAS-10 surveyed the north fence, and this rule produced the incident's first finding. Satellites in use fell from 18 to 11 at 11:06:22.402, and to 7 at 11:06:23.802, when `eph` read 2.61 m. The finding was confirmed at 11:06:25.802, with `eph` at 3.30 m.

The fix kept weakening: 6 satellites from 11:06:30.002, and `eph` at 4.8 m from 11:06:33.002 to 11:06:58.002. It recovered at 11:07:05.202, with 15 satellites and 0.9 m. The **Findings** row labels the finding **GPS quality drop**.

## Related [#related]

* [gnss\_jamming](/rules/gnss-jamming) reads the receiver's jamming report in the same topic.
* [failsafe\_entered](/rules/failsafe-entered) records PX4 failsafes and their causes.
* [PX4 parameters Foxborne reads](/reference/px4-parameters) lists `COM_POS_FS_EPH` with the other failsafe parameters.
* [Vehicles and parameter drift](/investigate/vehicle) shows each vehicle's failsafe parameters.
