Exemple #1
0
 def initialize_packet(self, packet):
     packet.direction = DIRECTION_BACKWARDS
     packet.angle = 2.56
     packet.points.append(position.Pose(1.5, 2.3))
     packet.points.append(position.Pose(0.6, 1.7))
     packet.points.append(position.Pose(2.0, 0.2))
     packet.points.append(position.Pose(1.2, 2.7))
 def test_strait_route(self):
     route = self.map.route(position.Pose(YELLOW_START_X, YELLOW_START_Y),
                            position.Pose(YELLOW_START_X, 1.5))
     self.assertEquals(len(route), 1)
     self.assertTrue(len(route[0]) > 0)
     p = route[0][0]
     self.assertEquals(p.x, YELLOW_START_X)
     self.assertEquals(p.y, 1.5)
 def on_enter(self):
     dest = self.path[-1]
     self.robot.destination = position.Pose(dest.x, dest.y, 0.0)
     if self.direction == DIRECTION_AUTO:
         first_point = self.path[0]
         self.direction = tools.get_direction(self.robot.pose,
                                              first_point.virt.x,
                                              first_point.virt.y)
     for pose in self.path:
         assert isinstance(pose, position.Pose)
         if self.direction == DIRECTION_FORWARD:
             if not self.robot.is_looking_at(pose):
                 move = yield LookAt(pose.virt.x, pose.virt.y,
                                     DIRECTION_FORWARD)
         else:
             if not self.robot.is_looking_at_opposite(pose):
                 move = yield LookAtOpposite(pose.virt.x, pose.virt.y,
                                             DIRECTION_FORWARD)
         move = self.create_move_line(pose, self.direction)
         yield move
         if move.exit_reason != TRAJECTORY_DESTINATION_REACHED:
             break
     self.robot.destination = None
     self.exit_reason = move.exit_reason
     yield None
Exemple #4
0
 def get_pose(self):
     y = self.item.pos().x() / 1000.0
     x = self.item.pos().y() / 1000.0
     angle = self.item.rotation() / 180.0 * math.pi
     # Map from Qt reference to field reference
     angle = self.convert_angle(angle)
     return position.Pose(x, y, angle)
 def __init__(self,
              x,
              y,
              direction=DIRECTION_AUTO,
              virtual=True,
              opponent_handling_config=OPPONENT_HANDLING_STOP):
     super().__init__([position.Pose(x, y, None, virtual)], direction,
                      virtual, opponent_handling_config)
Exemple #6
0
 def __init__(self, x=None, y=None, angle=None):
     statemachine.State.__init__(self)
     self.has_x = x is not None
     self.has_y = y is not None
     px = x if self.has_x else 0.0
     py = y if self.has_y else 0.0
     pangle = angle if angle is not None else 0.0
     self.pose = position.Pose(px, py, pangle, True)
 def __init__(self,
              angle,
              min_curve_radius,
              points,
              direction=DIRECTION_AUTO,
              virtual=True,
              opponent_handling_config=OPPONENT_HANDLING_STOP):
     super().__init__(opponent_handling_config)
     apose = position.Pose(0.0, 0.0, angle, virtual)
     poses = []
     for pt in points:
         if isinstance(pt, tuple):
             poses.append(position.Pose(pt[0], pt[1], None, virtual))
         else:
             poses.append(pt)
     self.packet = packets.MoveCurve(direction, apose.angle,
                                     min_curve_radius, poses)
 def __init__(self,
              angle,
              direction=DIRECTION_AUTO,
              virtual=True,
              opponent_handling_config=OPPONENT_HANDLING_NONE):
     super().__init__(opponent_handling_config)
     pose = position.Pose(0.0, 0.0, angle, virtual)
     self.packet = packets.Rotate(direction=direction, angle=pose.angle)
Exemple #9
0
 def __init__(self,
              angle,
              direction=DIRECTION_FORWARD,
              chained=None,
              virtual=True):
     super().__init__(chained, NO_OPPONENT_HANDLING)
     pose = position.Pose(0.0, 0.0, angle, virtual)
     self.packet = packets.Rotate(direction=direction, angle=pose.angle)
