planning_configuration.py 6.83 KB
Newer Older
1 2
"""
    schemas: configuration sent to Autonomy Engine (i.e. during an emergency,
3
    if a platform needs to be removed from the mission planning)
4 5
"""

6
emergency_schema = {
7 8
    "type": "object",
    "properties": {
9 10 11
        "safe_command": {
            "type": "string",
            "enum": ["go_home", "abort_now", "stop_mission"],
12 13
            "description": "Command/Action that is native to respective"
            + " partner's platform/C2",
14 15
            "example": "go_home",
        },
16
        "target_waypoint_latitude": {
17
            "type": "number",
18
            "format": "float",
19
            "description": "X-coordinate safe place for respective platform",
20
            "example": -7.432,
21
        },
22
        "target_waypoint_longitude": {
23
            "type": "number",
24
            "format": "float",
25
            "description": "Y-coordinate safe place for respective platform",
26
            "example": 50.365,
27
        },
28
        "target_depth": {
29
            "type": "number",
30
            "format": "float",
31
            "description": "Z-coordinate safe place for respective platform"
32
            + " . If platform to NOT stay at depth, key in `0.0`",
33
            "example": 10.0,
34 35
        },
        "additional_data": {
36
            "type": "object",
37 38
            "description": "Any addition fields/data to be added here",
            "example": {},
39
        },
40
    },
Trishna Saeharaseelan's avatar
Trishna Saeharaseelan committed
41 42 43 44 45
    "required": [
        "target_waypoint_latitude",
        "target_waypoint_longitude",
        "target_depth",
    ],
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
scan_sensor_schema = {
    "type": "object",
    "properties": {
        "sensor_type": {
            "type": "string",
            "description": "Unique identifier for this platform",
            "example": "MBES",
            "enum": ["SIDESCAN", "MBES"],
        },
        "swath_width": {
            "type": "number",
            "format": "float",
            "description": "Function of `target_altitude` for the platform's "
            + "swath width (in metres)",
            "example": 38.0,
        },
        "frequency": {
            "type": "number",
            "format": "float",
            "description": "Frequency of scanning sensor (in kHz)",
            "example": 700.0,
        },
        "angle": {
            "type": "number",
            "format": "float",
            "description": "Angle of range of swath width (in degrees)",
            "example": 140.0,
        },
    },
}


81 82 83
platform_schema = {
    "type": "object",
    "properties": {
84 85 86 87 88
        "operator": {
            "type": "string",
            "description": "Operator of platform",
            "example": "noc",
        },
89
        "platform_ID": {
90 91 92
            "type": "string",
            "description": "Unique identifier for this platform",
            "example": "reav-x-1",
93 94 95 96 97
        },
        "model": {
            "type": "string",
            "example": "reav",
        },
98 99 100
        "emergency": emergency_schema,
        "min_altitude": {
            "type": "number",
101
            "format": "float",
102
            "description": "Minimum altitude set for plaform.",
103 104 105 106
            "example": 15.2,
        },
        "min_velocity": {
            "type": "number",
107
            "format": "float",
108
            "description": "Minimum velocity set for plaform.",
109 110 111 112
            "example": 0.1,
        },
        "max_velocity": {
            "type": "number",
113
            "format": "float",
114
            "description": "Maximum altitude set for plaform.",
115 116
            "example": 0.9,
        },
117 118 119 120 121 122 123 124 125 126 127 128 129
        "target_altitude": {
            "type": "number",
            "format": "float",
            "description": "Target altitude set for plaform. This affects swath width",
            "example": 15.0,
        },
        "turning_radius": {
            "type": "number",
            "format": "float",
            "description": "Turning radius of platform (in metres)",
            "example": 1.0,
        },
        "scan_sensor": scan_sensor_schema,
130
        "additional_data": {
131
            "description": "Any addition fields/data to be added here",
132
            "example": {"new_sensor_a": "test_sensor", "range": 10.0},
133
            "type": "object",
134
        },
135
    },
136 137 138 139 140 141 142 143
    "required": [
        "platform_ID",
        "model",
        "emergency",
        "min_altitude",
        "min_velocity",
        "max_velocity",
    ],
144 145 146 147 148 149
}

region_schema = {
    "type": "object",
    "properties": {
        "geometry_coordinates": {
150
            "type": "array",
151 152 153 154 155 156
            "example": [
                [
                    [-4.187143188645706, 50.37072283932642],
                    [-4.202697005964865, 50.368816892405874],
                    [-4.203156724702808, 50.365640144076906],
                    [-4.19449868846155, 50.362267670845654],
157
                    [-4.187143188645706, 50.37072283932642],
158 159 160
                ]
            ],
        },
161
    },
162
    "description": "Using GEOJSON, exact 4-point region (rectangle shaped - 5 points)",
163
}
164

165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
squad_metadata_schema = {
    "type": "object",
    "properties": {
        "squad_ID": {
            "type": "integer",
            "description": "Identifier of given squad",
            "example": 23,
        },
        "no_of_platforms": {
            "type": "integer",
            "description": "Number of platforms",
            "example": 3,
        },
        "platforms": {
            "type": "array",
            "items": platform_schema,
            "description": "Squad consists of these platforms",
        },
        "squad_mission_type": {
            "type": "string",
            "enum": ["tracking", "survey", "inspection"],
            "description": "Mission of given squad: `tracking`, `survey`"
            + ", `inspection`",
            "example": "survey",
        },
    },
    "required": [
        "squad_ID",
        "no_of_platforms",
        "platforms",
        "squad_mission_type",
    ],
}
198

199 200 201
planning_configuration_schema = {
    "type": "object",
    "properties": {
202 203 204 205
        "message_type": {
            "type": "string",
            "description": "Type of message",
            "example": "planning_configuration",
206
            "enum": ["planning_configuration"],
207
        },
208
        "planning_config_ID": {
209 210
            "type": "integer",
            "description": "Unique identifier tagged to version of this"
211
            + " configuration plan",
212 213
            "example": 3,
        },
214 215 216 217 218
        "region_of_interest": {
            "type": "array",
            "items": region_schema,
            "description": "Region of interest for the entire operation",
        },
219 220 221 222 223
        "exclusion_zones": {
            "type": "array",
            "items": region_schema,
            "description": "Exclusion zones for all platforms",
        },
224 225 226 227
        "squads": {
            "type": "array",
            "items": squad_metadata_schema,
        },
228
    },
229
    "required": [
230
        "message_type",
231
        "planning_config_ID",
232 233
        "squads",
        "exclusion_zones",
234
        "region_of_interest",
235
    ],
236
}