Skip to main content
These are the first-party extensions Altnautica publishes through the public ADOSExtensions repository. Each released extension ships as a signed .adosplug archive on GitHub Releases and installs from a node’s Extensions page in Mission Control or with ados plugin install. Every extension is licensed GPL-3.0-or-later. Each archive carries a SIGNATURE entry: the signer id and an Ed25519 signature over the archive’s canonical payload hash (every entry except SIGNATURE). The agent verifies it against /etc/ados/plugin-keys/<signer-id>.pem, refuses a signer, archive or release (<plugin_id>@<version>) listed in /etc/ados/plugin-revocations.json, and refuses the install when no enrolled key verifies it. See Signatures and trust. The agent refuses an install on a board that is not in the extension’s board list (* means any board). Drives a MAVLink gimbal-manager on component 154. Beyond manual pitch and yaw it runs a visual servo on the companion: click a detected subject in the cockpit and the gimbal keeps it centred. It stops commanding the moment the vision engine reports the subject uncertain or lost, and it never re-locks onto a different subject by itself. Cockpit Skills: Aim (G), Recenter (Shift+C), Nadir (Shift+V) and Rate mode (Shift+G). It speaks MAVLink Gimbal v2 only. A gimbal that does not present a gimbal-manager to the flight controller is not supported. Permissions
  • command.send
  • event.publish
  • mavlink.component.gimbal
  • mavlink.read
  • mavlink.write
  • mcp.expose
  • telemetry.extend
  • telemetry.subscribe.gimbal
  • ui.slot.flight-skill
  • ui.slot.node-detail-tab
  • ui.slot.settings-section
  • vision.detection.subscribe
Boards: *

Vision Navigation

Position hold when GPS is unreliable. A downward camera plus the flight controller’s gyro produce an optical-flow measurement about 30 times a second, sent as OPTICAL_FLOW to ArduPilot and iNav and as OPTICAL_FLOW_RAD to PX4. Three modes: optical flow with a rangefinder, optical flow without one (barometer height for scale, or GPS height in outdoor mode), or off. It does no visual-inertial odometry. The Engage Skill (Shift+N) turns it on and off. Permissions
  • event.publish
  • hardware.uart
  • mavlink.component.vio
  • mavlink.read
  • mavlink.write
  • telemetry.extend
  • telemetry.subscribe.navigation
  • ui.slot.flight-skill
  • ui.slot.node-detail-tab
  • vision.frame.read
Boards: cm4, cm5, rock-5c-lite, rk3588s2, rk3576, rpi5 See the Vision Navigation guide.

Follow-Me

Click a subject in the live video and the drone follows it at a fixed distance and height. A detector on the companion produces detections, you designate one, and the companion locks that track, projects it onto the ground and streams guided position setpoints to the flight controller. It stops commanding the instant the tracker reports the subject uncertain or lost, and never re-locks onto a different subject by itself. The Follow-Me Skill (Shift+F) arms and disarms the behaviour and asks for confirmation first. An AI client gets two tools, follow_status and stop_follow, and no way to start a follow: a follow begins only when an operator designates a subject. Permissions
  • event.publish
  • flight.guided_setpoint
  • mavlink.read
  • mavlink.write
  • mcp.expose
  • ui.slot.flight-skill
  • ui.slot.node-detail-tab
  • vision.detection.subscribe
Boards: cm4, cm5, rock-5c-lite, rk3588s2, rk3576, rpi5, cubie-a7s, cubie-a7z
Follow-Me flies the drone with guided setpoints. Read Safety before you use it.

SIYI optical pod