Exemple #10
0
 def initialize_packet(self, packet):
     packet.direction = DIRECTION_BACKWARDS
     packet.center = position.Pose(2.34, 1.78)
     packet.radius = 2.56
     packet.points.append(1.5)
     packet.points.append(1.7)
     packet.points.append(2.0)
     packet.points.append(2.7)
 def __init__(self,
              center_x,
              center_y,
              radius,
              points,
              direction=DIRECTION_AUTO,
              virtual=True,
              opponent_handling_config=OPPONENT_HANDLING_STOP):
     super().__init__(opponent_handling_config)
     cpose = position.Pose(center_x, center_y, None, virtual)
     angles = []
     for a in points:
         apose = position.Pose(0.0, 0.0, a, virtual)
         angles.append(apose.angle)
     self.packet = packets.MoveArc(direction=direction,
                                   center=cpose,
                                   radius=radius,
                                   points=angles)
 def __init__(self,
              x,
              y,
              direction=DIRECTION_AUTO,
              virtual=True,
              opponent_handling_config=OPPONENT_HANDLING_NONE):
     super().__init__(opponent_handling_config)
     self.pose = position.Pose(x, y, None, virtual)
     self.direction = direction
Exemple #13
0
 def __init__(self, event_loop):
     self.pose = position.Pose(0.0, 0.0, 0.0)
     self._team = TEAM_UNKNOWN
     self.event_loop = event_loop
     self.destination = None
     self.main_opponent_direction = None
     self.secondary_opponent_direction = None
     self.goal_manager = goalmanager.GoalManager(event_loop)
     self.mammoth_sparrow_loaded = True
Exemple #14
0
 def __init__(self,
              angle,
              points,
              direction=DIRECTION_FORWARD,
              chained=None,
              virtual=True,
              opponent_handling_config=OPPONENT_HANDLING):
     super().__init__(chained, opponent_handling_config)
     apose = position.Pose(0.0, 0.0, angle, virtual)
     poses = []
     for pt in points:
         if isinstance(pt, tuple):
             poses.append(position.Pose(pt[0], pt[1], None, virtual))
         else:
             poses.append(pt)
     self.packet = packets.MoveCurve(direction=direction,
                                     angle=apose.angle,
                                     points=poses)
Exemple #15
0
 def __init__(self,
              x,
              y,
              direction=DIRECTION_FORWARD,
              chained=None,
              virtual=True,
              opponent_handling_config=OPPONENT_HANDLING):
     super().__init__([position.Pose(x, y, None, virtual)], direction,
                      chained, virtual, opponent_handling_config)
Exemple #16
0
 def __init__(self,
              x,
              y,
              direction=DIRECTION_FORWARD,
              chained=None,
              virtual=True):
     super().__init__(chained, NO_OPPONENT_HANDLING)
     self.pose = position.Pose(x, y, None, virtual)
     self.direction = direction
Exemple #17
0
 def __init__(self,
              center_x,
              center_y,
              radius,
              points,
              direction=DIRECTION_FORWARD,
              chained=None,
              virtual=True,
              opponent_handling_config=OPPONENT_HANDLING):
     AbstractMove.__init__(self, chained, opponent_handling_config)
     cpose = position.Pose(center_x, center_y, None, virtual)
     angles = []
     for a in points:
         apose = position.Pose(0.0, 0.0, a, virtual)
         angles.append(apose.angle)
     self.packet = packets.MoveArc(direction=direction,
                                   center=cpose,
                                   radius=radius,
                                   points=angles)
 def on_enter(self):
     if self.packet.direction == DIRECTION_AUTO:
         first_angle = self.packet.points[0].virt.angle
         first_point = position.Pose(
             center_x + math.cos(first_angle) * self.packet.radius,
             center_y + math.sin(first_angle) * self.packet.radius, None,
             True)
         self.packet.direction = self.get_direction(first_point.virt.x,
                                                    first_point.virt.y)
     yield from super().on_enter()
 def __init__(self,
              points,
              direction=DIRECTION_AUTO,
              virtual=True,
              opponent_handling_config=OPPONENT_HANDLING_STOP):
     checks.check_type(direction, int)
     super().__init__(opponent_handling_config)
     poses = []
     for pt in points:
         if type(pt) == tuple:
             poses.append(position.Pose(pt[0], pt[1], None, virtual))
         else:
             poses.append(pt)
     self.packet = packets.MoveLine(direction=direction, points=poses)
