def get_waypoint_travel_time(self, waypoints, id_tm1, id_t): """Gets the travel time to the current waypoint from a previous. Args: waypoints: A set of sorted waypoints which define a path. id_tm1: The ID of the starting waypoint. id_t: The ID of the ending waypoint. Returns: Time to travel between the two waypoints in seconds. Returns None on error. """ # Validate inputs if not waypoints: return None if len(waypoints) < 2: return None if id_tm1 is None or id_tm1 < 0 or id_tm1 >= len(waypoints): return None if id_t is None or id_t < 0 or id_t >= len(waypoints): return None if self.speed_avg <= 0: return None waypoint_t = waypoints[id_t] waypoint_tm1 = waypoints[id_tm1] waypoint_dist = waypoint_tm1.distance_to(waypoint_t) speed_avg_fps = units.knots_to_feet_per_second(self.speed_avg) waypoint_travel_time = waypoint_dist / speed_avg_fps return waypoint_travel_time
def test_get_waypoint_travel_time(self): """Tests travel time calc.""" test_spds = [1, 10, 100, 500] for (lon2, lat2, lon1, lat1, dist_km) in TESTDATA_COMPETITION_DIST: dist_ft = units.kilometers_to_feet(dist_km) for speed in test_spds: speed_fps = units.knots_to_feet_per_second(speed) time = dist_ft / speed_fps gpos1 = GpsPosition() gpos1.latitude = lat1 gpos1.longitude = lon1 gpos1.save() apos1 = AerialPosition() apos1.gps_position = gpos1 apos1.altitude_msl = 0 apos1.save() wpt1 = Waypoint() wpt1.position = apos1 gpos2 = GpsPosition() gpos2.latitude = lat2 gpos2.longitude = lon2 gpos2.save() apos2 = AerialPosition() apos2.gps_position = gpos2 apos2.altitude_msl = 0 apos2.save() wpt2 = Waypoint() wpt2.position = apos2 waypoints = [wpt1, wpt2] obstacle = MovingObstacle() obstacle.speed_avg = speed self.assertTrue( self.eval_travel_time( obstacle.get_waypoint_travel_time(waypoints, 0, 1), time))
def test_get_waypoint_travel_time(self): """Tests travel time calc.""" test_spds = [1, 10, 100, 500] for (lon2, lat2, lon1, lat1, dist_km) in TESTDATA_COMPETITION_DIST: dist_ft = units.kilometers_to_feet(dist_km) for speed in test_spds: speed_fps = units.knots_to_feet_per_second(speed) time = dist_ft / speed_fps gpos1 = GpsPosition() gpos1.latitude = lat1 gpos1.longitude = lon1 gpos1.save() apos1 = AerialPosition() apos1.gps_position = gpos1 apos1.altitude_msl = 0 apos1.save() wpt1 = Waypoint() wpt1.position = apos1 gpos2 = GpsPosition() gpos2.latitude = lat2 gpos2.longitude = lon2 gpos2.save() apos2 = AerialPosition() apos2.gps_position = gpos2 apos2.altitude_msl = 0 apos2.save() wpt2 = Waypoint() wpt2.position = apos2 waypoints = [wpt1, wpt2] obstacle = MovingObstacle() obstacle.speed_avg = speed self.assertTrue(self.eval_travel_time( obstacle.get_waypoint_travel_time(waypoints, 0, 1), time))
def test_knots_to_fps(self): """Performs a data-drive test of the conversion.""" cases = [ # (knots, fps) ( 1, 1.68781), ( 10, 16.8781), (100, 168.781), ] # yapf: disable for (knots, fps_actual) in cases: self.assertAlmostEqual(fps_actual, units.knots_to_feet_per_second(knots), delta=5)
def test_knots_to_fps(self): """Performs a data-drive test of the conversion.""" threshold = 5 # ft/s cases = [ # (knots, fps) (0.1, 0.168781), (1, 1.68781), (10, 16.8781), (100, 168.781), ] # yapf: disable for (knots, fps_actual) in cases: self.assertLess( abs(units.knots_to_feet_per_second(knots) - fps_actual), threshold)