Contents Menu Expand Light mode Dark mode Auto light/dark, in light mode Auto light/dark, in dark mode Skip to content
AutonomyOps ADK
AutonomyOps ADK

Evaluate

  • 2-Minute CE Demo

Install & Run

  • Install & Run
    • Prerequisites
    • Build
    • Run
    • Connect Your Own Agent
    • First Edge
    • Fast Path Tutorial (5–10 minutes)
    • Integrity and Deny Tutorial
    • Contested Reliability Tutorial
    • Robotics Quickstart

Tutorials

  • Tutorials
    • Tutorial 01 — Single Node: Receive, Verify, and Activate Offline
    • Tutorial 02 — Multi-Node: Seed Once, Update Everywhere (Peer Propagation)
    • Tutorial 03 — Crash and Recovery: WAL + Safe-Point
    • Tutorial 04 — OS Replacement Survival and Mission Runtime Reconstruction
    • Tutorial 05 — Portability: Run Everywhere (amd64, arm64, riscv64)
    • Tutorial — Container Hardening Hands-On
    • CLI Audit And Support Bundle Lab
    • VAL 01 — Zero-Downtime Certificate Rotation Validation
    • VAL 02 — Trust-Chain Rejection Validation
    • VAL 03 — RBAC Permission Enforcement Validation
    • VAL 04 — Audit Completeness Validation
    • VAL 05 — OTel Integration Validation
    • VAL 06 — Support Bundle Validation
    • VAL 07 — Fleet Rollout Latency Baseline
    • VAL 08 — Fleet Rollout Throughput Validation
    • VAL 09 — Stuck Rollout Detection Validation
    • VAL 10 — Rollback Reliability Validation
    • VAL 11 — Fleet Rollout Chaos Test Pack
    • VAL 12 — Fleet Rollout 30-Day Soak
    • VAL 13 — HA Failover Validation
    • VAL 14 — HA Replication Lag Baseline
    • VAL 15 — Backup/Restore Validation
    • VAL 16 — Split-Brain Chaos Validation
    • VAL 17 — Quorum Loss Validation
    • VAL 18 — HA 30-Day Soak Validation
    • VAL 19 — Relay Local-Network Impairment Validation
    • VAL20 — Relay Throughput Benchmark
    • VAL21 — Relay Queue Depth and Overflow Validation
    • VAL22 — Deadletter Workflow Validation
    • VAL23 — Relay Bandwidth Management Validation
    • VAL24 — Relay 30-Day Soak Validation
    • VAL27 — Relay Proof Report Generator
    • VAL25 — Fleet Rollout Proof Report Generator
    • VAL26 — HA Proof Report Generator
    • VAL28 — Cross-Cutting Proof Report Generator
    • VAL29 — AutonomyOps v1 Public-Claim Evidence Matrix
    • Edge Relay Deadletter Lab
    • FI Traceability: Invariant → Test → Expected Output
    • Offline-first Runbook: Buffer Then Drain
    • Policy Deny in Strict Mode
    • Public Claims Correction Package
    • Repo Findings Checklist
    • Resource Envelope: Disk Ceiling + Eviction Proof
    • ROS 2 Governed Bridge Quickstart
    • ROS 2 SROS 2 / DDS-Security Quickstart
    • Story Script — “Seed Once, Update Everywhere”
    • Transport Hardening: mTLS Identity + Domain Boundaries
    • AutonomyOps ADK — Tutorial Pack

Runbooks

  • Runbooks
    • Demo Runbook
    • ROS 2 Governed Bridge
    • ROS 2 SROS 2 / DDS-Security for the Governed Bridge
    • Container Hardening + Syscall Mediation
    • AutonomyOps Operator Runbooks
    • Fleet Rollout Recovery
    • Gate Approval Workflow
    • Manual Failover Procedure
    • Split-Brain Detection and Recovery
    • Quorum-Loss Recovery
    • Deadletter Inspection and Retry Workflow
    • Bandwidth Troubleshooting
    • RBAC Role Assignment
    • Support Bundle Generation
    • Emergency Rollback Procedure
    • Attestation Mode Rollout
    • Operator Runbook
    • Integrity Failure Drill: Tamper and Verify Failure
  • Observability
    • Edge Observability Reference
  • Operations
    • Edge Deployment (Operator Guide)
    • Failure Modes and Recovery
    • Registry Seeding for Edge / Air-Gapped Sites (Operator Guide)

