コード例 #1
0
ファイル: track.py プロジェクト: dmh23/deep_racer_guru
    def get_bearing_at_waypoint(self, waypoint_id):
        previous_point = self._track_waypoints[
            self._get_previous_different_waypoint_id(waypoint_id)]
        next_point = self._track_waypoints[
            self._get_next_different_waypoint_id(waypoint_id)]
        mid_point = self._track_waypoints[waypoint_id]

        before_bearing = geometry.get_bearing_between_points(
            previous_point, mid_point)
        after_bearing = geometry.get_bearing_between_points(
            mid_point, next_point)
        change_in_bearing = geometry.get_angle_in_proper_range(after_bearing -
                                                               before_bearing)

        return geometry.get_angle_in_proper_range(before_bearing +
                                                  change_in_bearing / 2)
コード例 #2
0
    def right_button_pressed(self, chosen_point):
        chose_backwards_point = False
        if self._backwards_point:
            backwards_distance = geometry.get_distance_between_points(
                chosen_point, self._backwards_point)
            primary_distance = geometry.get_distance_between_points(
                chosen_point, self._chosen_point)
            chose_backwards_point = backwards_distance < 0.5 * primary_distance and abs(
                primary_distance -
                BACKWARDS_DISTANCE) < 0.25 * BACKWARDS_DISTANCE

        if chose_backwards_point:
            self._backwards_point = chosen_point
            self._chosen_bearing = geometry.get_bearing_between_points(
                self._backwards_point, self._chosen_point)
        else:
            self._chosen_point, waypoint_id = self.current_track.get_adjusted_point_on_track(
                chosen_point)
            self._chosen_bearing = self.current_track.get_bearing_at_waypoint(
                waypoint_id)
            self._backwards_point = geometry.get_point_at_bearing(
                self._chosen_point, self._chosen_bearing - 180,
                BACKWARDS_DISTANCE)

        self.guru_parent_redraw()
コード例 #3
0
ファイル: track.py プロジェクト: dmh23/deep_racer_guru
 def get_track_bearing_at_point(self, point):
     closest_waypoint = self._get_closest_waypoint_id(point)
     (before_waypoint,
      after_waypoint) = self.get_waypoint_ids_before_and_after(
          point, closest_waypoint)
     return geometry.get_bearing_between_points(
         self._track_waypoints[before_waypoint],
         self._track_waypoints[after_waypoint])
コード例 #4
0
ファイル: track.py プロジェクト: dmh23/deep_racer_guru
    def get_bearing_and_distance_to_next_waypoint(self, waypoint_id: int):
        this_point = self._drawing_points[waypoint_id].middle
        next_point = self._drawing_points[self._get_next_waypoint_id(
            waypoint_id)].middle

        distance = geometry.get_distance_between_points(this_point, next_point)
        bearing = geometry.get_bearing_between_points(this_point, next_point)

        return bearing, distance
コード例 #5
0
ファイル: track.py プロジェクト: dmh23/deep_racer_guru
    def get_adjusted_point_on_track(self,
                                    chosen_point: Point,
                                    margin: float = 0.0):
        waypoint_id = self.get_closest_waypoint_id(chosen_point)
        waypoint = self.get_waypoint(waypoint_id)

        distance_from_waypoint = geometry.get_distance_between_points(
            waypoint, chosen_point)
        max_distance_from_centre = (self.get_width() +
                                    VEHICLE_WIDTH) / 2 - margin

        if distance_from_waypoint > max_distance_from_centre:
            bearing_of_point = geometry.get_bearing_between_points(
                waypoint, chosen_point)
            adjusted_point = geometry.get_point_at_bearing(
                waypoint, bearing_of_point, max_distance_from_centre)
        else:
            adjusted_point = chosen_point

        return adjusted_point, waypoint_id
コード例 #6
0
    def set_true_bearing_and_slide_on_events(self):

        previous_event = self.events[0]
        self.events[0].slide = 0.0
        self.events[0].true_bearing = self.events[0].heading
        self.max_slide = 0.0

        for e in self.events[1:]:
            previous_location = (previous_event.x, previous_event.y)
            current_location = (e.x, e.y)
            if e.progress == previous_event.progress:  # Handle new AWS bug duplicating log entry position
                e.true_bearing = previous_event.true_bearing
            elif e.progress - previous_event.progress < 0.05:  # x and y rounding means slow progress is inaccurate
                e.true_bearing = previous_event.true_bearing
            else:
                e.true_bearing = get_bearing_between_points(
                    previous_location, current_location)
            e.slide = get_turn_between_directions(e.heading, e.true_bearing)
            if e.step > SLIDE_SETTLING_PERIOD:
                self.max_slide = max(self.max_slide, abs(e.slide))
            previous_event = e
コード例 #7
0
ファイル: track.py プロジェクト: dmh23/deep_racer_guru
    def get_projected_distance_on_track(self,
                                        point: Point,
                                        heading: float,
                                        closest_waypoint_id: int,
                                        path_width: float = 0.0):
        heading = geometry.get_angle_in_proper_range(heading)

        if path_width > 0.0:
            side_point_1 = geometry.get_point_at_bearing(
                point, heading + 90, path_width / 2)
            side_point_2 = geometry.get_point_at_bearing(
                point, heading - 90, path_width / 2)
            return min(
                self.get_projected_distance_on_track(point, heading,
                                                     closest_waypoint_id),
                self.get_projected_distance_on_track(side_point_1, heading,
                                                     closest_waypoint_id),
                self.get_projected_distance_on_track(side_point_2, heading,
                                                     closest_waypoint_id))

        (before_waypoint_id,
         after_waypoint_id) = self.get_waypoint_ids_before_and_after(
             point, closest_waypoint_id, True)
        previous_left = self._drawing_points[before_waypoint_id].left_safe
        previous_right = self._drawing_points[before_waypoint_id].right_safe

        for w in self._drawing_points[
                after_waypoint_id:] + self._drawing_points[:after_waypoint_id]:
            direction_to_left_target = geometry.get_bearing_between_points(
                point, w.left_safe)
            direction_to_right_target = geometry.get_bearing_between_points(
                point, w.right_safe)

            relative_direction_to_left_target = geometry.get_turn_between_directions(
                heading, direction_to_left_target)
            relative_direction_to_right_target = geometry.get_turn_between_directions(
                heading, direction_to_right_target)

            if relative_direction_to_left_target >= 0 and relative_direction_to_right_target <= 0:
                previous_left = w.left_safe
                previous_right = w.right_safe
            else:
                point2 = geometry.get_point_at_bearing(
                    point, heading, 1)  # Just some random distance (1m)
                if w.left_safe == previous_left:
                    off_track_left = previous_left
                else:
                    off_track_left = geometry.get_intersection_of_two_lines(
                        point, point2, w.left_safe, previous_left)
                if w.right_safe == previous_right:
                    off_track_right = previous_right
                else:
                    off_track_right = geometry.get_intersection_of_two_lines(
                        point, point2, w.right_safe, previous_right)

                left_bearing = geometry.get_bearing_between_points(
                    point, off_track_left)
                right_bearing = geometry.get_bearing_between_points(
                    point, off_track_right)

                distances = []
                if abs(
                        geometry.get_turn_between_directions(
                            left_bearing, heading)) < 1:
                    if geometry.is_point_between(off_track_left, w.left_safe,
                                                 previous_left):
                        distances += [
                            geometry.get_distance_between_points(
                                point, off_track_left)
                        ]
                if abs(
                        geometry.get_turn_between_directions(
                            right_bearing, heading)) < 1:
                    if geometry.is_point_between(off_track_right, w.right_safe,
                                                 previous_right):
                        distances += [
                            geometry.get_distance_between_points(
                                point, off_track_right)
                        ]

                if len(distances) > 0:
                    return max(distances)
                else:
                    return 0.0