def generate_scenario_singlefire_singleuav(): # 9 by 7 km area area = Area(480060.0, 489060.0, 6210074.0, 6217074.0) uav_speed = 18. # m/s uav_max_pitch_angle = 6. / 180. * np.pi uav_max_turn_rate = 32. * np.pi / 180 / 2 # Consider a more conservative turn rate uav_bases = [Waypoint(area.xmin + 100, area.ymin + 100, 0, 0)] wind_speed = 15. wind_dir = 0. num_ignitions = 1 ignitions = [ TimedPoint(random.uniform(area.xmin, area.xmax), random.uniform(area.ymin, area.ymax), random.uniform(0, 3000)) for i in range(num_ignitions) ] # start once all fires are ignited start = max([igni.time for igni in ignitions]) num_flights = 1 flights = [] for i in range(num_flights): uav_start = random.uniform(start, start + 4000.) max_flight_time = random.uniform(1000, 1500) name = " ".join(("UAV", str(i))) uav = UAV("x8-06", uav_speed, uav_max_turn_rate, uav_max_pitch_angle) flights.append( FlightConf(name, uav, uav_start, max_flight_time, random.choice(uav_bases))) scenario = Scenario(((area.xmin, area.xmax), (area.ymin, area.ymax)), wind_speed, wind_dir, ignitions, flights) return scenario
def generate_scenario_big_fire(): """A dozen UAVs monitoring a dozen fires""" # 9 by 7 km area area = Area(532000.0, 540000.0, 4567000.0, 4575000.0) uav_speed = 18. # m/s uav_max_pitch_angle = 6. / 180. * np.pi uav_max_turn_rate = 32. * np.pi / 180 uav_bases = [ # four corners of the map Waypoint(area.xmin + 100, area.ymin + 100, 0, 0), Waypoint(area.xmin + 100, area.ymax - 100, 0, 0), Waypoint(area.xmax - 100, area.ymin + 100, 0, 0), Waypoint(area.xmax - 100, area.ymax - 100, 0, 0) ] wind_speed = random.uniform(1., 2.) # wind speed in [10,20] km/h wind_dir = random.random() * 2 * np.pi num_ignitions = random.randint(1, 1) # Calculate a safe area for the ignitions allowed_range_x = (area.xmax - area.xmin) * 0.25 allowed_range_y = (area.ymax - area.ymin) * 0.25 ignitions = [ TimedPoint( random.uniform(area.xmin + allowed_range_x, area.xmax - allowed_range_x), random.uniform(area.ymin + allowed_range_y, area.ymax - allowed_range_y), random.uniform(0, 0)) for i in range(num_ignitions) ] # start once all fires are ignited start = max([igni.time for igni in ignitions]) num_flights = random.randint(1, 5) flights = [] for i in range(num_flights): uav_start = random.uniform(start + 50000., start + 50000.) max_flight_time = random.uniform(500, 1200) name = " ".join(("UAV", str(i))) uav = UAV("x8-06", uav_speed, uav_max_turn_rate, uav_max_pitch_angle) flights.append( FlightConf(name, uav, uav_start, max_flight_time, random.choice(uav_bases))) scenario = Scenario(((area.xmin, area.xmax), (area.ymin, area.ymax)), wind_speed, wind_dir, ignitions, flights) return scenario
def generate_scenario_newsletter(): # 9 by 7 km area area = Area(545000.0, 548000.0, 6211000.0, 6214000.0) uav_max_pitch_angle = 6. / 180. * np.pi # aka gamma_max=0.11rad for 2m/s rate of climb and 18m/s cruise air speed uav_speed = 18. # m/s uav_max_turn_rate = 32. * np.pi / 180 / 2 # Consider a more conservative turn rate uav_bases = [Waypoint(area.xmin + 100, area.ymax - 100, 100., 0.)] num_ignitions = 1 wind_speed = random.choice([ 10., ]) # 18 km/h, 36 km/h, 54 km/h, 72 km/h wind_dir = random.choice([ np.pi / 4, ]) area_range = (area.xmax - area.xmin, area.ymax - area.ymin) ignitions = [ TimedPoint( random.uniform(area.xmin + area_range[0] * .2, area.xmax - area_range[0] * .4), random.uniform(area.ymin + area_range[1] * .4, area.ymax - area_range[1] * .6), random.uniform(0, 3000)) for i in range(num_ignitions) ] # start once all fires are ignited start = max([igni.time for igni in ignitions]) num_flights = 1 flights = [] for i in range(num_flights): uav_start = start + 3000 max_flight_time = 450 name = " ".join(("UAV", str(i))) uav = UAV("x8-06", uav_speed, uav_max_turn_rate, uav_max_pitch_angle) flights.append( FlightConf(name, uav, uav_start, max_flight_time, random.choice(uav_bases))) scenario = Scenario(((area.xmin, area.xmax), (area.ymin, area.ymax)), wind_speed, wind_dir, ignitions, flights) return scenario
def scenario_a(): # 9 by 7 km area area = Area(532000.0, 540000.0, 4567000.0, 4575000.0) uav_speed = 18. # m/s uav_max_pitch_angle = 6. / 180. * np.pi uav_max_turn_rate = 32. * np.pi / 180 uav_bases = [ # four corners of the map Waypoint(area.xmin + 100, area.ymin + 100, 0, 0), Waypoint(area.xmin + 100, area.ymax - 100, 0, 0), Waypoint(area.xmax - 100, area.ymin + 100, 0, 0), Waypoint(area.xmax - 100, area.ymax - 100, 0, 0) ] wind_speed = 15. # random.uniform(10., 20.) # wind speed in [10,20] km/h wind_dir = 0. # random.random() * 2 * np.pi num_ignitions = random.randint(1, 3) ignitions = [ TimedPoint(random.uniform(area.xmin, area.xmax), random.uniform(area.ymin, area.ymax), random.uniform(0, 3000)) for i in range(num_ignitions) ] # start once all fires are ignited start = max([igni.time for igni in ignitions]) num_flights = random.randint(1, 3) flights = [] for i in range(num_flights): uav_start = random.uniform(start, start + 4000.) max_flight_time = random.uniform(500, 1200) name = " ".join(("UAV", str(i))) uav = UAV("x8-06", uav_speed, uav_max_turn_rate, uav_max_pitch_angle) flights.append( FlightConf(name, uav, uav_start, max_flight_time, random.choice(uav_bases))) scenario = Scenario(((area.xmin, area.xmax), (area.ymin, area.ymax)), wind_speed, wind_dir, ignitions, flights) return scenario
def generate_scenario_utility_test(): # 2 by 2 km area area = Area(480060.0, 482060.0, 6210074.0, 6212074.0) uav_max_pitch_angle = 6. / 180. * np.pi # aka gamma_max=0.11rad for 2m/s rate of climb and 18m/s cruise air speed uav_speed = 18. # m/s uav_max_turn_rate = 32. * np.pi / 180 / 2 # Consider a more conservative turn rate uav_bases = [Waypoint(area.xmin + 100, area.ymin + 100, 0., 0.)] num_ignitions = 1 wind_speed = random.choice([5., 10., 15., 20.]) # 18 km/h, 36 km/h, 54 km/h, 72 km/h wind_dir = random.choice([0., np.pi / 2, np.pi, 3 * np.pi / 4]) area_range = (area.xmax - area.xmin, area.ymax - area.ymin) ignitions = [ TimedPoint( random.uniform(area.xmin + area_range[0] * .1, area.xmax - area_range[0] * .1), random.uniform(area.ymin + area_range[1] * .1, area.ymax - area_range[1] * .1), random.uniform(0, 3000)) for i in range(num_ignitions) ] # start once all fires are ignited start = max([igni.time for igni in ignitions]) num_flights = 1 flights = [] for i in range(num_flights): uav_start = random.uniform(start + 2500, start + 7500.) max_flight_time = random.uniform(1000, 1500) name = " ".join(("UAV", str(i))) uav = UAV("x8-06", uav_speed, uav_max_turn_rate, uav_max_pitch_angle) flights.append( FlightConf(name, uav, uav_start, max_flight_time, random.choice(uav_bases))) scenario = Scenario(((area.xmin, area.xmax), (area.ymin, area.ymax)), wind_speed, wind_dir, ignitions, flights) return scenario