Exemple #20
0
 def __init__(self, event_loop):
     self.pose = position.Pose(0.0, 0.0, 0.0)
     self._team = TEAM_UNKNOWN
     self.event_loop = event_loop
     self.destination = None
     self.main_opponent_direction = None
     self.secondary_opponent_direction = None
     self.goal_manager = goalmanager.GoalManager(event_loop)
     self.goal_decider = goaldecider.GoalDecider(event_loop,
                                                 self.goal_manager)
     self.locks = set()
     self.used_storage_spaces = []
     self.score = 0
     self.is_holding_module = True
Exemple #21
0
 def __init__(self,
              points,
              direction=DIRECTION_FORWARD,
              chained=None,
              virtual=True,
              opponent_handling_config=OPPONENT_HANDLING):
     super().__init__(chained, opponent_handling_config)
     poses = []
     for pt in points:
         if type(pt) == tuple:
             poses.append(position.Pose(pt[0], pt[1], None, virtual))
         else:
             poses.append(pt)
     self.packet = packets.MoveLine(direction=direction, points=poses)
Exemple #22
0
 def route(self, start, end):
     logger.log("Compute route from ({}, {}) to ({}, {})".format(start.x, start.y, end.x, end.y))
     start_date = datetime.datetime.now()
     (cost, path) = self.pathfinder.find_path(start.x, start.y, end.x, end.y)
     delta = datetime.datetime.now() - start_date
     if len(path) == 0:
         logger.log("No route found. Cost: {}. computation time: {}".format(cost, delta.total_seconds()))
         return None, []
     else:
         logger.log("Route computed. Cost: {}. computation time: {}".format(cost, delta.total_seconds()))
     pose_path = []
     # remove start node and convert to poses
     for (x, y) in path[1:]:
         pose_path.append(position.Pose(x, y))
     self.send_to_simulator(pose_path)
     return cost, pose_path
Exemple #23
0
 def on_enter(self):
     move = self.chained
     dest = self.path[-1]
     self.robot.destination = position.Pose(dest.x, dest.y, 0.0)
     for pose in self.path:
         if self.direction == DIRECTION_FORWARD:
             if not self.robot.is_looking_at(pose):
                 move = yield LookAt(pose.virt.x, pose.virt.y,
                                     DIRECTION_FORWARD, move)
         else:
             if not self.robot.is_looking_at_opposite(pose):
                 move = yield LookAtOpposite(pose.virt.x, pose.virt.y,
                                             DIRECTION_FORWARD, move)
         move = yield MoveLine([pose], self.direction, move)
     self.robot.destination = None
     self.exit_reason = move.exit_reason
     yield None
Exemple #24
0
    def get_next_goal(self):
        candidates = self.get_candidate_goals()

        for goal in candidates:
            goal.before_evaluation()

        for goal in candidates:
            pose = position.Pose(goal.x, goal.y, virtual=True)
            logger.log("Evaluate goal {}".format(goal.uid))
            if GOAL_EVALUATION_USES_PATHFINDING:
                goal.navigation_cost = self.event_loop.map.evaluate(
                    self.event_loop.robot.pose, pose)
            else:
                goal.navigation_cost = tools.distance(
                    self.event_loop.robot.pose.x, self.event_loop.robot.pose.y,
                    pose.x, pose.y)
        # Remove unreachable goals
        candidates = [
            goal for goal in candidates if goal.navigation_cost is not None
        ]

        if len(candidates) == 0:
            return None
        if len(candidates) == 1:
            return candidates[0]

        candidates.sort(key=lambda goal: goal.navigation_cost)
        nearest_cost = candidates[0].navigation_cost
        farest_cost = candidates[-1].navigation_cost
        total_range = farest_cost - nearest_cost

        logger.log("Nearest cost: {}    Farest cost: {}    Range: {}".format(
            nearest_cost, farest_cost, total_range))

        for goal in candidates:
            current = goal.navigation_cost - nearest_cost
            k = (total_range - current) / total_range
            goal.score = goal.weight * (1.0 / 3.0 + k * 2.0 / 3.0)
            logger.log("Goal '{}'     Navigation cost: {}    Score: {}".format(
                goal.identifier, goal.navigation_cost, goal.score))

        return max(candidates, key=lambda goal: goal.score)
        if not funny_action_goals:
            return best_goal
