Verified Commit a0ae5a20 authored by Dan Jones's avatar Dan Jones
Browse files

feat: add waypoint status message for dry-run

Rather than sending a goto to the platform the
sfmc-adapter will publish a waypoint_status message
which the c2-adapter can read and add to the
positions service as a simulated waypoint
parent bab76ac7
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
"type": "Point", "type": "Point",
"coordinates": [ "coordinates": [
-10.122, -10.122,
178.2, 78.2,
50.0, 50.0,
20 20
] ]
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
"type": "Point", "type": "Point",
"coordinates": [ "coordinates": [
-10.5, -10.5,
178.5 78.5
] ]
} }
} }
......
{
"header":{
"message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
"timestamp": "2024-09-05T00:00:00Z",
"version": "v2.0.0-beta.1",
"source": "noc-sfmc",
"destination": "mas-dt.noc.slocum.unit_xxx.from_platform.platform_status",
"delivery_type": "publish",
"encoded": false
},
"payload":{
"message_type": "waypoint_status",
"platform_ID": "unit_xxx",
"platform_timestamp": "2024-09-05T00:00:00Z",
"status_source": "simulated",
"autonomy_engine_plan_ID": 1,
"mission_plan_ID": 1,
"mission_track_ID": 4,
"waypoint": {
"type": "Point",
"coordinates": [-10.122, 78.2, 50.0, 20.0]
}
}
}
...@@ -5,9 +5,9 @@ payload_schema = { ...@@ -5,9 +5,9 @@ payload_schema = {
"alert": "#/components/schemas/alert", "alert": "#/components/schemas/alert",
"instruction_set": "#/components/schemas/instruction_set", "instruction_set": "#/components/schemas/instruction_set",
"mission_plan": "#/components/schemas/mission_plan", "mission_plan": "#/components/schemas/mission_plan",
"mission_plan_encoded": "#/components/schemas/" + "mission_plan_encoded", "mission_plan_encoded": "#/components/schemas/mission_plan_encoded",
"observation": "#/components/schemas/observation", "observation": "#/components/schemas/observation",
"observation_encoded": "#/components/schemas/" + "observation_encoded", "observation_encoded": "#/components/schemas/observation_encoded",
"planning_configuration": "#/components/schemas/" "planning_configuration": "#/components/schemas/"
+ "planning_configuration", + "planning_configuration",
"platform_status": "#/components/schemas/platform_status", "platform_status": "#/components/schemas/platform_status",
...@@ -15,7 +15,8 @@ payload_schema = { ...@@ -15,7 +15,8 @@ payload_schema = {
+ "platform_status_encoded", + "platform_status_encoded",
"acknowledgement": "#/components/schemas/acknowledgement", "acknowledgement": "#/components/schemas/acknowledgement",
"survey": "#/components/schemas/survey", "survey": "#/components/schemas/survey",
"survey_encoded": "#/components/schemas/" + "survey_encoded", "survey_encoded": "#/components/schemas/survey_encoded",
"waypoint_status": "#/components/schemas/waypoint_status",
}, },
}, },
"oneOf": [ "oneOf": [
...@@ -31,5 +32,6 @@ payload_schema = { ...@@ -31,5 +32,6 @@ payload_schema = {
{"$ref": "#/components/schemas/platform_status_encoded"}, {"$ref": "#/components/schemas/platform_status_encoded"},
{"$ref": "#/components/schemas/survey"}, {"$ref": "#/components/schemas/survey"},
{"$ref": "#/components/schemas/survey_encoded"}, {"$ref": "#/components/schemas/survey_encoded"},
{"$ref": "#/components/schemas/waypoint_status"},
], ],
} }
...@@ -25,27 +25,14 @@ sensor_schema = { ...@@ -25,27 +25,14 @@ sensor_schema = {
}, },
} }
platform_status_schema = { platform_status_core_fields_schema = {
"type": "object", "type": "object",
"properties": { "properties": {
"message_type": {
"type": "string",
"description": "Type of message",
"example": "platform_status",
"enum": ["platform_status"],
},
"platform_ID": { "platform_ID": {
"type": "string", "type": "string",
"description": "Unique identifier for this platform", "description": "Unique identifier for this platform",
"example": "reav-x-1", "example": "reav-x-1",
}, },
"status_source": {
"type": "string",
"enum": ["usbl", "onboard_platform"],
"description": "Indicate if this status message is from the"
+ " platform or USBL",
"example": "usbl",
},
"transmission_mode": { "transmission_mode": {
"type": "string", "type": "string",
"enum": ["acoustics", "iridium", "wifi", "starlink"], "enum": ["acoustics", "iridium", "wifi", "starlink"],
...@@ -172,7 +159,41 @@ platform_status_schema = { ...@@ -172,7 +159,41 @@ platform_status_schema = {
}, },
"sensor_config": sensor_schema, "sensor_config": sensor_schema,
}, },
}
platform_status_schema = {
"type": "object",
"properties": {
"message_type": {
"type": "string",
"description": "Type of message",
"example": "platform_status",
"enum": ["platform_status"],
},
"status_source": {
"type": "string",
"enum": ["usbl", "onboard_platform", "simulated"],
"description": "Indicate if this status message is from the"
+ " platform or USBL",
"example": "usbl",
},
},
"allOf": [platform_status_core_fields_schema],
"oneOf": [ "oneOf": [
{
"type": "object",
"properties": {
"no_position_reason": {
"type": "string",
"enum": ["missing", "invalid", "old", "poor_fix"],
"description": "Why position data is unavailable",
"example": "invalid",
},
},
"required": [
"no_position_reason",
],
},
{ {
"type": "object", "type": "object",
"properties": { "properties": {
...@@ -254,3 +275,104 @@ platform_status_schema = { ...@@ -254,3 +275,104 @@ platform_status_schema = {
"platform_timestamp", "platform_timestamp",
], ],
} }
waypoint_status_schema = {
"type": "object",
"properties": {
"message_type": {
"type": "string",
"description": "Type of message",
"example": "waypoint_status",
"enum": ["waypoint_status"],
},
"status_source": {
"type": "string",
"enum": ["onboard_platform", "simulated", "autonomy"],
"description": "Indicate if this status message is from the"
+ " platform or USBL",
"example": "usbl",
},
},
"allOf": [platform_status_core_fields_schema],
"oneOf": [
{
"type": "object",
"properties": {
"position": {
"$ref": "https://geojson.org/schema/Point.json",
},
"waypoint": {
"$ref": "https://geojson.org/schema/Point.json",
},
},
"required": [
"waypoint",
],
},
{
"type": "object",
"properties": {
"latitude": {
"type": "number",
"format": "float",
"description": "Latitude (Y-coordinate) in decimal degrees.",
"example": 178.2,
},
"longitude": {
"type": "number",
"format": "float",
"description": "Longitude (X-coordinate) in decimal degrees.",
"example": -10.122,
},
"depth": {
"type": "number",
"format": "float",
"description": "Target depth in metres",
"example": 50.0,
"default": 0.0,
},
"altitude": {
"type": "number",
"format": "float",
"description": "Target altitude in metres",
"example": 20.0,
},
"waypoint_latitude": {
"type": "number",
"format": "float",
"description": "Latitude (Y-coordinate) in decimal degrees.",
"example": 178.2,
},
"waypoint_longitude": {
"type": "number",
"format": "float",
"description": "Longitude (X-coordinate) in decimal degrees.",
"example": -10.122,
},
"waypoint_depth": {
"type": "number",
"format": "float",
"description": "Target depth in metres",
"example": 50.0,
"default": 0.0,
},
"waypoint_altitude": {
"type": "number",
"format": "float",
"description": "Target altitude in metres",
"example": 20.0,
},
},
"required": [
"waypoint_latitude",
"waypoint_longitude",
],
},
],
"required": [
"message_type",
"platform_ID",
"status_source",
"platform_timestamp",
],
}
...@@ -6,7 +6,7 @@ from formats.observation import observation_schema ...@@ -6,7 +6,7 @@ from formats.observation import observation_schema
from formats.observation_encoded import observation_encoded_schema from formats.observation_encoded import observation_encoded_schema
from formats.payload import payload_schema from formats.payload import payload_schema
from formats.planning_configuration import planning_configuration_schema from formats.planning_configuration import planning_configuration_schema
from formats.platform_status import platform_status_schema from formats.platform_status import platform_status_schema, waypoint_status_schema
from formats.platform_status_encoded import platform_status_encoded_schema from formats.platform_status_encoded import platform_status_encoded_schema
from formats.survey import survey_schema from formats.survey import survey_schema
from formats.survey_encoded import survey_encoded_schema from formats.survey_encoded import survey_encoded_schema
...@@ -74,6 +74,7 @@ def get_swagger_config(reload=False): ...@@ -74,6 +74,7 @@ def get_swagger_config(reload=False):
"alert": alert_schema, "alert": alert_schema,
"instruction_set": instruction_set_schema, "instruction_set": instruction_set_schema,
"config_file": config_file_schema, "config_file": config_file_schema,
"waypoint_status": waypoint_status_schema,
} }
}, },
} }
......
...@@ -1820,7 +1820,8 @@ ...@@ -1820,7 +1820,8 @@
"platform_status": "#/components/schemas/platform_status", "platform_status": "#/components/schemas/platform_status",
"platform_status_encoded": "#/components/schemas/platform_status_encoded", "platform_status_encoded": "#/components/schemas/platform_status_encoded",
"survey": "#/components/schemas/survey", "survey": "#/components/schemas/survey",
"survey_encoded": "#/components/schemas/survey_encoded" "survey_encoded": "#/components/schemas/survey_encoded",
"waypoint_status": "#/components/schemas/waypoint_status"
}, },
"propertyName": "message_type" "propertyName": "message_type"
}, },
...@@ -1860,6 +1861,9 @@ ...@@ -1860,6 +1861,9 @@
}, },
{ {
"$ref": "#/components/schemas/survey_encoded" "$ref": "#/components/schemas/survey_encoded"
},
{
"$ref": "#/components/schemas/waypoint_status"
} }
] ]
}, },
...@@ -2207,7 +2211,183 @@ ...@@ -2207,7 +2211,183 @@
"type": "object" "type": "object"
}, },
"platform_status": { "platform_status": {
"allOf": [
{
"properties": {
"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_output": {
"description": "Battery output in kW",
"example": 80.2,
"format": "float",
"type": "number"
},
"battery_remaining_capacity": {
"description": "Battery remaining % provided by respective C2",
"example": 80.2,
"format": "float",
"type": "number"
},
"endurance": {
"description": "Estimate of hours of operation remaining based on present output or performance",
"example": 7.4,
"format": "float",
"type": "number"
},
"fuel_remaining_capacity": {
"description": "Percentage remaining capacity",
"example": 80.2,
"format": "float",
"type": "number"
},
"fuel_volume": {
"description": "Litres of liquid fuel",
"example": 12.5,
"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 where 0 is OK, 1 is platform has an ERROR",
"example": false,
"type": "boolean"
},
"localisation_east_error": {
"description": "Difference in EAST between deadreckoningand USBL update.",
"example": 0.000129,
"format": "float",
"type": "number"
},
"localisation_north_error": {
"description": "Difference in NORTH between deadreckoning and USBL update.",
"example": 0.000129,
"format": "float",
"type": "number"
},
"mission_plan_ID": {
"description": "Mission plan ID according to platform-C2 system",
"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": "Unique identifier for this platform",
"example": "reav-x-1",
"type": "string"
},
"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
]
},
"type": "object"
},
"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": "Speed over ground",
"example": 124.3,
"format": "float",
"type": "number"
},
"thrust_applied": {
"description": "Thrust applied",
"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": "Water current magnitude and direction",
"example": "124.3NE",
"type": "string"
}
},
"type": "object"
}
],
"oneOf": [ "oneOf": [
{
"properties": {
"no_position_reason": {
"description": "Why position data is unavailable",
"enum": [
"missing",
"invalid",
"old",
"poor_fix"
],
"example": "invalid",
"type": "string"
}
},
"required": [
"no_position_reason"
],
"type": "object"
},
{ {
"properties": { "properties": {
"position": { "position": {
...@@ -2283,64 +2463,6 @@ ...@@ -2283,64 +2463,6 @@
} }
], ],
"properties": { "properties": {
"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_output": {
"description": "Battery output in kW",
"example": 80.2,
"format": "float",
"type": "number"
},
"battery_remaining_capacity": {
"description": "Battery remaining % provided by respective C2",
"example": 80.2,
"format": "float",
"type": "number"
},
"endurance": {
"description": "Estimate of hours of operation remaining based on present output or performance",
"example": 7.4,
"format": "float",
"type": "number"
},
"fuel_remaining_capacity": {
"description": "Percentage remaining capacity",
"example": 80.2,
"format": "float",
"type": "number"
},
"fuel_volume": {
"description": "Litres of liquid fuel",
"example": 12.5,
"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 where 0 is OK, 1 is platform has an ERROR",
"example": false,
"type": "boolean"
},
"localisation_east_error": {
"description": "Difference in EAST between deadreckoningand USBL update.",
"example": 0.000129,
"format": "float",
"type": "number"
},
"localisation_north_error": {
"description": "Difference in NORTH between deadreckoning and USBL update.",
"example": 0.000129,
"format": "float",
"type": "number"
},
"message_type": { "message_type": {
"description": "Type of message", "description": "Type of message",
"enum": [ "enum": [
...@@ -2349,106 +2471,15 @@ ...@@ -2349,106 +2471,15 @@
"example": "platform_status", "example": "platform_status",
"type": "string" "type": "string"
}, },
"mission_plan_ID": {
"description": "Mission plan ID according to platform-C2 system",
"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": "Unique identifier for this platform",
"example": "reav-x-1",
"type": "string"
},
"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
]
},
"type": "object"
},
"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": "Speed over ground",
"example": 124.3,
"format": "float",
"type": "number"
},
"status_source": { "status_source": {
"description": "Indicate if this status message is from the platform or USBL", "description": "Indicate if this status message is from the platform or USBL",
"enum": [ "enum": [
"usbl", "usbl",
"onboard_platform" "onboard_platform",
"simulated"
], ],
"example": "usbl", "example": "usbl",
"type": "string" "type": "string"
},
"thrust_applied": {
"description": "Thrust applied",
"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": "Water current magnitude and direction",
"example": "124.3NE",
"type": "string"
} }
}, },
"required": [ "required": [
...@@ -2628,6 +2659,267 @@ ...@@ -2628,6 +2659,267 @@
"is_binary" "is_binary"
], ],
"type": "object" "type": "object"
},
"waypoint_status": {
"allOf": [
{
"properties": {
"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_output": {
"description": "Battery output in kW",
"example": 80.2,
"format": "float",
"type": "number"
},
"battery_remaining_capacity": {
"description": "Battery remaining % provided by respective C2",
"example": 80.2,
"format": "float",
"type": "number"
},
"endurance": {
"description": "Estimate of hours of operation remaining based on present output or performance",
"example": 7.4,
"format": "float",
"type": "number"
},
"fuel_remaining_capacity": {
"description": "Percentage remaining capacity",
"example": 80.2,
"format": "float",
"type": "number"
},
"fuel_volume": {
"description": "Litres of liquid fuel",
"example": 12.5,
"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 where 0 is OK, 1 is platform has an ERROR",
"example": false,
"type": "boolean"
},
"localisation_east_error": {
"description": "Difference in EAST between deadreckoningand USBL update.",
"example": 0.000129,
"format": "float",
"type": "number"
},
"localisation_north_error": {
"description": "Difference in NORTH between deadreckoning and USBL update.",
"example": 0.000129,
"format": "float",
"type": "number"
},
"mission_plan_ID": {
"description": "Mission plan ID according to platform-C2 system",
"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": "Unique identifier for this platform",
"example": "reav-x-1",
"type": "string"
},
"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
]
},
"type": "object"
},
"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": "Speed over ground",
"example": 124.3,
"format": "float",
"type": "number"
},
"thrust_applied": {
"description": "Thrust applied",
"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": "Water current magnitude and direction",
"example": "124.3NE",
"type": "string"
}
},
"type": "object"
}
],
"oneOf": [
{
"properties": {
"position": {
"$ref": "#/components/schemas/geojson.org.schema.Point.json"
},
"waypoint": {
"$ref": "#/components/schemas/geojson.org.schema.Point.json"
}
},
"required": [
"waypoint"
],
"type": "object"
},
{
"properties": {
"altitude": {
"description": "Target altitude in metres",
"example": 20.0,
"format": "float",
"type": "number"
},
"depth": {
"default": 0.0,
"description": "Target depth in metres",
"example": 50.0,
"format": "float",
"type": "number"
},
"latitude": {
"description": "Latitude (Y-coordinate) in decimal degrees.",
"example": 178.2,
"format": "float",
"type": "number"
},
"longitude": {
"description": "Longitude (X-coordinate) in decimal degrees.",
"example": -10.122,
"format": "float",
"type": "number"
},
"waypoint_altitude": {
"description": "Target altitude in metres",
"example": 20.0,
"format": "float",
"type": "number"
},
"waypoint_depth": {
"default": 0.0,
"description": "Target depth in metres",
"example": 50.0,
"format": "float",
"type": "number"
},
"waypoint_latitude": {
"description": "Latitude (Y-coordinate) in decimal degrees.",
"example": 178.2,
"format": "float",
"type": "number"
},
"waypoint_longitude": {
"description": "Longitude (X-coordinate) in decimal degrees.",
"example": -10.122,
"format": "float",
"type": "number"
}
},
"required": [
"waypoint_latitude",
"waypoint_longitude"
],
"type": "object"
}
],
"properties": {
"message_type": {
"description": "Type of message",
"enum": [
"waypoint_status"
],
"example": "waypoint_status",
"type": "string"
},
"status_source": {
"description": "Indicate if this status message is from the platform or USBL",
"enum": [
"onboard_platform",
"simulated",
"autonomy"
],
"example": "usbl",
"type": "string"
}
},
"required": [
"message_type",
"platform_ID",
"status_source",
"platform_timestamp"
],
"type": "object"
} }
} }
}, },
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment