Skip to the content
FixTheRobot Explore Robotics / UAV / Module 2 / M2-T3

UAV Systems Engineering · Module 2

M2-T3: GNSS receivers and positioning

Metres, decimetres or centimetres: the positioning mode, not the receiver brand, sets the accuracy class and what the link to a base station must do.

  • Lesson 3 of 16
  • UAV Navigation and GNSS-Denied Operations
  • Established engineering
  • About 5 minutes to read

A UAV that must land on a pad or hold a position beside a structure cares about the difference between a 2 m and a 2 cm fix. The classes differ in what correction information they use and how it reaches the vehicle, and each has its own failure behaviour.

Learning objectives

After this lesson, you should be able to:

  • Describe standalone, SBAS, DGNSS, RTK and PPP positioning and what each adds.
  • State the accuracy class and typical limiting factors of each.
  • Read fix type and the receiver’s accuracy estimate and use them in a monitor.
  • Explain what an RTK link needs and what happens when it breaks.

Conceptual explanation

Standalone positioning uses pseudoranges alone, with broadcast ionospheric and clock models, and typically reaches metre-level accuracy in good conditions. SBAS (for example WAAS or EGNOS) broadcasts regional corrections and integrity data and improves this. DGNSS uses a nearby reference station of known position to compute pseudorange corrections that cancel errors common to both receivers. RTK goes further and uses carrier-phase measurements, resolving the integer ambiguities with a base station’s data, which can give centimetre-level relative accuracy when the ambiguities are fixed. PPP uses precise orbit and clock products without a nearby base and converges more slowly.

Positioning modes by correction sourceStandalone uses only the receiver; SBAS adds a broadcast correction; DGNSS adds pseudorange corrections from a base station; RTK adds carrier-phase observations from a base station with a data link; PPP adds precise orbit and clock products.Standaloneno correctionsSBASsatellite broadcastDGNSSbase, codeRTKbase, carrier phasePPPprecise productsaccuracy improves to the right at the cost of a link or a convergence time
Correction sources increase accuracy and dependency.
Positioning modes (typical, not guarantees)
ModeTypical horizontal accuracy (good conditions)NeedsMain limitation
Standaloneabout 1–5 mnothingatmosphere, multipath
SBASabout 1 mSBAS satellite visibleregional coverage
DGNSSdecimetre to metrebase station and data linkbaseline length, link loss
RTK (fixed)centimetresbase or network, low-latency link, dual frequencylosing the fix, short baselines, sky view
PPPdecimetres, centimetres after convergenceprecise products, convergence timeconvergence time of tens of minutes
Animation of position fix scatter for four positioning classes drawn on the same metre scale. Standalone fixes spread over several metres, SBAS over about a metre, differential GNSS over about half a metre, and RTK fixes collapse to a few centimetres, so the RTK cloud is a tiny dot. Each panel shows the radius containing 95 percent of the fixes.
Four positioning classes on one scale (horizontal fixes around the true position at the centre). Spreads are illustrative typical orders of magnitude: metres (standalone), sub-metre to metre (SBAS, DGNSS), centimetres (RTK with a fixed ambiguity); real accuracy depends on environment, receiver and corrections. (Looping, about 5 seconds; drawn and computed for this course with illustrative values.)

Engineering intuition

Base and rover see nearly the same atmosphere and satellite errors when they are close, so differencing their observations removes most of the error: that is the idea behind DGNSS and RTK. Carrier phase is far more precise than code (millimetres versus decimetres) but ambiguous by an unknown whole number of wavelengths; once that integer is resolved (“fixed”), the precision of the carrier phase is available. Losing lock or the correction link drops the solution back to “float” or standalone within seconds, and the accuracy class changes by an order of magnitude without the position stream stopping. A UAV must therefore read the fix type and accuracy estimate, not only the position.

Mathematical formulation

Single difference between receivers a (base) and bb (rover) for satellite ii removes the satellite clock and, nearly, the atmospheric terms for a short baseline:

Code
Δρi=ρib−ρia=−(ui⋅Δr)+c Δb+εi\Delta\rho_i = \rho_i^{b} - \rho_i^{a} = -(\mathbf u_i\cdot\Delta\mathbf r) + c\,\Delta b + \varepsilon_i
Carrier phase
Δφi=λ−1[−(ui⋅Δr)]+c Δbλ+Ni+εφ,i\Delta\varphi_i = \lambda^{-1}\left[-(\mathbf u_i\cdot\Delta\mathbf r)\right] + \frac{c\,\Delta b}{\lambda} + N_i + \varepsilon_{\varphi,i}
Ni is the integer ambiguity.
Δr\Delta r
baseline vector between rover and base.
uiu_{i}
unit line of sight to satellite ii (almost the same at both receivers).
NiN_{i}
integer carrier-phase ambiguity: resolving it is the core of RTK.
λ\lambda
carrier wavelength (about 19 cm on L1).

