示例#1
0
    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
示例#2
0
    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
示例#3
0
 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))
示例#4
0
 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))
示例#5
0
 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)
示例#6
0
 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)
示例#7
0
    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)