Пример #1
0
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
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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
Пример #5
0
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