ADR-0006: Altitude references and coordinate framesLink to the section ADR-0006: Altitude references and coordinate frames

On this page

Status: Accepted 2026-10-14 — sponsor confirmed ("keep all") Date: 2026-10-14 Profiles affected: all

ContextLink to the section Context

Altitude above ground, above mean sea level, above the WGS84 ellipsoid and above take-off point are different numbers that differ by tens of meters. Vendor APIs mix them. Gimbal angles may be reported relative to the aircraft body or to the earth. A VMS that plots a drone or computes a camera footprint with the wrong reference produces visibly wrong results.

DecisionLink to the section Decision

  • Horizontal position is WGS84 latitude/longitude in decimal degrees.
  • Altitude fields are named by reference and never a bare altitude:
    • altitude_msl_m — height above mean sea level (geoid; the device SHOULD declare the geoid model, default EGM96).
    • altitude_ellipsoid_m — height above the WGS84 ellipsoid.
    • altitude_agl_m — height above ground directly below (from rangefinder, terrain model or barometric estimate; the source SHOULD be declared).
    • altitude_rel_m — height relative to the take-off/home point.
    • At least one of altitude_msl_m or altitude_ellipsoid_m MUST be present when position is reported; altitude_agl_m SHOULD be present.
  • Aircraft attitude is reported as roll_deg, pitch_deg, yaw_deg in a North-East-Down (NED) body convention: yaw 0 = true north, positive clockwise viewed from above; pitch positive nose-up; roll positive right-wing-down.
  • heading_deg is true heading in [0, 360). Course over ground, when distinct, is course_deg.
  • Gimbal orientation carries an explicit frame: BODY (relative to the aircraft) or EARTH (absolute, same NED convention as the aircraft). Devices SHOULD report EARTH when they can.
  • Velocity is velocity_north_mps, velocity_east_mps, velocity_down_mps with ground_speed_mps as the derived horizontal magnitude.
  • Angles in degrees, distances in meters, speeds in m/s, time in RFC 3339 UTC. No feet, knots or local time anywhere in the wire format; conversion is a client presentation concern.

ConsequencesLink to the section Consequences

  • schemas/common.schema.json encodes these definitions once and all other schemas reference them.
  • Mapping tables must state the conversion from each source (e.g. MAVLink GLOBAL_POSITION_INT.alt is MSL in millimeters; relative_alt is relative to home).

Generated from docs/decisions/ADR-0006-altitude-and-frames.md.