Baseline length matters: differential errors grow with distance (atmosphere differs), roughly millimetres per kilometre in addition to a constant term, so RTK accuracy is quoted as “x cm + yy ppm”. The receiver reports a horizontal accuracy estimate (a standard deviation or similar); its definition is receiver-specific, so read the interface documentation.

Architecture and data flow

Base station or network (NTRIP caster) → corrections in RTCM format → rover link (radio or cellular, via the ground station or companion) → GNSS receiver → fix with type (single, DGPS, float, fixed), accuracy estimates and age of corrections → autopilot. Monitor the age of corrections and the fix type: both degrade before the position visibly does.

Real-world UAV applications

  • Precision landing and hover beside structures.
  • Survey and mapping with direct georeferencing.
  • Repeatable flight paths for inspection.
  • Providing an absolute anchor that bounds VIO and LIO drift over long routes.

Implementation example

This runs as shown: a monitor that grades GNSS fix quality from fix type, accuracy estimate and correction age, returning the accuracy class the navigation manager may rely on. Fix-type names and thresholds are illustrative: map them from your receiver’s messages.

from dataclasses import dataclass

@dataclass
class Fix:
    fix_type: str            # "none", "single", "dgps", "rtk_float", "rtk_fixed"
    h_acc_m: float           # receiver-reported horizontal accuracy estimate
    corr_age_s: float        # age of RTK/DGPS corrections (inf when none)
    sats: int

def accuracy_class(f: Fix) -> str:
    if f.fix_type == "none" or f.sats < 5: return "unusable"
    if f.fix_type == "rtk_fixed" and f.h_acc_m < 0.05 and f.corr_age_s < 5: return "cm"
    if f.fix_type in ("rtk_fixed", "rtk_float", "dgps") and f.h_acc_m < 0.5 and f.corr_age_s < 10: return "dm"
    if f.h_acc_m < 5: return "m"
    return "poor"

assert accuracy_class(Fix("rtk_fixed", 0.02, 1.0, 18)) == "cm"
assert accuracy_class(Fix("rtk_fixed", 0.02, 30.0, 18)) == "m"                 # stale corrections: the cm claim must be dropped
assert accuracy_class(Fix("rtk_float", 0.3, 1.0, 16)) == "dm"
assert accuracy_class(Fix("single", 1.8, float("inf"), 12)) == "m" and accuracy_class(Fix("single", 8.0, float("inf"), 6)) == "poor"
assert accuracy_class(Fix("single", 1.0, float("inf"), 4)) == "unusable"
print("GNSS quality monitor behaves as specified")
Grading GNSS fix quality from fix type, accuracy estimate and correction age.

Common engineering mistakes

Reading only position

The accuracy class can drop by an order of magnitude without the stream stopping; read fix type and accuracy.

Ignoring correction age

Stale corrections silently degrade RTK to float or worse.

Long baselines with RTK

Accuracy degrades with distance; use a network solution or a nearer base.

Assuming RTK works under canopy

Fixed ambiguities need good satellite visibility and continuity.

Mixing datums

Base coordinates in one datum and the mission in another produce metre-level offsets.

Failure modes

Failure modes, symptoms and causes
Failure modeHow it shows upLikely cause
Fix lossAccuracy changes from cm to mmLost corrections or lock under foliage or near structures
False fixConfident fixed solution that is wrongWrong ambiguity resolution in poor geometry
LatencyPosition lags during manoeuvresCorrection link latency or receiver processing delay
Datum offsetConstant offset between plan and flightBase coordinates or frame mismatch

Debugging approach

  1. Log fix type, accuracy estimate, correction age and satellites with every position.
  2. Compare against a surveyed point.
  3. Check the base station coordinates and datum.
  4. Measure link latency and drops.

Practical exercises

  1. Find the typical wavelength of L1 and explain why carrier phase gives millimetre-level precision.
  2. Define the thresholds of a monitor for a precision landing that needs 5 cm.
  3. Estimate RTK error for a 20 km baseline with 0.5 ppm.
  4. Describe what the vehicle should do when RTK drops to float during landing.

Interview questions

Write an answer in your own words, then reveal the model answer. Nothing is sent anywhere.

Question 1

What distinguishes RTK from DGNSS?

Model answer

RTK uses carrier-phase observations and resolves integer ambiguities with a base station, giving centimetre-level accuracy, whereas DGNSS only corrects pseudoranges and reaches decimetre to metre level.

Question 2

Why must a UAV monitor fix type and correction age?

Model answer

Accuracy can degrade by an order of magnitude when ambiguities are lost or corrections go stale while the receiver still outputs position.

Question 3

How does baseline length affect RTK?

Model answer

Atmospheric and orbit errors decorrelate with distance, so accuracy degrades roughly proportionally to baseline length and ambiguity resolution becomes harder.

References and further reading

Primary papers, official documentation and standards. Each claim above that is specific to a tool or version points here.

What’s next

Mark this lesson

Saved in this browser and synced to your account when you are signed in.

Next lesson

M2-T4: GNSS errors and multipath

List the error sources in a pseudorange and how each scales.