PhloemDocs
Markdown
Connector

MAVLink

Live telemetry from PX4 and ArduPilot vehicles

Category
Vehicles
Kind
source
Capabilities
StreamsEntitiesOperations
Runs on
Linux x64Linux ARM64macOS Apple siliconmacOS IntelWindows x64

Stream live telemetry from PX4 and ArduPilot vehicles over UDP, TCP or serial (a USB cable or a telemetry radio). Plug a flight controller in over USB and Phloem offers it on Inputs.

What you get

  • Every message the vehicle sends, not a fixed list. That covers the whole ArduPilot dialect, which includes the common MAVLink set. A field shows as /mav/<system>/<component>/<message>/<field>, such as /mav/1/1/attitude/roll or /mav/1/1/battery_status/voltages[0].
  • Several vehicles and components on one link. The system id separates vehicles. The component id separates an autopilot from its gimbal or camera.
  • Real units. Latitude in degrees, altitude in metres, speed in m/s, temperature in °C, battery in volts and amps. Every channel declares its unit.
  • "Not measured" stays empty. A field the vehicle marks as no reading, such as an absent battery cell, shows as no reading, never as 65.535 V.
  • Position as a track on the map, from the fused position and from raw GPS once it has a 3D fix.

Setup

Enter the Connection:

ConnectionMeans
udpin:0.0.0.0:14550listen for a vehicle (a simulator sends here by default)
udpout:192.168.1.10:14555send to a vehicle at that address
tcpout:192.168.1.20:5760connect to a vehicle, or a simulator on another computer, over TCP
serial:/dev/ttyACM0:115200, COM3a flight controller or radio on a serial port

Press Test connection. It waits for the vehicle's heartbeat and names what answered, such as "PX4 QUADROTOR (system 1, component 1)".

Time

Each sample carries the moment the vehicle measured it, in UTC, not the moment it arrived. Phloem asks the vehicle for SYSTEM_TIME once a second to line up its clock.

  • Until the first SYSTEM_TIME arrives, or for a message with no time of its own, the arrival time is used. The channel records that.
  • A vehicle reboot is detected and handled.
  • The servo outputs' clock rolls over every 71.6 minutes. Samples still land at their true time.

The full PX4 log, live

Telemetry is a few dozen messages at a few hertz. The log is every sensor, estimator and controller topic at full rate. Turn on Stream the full log (PX4) to stream it live. It lands on the same /ulog/<topic>_<instance>/<field> channels as an imported .ulg file, so live and imported flights line up.

  • It needs a link of at least 5 KB/s: a USB cable or Ethernet, not a telemetry radio.
  • PX4 does not stream its log while a simulator runs in lockstep.
  • When PX4 refuses, the input says why.
  • A lost packet shows as a gap on every log channel.

#Supports

  • PX4 and ArduPilot over UDP, TCP or serial (USB or a telemetry radio)
  • Every message in the ardupilotmega dialect (a superset of common), not a fixed list
  • Units from the dialect: scaled encodings (degE7, mm, cm/s, cdegC, mV, cA) landed as degrees, metres, m/s, °C, V, A
  • A field's 'no reading' value (an unmeasured current, an absent cell) landed as no reading
  • Several vehicles and components on one link, each on its own channels
  • Vehicle time placed on UTC from the vehicle's SYSTEM_TIME; the vehicle's position as a track on the map
  • PX4's full log streamed live over USB or Ethernet, decoded exactly as an imported .ulg; lost packets stated as gaps

#Connection fields

Every field the Add input form shows for this connector.

FieldTypeRequiredDefault
Connection
udpin:host:port (listen), udpout:host:port, tcpout:host:port, serial:port[:baud], or a serial port such as /dev/ttyACM0 or COM3.
udpin:0.0.0.0:14550
TextYes—
Stream the full log (PX4)
Every topic the autopilot logs, live, on the same channels an imported .ulg lands on. PX4 streams its log only over USB or Ethernet (at least 5 KB/s), not a telemetry radio.
On / off—false

Updated