MAVKit
Async MAVLink SDK for vehicle control, telemetry, missions, and parameters. Available as a Rust crate and a Python package with full async support.
Install
Python
Rust
[]
= "0.3"
= { = "1", = ["macros", "rt-multi-thread"] }
Quick Start
Python
= await
= await
= await
await
Rust
use Vehicle;
async
Features
- Connections -- UDP, TCP, serial, BLE/SPP via byte-stream adapters
- Telemetry -- reactive watch channels (Rust) / sync properties + async waiters (Python)
- Commands -- arm, disarm, set mode, takeoff, guided goto, arbitrary COMMAND_LONG
- Missions -- upload, download, clear, set current, verify roundtrip
- Parameters -- download all, write single, batch write,
.paramfile I/O - Validation -- plan validation, normalization, tolerance-based comparison
Feature Flags (Rust)
| Flag | Default | Description |
|---|---|---|
udp |
Yes | MAVLink UDP transport |
tcp |
No | MAVLink TCP transport |
serial |
Yes | MAVLink direct serial transport |
ardupilot |
Yes | ArduPilot mode-name mapping |
stream |
No | Byte-stream adapters for BLE/SPP/custom links |
tlog |
No | TLOG file parser for timestamped MAVLink logs |
Mission Wire Semantics
For MissionType::Mission, MAVLink wire transfer is normalized:
- Upload: a home item is prepended at
seq=0(or a zero placeholder if missing) - Download: wire
seq=0is extracted as home; remaining items are resequenced from 0
For Fence and Rally types, items pass through unchanged.
Examples
Rust -- see examples/:
Python -- see mavkit-python/examples/:
&&
Development
Rust
Python
SITL Integration Tests
Requires Docker + ArduPilot SITL:
Environment: MAVKIT_SITL_UDP_BIND (default 0.0.0.0:14550), MAVKIT_SITL_STRICT (set 1 for strict mode).
License
MIT