56 lines
1.9 KiB
Python
56 lines
1.9 KiB
Python
from shapely.geometry import Polygon, LineString, Point
|
|
|
|
from planning.uav import Uav
|
|
from planning import UavPlanning
|
|
from planning.target import (PointTarget, LineTarget, SarRegionTarget, AroundTarget, TargetType)
|
|
|
|
def sar_planning(inputs):
|
|
uav_list = []
|
|
max_width = 0
|
|
for uav_param in inputs['uavs']:
|
|
uav = Uav(
|
|
id = uav_param["id"],
|
|
start_coord = Point(uav_param["start_coord"]),
|
|
end_coord = Point(uav_param["end_coord"]),
|
|
payload = uav_param["payload"],
|
|
constraint = uav_param["constraint"]
|
|
)
|
|
uav_list.append(uav)
|
|
max_width = max(uav_param["payload"]["width"], max_width)
|
|
|
|
target_list = []
|
|
for target_param in inputs['targets']:
|
|
target_type = target_param["type"]
|
|
if target_type == TargetType.point:
|
|
target = PointTarget(
|
|
id = target_param["id"],
|
|
shape = Point(target_param["coords"])
|
|
)
|
|
elif target_type == TargetType.line:
|
|
target = LineTarget(
|
|
id = target_param["id"],
|
|
shape = LineString(target_param["coords"])
|
|
)
|
|
elif target_type == TargetType.region:
|
|
target = SarRegionTarget(
|
|
id = target_param["id"],
|
|
shape = Polygon(target_param["coords"]),
|
|
width = max_width * 0.95
|
|
)
|
|
elif target_type == TargetType.around:
|
|
target = AroundTarget(
|
|
id = target_param["id"],
|
|
shape = Point(target_param["coords"]),
|
|
)
|
|
else:
|
|
raise TypeError(f"{target_type} is not a valid target type.")
|
|
target_list.append(target)
|
|
|
|
optimize = inputs["optimize"]
|
|
planning = UavPlanning(target_list, uav_list, 'SAR')
|
|
planning.solve()
|
|
if optimize:
|
|
planning.optimize()
|
|
result, _ = planning.solve_route()
|
|
return result
|