planning_configuration.py 4.08 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
"""
    schemas: configuration sent to Autonomy Engine (i.e. during an emergency,
    if a vehicle needs to be removed from the mission planning)
"""
from . import api, message_header_schema, vehicle_schema
from flask_restx import fields


squad_metadata_schema = api.model(
    "SquadMetadataSchema",
    {
        "squad_ID": fields.Integer(
            required=True,
            description="Identifier of given squad",
            example="ah-1",
        ),
        "no_of_vehicles": fields.Integer(
            required=True,
            description="number of vehicles",
            example="ah-1",
        ),
        "vehicles": fields.List(
            fields.Nested(vehicle_schema),
            required=True,
            description="Squad consists of these vehicles",
        ),
        "squad_mission_type": fields.String(
            required=True,
            description="Mission of given squad: `tracking`, `survey`, `inspection`",
            example="survey",
        ),
        "squad_state": fields.Boolean(
            required=True,
            description="In execution, Waiting.. <define further>",
            example=False,
        ),
    },
)

# Main Autonomy Configuration Schema
autonomy_configuration_schema = api.model(
    "SquadConfigurationSchema",
    {
        "message": fields.Nested(
            message_header_schema,
            required=True,
            description="Message header",
        ),
        "ID": fields.Integer(
            required=True,
            description="Unique identifier tagged to version of this"
            + " configuration plan",
            example=3,
        ),
        "time": fields.String(
            required=True,
            description="",
            example="",
        ),
        "squads": fields.Nested(
            squad_metadata_schema,
            required=False,
            description="Details of each squad",
        ),
        "region_of_operation": fields.Raw(
            required=True,
            description="Using GEOJSON, exact region of interest EXCLUDING exclusion zone",
            example={
                "type": "FeatureCollection",
                "features": [
                    {
                    "type": "Feature",
                    "properties": {},
                    "geometry": {
                        "coordinates": [
                        [
                            [
                            -4.187143188645706,
                            50.37072283932642
                            ],
                            [
                            -4.202697005964865,
                            50.368816892405874
                            ],
                            [
                            -4.203156724702808,
                            50.365640144076906
                            ],
                            [
                            -4.19449868846155,
                            50.362267670845654
                            ],
                            [
                            -4.187373048015246,
                            50.35933489062816
                            ],
                            [
                            -4.1859938917992565,
                            50.36207215780212
                            ],
                            [
                            -4.188598964651192,
                            50.36471151593676
                            ],
                            [
                            -4.192506573927574,
                            50.367350727294706
                            ],
                            [
                            -4.188675584440716,
                            50.36837704762925
                            ],
                            [
                            -4.187143188645706,
                            50.37072283932642
                            ]
                        ]
                        ],
                        "type": "Polygon"
                        # "projection": coordinate system used
                    }
                    }
                ]
            }
        ),
    },
)