Speaks the SIYI Gimbal Camera External SDK over UDP, TCP or TTL serial, so the agent drives what a stock autopilot mount cannot: thermal palette and gain, the laser rangefinder and subject geolocation. On start it queries the firmware and hardware id, picks that model’s capability profile, and exposes only the controls the model supports. Until the pod answers the identity query it is sent nothing. The query retries on a fixed interval with no attempt limit, so a pod powered on after boot comes online without a restart. Laser range plus gimbal angles plus the flight controller’s pose resolve a subject latitude and longitude, which the geolocate tool reports. Gimbal attitude and laser range are mirrored to the flight controller as standard MAVLink, so the built-in gimbal panel works too. Permissions
  • command.send
  • event.publish
  • hardware.uart
  • mavlink.component.camera
  • mavlink.component.gimbal
  • mavlink.read
  • mavlink.write
  • mcp.expose
  • network.outbound
  • telemetry.extend
  • telemetry.subscribe.siyi
  • ui.slot.cockpit-panel
  • ui.slot.flight-skill
  • ui.slot.node-detail-tab
  • ui.slot.settings-section
  • ui.slot.video-overlay
  • video.source.set
Boards: cm4, cm5, rock-5c-lite, rk3588s2, rk3576, rpi5, generic-x86_64

Thermal camera

Development preview: no release archive is published, and capture needs a native UVC backend that the agent does not supply. With no backend, no device on the bus or a failed open, the extension publishes an explicit unavailable state with the reason and never reports a temperature. The driver targets a FLIR Lepton 3.5 on a PureThermal 2 dongle. It locks the radiometric linear mode so raw counts convert to degrees Celsius, meters a centre spot plus the frame minimum and maximum, and colourizes the feed with palettes that match between the agent and the cockpit overlay. Cockpit Skills: Cycle palette (Shift+O) and Flat field correction (Shift+I). Permissions
  • event.publish
  • hardware.usb.uvc
  • telemetry.extend
  • telemetry.subscribe.camera.thermal.frame
  • telemetry.subscribe.thermal
  • ui.slot.flight-skill
  • ui.slot.settings-section
  • ui.slot.video-overlay
  • video.source.set
Boards: cm4, cm5, rock-5c-lite, rk3576, rk3566, generic-x86_64

World Engine

Builds a 3D world model from a flight. The drone selects pose-tagged keyframes and streams them to a compute node on the same network, which reconstructs a Gaussian splat, point cloud, mesh and occupancy grid that Mission Control shows live and after landing. The same node runs perception offload for a drone with no on-board accelerator, returning detections to the drone’s own detection bus. The installer turns it on by default for workstation and compute nodes. Its binaries download at install for the node’s own architecture, each checked against a SHA-256 pinned in the signed manifest. Permissions
  • cloud.publish
  • cloud.records
  • event.publish
  • hardware.gpu
  • network.listen
  • network.outbound
  • node.info.read
  • perception.read
  • radio.aux_stream
  • telemetry.extend
  • telemetry.read
  • telemetry.subscribe.status
  • ui.slot.node-agent-page
  • ui.slot.node-surface
  • vision.detection.publish
  • vision.frame.read
  • vision.offload.advertise
Boards: * See World Engine for setup, configuration and the API.

Install one

From Mission Control:
  1. Open the node, go to Agent, and under Software click Extensions.
  2. Pick the extension from the list of available extensions and click Install, or click Install from file and upload a downloaded .adosplug.
  3. Read the review page and click Install. The button names how many permissions the install grants.
See Install extensions from Mission Control. From the agent CLI, ados plugin install takes a first-party catalog id, a release URL or a local archive:
A catalog id installs the version pinned in the agent’s bundled catalog, which can lag the releases listed above. For the current release, install its URL. An id that is not in the bundled catalog installs only from its release URL or file. See Extensions on the agent.

Publish your own

Build an extension with the SDK, sign it with your own key, and install it from a local file or a URL; see Your first plugin and Distribution: local install. To list it in the registry, see Distribution: the registry.

Next steps

Install from Mission Control

The per-node Extensions page and the install review.

Extensions on the agent

The CLI, signatures, permissions and isolation.
Last modified on October 11, 2026