autonomy_configuration.py 2.83 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
"""
    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="vehicle serial number",
            example="ah-1",
        ),
        "no_of_vehicles": fields.Integer(
            required=True,
            description="number of vehicle serial number",
            example="ah-1",
        ),
        "vehicles": fields.List(
            fields.Nested(vehicle_schema),
            required=True,
            description="Metadata pf each vehicle",
        ),
        "squad_mission_type": fields.String(
            required=True,
            description="Survey or Detail",
            example="survey",
        ),
        "squad_execution": fields.Boolean(
            required=True,
            description="True if Squad of survey executed by Autonomy Engine",
            example=False,
        ),
    },
)

constraints_schema = api.model(
    "ConstraintsSchema",
    # TODO: Should this be per vehicle instead of squad?
    {
        "min_altitude": fields.Float(
            required=True,
            description="Minimum altitude set for squad.",
            example=15.2,
        ),
        "min_velocity": fields.Float(
            required=True,
            description="Minimum velocity set for squad.",
            example=0.1,
        ),
        "max_velocity": fields.Float(
            required=True,
            description="Maximum altitude set for squad.",
            example=0.9,
        ),
    },
)

environment_config_schema = api.model(  # TODO: Discuss how regions are defined
    "EnvironmentConfig",
    {
        "region_of_interest": fields.String(),
        "exclusion_zone": fields.String(),
    },
)
# 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",
        ),
        "environment": fields.Nested(
            environment_config_schema,
            required=False,
            description="Region of interest and exclusion zone",
        ),
    },
)