{ "openapi": "3.0.2", "info": { "description": "SoAR message protocol in schemas", "title": "SoAR Backbone Message Formats", "version": "1.0" }, "paths": {}, "components": { "schemas": { "MESSAGE": { "description": "Full message definition with message-metadata in `header` and different message type schemas under `payload`", "properties": { "header": { "$ref": "#/components/schemas/header" }, "payload": { "$ref": "#/components/schemas/payload" } }, "required": [ "header", "payload" ], "type": "object" }, "acknowledgement": { "properties": { "acknowledged_message_ID": { "description": "Identifier of message received and executed with success for mission plans sent by the Autonomy Engine.", "example": "02125022255-7bc8-11ed-a1eb-0242ac999999", "type": "string" }, "message_type": { "description": "Type of message", "example": "acknowledgement", "type": "string" }, "status": { "description": "Highest level of acknowledgement. I.e. `c2_received`: Received by C2, `operator_approved_and_sent` : Approved by operator and sent from C2->Platform, `executed`: Executed by platform", "enum": [ "c2_received", "operator_approved_and_sent", "executed" ], "example": "executed by platform", "type": "string" } }, "required": [ "message_type", "acknowledged_message_ID", "status" ], "type": "object" }, "header": { "discriminator": { "propertyName": "message_type" }, "properties": { "delivery_type": { "default": "publish", "description": "To publish or broadcast this message.", "enum": [ "broadcast", "publish" ], "example": "publish", "type": "string" }, "destination": { "description": "Publisher topic; What is the destination of this message", "example": "ah1", "type": "string" }, "encoded": { "description": "Indicate that message raw (encoded) or decoded. Options: encoded=True, decoded=False", "example": false, "type": "boolean" }, "message_ID": { "description": "An identifier for the type of message received.", "example": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd", "type": "string" }, "source": { "description": "The sender; Where is this message from", "example": "autonomy_engine", "type": "string" }, "timestamp": { "description": "Timestamp of message", "example": "2022-11-16T00:00:00Z", "format": "date-time", "type": "string" }, "version": { "description": "Version of comms backbone message format protocol", "example": 2.0, "format": "float", "type": "number" } }, "type": "object" }, "mission_plan": { "properties": { "autonomy_engine_plan_ID": { "description": "Unique identifier for this plangenerated by the Autonomy Engine", "example": 3, "type": "integer" }, "message_type": { "description": "Type of message", "example": "mission_plan", "type": "string" }, "plan": { "items": { "properties": { "action": { "description": "Autonomy Engine's action from `move`, `payload`, `dive`, `send_hits`, `scanline`, `scanpoint`.", "example": "move", "type": "string" }, "activate_payload": { "description": "To activate/deactivate sensor for Autosub Hover-1 --> `MBES` sensor and for EcoSUB --> `Sidescan`", "example": true, "type": "boolean" }, "altitude": { "description": "Altitude of next action", "example": 15.0, "format": "float", "type": "number" }, "depth": { "description": "Depth of next action", "example": 15.0, "format": "float", "type": "number" }, "flight_style": { "description": "Platform-specific modes/flight styles to perform next action", "example": "orbit", "type": "string" }, "latitude_waypoint": { "description": "Next waypoint, x-coordinate", "example": -4.187143188645706, "format": "float", "type": "number" }, "longitude_waypoint": { "description": "Next waypoint, y-coordinate", "example": 50.37072283932642, "format": "float", "type": "number" }, "send_environmental_data": { "description": "To trigger the platform to send list of observations if any found", "example": false, "type": "boolean" } }, "required": [ "latitude_waypoint", "longitude_waypoint" ], "type": "object" }, "type": "array" }, "platform_ID": { "description": "Unique identifier for this platform", "example": 1, "type": "integer" } }, "required": [ "message_type", "autonomy_engine_plan_ID", "platform_ID", "plan" ], "type": "object" }, "observation": { "properties": { "additional_data": { "description": "Placeholder field for any additional data", "example": { "sensor_payload": false } }, "message_type": { "description": "Type of message", "example": "observation", "type": "string" }, "platform_ID": { "description": "ID of platform to sending observations", "example": 2, "type": "integer" }, "points_of_interest": { "description": "Points from features of interest identified by platform if any found.", "items": { "properties": { "latitude": { "description": "Identified x-coordinate of point of interest", "example": 178.2, "format": "float", "type": "number" }, "longitude": { "description": "Identified y-coordinate of point of interest", "example": -10.122, "format": "float", "type": "number" }, "quality_of_point": { "description": "Quality/strength of points from features of interest identified by platform.", "example": 0.98, "format": "float", "type": "number" } }, "required": [ "latitude", "longitude" ], "type": "object" }, "type": "array" }, "region_surveyed": { "description": "Region surveyed by given platform. GEOJSON", "example": "", "nullable": true } }, "required": [ "message_type", "platform_ID" ], "type": "object" }, "payload": { "discriminator": { "mapping": { "acknowledgement": "#/components/schemas/acknowledgement", "mission_plan": "#/components/schemas/mission_plan", "observation": "#/components/schemas/observation", "planning_configuration": "#/components/schemas/planning_configuration", "platform_status": "#/components/schemas/platform_status" }, "propertyName": "message_type" }, "oneOf": [ { "$ref": "#/components/schemas/acknowledgement" }, { "$ref": "#/components/schemas/mission_plan" }, { "$ref": "#/components/schemas/observation" }, { "$ref": "#/components/schemas/planning_configuration" }, { "$ref": "#/components/schemas/platform_status" } ] }, "planning_configuration": { "properties": { "exclusion_zones": { "description": "Exclusion zones for all platforms", "items": { "description": "Using GEOJSON, exact 4-point region (rectangle shaped)", "properties": { "geometry_coordinates": { "example": [ [ [ -4.187143188645706, 50.37072283932642 ], [ -4.202697005964865, 50.368816892405874 ], [ -4.203156724702808, 50.365640144076906 ], [ -4.19449868846155, 50.362267670845654 ] ] ], "type": "array" } }, "required": [ "geometry_coordinates" ], "type": "object" }, "type": "array" }, "message_type": { "description": "Type of message", "example": "planning_configuration", "type": "string" }, "planning_config_ID": { "description": "Unique identifier tagged to version of this configuration plan", "example": 3, "type": "integer" }, "squads": { "items": { "properties": { "no_of_platforms": { "description": "Number of platforms", "example": 3, "type": "integer" }, "platforms": { "description": "Squad consists of these platforms", "items": { "properties": { "additional_specs": { "description": "Any addition fields/data to be added here", "example": { "scan_type": "DVL", "swath_width": 10.0 } }, "emergency": { "properties": { "additional_data": { "description": "Any addition fields/data to be added here", "example": {} }, "latitude_waypoint": { "description": "X-coordinate safe place for respective platform", "example": -7.432, "format": "float", "type": "number" }, "longitude_waypoint": { "description": "Y-coordinate safe place for respective platform", "example": 50.365, "format": "float", "type": "number" }, "safe_command": { "description": "Command/Action that is native to respective partner's platform/C2", "enum": [ "go_home", "abort_now", "stop_mission" ], "example": "go_home", "type": "string" }, "target_depth": { "description": "Z-coordinate safe place for respective platform . If platform to NOT stay at depth, key in `0.0`", "example": 10, "format": "float", "type": "number" } }, "required": [ "latitude_waypoint", "longitude_waypoint", "target_depth" ], "type": "object" }, "max_velocity": { "description": "Maximum altitude set for squad.", "example": 0.9, "format": "float", "type": "number" }, "min_altitude": { "description": "Minimum altitude set for squad.", "example": 15.2, "format": "float", "type": "number" }, "min_velocity": { "description": "Minimum velocity set for squad.", "example": 0.1, "format": "float", "type": "number" }, "model": { "example": "reav", "type": "string" }, "platform_ID": { "description": "Identifier for platform", "example": 23, "type": "integer" }, "serial": { "description": "platform serial number", "example": "reav-60", "type": "string" } }, "required": [ "platform_ID", "serial", "model", "emergency", "min_altitude", "min_velocity", "max_velocity" ], "type": "object" }, "type": "array" }, "region_of_interest": { "description": "Using GEOJSON, exact 4-point region (rectangle shaped)", "properties": { "geometry_coordinates": { "example": [ [ [ -4.187143188645706, 50.37072283932642 ], [ -4.202697005964865, 50.368816892405874 ], [ -4.203156724702808, 50.365640144076906 ], [ -4.19449868846155, 50.362267670845654 ] ] ], "type": "array" } }, "required": [ "geometry_coordinates" ], "type": "object" }, "squad_ID": { "description": "Identifier of given squad", "example": 23, "type": "integer" }, "squad_mission_type": { "description": "Mission of given squad: `tracking`, `survey`, `inspection`", "enum": [ "tracking", "survey", "inspection" ], "example": "survey", "type": "string" }, "squad_state": { "description": "In execution, Waiting.. <define further>", "example": false, "type": "string" } }, "required": [ "squad_ID", "no_of_platforms", "platforms", "squad_mission_type", "squad_state" ], "type": "object" }, "type": "array" } }, "required": [ "message_type", "planning_config_ID", "squads", "exclusion_zones" ], "type": "object" }, "platform_status": { "properties": { "altitude": { "description": "Target altitude in metres", "example": 20, "format": "float", "type": "number" }, "autonomy_engine_plan_ID": { "description": "Last mission plan ID (according to Autonomy Engine's mission plan number sent) executed by platform", "example": 1, "type": "integer" }, "battery_remaining_capacity": { "description": "Battery remaining % provided by respective C2", "example": 80.2, "format": "float", "type": "number" }, "current_pitch": { "description": "Current pitch of platform", "example": -4.0, "format": "float", "type": "number" }, "depth": { "default": 0, "description": "Target depth in metres", "example": 50, "format": "float", "type": "number" }, "heading": { "description": "Angular distance relative to north, usually 000\u00b0 at north, clockwise through 359\u00b0, in degrees", "example": 124.3, "format": "float", "type": "number" }, "health_status": { "description": "Health status extracted by respective platform if any diagnosis is available to check sensors", "example": "Warning", "type": "string" }, "latitude": { "description": "Latitude in decimal degrees.", "example": 178.2, "format": "float", "type": "number" }, "localisation_error": { "description": "Localisation error at last USBL update.", "example": 0.000129, "format": "float", "type": "number" }, "longitude": { "description": "Longitude in decimal degrees.", "example": -10.122, "format": "float", "type": "number" }, "message_type": { "description": "Type of message", "example": "platform_status", "type": "string" }, "mission_action_ID": { "description": "", "example": 1, "type": "integer" }, "mission_track_ID": { "description": "Track number - stage in mission (e.g. 4 --> Waypoint 3 to Waypoint 4)", "example": 4, "type": "integer" }, "platform_ID": { "description": "Identifier for platform", "example": 1, "type": "integer" }, "platform_state": { "description": "Current state executed by platform. E.g. STOP, IDLE, ABORT.", "example": "ABORT", "type": "string" }, "platform_timestamp": { "description": "Timestamp for onboard platform status message", "example": "2022-12-21T00:00:00Z", "format": "date-time", "type": "string" }, "range_to_go": { "description": "Estimated distance to reach next waypoint", "example": 124.3, "format": "float", "type": "number" }, "sensor_config": { "description": "Scanning sensor on platform available to be controlled by the Autonomy Engine", "properties": { "additional_data": { "description": "Any addition fields/data to be added here", "example": { "payload": [ 1.2, 434 ] } }, "sensor_on": { "description": "Sensor switched on (True) or off (False)", "example": true, "type": "boolean" }, "sensor_serial": { "description": "serial number of sensor", "example": "mbes-002a", "type": "string" } }, "type": "object" }, "speed_over_ground": { "description": "", "example": 124.3, "format": "float", "type": "number" }, "status_source": { "description": "Indicate if this status message is from the platform or USBL", "enum": [ "usbl", "onboard_platform" ], "example": "usbl", "type": "string" }, "thrust_applied": { "description": "", "example": 124.3, "format": "float", "type": "number" }, "transmission_mode": { "description": "Mode in which status message was transmitted when on the surface (e.g. iridium/wifi) or underwater (e.g. acoustics)", "enum": [ "acoustics", "iridium", "wifi", "starlink" ], "example": "wifi", "type": "string" }, "usbl_fix_seconds_ago": { "description": "USBL Fix received x second ago.", "example": 10.0, "format": "float", "type": "number" }, "water_current_velocity": { "description": "", "example": 124.3, "format": "float", "type": "number" } }, "required": [ "message_type", "platform_ID", "status_source", "platform_timestamp", "latitude", "longitude" ], "type": "object" } } } }