Exemple #25
0
    def get_simple_next_goal(self):
        candidates = self.get_candidate_goals()

        if len(candidates) == 0:
            return None

        for goal in candidates:
            goal.before_evaluation()

        candidates.sort(key=lambda goal: goal.weight)

        logger.log('Candidate goals : {}'.format(
            ["{}({})".format(goal.uid, goal.weight) for goal in candidates]))

        best_weight = candidates[0].weight
        best_candidates = []
        for goal in candidates:
            if goal.weight == best_weight:
                best_candidates.append(goal)
            else:
                break

        if len(best_candidates) == 1:
            return best_candidates[0]
        else:
            best_goal = None
            for goal in best_candidates:
                pose = position.Pose(goal.x, goal.y, virtual=True)
                logger.log("Evaluate goal {}".format(goal.uid))
                if GoalManager.GOAL_EVALUATION_USES_PATHFINDING:
                    goal.navigation_cost = self.event_loop.map.evaluate(
                        self.event_loop.robot.pose, pose)
                else:
                    goal.navigation_cost = tools.distance(
                        self.event_loop.robot.pose.x,
                        self.event_loop.robot.pose.y, pose.x, pose.y)
                if goal.navigation_cost and (
                        best_goal is None
                        or best_goal.navigation_cost > goal.navigation_cost):
                    best_goal = goal
            return best_goal
Exemple #26
0
    def __init__(self, goals, map_, remaining_time):
        """

        :type goals: list(brewery.goalmanager.Goal)
        :type remaining_time: float
        """
        import logger
        self.score = 0
        self.right_builder_count = 0
        self.left_builder_count = 0
        self.remaining_goals = goals
        self.executed_goals = []
        ":type executed_goals: list(brewery.goalmanager.Goal)"
        self.depth = 0
        self.remaining_time = remaining_time
        self.map_ = map_
        self.robot_pose = position.Pose(0, 0, 0)
        self.logger = logger
        self.traveled_distance = 0
        self.has_right_bulb = False
        self.has_left_bulb = False
        self._remaining_deposit_goals = None
Exemple #27
0
    def on_enter(self):
        logger.log('WaitForOpponentLeave : time={}, retries={}'.format(
            self.miliseconds, self.retries))
        Timer.on_enter(self)
        self.goto_finished = False
        self.opponent_disappeared = False
        self.timer_expired = False
        self.exit_reason = None
        if self.move_direction == DIRECTION_FORWARD:
            direction = DIRECTION_BACKWARDS
            distance = -0.150
        else:
            direction = DIRECTION_FORWARD
            distance = 0.150

        current_pose = self.robot.pose
        x = current_pose.virt.x + math.cos(current_pose.virt.angle) * distance
        y = current_pose.virt.y + math.sin(current_pose.virt.angle) * distance
        packet = packets.MoveLine()
        packet.direction = direction
        packet.points = [position.Pose(x, y, None, True)]
        self.send_packet(packet)
 def test_escape_from_forbidden_zone(self):
     route = self.map.route(
         position.Pose(YELLOW_START_X + MAP_WALLS_DISTANCE, YELLOW_START_Y),
         position.Pose(1.6, 2.0))
     self.assertNotEquals(len(route), 0)
 def test_unroutable(self):
     route = self.map.route(position.Pose(YELLOW_START_X, YELLOW_START_Y),
                            position.Pose(1.99, 2.99))
     self.assertEquals(len(route), 0)
 def setUp(self):
     position.Pose.match_team = TEAM_RED
     self.pose = position.Pose(1.0, 1.0, math.pi)