Constellation OverwatchConstellation Overwatch
Concepts

Ontological Data Design

Structuring telemetry data with ontological primitives

Learn how to structure your telemetry data using Constellation Overwatch's ontological data primitives.

Overview

Constellation Overwatch uses an ontological approach to telemetry data, organizing sensor readings into semantic categories that reflect the physical reality of your entities. The entity_id serves as the root primitive, with signal trees branching into position, attitude, vehicle status, power, and flight reference data.

Entity Structure

Every entity in Constellation Overwatch follows a consistent schema:

{
  "entity_id": "eba6f509-7571-42b7-90e0-26f1883364bd",
  "org_id": "ee3857a9-61f8-4e80-8dbd-0edef3391b91",
  "org_name": "Organization Name",
  "name": "HEXACOPTER",
  "entity_type": "aircraft_vtol",
  "status": "active",
  "priority": "high",
  "is_live": false,
  "first_seen": "2026-01-15T10:00:00Z",
  "last_seen": "2026-01-19T13:53:34Z"
}
FieldTypeDescription
entity_idUUIDUnique identifier for the entity
org_idUUIDOrganization that owns this entity
entity_typestringClassification (e.g., aircraft_vtol, aircraft_fixed_wing, ground_vehicle)
statusstringOperational status (active, inactive, maintenance)
prioritystringAlert priority level (low, medium, high, critical)
is_livebooleanWhether entity is currently streaming telemetry

Data Primitives

Position

Dual-frame position tracking with global (WGS84) and local (NED) coordinates:

{
  "position": {
    "global": {
      "latitude": 32.8329584,
      "longitude": -97.3139916,
      "altitude_msl": 186.174,
      "altitude_relative": -0.232,
      "accuracy_h": 0.5,
      "accuracy_v": 1.0,
      "timestamp": "2026-01-19T13:53:34.901448-06:00"
    },
    "local": {
      "x": 0,
      "y": 0,
      "z": 0,
      "vx": 0,
      "vy": 0.01,
      "vz": -0.02,
      "timestamp": "2026-01-19T13:53:34.901448-06:00"
    }
  }
}

Global Position (WGS84)

FieldTypeDescription
latitudefloatLatitude in degrees
longitudefloatLongitude in degrees
altitude_mslfloatAltitude above mean sea level (meters)
altitude_relativefloatAltitude relative to home/takeoff point (meters)
accuracy_hfloatHorizontal position accuracy (meters)
accuracy_vfloatVertical position accuracy (meters)

Local Position (NED Frame)

FieldTypeDescription
x, y, zfloatPosition in North-East-Down frame (meters)
vx, vy, vzfloatVelocity components (m/s)

Attitude

Orientation in 3D space with Euler angles and angular rates:

{
  "attitude": {
    "euler": {
      "roll": 0.0069516706,
      "pitch": 0.024251271,
      "yaw": 2.852021,
      "rollspeed": -0.0012262901,
      "pitchspeed": 0.0007064608,
      "yawspeed": -0.0005519187,
      "timestamp": "2026-01-19T13:53:34.901446-06:00"
    }
  }
}
FieldTypeDescription
rollfloatRoll angle in radians
pitchfloatPitch angle in radians
yawfloatYaw/heading in radians
rollspeedfloatRoll rate (rad/s)
pitchspeedfloatPitch rate (rad/s)
yawspeedfloatYaw rate (rad/s)

Vehicle Status

Operational state aligned with MAVLink conventions:

{
  "vehicle_status": {
    "armed": false,
    "mode": "STABILIZE",
    "custom_mode": 0,
    "autopilot": 3,
    "system_status": 4,
    "vehicle_type": 2,
    "landed_state": 1,
    "load": 444,
    "sensors_enabled": 65535,
    "sensors_health": 65535,
    "timestamp": "2026-01-19T13:53:34.90145-06:00"
  }
}
FieldTypeDescription
armedbooleanWhether vehicle is armed
modestringCurrent flight mode
landed_stateintLanding state (0=undefined, 1=on ground, 2=in air, 3=takeoff, 4=landing)
loadintSystem load (0-1000, representing 0-100%)
sensors_enabledintBitmask of enabled sensors
sensors_healthintBitmask of healthy sensors

Power

Battery and power system telemetry:

{
  "power": {
    "voltage": 22.4,
    "current": 15.2,
    "battery_remaining": 85,
    "consumed": 1200,
    "energy_consumed": 26.88,
    "temperature": 35,
    "timestamp": "2026-01-19T13:53:34.901447-06:00"
  }
}
FieldTypeDescription
voltagefloatBattery voltage (V)
currentfloatCurrent draw (A)
battery_remainingintRemaining capacity (0-100%)
consumedintConsumed charge (mAh)
energy_consumedfloatEnergy consumed (Wh)
temperaturefloatBattery temperature (°C)

VFR (Visual Flight Reference)

Flight reference data for situational awareness:

{
  "vfr": {
    "airspeed": 12.5,
    "groundspeed": 11.8,
    "heading": 163,
    "climb_rate": 0.024821566,
    "throttle": 45,
    "altitude": 100,
    "timestamp": "2026-01-19T13:53:34.901448-06:00"
  }
}
FieldTypeDescription
airspeedfloatIndicated airspeed (m/s)
groundspeedfloatGPS ground speed (m/s)
headingintCompass heading (degrees, 0-360)
climb_ratefloatVertical speed (m/s, positive = climbing)
throttleintThrottle percentage (0-100)

Semantic Detections

Real-time object detection and semantic concepts matched and natively stored via the global KV:

{
  "detections": {
    "objects": [
      {
        "class": "person",
        "confidence": 0.89,
        "bbox": { "x": 120, "y": 45, "w": 30, "h": 80 },
        "tracking_id": "trk_1"
      },
      {
        "class": "vehicle",
        "confidence": 0.95,
        "bbox": { "x": 340, "y": 210, "w": 150, "h": 90 },
        "tracking_id": "trk_2"
      }
    ],
    "frame_id": 45892,
    "timestamp": "2026-01-19T13:53:35.102345-06:00"
  }
}
FieldTypeDescription
objectsarrayArray of detected semantic concepts
classstringOntological category (e.g., person, vehicle, fire)
confidencefloatDetection confidence score (0.0-1.0)
bboxobjectBounding box coordinates in video frame
tracking_idstringUnique identifier for the tracked object across frames

Complete Entity Payload

A complete entity combines all signal trees under the entity_id root:

{
  "entity_id": "eba6f509-7571-42b7-90e0-26f1883364bd",
  "org_id": "ee3857a9-61f8-4e80-8dbd-0edef3391b91",
  "org_name": "C*",
  "name": "HEXACOPTER",
  "entity_type": "aircraft_vtol",
  "status": "active",
  "priority": "high",
  "is_live": true,
  "position": {
    "global": { "latitude": 32.8329, "longitude": -97.3139, "altitude_msl": 186.17 },
    "local": { "x": 0, "y": 0, "z": 0, "vx": 0, "vy": 0.01, "vz": -0.02 }
  },
  "attitude": {
    "euler": { "roll": 0.007, "pitch": 0.024, "yaw": 2.85 }
  },
  "vfr": { "groundspeed": 0.01, "heading": 163, "climb_rate": 0.02 },
  "detections": { "objects": [ { "class": "person", "confidence": 0.89 } ] }
}

Extending Signal Trees

The entity_id ontology primitive provides a flexible foundation for real-time state representation that extends far beyond aircraft and drones. Robots, ground vehicles, maritime vessels, industrial equipment—any machine capable of publishing telemetry can network into Constellation Overwatch by extending the signal tree with domain-specific semantic concepts.

For example, a ground robot might extend with:

{
  "entity_type": "ground_robot",
  "locomotion": {
    "wheel_speeds": [1.2, 1.2, 1.1, 1.1],
    "steering_angle": 0.05,
    "odometry": { "distance": 1523.4, "runtime_hours": 12.5 }
  },
  "manipulator": {
    "joint_angles": [0.1, -0.5, 1.2, 0.0, 0.3, 0.0],
    "gripper_state": "open",
    "payload_kg": 0
  }
}

Custom signal tree extensions require a protocol bridge to translate native telemetry into the Constellation schema. The WebUI provides native visualization for standard aerospace primitives (position, attitude, power, VFR) but will not automatically render custom extensions—those require custom UI components or API integration.

Publishing Telemetry

Publish to the global state KV bucket:

nats kv put CONSTELLATION_GLOBAL_STATE "$ENTITY_ID" '{"position": {...}}'

Best Practices

  1. Include timestamps - Every signal tree branch should include ISO 8601 timestamps
  2. Use SI units - Meters, radians, Celsius, m/s, etc.
  3. Preserve precision - Maintain sensor precision through the pipeline
  4. Batch updates - Combine related signals in single updates for consistency
  5. Validate ranges - Check values against physical limits before publishing

On this page