Skip to main content

MAVLink

MAVLink (Micro Air Vehicle Link) is a lightweight, binary messaging protocol designed for reliable communication between vehicles, onboard components, and ground control systems. It is widely used in the UAV, robotics, and autonomous systems ecosystem due to its efficiency, extensibility, and well-defined message schemas.

In MAPS Messaging, MAVLink support focuses on ingesting and normalising MAVLink traffic so it can be routed, transformed, stored, and analysed alongside other protocols.

Current status
MAVLink support is inbound only. MAPS can receive MAVLink frames, track remote endpoints, decode payloads, and publish them internally. Outbound MAVLink frame generation and transmission are not yet implemented.

Features

  • Dynamic loading of MAVLink dialects
  • common dialect supported out of the box
  • Topic naming based on remote endpoint + MAVLink header fields (system/component) + message name
  • Optional decoding of incoming MAVLink payloads into JSON for downstream processing

Quick Start

protocols:
mavlink:
port: 14550
dialect: common

Configuration

Fields below map to MavlinkConfigDTO. MAVLink is typically connectionless (UDP), so “session” controls are implemented as MAPS-level tracking/expiry for observed remote endpoints.

FieldTypeDefaultDescription
idleSessionTimeoutlong (s)600Idle timeout for a tracked remote endpoint session. If no frames are seen for this duration, the session can be expired.
maximumSessionExpiryint (s)86400Upper bound on how long a session may be retained (even if intermittently active), used to avoid unbounded state retention.
advertiseIntervalint (s)30Interval for any MAPS-side “advertise/announce” behavior (if enabled/used by the MAVLink endpoint manager).
maxInFlightEventsint1Maximum number of in-flight events per session before applying backpressure/queuing behavior.
topicNameTemplatestring"/{remoteSocket}/{systemId}/{componentId}/{messageName}"Topic template used when publishing MAVLink frames into MAPS. Tokens are substituted per received frame/session.
parseToJsonbooleantrueIf true, MAPS will decode MAVLink messages and publish JSON (where decoding is available for that dialect/message). If false, payload remains raw/binary.

Example with topic templating and JSON disabled

protocols:
mavlink:
port: 14550
dialect: common
idleSessionTimeout: 300
maximumSessionExpiry: 86400
advertiseInterval: 15
maxInFlightEvents: 8
topicNameTemplate: "/mavlink/{remoteSocket}/{systemId}/{componentId}/{messageName}"
parseToJson: false

Topic Template Tokens

The topicNameTemplate supports token replacement. Current tokens:

  • {remoteSocket}: remote endpoint identifier (e.g., IP:port)
  • {systemId}: MAVLink system id
  • {componentId}: MAVLink component id
  • {messageName}: decoded MAVLink message name (from the active dialect)
  • {messageId}: MAVLink message id

Example default topic:

/192.168.1.50:14550/1/1/HEARTBEAT

Or using /mavlink/{remoteSocket}/{systemId}/{componentId}/{messageId}:

/mavlink/192.168.1.50:14550/1/1/0

Dialects

MAPS can load MAVLink dialect definitions dynamically.

  • common is available by default.
  • Additional dialects can be provided and loaded at runtime (deployment-specific).