MAVLink QUIC Relay — secure, low-latency MAVLink telemetry relay over QUIC/TLS
MavlinkRelay provides a transparent frame relay for MAVLink telemetry between vehicles (Jetson/ROS) and ground control stations (GCS) over QUIC/TLS. The server component is implemented in Python (aioquic) and the client runs as a C++ ROS node on Jetson platforms using msquic.
MavlinkRelay/
├── server/ # Python aioquic relay server
└── jetson/
└── mavlink_quic_relay/ # C++ ROS node (msquic)
See the sub-READMEs for detailed installation and configuration guidance.
The system relays MAVLink frames from a flight computer (via MAVROS) through a Jetson-hosted C++ ROS node over QUIC/TLS to a Python QUIC server which forwards frames to subscribed GCS clients. Each GCS connection may subscribe to exactly one vehicle at a time.
ASCII diagram:
FC / MAVROS → [Jetson C++ ROS node] → QUIC/TLS → [Python Server]
← QUIC/TLS ←
[GCS]
| Property | Value |
|---|---|
| ALPN | mavlink-quic-v1 |
| Default port | UDP 14550 |
| Wire framing | [u16_le length][raw bytes] on all streams |
| Streams | control=0, priority=4, bulk=8 |
| Auth | Post-handshake token exchange (CBOR on stream 0), no client TLS certs required |
| Vehicle ID | String in BB_NNNNNN format (e.g. BB_000001) — matched against server auth.tokens[].vehicle_id |
| GCS subscription | One vehicle per GCS connection; re-subscribe rejected with SUB_FAIL "already subscribed" |
| Server language | Python 3.12+, aioquic 1.3.0 |
| Client language | C++ (ROS 1, msquic) |
Additional notes:
- Keepalive: server PINGs every 15s and will close the connection after 45s without a PONG.
- The server includes a comprehensive test suite and a Docker Compose setup for easier deployment and security hardening.
To run the server, see server/README.md for installation, configuration, and examples.
To build and run the ROS node for Jetson, see jetson/mavlink_quic_relay/README.md for build instructions and platform notes (Jetson Xavier NX / Orin Nano, ARM64).
This README is a high-level overview. For configuration specifics, logging, parameter details, and advanced usage consult the component READMEs linked above.