diff --git a/README.md b/README.md index ca156836066607d140b51282133095c2c3a98c86..b1f2d1c90853af594d99b992e853f8e9ae283e9e 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ # Message Formats (DRAFT) -Consists of all messages transferred into and out of the Communications Backbone. Message type schemas will be developed once reviewing each vehicle's data and statuses defined by each partner. +Consists of all messages transferred into and out of the Communications Backbone. Message type schemas will be developed once reviewing each platform's data and statuses defined by each partner. ## Types of Messages by Software Component ### 1/ Autonomy Engine #### Transmit -* mission plan _(sent per vehicle)_ +* mission plan _(sent per platform)_ * TBD: * Will emergency commands be sent via the autonomy engine (from the GUI) or directly to the C2s? @@ -14,7 +14,7 @@ Consists of all messages transferred into and out of the Communications Backbone * decoded ecosub status message * decoded reav status message * decoded autosub-hover status message -* decoded ecosub survey data _(from squad 1 vehicles)_ +* decoded ecosub survey data _(from squad 1 platforms)_ ---------------------------------- @@ -65,8 +65,8 @@ Consists of all messages transferred into and out of the Communications Backbone * encoded autosub status message * encoded ecosub survey data * TBD: - * are there acknowledgment messages from vehicles? - * how are we receiving beacon messages per vehicle? + * are there acknowledgment messages from platforms? + * how are we receiving beacon messages per platform? #### Receive * compiled ecosub mission plan diff --git a/__init__.py b/__init__.py index 22406df62d6971c8d5ba7f5c05edc8f9f702ebdd..2de03b19ceda158e0f790d7af4e655c98c573654 100644 --- a/__init__.py +++ b/__init__.py @@ -13,7 +13,7 @@ app = Flask(__name__) api = Api(app) message_types = [ - "vehicle_status" + "platform_status" ] # TODO: Add full range of message types once scoped out message_header_schema = api.model( @@ -43,32 +43,32 @@ message_header_schema = api.model( "type": fields.String( required=True, description="Type of message", - example="vehicle_status", + example="platform_status", ), }, ) -vehicle_schema = api.model( - "VehicleSchema", +platform_schema = api.model( + "PlatformSchema", { - "vehicle_ID": fields.Integer( + "platform_ID": fields.Integer( required=True, - description="vehicle serial number", + description="unique identifier for platform", example="ah-1", ), "serial": fields.Integer( required=True, - description="vehicle serial number", + description="platform serial number", example="ah-1", ), "model": fields.Integer( required=True, - description="vehicle serial number", + description="platform serial number", example="ah-1", ), "active": fields.Boolean( required=False, - description="Vehicle in mission", + description="platform in mission", example=True, ), }, diff --git a/autonomy_configuration.py b/autonomy_configuration.py index 3cbadf9d9451594e745209e1ed9941596eecbc17..d2fc29d1b56f12d95294b4c952d503b0cd552c31 100644 --- a/autonomy_configuration.py +++ b/autonomy_configuration.py @@ -1,8 +1,8 @@ """ schemas: configuration sent to Autonomy Engine (i.e. during an emergency, - if a vehicle needs to be removed from the mission planning) + if a platform needs to be removed from the mission planning) """ -from . import api, message_header_schema, vehicle_schema +from . import api, message_header_schema, platform_schema from flask_restx import fields @@ -11,27 +11,28 @@ squad_metadata_schema = api.model( { "squad_ID": fields.Integer( required=True, - description="vehicle serial number", + description="platform serial number", example="ah-1", ), - "no_of_vehicles": fields.Integer( + "no_of_platforms": fields.Integer( required=True, - description="number of vehicle serial number", + description="number of platform serial number", example="ah-1", ), - "vehicles": fields.List( - fields.Nested(vehicle_schema), + "platforms": fields.List( + fields.Nested(platform_schema), required=True, - description="Metadata pf each vehicle", + description="Metadata pf each platform", ), "squad_mission_type": fields.String( required=True, description="Survey or Detail", example="survey", ), - "squad_execution": fields.Boolean( + "squad_state": fields.Boolean( required=True, - description="True if Squad of survey executed by Autonomy Engine", + description="True if given Squad is executing mission type " + + "according to the Autonomy Engine plan", example=False, ), }, @@ -39,7 +40,7 @@ squad_metadata_schema = api.model( constraints_schema = api.model( "ConstraintsSchema", - # TODO: Should this be per vehicle instead of squad? + # TODO: Should this be per platform instead of squad? { "min_altitude": fields.Float( required=True, diff --git a/examples/autonomy_engine/configuration.jsonc b/examples/autonomy_engine/configuration.jsonc index 169d86520ecccc0bcd48bc2c61eec8b9fcb33b0c..e7ef312fc1696301b989576300067e8a6b4a903f 100644 --- a/examples/autonomy_engine/configuration.jsonc +++ b/examples/autonomy_engine/configuration.jsonc @@ -1,7 +1,7 @@ //**************************************************************** // File: config.json (THIS FILE WILL BE IN JSON FORMAT, NOT JSONC) // Description: This file is configured by the respective -// vehicle's C2 if a vehicle is no longer active or change +// platform's C2 if a platform is no longer active or change // a configured value. // // Notes: All comments in this document will be stripped out @@ -24,24 +24,24 @@ } }, "survey_team": { - "no_of_vehicles": 3, // int - "vehicles": [ + "no_of_platforms": 3, // int + "platforms": [ { "id": 1, // int "platform": "ecosub", // str - "vehicle_serial": "eco101", // str + "platform_serial": "eco101", // str "active": true // bool }, { "id": 2, "platform": "ecosub", // str - "vehicle_serial": "eco-102", // str + "platform_serial": "eco-102", // str "active": true // bool }, { "id": 3, // int "platform": "ecosub", // str - "vehicle_serial": "ecosub3", // str + "platform_serial": "ecosub3", // str "active": true // bool } ], @@ -51,12 +51,12 @@ }, "detail_team": { "execute_stage": true, // bool - "no_of_vehicles": 1, // int - "vehicles": [ + "no_of_platforms": 1, // int + "platforms": [ { "id": 1, // int "platform": "autosub-hover", // str - "vehicle_serial": "ah1", // str + "platform_serial": "ah1", // str "active": true // bool } ], diff --git a/vehicle_status.py b/platform_status.py similarity index 65% rename from vehicle_status.py rename to platform_status.py index 9e9cc794775d6266652d41e8acb8c20780b1c3b4..703c401843d891c0fe1a3c8a636ac57c55846eb6 100644 --- a/vehicle_status.py +++ b/platform_status.py @@ -1,19 +1,61 @@ """ - schema: vehicle-specific decoded status message (DRAFT) + schema: platform-specific decoded status message (DRAFT) """ -from . import message_header_schema, vehicle_schema, api +from . import message_header_schema, platform_schema, api from flask_restx import fields +# TODO: Discuss nomenclature > platform or vehicle? -vehicle_status_message_schema = api.model( - "VehicleStatusMessage", +gps_schema = api.model( + "GPS", + { + "gps_source": fields.Float( # TODO: TBD with partners + required=False, + description="Source of gps position. E.g. Beacon", + example="internal", + ), + "latitude_type": fields.String( + required=False, + description="", + example="", + ), + "longitude_type": fields.String( + required=False, + description="", + example="", + ), + "latitude": fields.Float( + required=False, + description="Latitude in <insert units>", + example="", + ), + "longitude": fields.Float( + required=False, + description="Longitude in <insert units>", + example="", + ), + "depth": fields.Float( + required=False, + description="", + example="", + ), + "gps_fix_seconds_ago": fields.Float( + required=False, + description="", + example="", + ), + }, +) + +platform_status_message_schema = api.model( + "PlatformStatusMessage", { "message": fields.Nested( message_header_schema, required=True, description="Message header", ), - "platform": fields.Nested(vehicle_schema) + "platform": fields.Nested(platform_schema), "time": fields.String( required=True, description="Timestamp of message", @@ -25,12 +67,14 @@ vehicle_status_message_schema = api.model( example="", ), "platform_state": fields.String( + # TODO: Define dictionary with potential STATES of each platform required=True, - description="", - example="SAFETY_STOP", + description="Current state executed by platform. E.g. " + + "STOP, IDLE, ABORT.", + example="IDLE", ), "mission_track_number": fields.Integer( - required=True, + required=False, description=( "Track number - stage in mission (e.g. " + "4 --> Waypoint 3 to Waypoint 4)" @@ -42,43 +86,13 @@ vehicle_status_message_schema = api.model( description="Estimated distance to reach next waypoint", example=124.3, ), - "vehicle_state": fields.String( - required=True, - description="Current state executed by vehicle. E.g. " - + "STOP, IDLE, ABORT.", - example="IDLE", - ), "c2_health_status": fields.String( - required=True, - description="Health status determined by vehicle's C2 " - + "checks on sensors", + required=False, + description="Health status extracted by respective platform's C2 " + + "if any diagnosis available checks on sensors", example="Warning", ), - "gps_source": fields.Float( - required=True, - description="Source of gps position. E.g. Beacon", - example="internal", - ), - "latitude": fields.Float( - required=True, - description="Latitude in <insert units>", - example="", - ), - "longitude": fields.Float( - required=True, - description="Longitude in <insert units>", - example="", - ), - "depth": fields.Float( - required=True, - description="", - example="", - ), - "gps_fix_seconds_ago": fields.String( - required=True, - description="", - example="", - ), + "gps_data": fields.Nested(gps_schema), "battery_voltage": fields.Float( required=True, description="Volts", @@ -107,4 +121,4 @@ vehicle_status_message_schema = api.model( }, ) -# TBD: Do we append beacon positions with vehicle positions? +# TBD: Do we append beacon positions with platform positions?