The agent already speaks the standard MAVLink dialects. A plugin extends MAVLink in three ways: register a custom dialect XML, send commands the host has no built-in helper for, and subscribe to messages the host does not normalize.Documentation Index
Fetch the complete documentation index at: https://docs.altnautica.com/llms.txt
Use this file to discover all available pages before exploring further.
Capabilities
| Capability | Lets the plugin… |
|---|---|
mavlink.read | Subscribe to parsed MAVLink messages. |
mavlink.write | Send arbitrary MAVLink to the FC. |
mavlink.dialect.register | Register a custom dialect XML at startup. |
vehicle.command | Send canonical commands (ARM, RTL, MODE_SET) without raw MAVLink. |
mavlink.write is a critical permission. Operators see a red
warning badge in the install dialog. Use vehicle.command instead
when the action is one of the canonical set; it is medium risk and
the host validates the args.
Subscribing to messages
BATTERY_STATUS cause one underlying stream from the FC.
Sending commands
vehicle.command covers the canonical set:
mavlink.command.send.
The plugin must declare mavlink.write:
system_id and component_id from the
plugin’s identity automatically; you do not spoof a different
sender.
Sending arbitrary messages
For non-command messages (param sets, custom protocol messages, vendor-defined message ids), usemavlink.message.send:
Registering a custom dialect
A vendor-specific dialect ships as XML. Add the file to your archive and declare it in the manifest:prefix is enforced. Every message id and command id in the
dialect XML must start with the prefix. The host rejects dialects
that collide with reserved standard prefixes (COMMON_,
ARDUPILOTMEGA_, etc.).
Once registered, the plugin uses the dialect names directly:
mavlink.read capability.
Vendor dialect drivers
A common pattern is a plugin that wraps a vendor MAVLink dialect and exposes a clean Python API to other plugins via theplg.<id>.* event bus:
plg.com.example.vendor-thermal.thermal.frame without ever
seeing the raw MAVLink. This is the recommended pattern for
making vendor hardware reusable.
Reading the parameter table
The host already mirrors the FC’s parameter table. Reading params through the plugin SDK does not requiremavlink.read:
ctx.params.set requires the param.write capability and is
medium risk. The host writes through to the FC and waits for the
ACK before resolving.
Sequencing and timing
The host serializes outbound MAVLink writes per FC link. Two plugins both callingmavlink.command.send at the same time end
up queued on the same single-producer queue; neither blocks the
other for more than a few milliseconds.
Inbound messages are parsed once and fanned out to subscribers.
There is no per-plugin parser running.
Sample worked driver
A minimal vendor-rangefinder driver:plg.com.example.vendor-rangefinder.rangefinder.reading and
plots the result.