Skip to content

On-Screen Display (OSD)

An On-Screen Display (OSD) overlays flight telemetry — battery, altitude, GPS, RSSI, attitude, etc. — onto a pilot's video feed. OSDs are commonly used in FPV and long-range flying so the pilot can see live flight data without looking away from the video.

PX4 supports three distinct OSD mechanisms, each targeting a different class of video system:

MechanismUse caseTransportRuns on FC?
MSP OSDDigital FPV air units and video goggles that speak Betaflight MSP (e.g. DJI O3/O4, Walksnail, HDZero, Caddx Vista)Serial, MSPv1Yes — msp_osd driver
ATXXXX Analog OSDLegacy analog video with an on-board MAX7456/ATXXXX overlay chip (e.g. OmnibusF4SD)SPI to on-board chipYes — atxxxx driver
MAVLink OSDMAVLink-aware ground stations and displays that render their own OSD from telemetry (e.g. Yaapu on EdgeTX/OpenTX, Skydroid, mLRS HUDs)Serial, MAVLinkNo — streams MAVLink; the display renders the OSD

Which one you use is determined by your video hardware, not by PX4 preference. If you're unsure, start with your video system's documentation and match the OSD mechanism it expects.

MSP OSD

MSP (MultiWii Serial Protocol) OSD is the mechanism used by digital FPV systems (DJI, Walksnail, HDZero) and by many digital goggles/air units to render telemetry over the pilot's video feed. PX4 implements the subset of MSP used for OSD telemetry, matching what Betaflight and INAV send.

The msp_osd driver converts uORB topics (battery, GPS, attitude, etc.) to MSP packets and sends them out a serial port at 115200 baud.

Supported displays

PX4 currently sends a subset of MSP messages. Reliably-working display items include:

  • Craft name and flight mode / arming state
  • Battery voltage, current draw, mAh consumed, average cell voltage
  • GPS latitude, longitude, satellite count, ground speed
  • Home distance and direction
  • Altitude (from GNSS / baro)
  • RSSI
  • Crosshairs toggle

Some items in OSD_SYMBOLS are reserved but not yet implemented — see the parameter's (unused) bit labels. For feature-completeness work, see the tracking issues on GitHub.

Hardware setup

  1. Connect the digital air unit's MSP / telemetry input to a free UART on the flight controller (TX → RX, RX → TX, GND → GND).
  2. Power the air unit from its own BEC or a VTX power pad — most air units expect 5 V or battery voltage, not autopilot 5 V.
  3. Note which PX4 serial device the UART maps to on your board (e.g. TELEM2/dev/ttyS2). See Serial Port Mapping.

Firmware requirements

The msp_osd driver is included in the default build for most modern Pixhawk and FPV-oriented boards (e.g. px4_fmu-v5x, px4_fmu-v6x, ark_fpv, cuav_7-nano, micoair_h743*). If your board does not include it by default, enable it via board config:

sh
make <board>_default boardconfig
# drivers → OSD → msp_osd

Then rebuild and flash.

PX4 configuration

  1. Assign the selected serial port to MSP OSD with MSP_OSD_CONFIG.
  2. Set the matching SER_<PORT>_BAUD to 115200.
  3. Reboot.
  4. Tune the display via the OSD_* parameters:

Worked examples

Some OSDs render their own overlay directly from the MAVLink telemetry stream — the flight controller simply streams MAVLink at a rate the display can parse. PX4 exposes this via a dedicated MAVLink stream profile.

To use a MAVLink OSD:

  1. Choose an unused MAVLink instance (MAV_X_CONFIG) and assign it to the serial port connected to the display.
  2. Configure the mode of the selected MAVLink instance with MAV_X_MODE by setting it to OSD. The OSD mode uses a built-in rate table tuned for low-bandwidth OSD consumption.
  3. Set the matching SER_<PORT>_BAUD to the baud rate the display expects.

The stream content is fixed (defined in src/modules/mavlink/mavlink_main.cpp) and cannot be customised from parameters. See MAVLink Peripherals (GCS/OSD/Gimbal/Camera/Companion) for the full MAVLink-side configuration.

ATXXXX Analog OSD

The atxxxx driver targets boards with an on-board MAX7456 / ATXXXX chip that overlays characters onto an analog video stream (PAL or NTSC). This was common on older F4-class FCs such as OmnibusF4SD and is largely superseded by digital systems.

No external wiring is required on boards that include the chip; to enable it, set OSD_ATXXXX_CFG to 1 (NTSC) or 2 (PAL) and reboot.

See also