Source code for vertiport_autonomy.config.schema

from enum import Enum
from typing import Dict, List, Optional

from pydantic import BaseModel, confloat, conint


[docs] class TrafficProfileType(str, Enum): STEADY_FLOW = "steady_flow" SUDDEN_INFLUX = "sudden_influx" PEAK_HOURS = "peak_hours"
[docs] class Point3D(BaseModel): x: float y: float z: float
[docs] class FATO(BaseModel): id: str position: Point3D approach_path: List[Point3D]
[docs] class HoldingPoint(BaseModel): id: str position: Point3D associated_fato: str # FATO ID this holding point serves
[docs] class Gate(BaseModel): id: str position: Point3D is_entry: bool is_exit: bool
[docs] class TrafficProfile(BaseModel): profile_type: TrafficProfileType arrival_rate: confloat(gt=0) # λ for Poisson distribution max_drones: conint(gt=0) spawn_interval: conint(gt=0) # Steps between spawn attempts
[docs] class VertiportLayout(BaseModel): fatos: List[FATO] holding_points: List[HoldingPoint] gates: List[Gate] operational_altitude: confloat(gt=0) = 50.0 # Default altitude
[docs] class ScenarioConfig(BaseModel): vertiport: VertiportLayout traffic: TrafficProfile simulation: Dict[str, float] = { "time_step": 0.1, "drone_speed": 5.0, "drone_radius": 0.5, "min_separation": 6.0, }