Skip to main content

World Engine

The World Engine is a first-party extension, com.altnautica.world-engine. It is not part of the agent core: a node without it installed carries no world-model or compute code, service, route, config block or page. Install it where you want it and every piece arrives together. It does two jobs:
  • World models. A drone selects pose-tagged keyframes from its camera stream and sends them to a compute node on the same network (a workstation or a compute profile node). The node reconstructs a Gaussian splat, a point cloud, a mesh and an occupancy grid, and Mission Control views the result live and after the flight.
  • Perception offload. A drone with no on-board accelerator streams its camera to the compute node, the node runs the detector, and the detections return to the drone’s own detection bus. Follow-Me, the gimbal and the cockpit overlay work unchanged. A stale or link-lost detection is treated as lost, never extrapolated.
The drone never reconstructs or trains anything. That work stays on the compute node.

Install

The node installer offers the extension as a feature toggle. It is on by default for the workstation and compute profiles and off for drone and ground_station. Pass the flag to choose explicitly:
--no-world-engine skips it. An upgrade (--upgrade) leaves an installed extension alone; plugin auto-update keeps it current. On a node that is already installed, use the CLI. ados plugin install accepts the catalog id, a release URL or a downloaded archive:
The install prompt lists every permission the extension asks for. You can also install it from the node’s Extensions tab in Mission Control.
The archive is small. The per-architecture binaries and the Rerun viewer’s wasm are install-time payloads: the agent downloads only the files for its own architecture and profile from the GitHub release, checks each against the sha256 and size pinned in the signed manifest, and refuses the install on any mismatch. The node needs outbound HTTPS to GitHub while it installs.
The extension is signed by the Altnautica first-party key. It needs that signer for three reasons: its Mission Control pages run as an inline module rather than in an iframe, its resource class is heavy, and on macOS the launchd backend enforces no sandbox. The agent refuses any of those from a third-party signer.

Supported nodes

A drone on an architecture the capture service does not ship for is refused with incompatible: no binary for <arch-os>, before anything is unpacked.

Service names

Pair a drone with a compute node

Pair the drone and the compute node to the same Mission Control account, with the extension installed on both. Mission Control then issues the drone a credential scoped to the node’s lanes (keyframe ingest, the world-model stream, offload, artifacts and job submission) and installs it on the drone through the extension. A ground station is issued the ingest lane only. The compute node’s Jobs & outputs page lists these credentials and revokes them. The drone finds the compute node over mDNS, or you pin it with offload.compute_node_addr.

How keyframes travel

The drone forwards keyframes over the best bearer it has, in this order:
  1. LAN. Straight to the compute node on :8092.
  2. Radio relay. Over the radio link’s auxiliary stream to a ground station in the relay role, which forwards onto its own LAN. This lane carries pose and status only.
  3. Cloud relay. Through the agent’s cloud connection.
Forwarding starts only while capture is enabled and the camera pipeline reports ready.

Configuration

The extension keeps its configuration in the plugin config, not in /etc/ados/config.yaml. Read and write it from Mission Control’s setup pages, or over REST:
Capture re-reads its config every 5 seconds, so a change needs no restart.

The extension’s HTTP API

The extension serves its own API through the agent’s plugin passthrough, /api/plugins/com.altnautica.world-engine/x/<path> on :8080. The normal pairing key applies, and the same path works through a ground station’s relay proxy.

On a drone

Capture states: idle, capturing, paused, finalizing, bagged. stop finalizes and bags the session, which is what makes the compute node reconstruct it.

On a ground station

GET atlas-relay/status returns the relay’s keyframes seen and forwarded.

On a compute node

The node service answers drones on its own :8092 listener, with the node credential for auth, and answers the operator through the passthrough. Job kinds are reconstruct (a world model from a keyframe bag), perception_offload (frames in, detections back) and slam_offload (frames in, poses back). A job moves queued, running, then completed, failed or cancelled. A worker runs the backend without holding the job-store lock, so a reconstruction that takes minutes never blocks the API, and a cancel that lands during the run wins. Job records also sync to the operator’s cloud account as the extension’s own records, so Mission Control can list past jobs when the node is offline.

Host tools on the compute node

The node calls reconstruction tools installed on the host. They are not shipped in the extension:
  • COLMAP for structure-from-motion poses and a sparse point cloud.
  • Brush or msplat (Apple Silicon) for Gaussian-splat training; nerfstudio (ns-train) also works.
  • Python 3 with numpy, Pillow, torch and transformers for an optional monocular-depth seed. Without it, splat training starts from a random point cloud.
  • ffmpeg for perception offload.
With no reconstruction backend installed, a job completes with a placeholder output that Mission Control badges as a placeholder and never shows as a real world model.

Mission Control pages

The extension adds these pages to the node detail panel.

Permissions

The extension also declares plugin.world-engine.world.read, the capability another plugin needs to subscribe to its point cloud, occupancy, splat and mesh topics. See Permissions.