DEV Community

UAV GNSS
UAV GNSS

Posted on

mosaic-X5 vs u-blox F9P for ArduPilot: what you actually get for the extra cost

We're UAV GNSS, a Septentrio receiver maker — we build HB-series receivers around Septentrio silicon. "Is a mosaic-X5 worth it over an F9P?" is the comparison ArduPilot builders bring to us most often, so here's an honest breakdown, including the cases where the F9P is the right answer.

Where they're the same

Both are multi-band (L1/L2) GNSS receivers that produce RTK-fixed centimetre positions. Both speak standard interfaces: NMEA out for position, RTCM v3 in for corrections, and a raw-log protocol you can record and post-process (UBX on u-blox, SBF on Septentrio). ArduPilot supports both natively.

For a low-dynamics airframe with a clean sky view and a healthy NTRIP link, an F9P does the job at a fraction of the cost. That is not a knock on it — it's the correct answer for a large share of builds.

Where they actually differ

Axis u-blox ZED-F9P class Septentrio mosaic-X5 class
Native navigation rate ~10–20 Hz up to 100 Hz
In-band interference suppression ~25 dB class, usually unpublished AIM+ ≈ 40–60 dB
Multipath mitigation basic APME+
Dual-antenna GNSS heading no (single antenna) yes (mosaic-H / mosaic-G5 P3H class)
Navigation-message authentication none OSNMA-ready (Galileo)
Free cm-class corrections, no base no Galileo HAS

Update rate, and why "native" matters

F9P-class modules typically publish a navigation solution at 10–20 Hz. mosaic-X5 computes solutions at up to 100 Hz, and each epoch is derived directly from the GNSS measurements instead of being interpolated between them.

For a slow tractor that difference is invisible. For a fast airframe, or for a control loop that wants fresh data every cycle, it's the difference between steering on a current position and steering on an extrapolation. It also changes what your logs look like when you analyse drops — we walk through SBF fix-quality and RTK-drop forensics in this guide.

Interference immunity is where the money actually goes

AIM+ suppresses roughly 40–60 dB of in-band interference. Consumer modules sit in the ~25 dB class and frequently publish no figure at all. Near power lines, electric fences, 4G/5G sites — or anyone deliberately jamming — that gap decides whether you hold RTK fixed or never see it lock.

Symptoms that you are interference-limited rather than correction-limited:

  • the fix drops to float at the same physical location every pass;
  • SNR fades on satellites at a specific azimuth rather than a specific elevation;
  • the receiver loses lock near pylons, electric fences or mobile masts;
  • correction age stays low and steady while the fix still degrades.

AIM+ runs continuously and needs no configuration. If your build works on a farm, near infrastructure, or anywhere you don't control the RF environment, this is usually the real reason to step up.

Heading without a magnetometer

A single-antenna build has no direct heading — the autopilot fuses GPS velocity and the compass, and the compass is usually the weak link: motor currents, steel frames and fences bend the local field by 5–30°, and a bad heading steers the EKF into the wrong row.

A mosaic receiver with two antenna inputs measures carrier-phase heading across a physical baseline, so it is immune to magnetic interference and doesn't drift. In ArduPilot you wire the second antenna to a second UART and enable a second GPS rather than swapping the receiver.

Interfaces — and one myth worth killing

mosaic-X5 exposes UART (LVTTL, 3.3 V), USB, SPI and I²C. It does not have native CAN or J1939 — and no Septentrio chip does. CAN is a carrier- or box-level feature, driven by the carrier's own processor and transceiver. If you need a machine bus, pick a box that provides it or add a transceiver/gateway; don't buy a bare module expecting native CAN.

Parameter starting points

ArduPilot (GPS_TYPE=9 selects the Septentrio driver):

Parameter Value Meaning
GPS_TYPE 9 Septentrio (SBF)
GPS_BAUD_RATE 9 115200 baud
GPS_RATE_MS 100 10 Hz update (lower = faster, if your link supports it)

Keep GPS_AUTO_CONFIG=1 so the receiver is configured on every boot. For dual-antenna heading, enable the second receiver on the secondary port (GPS2_TYPE=9).

PX4:

Parameter Value Meaning
GPS_1_GNSS_ID 1 Septentrio
GPS_1_PROTOCOL 14 Septentrio SBF / NMEA

Where it lands

  • F9P — low-dynamics, clean RF, budget-sensitive. Correct choice, and we'll say so.
  • mosaic-X5 — when a dropped fix costs a mission, a pass or a flight: high dynamics, contested RF, or you need heading, navigation-message authentication, or free HAS corrections with no base.

Wiring diagrams, full parameter tables and an SBF log analyzer with RTK-drop forensics are in our integration guide: github.com/uavgnss6-bot/septentrio-gnss-integration-guide. Receiver lineup and AIM+ details: uav-gnss.com/product-category/gnss-receiver/ and uav-gnss.com/aim-resilient-gnss/.

Which failure hurts you more today — losing RTK in a noisy spot, or not having enough update rate? That answer usually decides it.

Top comments (0)