Commit 6d9a565f authored by Trishna Saeharaseelan's avatar Trishna Saeharaseelan
Browse files

refactor: terms used and optional fields

parent ff164b73
# 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
......
......@@ -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,
),
},
......
"""
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,
......
//****************************************************************
// 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
}
],
......
"""
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?
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