Architecture & Design

  • Architecture
    • Architecture Overview
    • Capabilities
    • Invariants
    • Deterministic Relay Layer
    • Threat Model
  • Security
    • mTLS
    • Edge Security Model
    • Domain Validation
    • Beacon Privacy
    • Security Model
  • Storage
    • On-Disk Layout
    • Storage Data Model
    • Crash Consistency
  • Rollout
    • HA Operations — Rollout Leader Election and Streaming Promoter
    • Mesh Propagation — Artifact Distribution
    • OS Reconstruction Rollouts
  • Portability
    • Core Invariant Matrix
  • Resource Envelope
    • cgroup v2 Integration
    • Disk Ceiling
    • Retry Budgets and Backoff Policy
  • Contracts

Reference

  • CLI Reference
    • autonomy — CLI overview
    • edgectl — CLI overview
    • edged — CLI overview
    • autonomy-gui
    • autonomy command reference
      • autonomy
      • autonomy bundle
      • autonomy bundle inspect
      • autonomy bundle pull
      • autonomy bundle push
      • autonomy bundle stage
      • autonomy bundle verify
      • autonomy config
      • autonomy config get
      • autonomy config migrate
      • autonomy config set
      • autonomy demo
      • autonomy demo gazebo
      • autonomy demo mavlink-sitl
      • autonomy demo nvidia
      • autonomy demo openclaw
      • autonomy demo policy
      • autonomy demo ros2-bridge
      • autonomy demo validate
      • autonomy lock
      • autonomy lock canonicalize
      • autonomy lock diff
      • autonomy lock fingerprint
      • autonomy lock generate
      • autonomy lock verify
      • autonomy logs
      • autonomy oci
      • autonomy oci attach-lock
      • autonomy oci attach-policy
      • autonomy oci probe
      • autonomy oci pull-lock
      • autonomy oci pull-policy
      • autonomy oci push-test-artifact
      • autonomy policy
      • autonomy policy build
      • autonomy policy cache
      • autonomy policy eval
      • autonomy policy fetch
      • autonomy policy inspect
      • autonomy policy load
      • autonomy policy status
      • autonomy registry
      • autonomy registry bootstrap-zot
      • autonomy registry package
      • autonomy registry publish-index
      • autonomy registry seed
      • autonomy registry seed-catalog
      • autonomy registry sync
      • autonomy relay
      • autonomy relay status
      • autonomy run
      • autonomy runtime
      • autonomy runtime start
      • autonomy runtime status
      • autonomy sign
      • autonomy status
      • autonomy telemetry
      • autonomy telemetry bridge
      • autonomy telemetry drain
      • autonomy telemetry export
      • autonomy telemetry flush
      • autonomy telemetry sink
      • autonomy telemetry status
      • autonomy verify
      • autonomy version
      • autonomy wal
      • autonomy wal inspect
      • autonomy wal status
    • edged command reference
      • edged
      • edged precheck
      • edged rotate
      • edged validate
      • edged version
    • edgectl command reference
      • edgectl
      • edgectl assurance
      • edgectl index
      • edgectl index count
      • edgectl index list
      • edgectl init
      • edgectl quota
      • edgectl quota list
      • edgectl quota peer
      • edgectl relay
      • edgectl relay config
      • edgectl relay config get
      • edgectl relay config set-bandwidth
      • edgectl relay deadletter
      • edgectl relay deadletter inspect
      • edgectl relay deadletter list
      • edgectl relay deadletter purge
      • edgectl relay deadletter retry
      • edgectl relay status
      • edgectl retry
      • edgectl retry list
      • edgectl status
      • edgectl storage
      • edgectl storage stats
      • edgectl version
  • GUI
    • GUI Overview
    • GUI Getting Started
    • GUI Configuration
    • GUI Backend API
  • API Reference
    • Event Stream
    • RPC Endpoints
    • Sockets
    • Transport Messages
  • Configuration
    • Configuration Reference
    • Environment Variable Overrides
    • Configuration Validation
  • OCI Artifacts
  • Policy Bundles

Integrations

  • MAVLink Governance
  • MAVLink Policy Authoring

