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)