platform_status.py 4.92 KB
Newer Older
1
"""
2
    schema: platform-specific decoded status message (DRAFT)
3
"""
4
from . import full_message_schema, platform_schema, api
5 6 7 8 9 10 11
from flask_restx import fields

gps_schema = api.model(
    "GPS",
    {
        "gps_source": fields.Float(  # TODO: TBD with partners
            required=False,
12
            description="Source of gps position. E.g. USBL (external), platform itself (internal)",
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
            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 <DEFINE UNITS>",
            example="",
        ),
        "longitude": fields.Float(
            required=False,
            description="Longitude in <DEFINE UNITS>",
            example="",
        ),
        "depth": fields.Float(
            required=False,
            description="Depth in <DEFINE UNITS>",
            example="",
        ),
        "altitude": fields.Float(
            required=False,
            description="Altitude in <DEFINE UNITS>",
            example="",
        ),
45
        # "gps_fix_seconds_ago"
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
    },
)

sensor_schema = api.model(
    "Sensor",
    {
        "sensor_name": fields.String(
            required=False,
            description="Name of sensor (e.g. MBES for AH1 and SideScan for Ecosub",
            example="MBES",
        ),
        "sensor_status": fields.Boolean(
            required=False,
            description="Sensor switched on (True) or off (False)",
            example=True,
        ),
        "additional_data": fields.Raw(
            required=False,
            description="Add any additional sensor-related data here.",
            example={"sensor_loadtime_seconds": 30.0},
        ),
67
    },
68
)
69 70
platform_status_message_schema = api.model(
    "platformStatusMessage",
71 72
    {
        "message": fields.Nested(
73
            full_message_schema,
74 75 76
            required=True,
            description="Message header",
        ),
77 78 79
        "platform": fields.Nested(platform_schema),
        "platform_state": fields.String(
            # TODO: Define dictionary with potential STATES of each platform
80
            required=False,
81
            description="Current state executed by platform. E.g. "
82 83 84
            + "STOP, IDLE, ABORT.",
            example="IDLE",
        ),
85
        "autonomy_plan_ID": fields.Integer(
86
            required=False,
87
            description="Last mission plan ID (according to Autonomy Engine's mission plan number) executed by platform",
88 89
            example=1,
        ),
90
        "mission_track_ID": fields.Integer(
91 92 93 94 95 96 97
            required=False,
            description=(
                "Track number - stage in mission (e.g. "
                + "4 --> Waypoint 3 to Waypoint 4)"
            ),
            example=4,
        ),
98 99 100 101 102
        "mission_action_ID": fields.Integer(
            required=False,
            description="to add description",
            example=1,
        ),
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
        "range_to_go": fields.Float(
            required=False,
            description="Estimated distance to reach next waypoint",
            example=124.3,
        ),
        "speed_over_ground": fields.Float(
            required=False,
            description="",
            example=124.3,
        ),
        "water_current_velocity": fields.Float(
            required=False,
            description="",
            example=124.3,
        ),
        "thrust_applied": fields.Float(
            required=False,
            description="TODO: Needs further consideration",
            example=124.3,
        ),
        "health_status": fields.String(
            required=False,
125
            description="Health status extracted by respective platform "
126 127 128 129
            + "if any diagnosis available checks on sensors",
            example="Warning",
        ),
        "gps_data": fields.List(
130 131 132
            fields.Nested(
                gps_schema
            ),  # TODO: TBD Do we want a list of gps readings to allow > 1 reading i.e. platform + usbl
133
            required=True,
134
            description="Metadata pf each platform",
135 136 137 138 139 140 141 142 143 144 145 146
        ),
        "localisation_error": fields.Float(
            required=False,
            description="Localisation error at last USBL update.",
            example="",
        ),
        "usbl_fix_seconds_ago": fields.Float(
            required=False,
            description="",
            example="",
        ),
        "battery_remaining_capacity": fields.Float(
147 148
            required=True,
            description="Battery remaining capacity % provided by respective platform/C2.",
149 150
            example=80.0,
        ),
151 152 153
        "sensor_config": fields.Nested(
            sensor_schema
        ),  # TODO: TBD Do we want a list of sensors to allow > 1 sensor
154 155 156
    },
)

157
# TBD: Do we append beacon positions with platform positions?