Demo Stack Reference

  • Demo Stack Reference
    • Fleet Monitoring for Robotics
    • Gazebo Simulation Stack
    • ROS2 Governance
    • ROS2 Markers and Observability
    • NVIDIA GPU Integration
    • Hardware Adaptation Guide
    • Bundle Workflows
    • Demo Fallback Assets — autonomy demo openclaw
      • Annotated Demo Output — autonomy demo openclaw
      • Demo Fallback Pivot Notes

Development

  • Testing
    • Unit Tests
    • Integration Tests
    • Race Detector
    • Failure Injection Overview
    • Root-Level FI Tests
  • Fault-Injection Catalog
    • FI Scenario Matrix
    • Expected FI Outputs
    • Running FI Tests
  • Contributing
    • Contributing Guide
    • Documentation Standards
    • Doc Placement Guide
    • Docs Quality Gates
    • Invariant Rules for Contributors
  • Traceability
    • Invariant Map
    • Doc Coverage Report
    • Edge Invariant Traceability Matrix

Releases

  • Releases
    • Changelog
    • Versioning Policy
Back to top
View this page
Edit this page

MAVLink Governance¶

ADK governs MAVLink vehicle command authority the way runtime/ros2 governs robot-middleware actions: every command an agent wants to issue (arm, takeoff, goto, set_mode, …) is evaluated by policy before the runtime issues it on the autopilot link.

The framing: ROS 2 governs robot-middleware actions; MAVLink governs vehicle command authority.

The trust model (read this first)¶

The MAVLink transport — the TCP/UDP/serial link to the autopilot — is owned by the runtime-side supervisor, never by the agent. The agent sends intent (POST /v1/tool with a tool.mavlink.* kind and verb-specific fields). The supervisor:

  1. owns the connection and tracks autopilot state from heartbeats,

  2. snapshots that trusted state at request time, and

  3. after policy allows — and an engineer-edited safety floor passes — issues the command on the same trusted connection.

Because the agent has no path to open a connection or to supply the trusted fields, three properties are structural, not advisory:

  • SITL-vs-real binding. The environment (sitl/real) is set by the operator at supervisor construction and is immutable for its lifetime; every snapshot returns it verbatim. An agent can never claim sitl on a real vehicle.

  • Armed / GPS preconditions. Arm requires a fresh heartbeat and a 3D GPS fix; takeoff requires an autopilot-confirmed armed state.

  • Mission integrity. upload_mission is bound to a mission_hash the supervisor verifies against the transmitted bytes.

The trusted fields the runtime injects (and forbids callers from supplying) are: environment, armed_state, gps_fix, heartbeat_age_ms, sysid, current_mode. A request that carries any of these is rejected with a governance-protocol error before policy evaluation — the agent must send intent only.

Two operator entry points (siblings, not nestable)¶

There are exactly two ways to reach a MAVLink-governed runtime. Both create a single trusted runtime that owns the autopilot link and spawns the agent directly. Do not nest them (e.g. autonomy run … autonomy demo …): the inner autonomy run would start its own, unsupervised runtime and the agent would fail closed with ErrMavlinkNotConfigured.

1. Bundled SITL demo¶

Bring up a SITL autopilot, then run the governed demo:

docker compose -f demo/docker-compose.mavlink.yml up -d
autonomy demo mavlink-sitl

Installed: the demo policy and agent are embedded in the binary — autonomy demo mavlink-sitl needs no source clone (the SITL stack is the only prerequisite). The in-repo convenience target make demo-mavlink-sitl brings up the compose stack and runs the same command.

The agent (examples/mavlink_agent.py — stdlib only, no pymavlink) issues five governed calls: arm, takeoff, in-fence goto → ALLOW; out-of-fence goto → DENY (geofence); command_long → DENY (privileged). Every decision is written to the local WAL.

2. Bring-your-own agent (production)¶

For your own agent, register a supervisor on autonomy run’s own runtime:

autonomy run \
    --mavlink-endpoint tcp:127.0.0.1:5760 \
    --mavlink-environment sitl \
    python3 my_agent.py
  • --mavlink-endpoint — transport URL (tcp:, udp:, udpin:, serial:). Absent ⇒ tool.mavlink.* is fail-closed (ErrMavlinkNotConfigured).

  • --mavlink-environment — sitl|real, required when an endpoint is set; immutable for the run; passed as a flag (auditable in shell history) not an env var.

With no --policy, this defaults to the embedded MAVLink demo policy (which governs tool.mavlink.*); pass --policy <oci-ref> for production rules. The flags are not supported with ros2.launch (run MAVLink governance separately).

