Commit f7ad53ea authored by Trishna Saeharaseelan's avatar Trishna Saeharaseelan
Browse files

fix: examples for hydrosurv and correct SOAR_README.md

parent 42a832fe
This commit is part of merge request !2. Comments created here will be created in the context of that merge request.
...@@ -18,7 +18,8 @@ action_schema = api.model( ...@@ -18,7 +18,8 @@ action_schema = api.model(
), ),
"flight_style": fields.String( "flight_style": fields.String(
required=False, required=False,
description="Platform-specific modes/flight styles to perform next action", description="Platform-specific modes/flight styles to perform"
+ " next action",
example="orbit", example="orbit",
), ),
"latitude_waypoint": fields.Float( "latitude_waypoint": fields.Float(
...@@ -49,17 +50,8 @@ action_schema = api.model( ...@@ -49,17 +50,8 @@ action_schema = api.model(
), ),
"send_environmental_data": fields.Boolean( "send_environmental_data": fields.Boolean(
required=False, required=False,
description="To trigger the platform to send list of observations if any found", description="To trigger the platform to send list of observations"
example=False, + " if any found",
),
"scanline": fields.Boolean(
required=False,
description="To trigger the platform to scan-line",
example=False,
),
"scanpoint": fields.Boolean(
required=False,
description="To trigger the platform to send list of observations if any found",
example=False, example=False,
), ),
}, },
......
""" """
schema: platform-specific decoded status message (DRAFT) schema: platform-specific decoded status message (DRAFT)
""" """
from . import full_message_schema, platform_schema, api from . import full_message_schema, api
from flask_restx import fields from flask_restx import fields
...@@ -22,17 +22,20 @@ observation_schema = api.model( ...@@ -22,17 +22,20 @@ observation_schema = api.model(
# properties of each observation? # properties of each observation?
"points_of_interest": fields.Float( "points_of_interest": fields.Float(
required=False, required=False,
description="Points from features of interest identified by platform if any found. DEFINE FORMAT.", description="Points from features of interest identified by"
+ " platform if any found. DEFINE FORMAT.",
example="", example="",
), ),
"region_surveyed": fields.Float( "region_surveyed": fields.Float(
required=False, required=False,
description="Region surveyed by given platform. DEFINE FORMAT. GEOJSON?", description="Region surveyed by given platform. DEFINE FORMAT."
+ " GEOJSON?",
example="", example="",
), ),
"quality_of_points": fields.Float( "quality_of_points": fields.Float(
required=False, required=False,
description="Quality/strength of points from features of interest identified by platform. DEFINE FORMAT.", description="Quality/strength of points from features of interest"
+ " identified by platform. DEFINE FORMAT.",
example=0.98, example=0.98,
), ),
"additional_data": fields.Raw( "additional_data": fields.Raw(
......
...@@ -11,7 +11,8 @@ region_schema = api.model( ...@@ -11,7 +11,8 @@ region_schema = api.model(
{ {
"region": fields.Raw( "region": fields.Raw(
required=True, required=True,
description="Using GEOJSON, exact region of interest in rectangle format polygon", description="Using GEOJSON, exact region of interest in rectangle"
+ " format polygon",
example={ example={
"type": "FeatureCollection", "type": "FeatureCollection",
"features": [ "features": [
...@@ -56,7 +57,8 @@ squad_metadata_schema = api.model( ...@@ -56,7 +57,8 @@ squad_metadata_schema = api.model(
), ),
"squad_mission_type": fields.String( "squad_mission_type": fields.String(
required=True, required=True,
description="Mission of given squad: `tracking`, `survey`, `inspection`", description="Mission of given squad: `tracking`, `survey`"
+ ", `inspection`",
example="survey", example="survey",
), ),
"squad_state": fields.Boolean( "squad_state": fields.Boolean(
......
""" """
schema: platform-specific decoded status message (DRAFT) schema: platform-specific decoded status message (DRAFT)
""" """
from . import full_message_schema, platform_schema, api from . import full_message_schema, api
from flask_restx import fields from flask_restx import fields
gps_schema = api.model( gps_schema = api.model(
...@@ -9,7 +9,10 @@ gps_schema = api.model( ...@@ -9,7 +9,10 @@ gps_schema = api.model(
{ {
"gps_source": fields.Float( # TODO: TBD with partners "gps_source": fields.Float( # TODO: TBD with partners
required=False, required=False,
description="Source of gps position. E.g. USBL (external), platform itself (internal)", description=(
"Source of gps position. E.g. USBL (external),"
+ "platform itself (internal)"
),
example="internal", example="internal",
), ),
"latitude_type": fields.String( "latitude_type": fields.String(
...@@ -47,12 +50,17 @@ gps_schema = api.model( ...@@ -47,12 +50,17 @@ gps_schema = api.model(
) )
sensor_schema = api.model( sensor_schema = api.model(
"Sensor", "SensorSchema",
{ {
"sensor_name": fields.String( "sensor_ID": fields.Integer(
required=True,
description="unique identifier for platform",
example=2,
),
"serial": fields.String(
required=False, required=False,
description="Name of sensor (e.g. MBES for AH1 and SideScan for Ecosub", description="serial number of sensor",
example="MBES", example="mbes-001",
), ),
"sensor_status": fields.Boolean( "sensor_status": fields.Boolean(
required=False, required=False,
...@@ -61,11 +69,12 @@ sensor_schema = api.model( ...@@ -61,11 +69,12 @@ sensor_schema = api.model(
), ),
"additional_data": fields.Raw( "additional_data": fields.Raw(
required=False, required=False,
description="Add any additional sensor-related data here.", description="Any addition fields/data to be added here",
example={"sensor_loadtime_seconds": 30.0},
), ),
}, },
) )
platform_status_message_schema = api.model( platform_status_message_schema = api.model(
"platformStatusMessage", "platformStatusMessage",
{ {
...@@ -74,7 +83,17 @@ platform_status_message_schema = api.model( ...@@ -74,7 +83,17 @@ platform_status_message_schema = api.model(
required=True, required=True,
description="Message header", description="Message header",
), ),
"platform": fields.Nested(platform_schema), "platform_ID": fields.Integer(
required=True,
description="unique identifier for platform",
example=1,
),
"active": fields.Boolean(
required=False,
description="When a platform is in deployment (executing a"
+ " mission plan) this should be True",
example=True,
),
"platform_state": fields.String( "platform_state": fields.String(
# TODO: Define dictionary with potential STATES of each platform # TODO: Define dictionary with potential STATES of each platform
required=False, required=False,
...@@ -84,7 +103,8 @@ platform_status_message_schema = api.model( ...@@ -84,7 +103,8 @@ platform_status_message_schema = api.model(
), ),
"autonomy_plan_ID": fields.Integer( "autonomy_plan_ID": fields.Integer(
required=False, required=False,
description="Last mission plan ID (according to Autonomy Engine's mission plan number) executed by platform", description="Last mission plan ID (according to Autonomy Engine's"
+ " mission plan number) executed by platform",
example=1, example=1,
), ),
"mission_track_ID": fields.Integer( "mission_track_ID": fields.Integer(
...@@ -127,9 +147,8 @@ platform_status_message_schema = api.model( ...@@ -127,9 +147,8 @@ platform_status_message_schema = api.model(
example="Warning", example="Warning",
), ),
"gps_data": fields.List( "gps_data": fields.List(
fields.Nested( fields.Nested(gps_schema), # TODO: TBD Do we want a list of
gps_schema # gps readings to allow > 1 reading i.e. platform + usbl
), # TODO: TBD Do we want a list of gps readings to allow > 1 reading i.e. platform + usbl
required=True, required=True,
description="Metadata pf each platform", description="Metadata pf each platform",
), ),
...@@ -145,7 +164,8 @@ platform_status_message_schema = api.model( ...@@ -145,7 +164,8 @@ platform_status_message_schema = api.model(
), ),
"battery_remaining_capacity": fields.Float( "battery_remaining_capacity": fields.Float(
required=True, required=True,
description="Battery remaining capacity % provided by respective platform/C2.", description="Battery remaining capacity % provided by respective"
+ " platform/C2.",
example=80.0, example=80.0,
), ),
"sensor_config": fields.Nested( "sensor_config": fields.Nested(
......
...@@ -3,29 +3,120 @@ Squad of Adaptive Robots Project ...@@ -3,29 +3,120 @@ Squad of Adaptive Robots Project
----------------------------------- -----------------------------------
## Message Data Flow Summary ## Message Data Flow Summary
| Partner | Message Type | Source | Destination | Via Comms Backbone? | Contains Serialized Vehicle-Specific File? | | Partner | Message Type | Source | Destination | Via Comms Backbone? | Contains Serialized Vehicle-Specific File? | Comment |
| ------------ | ---------------------- | --------------------------- | --------------------------- | ------------------- | ------------------------------------------ | | --------------------- | ------------------------ | --------------------- | ------------------------------------------ | ------------------- | ------------------------------------------ | ---------------------------------------------------------------------------------------- |
| RHU | platform status | C2’s (Hydrosurv/Ecosub/Ah1) | Autonomy Engine | Yes | No | | Hydrosurv (reav) | platform status-compiled | Reav-60 | Hydrosurv Adapter | No | Yes | N/A |
| RHU | mission plan | Autonomy Engine | C2’s (Hydrosurv/Ecosub/Ah1) | Yes | No | | Hydrosurv (reav) | platform status | Hydrosurv Adapter | Autonomy Engine | Yes | No | N/A |
| RHU | planning configuration | GUI | Autonomy Engine | Yes | No | | Hydrosurv (reav) | mission plan | Autonomy Engine | Hydrosurv Adapter | Yes | No | N/A |
| RHU | observation | Ecosub C2 | Autonomy Engine | Yes | No | | Hydrosurv (reav) | mission plan-compiled | Hydrosurv Adapter | Reav-60 | No | Yes | N/A |
| Hydro-Surv | platform status | Reav-60 | Hydrosurv C2 | No | Yes | | Hydrosurv (reav) | acknowledgement | Hydrosurv Adapter | Comms Backbone (Audit) | Yes | No | When hydrosurv adapter has (a) Received, (b) Sent Plan to Reav, and (c) Executed by Reav |
| Hydro-Surv | platform status | Hydrosurv C2 | Autonomy Engine | Yes | No | | RHU (autonomy engine) | platform status | C2’s Hydrosurv/Ecosub | Autonomy Engine | Yes | No | N/A |
| Hydro-Surv | mission plan | Autonomy Engine | Hydrosurv C2 | Yes | No | | RHU (autonomy engine) | mission plan | Autonomy Engine | C2’s Hydrosurv/Ecosub | Yes | No | N/A |
| Hydro-Surv | mission plan | Hydrosurv C2 | Reav-60 | No | Yes | | RHU (autonomy engine) | planning configuration | GUI | Autonomy Engine | Yes | No | N/A |
| Hydro-Surv | acknowledgement | Hydrosurv C2 | Comms Backbone (Audit) | Yes | No | | RHU (autonomy engine) | observation | Ecosub C2 | Autonomy Engine | Yes | No | N/A |
| Planet Ocean | platform status | Ecosub | Hydrosurv Adapter | No | Yes | | RHU (autonomy engine) | survey progress | Ecosub/AH1 C2 | Autonomy Engine | TBD | TBD | N/A |
| Planet Ocean | platform status | Hydrosurv Adapter | Ecosub C2 | Yes | Yes | | RHU (autonomy engine) | scanline | TBD | TBD | TBD | TBD | N/A |
| Planet Ocean | platform status | Ecosub C2 | Autonomy Engine | Yes | No | | RHU (autonomy engine) | emergency | GUI | TBD – all | TBD | TBD | TBD – all platforms pre-compiled ABORT via Black box |
| Planet Ocean | mission plan | Autonomy Engine | Ecosub C2 | Yes | No | | Planet Ocean (ecosub) | platform status-compiled | Ecosub | Black Box TBC | No | Yes | Via Hermes + Router |
| Planet Ocean | mission plan | Ecosub C2 | Hydrosurv Adapter | Yes | Yes | | Planet Ocean (ecosub) | platform status-compiled | Black Box TBC | Ecosub C2 | Yes | Yes | N/A |
| Planet Ocean | mission plan | Hydrosurv Adapter | Ecosub | No | Yes | | Planet Ocean (ecosub) | platform status | Ecosub C2 | Autonomy Engine | Yes | No | N/A |
| Planet Ocean | observation | Ecosub | Hydrosurv Adapter | No | Yes | | Planet Ocean (ecosub) | mission plan | Autonomy Engine | Ecosub C2 | Yes | No | N/A |
| Planet Ocean | observation | Hydrosurv Adapter | Ecosub C2 | Yes | Yes | | Planet Ocean (ecosub) | mission plan | Ecosub C2 | Black Box TBC | Yes | Yes | N/A |
| Planet Ocean | observation | Ecosub C2 | Autonomy Engine | Yes | No | | Planet Ocean (ecosub) | mission plan-compiled | Black Box TBC | Ecosub | No | Yes | Via Hermes + Router |
| NOC | platform status | Ecosub | Hydrosurv Adapter | No | Yes | | Planet Ocean (ecosub) | observation-compiled | Ecosub | Black Box TBC | No | Yes | Via Hermes + Router |
| NOC | platform status | Hydrosurv Adapter | Ecosub C2 | Yes | Yes | | Planet Ocean (ecosub) | observation-compiled | Black Box TBC | Ecosub C2 | Yes | Yes | N/A |
| NOC | platform status | Ecosub C2 | Autonomy Engine | Yes | No | | Planet Ocean (ecosub) | observation | Ecosub C2 | Autonomy Engine | Yes | No | N/A |
| NOC | mission plan | Autonomy Engine | Ecosub C2 | Yes | No | | Planet Ocean (ecosub) | survey progress | TBD | TBD | TBD | TBD | N/A |
| NOC | mission plan | Ecosub C2 | Hydrosurv Adapter | Yes | Yes | | Planet Ocean (ecosub) | survey progress | TBD | TBD | TBD | TBD | N/A |
| NOC | mission plan | Hydrosurv Adapter | Ecosub | No | Yes | | Planet Ocean (ecosub) | scanline | TBD | TBD | TBD | TBD | N/A |
| Planet Ocean (ecosub) | scanline | TBD | TBD | TBD | TBD | N/A |
| Planet Ocean (ecosub) | emergency | GUI | TBD – Ecosub (ABORT command via Black Box) | TBD | TBD | TBD – all platforms pre-compiled ABORT via Black box |
| NOC (AH1) | platform status-compiled | AH1 | Black Box TBC | No | Yes | Via Hermes + Router |
| NOC (AH1) | platform status-compiled | Black Box TBC | NOC C2 | Yes | Yes | N/A |
| NOC (AH1) | platform status | NOC C2 | Autonomy Engine | Yes | No | N/A |
| NOC (AH1) | scan point | Autonomy Engine | NOC C2 | Yes | No | N/A |
| NOC (AH1) | scan point-compiled | NOC C2 | Black Box TBC | Yes | Yes | Would this technically be a mission plan-compiled? |
| NOC (AH1) | scan point | Black Box TBC | Ecosub | No | Yes | Via Hermes + Router |
| NOC (AH1) | survey progress | TBD | TBD | TBD | TBD | TBD |
| NOC (AH1) | survey progress | TBD | TBD | TBD | TBD | TBD |
| NOC (AH1) | emergency | GUI | TBD – AH1 (ABORT command via Black Box) | TBD | TBD | TBD – all platforms pre-compiled ABORT via Black box |
| NOC (GUI) | planning configuration | GUI | Autonomy Engine | Yes | No | N/A |
| NOC (GUI) | emergency | GUI | TBD | TBD | TBD | TBD |
## Breakdown of Message Sources & Types
### 1/ Autonomy Engine
#### Transmit
* mission plan _(sent per platform??)_
* TBD:
* Will emergency commands be sent via the autonomy engine (from the GUI) or directly to the C2s?
#### Receive
* configuration file
* emergency stop all
* decoded ecosub status message
* decoded reav status message
* decoded autosub-hover status message
* decoded ecosub observation data _(from squad 1 platforms)_
----------------------------------
### 2/ Ecosub C2
#### Transmit
* compiled ecosub mission plan
* decoded ecosub status message
* autonomy configuration file
* decoded ecosub observation data
#### Receive
* mission plan
* encoded ecosub status message
* encoded ecosub observation data
----------------------------------
### 3/ Autosub C2
#### Transmit
* compiled autosub-hover mission plan
* decoded autosub-hover status message
* autonomy configuration file
#### Receive
* mission plan
* encoded autosub-hover status message
----------------------------------
### 4/ Reav C2
#### Transmit
* decoded reav-60 status message?
#### Receive
* mission plan
* encoded reav-60 status message?
----------------------------------
### 5/ Hermes Box/Hydrosurv Smart Router?
#### Transmit
* encoded ecosub status message
* encoded (or is this already decoded?) reav status message
* encoded autosub status message
* encoded ecosub observation data
* TBD:
* are there acknowledgment messages from platforms?
* how are we receiving beacon messages per platform?
#### Receive
* compiled ecosub mission plan
* compiled reav mission plan
* compiled autosub mission plan
* compiled ecosub emergency command
* compiled reav emergency command
* compiled autosub emergency command
------------------------------------
\ No newline at end of file
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