Argus
A-GRA compliant C2 HMI

Command autonomous platforms from one map.

Argus is a command-and-control console for Autonomous Collaborative Platforms. It draws the tactical picture with a custom Qt Quick renderer, speaks UCI to the A-GRA LA-CAL, and runs the same code on the desktop, on Android, and in the browser.

Standard
A-GRA / UCI
Projection
EPSG:3395
Stack
C++23 · Qt 6 · QML
Targets
Windows · Linux · Web · Android

Panning the world, switching basemaps, and zooming in. Recorded from an early build.

Capabilities

Built for the picture, not the brochure.

Every part of Argus exists to keep the map correct and responsive while platforms report in. Here is what that amounts to today.

The map

  • Custom scene graph renderer

    Built directly on the Qt Quick scene graph, not QtLocation. A whole world of borders draws in two draw calls; pan and zoom touch only a transform matrix.

  • Ellipsoidal Mercator

    EPSG:3395 through PROJ, behind a pluggable projection interface. Positions are stored geographically and distances are measured geodesically.

  • Vector ground and satellite imagery

    Country polygons filled as vectors stay sharp at any zoom; a pre-baked satellite basemap sits beside them. Country and state borders overlay either.

  • Airgapped by design

    No tile server, no runtime reprojection. Map data is prepared offline and compiled into the binary, so the same build runs disconnected.

  • Never shows beyond the map

    The viewport clamps the visible rectangle to the world bounds through every pan, zoom, and resize. Empty margin is a bug, not a feature.

The picture

  • Identity-driven symbology

    Shape from what a contact is, color from whose it is. Affiliation, environment, platform, and specific type resolve through declared rules; the first match wins.

  • Symbols declared in QML

    Airframe silhouettes and abstract frames are vector contours in QML, rasterized once into a texture atlas. One quad per item, per frame.

  • Adornments and animations

    Velocity vectors, emitter dishes, selection borders, and a slow pulse on stale tracks: baked into the atlas cell or streamed as geometry when they depend on live data.

  • Ownship, own systems, and the picture

    Three models, three layers, one camera. Ownship and friendly platforms draw in their own palette; the fused track picture in affiliation colors.

  • Trails, range rings, off-screen cues

    Breadcrumb trails along the recent path of each track, screen-fixed range rings labeled in current range, and edge markers for tracks outside the view.

  • Track information and focus

    A focused track is named, classified, and located in words beside the map; ownship reads out its own instruments.

The A-GRA link

  • UCI over OWP

    A WebSocket session to the LA-CAL broker speaking OWP, with every message wrapped in a UCI DataPayload envelope both ways.

  • Route once, adapt by state

    One router demultiplexes inbound messages by type into feeds that own their state: ownship from Detailed reports, platforms from position reports and system status.

  • Templates, not generated types

    Outbound messages are built from interaction templates checked against the UCI schema, so the supported set is enumerable in one place.

  • DCS World bridge

    A pure-Lua export bridge publishes a DCS mission as UCI messages through the same broker, so Argus sees a live fight without knowing it is simulated.

Runs everywhere

  • Windows, Linux, Web, Android

    One C++23 and QML codebase. The WebAssembly build is thread-enabled and runs in any browser that supports cross-origin isolation.

  • Reproducible builds

    Every dependency, Qt included, comes through a vcpkg manifest with per-target triplets. CMake presets are the only supported way to configure.

  • Continuous delivery

    Each merge request gets a preview site; merges to develop publish dev builds; merges to main cut a versioned release with web and Windows packages.

How it fits

A C2 node on the bus.

Argus never talks to a platform directly. It publishes and subscribes through the LA-CAL broker, wrapped in UCI DataPayloads, like every other participant.

Argus
  • OWP session over WebSocket
  • DataPayload codec and router
  • Feeds write the models
  • Layers draw the models
LA-CAL broker
  • Language-agnostic CAL
  • Topic routing
  • Services: argus-c2, naive-dms, dcs-bridge
Platforms
  • Mission Autonomy on each ACP
  • or the DCS World bridge
  • MA_PositionReport, SystemStatus, MA_PositionReportDetailed

Static ground

GeoJSON and imagery are parsed, projected, and triangulated on a worker thread, once. The result is packed into a handful of vertex buffers. Pan and zoom change only the transform matrix; hundreds of thousands of vertices are never touched again.

Moving items

Symbols bake once into a texture atlas. Every frame, each visible item becomes one quad, and adornments that depend on live data stream as geometry beside it. A constant pixel size cannot live under a world transform, so this path rebuilds per frame and moves the work off it instead.

Where it stands

Built, and designed.

Argus is under active development. The architecture is recorded in decision records before code lands, so the designed column is a plan, not a wish list.

Built

  • Projection, GeoJSON loading and tessellation, camera with clamping
  • Vector ground, satellite imagery, country and state borders
  • Track, ownship, own-systems and waypoint models
  • Symbols declared in QML, the symbol atlas, baked and streamed adornments
  • Track trails, range rings, off-screen track markers, focus and info block
  • OWP session to the LA-CAL, DataPayload codec, message router
  • Ownship and own-systems feeds from MA_PositionReportDetailed, MA_PositionReport and SystemStatus
  • DCS World bridge exporting ownship and friendly platforms

Designed, not yet built

  • Flight commands with the full accept, reject, and counter-proposal lifecycle
  • Return to base by mission plan activation
  • Task-level commands, CAP first
  • Approval requests and contingency alerts
  • Selection and lasso, runtime filtering
  • Tiled satellite basemap and a 2.5D view over the same models

Message-by-message status is on the message support page.

Try it in the browser.

The web build is the full application compiled to WebAssembly. It needs a current desktop browser and about fifteen megabytes on first load.

Open app.argus-hmi.com