Tool kinds¶

The typed command surface. Each is a POST /v1/tool body of the form {"kind": "<kind>", "params": {<intent>}} — intent fields only; the supervisor injects the trusted fields.

Kind

Intent

Notes

tool.mavlink.arm

—

Arm motors. Floor: fresh heartbeat + 3D fix.

tool.mavlink.disarm

—

Disarm motors.

tool.mavlink.takeoff

altitude

Floor: autopilot-confirmed armed.

tool.mavlink.land

—

Land.

tool.mavlink.set_mode

custom_mode

Mode transition.

tool.mavlink.goto

lat, lon, alt

Guided-mode target.

tool.mavlink.upload_mission

mission, mission_hash

Floor: BLAKE3(mission) == mission_hash. Issued via the multi-message mission-protocol handshake — see note below.

tool.mavlink.clear_mission

—

Clear the onboard mission.

tool.mavlink.param_set

param_id, param_value

Parameter mutation.

tool.mavlink.command_long

command, param1…param7

Privileged raw COMMAND_LONG.

tool.mavlink.rc_override

channels

Privileged raw RC override.

Example (the agent sends intent only):

curl -s "$AUTONOMY_RUNTIME_URL/v1/tool" -H 'content-type: application/json' \
    -d '{"kind":"tool.mavlink.goto","params":{"lat":0.0005,"lon":0.0005,"alt":50}}'

Unlisted kinds under the tool.mavlink.* prefix (a future or misspelled kind) are rejected before dispatch — the surface is a closed, typed set, not an open prefix.

Note

upload_mission is issued via the multi-message MAVLink mission-protocol handshake: the supervisor announces MISSION_COUNT, answers each MISSION_REQUEST_INT with the matching MISSION_ITEM_INT, and completes on a MISSION_ACK. mission is the canonical mission bytes (a JSON array of mission items — see MAVLink Policy Authoring for the shape) and mission_hash is their BLAKE3; the safety floor verifies the binding before any item is sent, so the items that reach the autopilot are exactly the bytes the policy authorized. A MISSION_ACK of MAV_MISSION_ACCEPTED is reported as issued (HTTP 200); an autopilot NAK or a handshake timeout is reported as allowed-but-not-issued (HTTP 400) — the plan was attempted but not stored.

The safety floor (engineer-edited, not policy-tunable)¶

The supervisor enforces a hard floor inside command issuance, after policy allow. Policy can add tighter restrictions but cannot lift these:

  • arm — heartbeat ≤ 1 s old and GPS fix ≥ 3D.

  • takeoff — autopilot-confirmed armed within the prior 500 ms.

  • upload_mission — transmitted bytes’ BLAKE3 matches mission_hash before any mission item is sent on the handshake (see the note above).

Optional, operator-configured adapter floors (defense-in-depth, independent of policy): a geofence (radius + ceiling on goto), a mode denylist, and raw-command authority — command_long and rc_override are denied unless the supervisor is explicitly granted raw authority. A floor rejection is a fail-closed governance deny; the command is never issued.

Extending the policy¶

The demo policy is the negative example for command_long / rc_override (denied) and the SITL-only template for arm. Author your own fail-closed bundle for production — see MAVLink Policy Authoring.

Installed: point autonomy run --policy <oci-ref> at a bundle in the local managed cache. The canonical demo source is demo/policies/mavlink/mavlink.rego (compiled into the binary as the embedded default; copy it as a starting point).

What this does not do¶

  • It does not certify the system for flight: the real path exists, but the operator owns the safety case. The floor is a floor, not a certification.

  • It does not replace ROS 2 governance for vehicles running ROS 2 stacks — govern both tool.ros2.* and tool.mavlink.*; they cover different layers.

  • It does not support an agent-owned MAVLink connection for command issuance: any command must go through the supervisor.

Next
MAVLink Policy Authoring
Previous
Policy Bundles
Copyright © 2026, AutonomyOps
Made with Sphinx and @pradyunsg's Furo
On this page
  • MAVLink Governance
    • The trust model (read this first)
    • Two operator entry points (siblings, not nestable)
      • 1. Bundled SITL demo
      • 2. Bring-your-own agent (production)
    • Tool kinds
    • The safety floor (engineer-edited, not policy-tunable)
    • Extending the policy
    • What this does not do