def traj_wind_airframe(uav, orig, dest, wind): origin = up.Waypoint(orig[0], orig[1], orig[2], orig[3]) target = up.Waypoint(dest[0], dest[1], orig[2], dest[3]) samples = uav.path_sampling_airframe(origin, target, wind, 1) x = [wp.x for wp in samples] y = [wp.y for wp in samples] return x, y
def traj_2d(uav, orig, dest): origin = up.Waypoint(orig[0], orig[1], orig[2], orig[3]) target = up.Waypoint(dest[0], dest[1], orig[2], dest[3]) samples = uav.path_sampling(origin, target, 1) x = [wp.x for wp in samples] y = [wp.y for wp in samples] return x, y
def traj(uav, orig, dest): origin = up.Waypoint(orig[0], orig[1], orig[2], orig[3]) target = up.Waypoint(dest[0], dest[1], dest[2], dest[3]) samples = uav.path_sampling(origin, target, 1) # samples = uav.path_sampling(origin, target, up.WindVector(3, 3), 1) x = [wp.x for wp in samples] y = [wp.y for wp in samples] z = [wp.z for wp in samples] return x, y, z
def test_vns(self): def pr(cpp_raster, blocking=False): # plots a cpp raster return GeoData.from_cpp_raster(cpp_raster, "xx").plot(blocking=blocking) from fire_rs.firemodel import propagation env = propagation.Environment( [[480060.0, 485060.0], [6210074.0, 6214074.0]], wind_speed=4.11, wind_dir=0) prop = propagation.propagate_from_points(env, TimedPoint( 482060, 6211074, 0), until=14000) ignitions = prop.ignitions() # ax = ignitions.plot(blocking=False) elev = env.raster.slice('elevation') conf = { 'min_time': 9500, 'max_time': 12000, 'save_every': 0, 'save_improvements': False, 'discrete_elevation_interval': 1, 'vns': fire_rs.planning.benchmark.vns_configurations['base'] } conf['vns']['configuration_name'] = 'base' wp = up.Waypoint(480060.0 + 100, 6210074.0 + 100, 0, 0) flight = up.TrajectoryConfig(uav, wp, wp, conf['min_time'], 1500) res = up.plan_vns([ flight, ], ignitions.as_cpp_raster(), elev.as_cpp_raster(), json.dumps(conf)) plan = res.final_plan() geodatadisplay = GeoDataDisplay.pyplot_figure( env.raster.combine(ignitions)) geodatadisplay.add_extension(TrajectoryDisplayExtension, (None, ), {}) plot_plan(plan, geodatadisplay, show=True) for intermediate_plan in res.intermediate_plans: geodatadisplay = GeoDataDisplay.pyplot_figure( env.raster.combine(ignitions)) geodatadisplay.add_extension(TrajectoryDisplayExtension, (None, ), {}) plot_plan(intermediate_plan, geodatadisplay, show=True) print("durations: ") for traj in plan.trajectories(): print(traj.duration())
y = [wp.y for wp in samples] return x, y if __name__ == '__main__': matplotlib.rcParams['font.family'] = 'sans-serif' matplotlib.rcParams['text.usetex'] = True uav_speed = 10. # m/s uav_max_turn_rate = 32. * np.pi / 180 uav_max_pitch_angle = 6. / 180. * np.pi wind = up.WindVector(0, -3) no_wind = up.WindVector(0, 0) a_uav = up.UAV("x8-06", uav_speed, uav_max_turn_rate, uav_max_pitch_angle) wp_s, wp_e = up.Waypoint(0, 0, 0, 0), up.Waypoint(100, 0, 0, 0) seg = up.Segment(wp_s, wp_e) tr_time = a_uav.travel_time(seg, wind) print(tr_time) print(a_uav.travel_time(wp_s, wp_e, wind)) fig = plt.figure() # Low altitude ax = fig.add_subplot(111, aspect='equal') # ax.set_xlim((-10, 70)) # ax.set_ylim((-20, 80)) ax.set_axis_off() #Hide axes wp_ma = [(-8, 0, 0, 0), (50, 50, 0, 5 * np.pi / 4), (20, 50, 0, 0.)] # , (0, 100, 20, 0)]
def test_waypoint(self): wp1 = up.Waypoint(4, 3, 2, 1) self.assertEqual(wp1.x, 4) self.assertEqual(wp1.y, 3) self.assertEqual(wp1.z, 2) self.assertEqual(wp1.dir, 1)
def setUp(self): self.wp1 = up.Waypoint(0, 0, 0, 0) self.wp2 = up.Waypoint(4, 0, 0, 0) self.test_area = [[480060.0, 490060.0], [6210074.0, 6220074.0]]
def as_cpp(self): return up.Waypoint(self.x, self.y, self.z, self.dir)