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
commondialect 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.
| Field | Type | Default | Description |
|---|---|---|---|
idleSessionTimeout | long (s) | 600 | Idle timeout for a tracked remote endpoint session. If no frames are seen for this duration, the session can be expired. |
maximumSessionExpiry | int (s) | 86400 | Upper bound on how long a session may be retained (even if intermittently active), used to avoid unbounded state retention. |
advertiseInterval | int (s) | 30 | Interval for any MAPS-side “advertise/announce” behavior (if enabled/used by the MAVLink endpoint manager). |
maxInFlightEvents | int | 1 | Maximum number of in-flight events per session before applying backpressure/queuing behavior. |
topicNameTemplate | string | "/{remoteSocket}/{systemId}/{componentId}/{messageName}" | Topic template used when publishing MAVLink frames into MAPS. Tokens are substituted per received frame/session. |
parseToJson | boolean | true | If 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.
commonis available by default.- Additional dialects can be provided and loaded at runtime (deployment-specific).