Exemple #1
0
 def __init__(self, terrain_type="sim"):
     self.ball = Ball()
     self.field = Field(self.ball, terrain_type)
     self.referee = None
     self.our_team_color = None
     self.enemy_team_color = None
     self.blue_team = Team(TeamColor.BLUE_TEAM, type="friend")
     self.yellow_team = Team(TeamColor.YELLOW_TEAM, type="enemi")
     self.friends = None
     self.enemies = None
     self.delta_t = None
     self.cmd = None
Exemple #2
0
 def _create_teams(self):
     cfg = ConfigService()
     if cfg.config_dict["GAME"]["our_color"] == "blue":
         self.our_team_color == TeamColor.BLUE
         self.blue_team = OurTeam(TeamColor.BLUE)
         self.friends = self.blue_team
         self.yellow_team = Team(TeamColor.YELLOW)
         self.enemies = self.yellow_team
     elif cfg.config_dict["GAME"]["our_color"] == "yellow":
         self.our_team_color == TeamColor.YELLOW
         self.yellow_team = OurTeam(TeamColor.YELLOW)
         self.friends = self.yellow_team
         self.blue_team = Team(TeamColor.BLUE)
         self.enemies = self.blue_team
     else:
         raise ValueError("Config file contains wrong colors!")
Exemple #3
0
class TestTeam(unittest.TestCase):

    def setUp(self):
        self.team = Team(TeamColor.YELLOW_TEAM)
        self.team_blue = Team(TeamColor.BLUE_TEAM)
        self.first_player = self.team.players[0]
        self.second_player = self.team.players[1]
        self.no_player = Player(self.team, 0)

    def test_init(self):
        self.assertEqual(PLAYER_PER_TEAM, len(self.team.players))
        self.assertEqual(0, self.team.score)
        self.assertEqual(TeamColor.YELLOW_TEAM, self.team.team_color)

    def test_has_player_exists(self):
        self.assertTrue(self.team.has_player(self.first_player))

    def test_has_player_no_exists(self):
        self.assertFalse(self.team.has_player(self.no_player))

    def test_update_player(self):
        init_pose = self.first_player.pose
        self.assertEqual(init_pose, self.team.players[0].pose)
        self.team.update_player(0, Pose(Position(500, 500)), 0)
        self.assertNotEqual(init_pose, self.team.players[0].pose)
        self.assertEqual(self.team.players[0].pose, self.first_player.pose)

    def test_invalid_id(self):
        uut = self.team.update_player
        self.assertRaises(KeyError, uut, 10, Pose())

    def test_is_team_yellow(self):
        self.assertTrue(self.team.is_team_yellow())
        self.assertFalse(self.team_blue.is_team_yellow())
Exemple #4
0
class Game:
    def __init__(self):
        self.ball = Ball()
        self.field = Field(self.ball)
        self.referee = None
        self.our_team_color = None
        self.enemy_team_color = None
        self.blue_team = None
        self.yellow_team = None
        self.friends = None
        self.enemies = None
        self.delta_t = None
        self.cmd = None
        self._create_teams()
        self.update = self._update
        if ConfigService().config_dict["IMAGE"]["kalman"] == "true":
            self.update = self._kalman_update

    def set_referee(self, p_referee):
        self.referee = p_referee

    def _create_teams(self):
        cfg = ConfigService()
        if cfg.config_dict["GAME"]["our_color"] == "blue":
            self.our_team_color == TeamColor.BLUE
            self.blue_team = OurTeam(TeamColor.BLUE)
            self.friends = self.blue_team
            self.yellow_team = Team(TeamColor.YELLOW)
            self.enemies = self.yellow_team
        elif cfg.config_dict["GAME"]["our_color"] == "yellow":
            self.our_team_color == TeamColor.YELLOW
            self.yellow_team = OurTeam(TeamColor.YELLOW)
            self.friends = self.yellow_team
            self.blue_team = Team(TeamColor.BLUE)
            self.enemies = self.blue_team
        else:
            raise ValueError("Config file contains wrong colors!")

    def update_game_state(self, referee_command):
        # TODO: Réviser code, ça semble louche
        # TODO: remove or change completly! WHAT IS THIS??? MGL 2017/05/14
        blue_team = referee_command.teams[0]
        self.blue_team.score = blue_team.goalie_count
        yellow_team = referee_command.teams[0]
        self.yellow_team.score = yellow_team.goalie_count

        # Commented out since it is not used MGL 2017/01/07
        # command = Referee.Command(referee_command.command.name)
        # self.referee.command = command

    def _update(self, vision_frame: messages_robocup_ssl_wrapper_pb2, delta: float) -> None:
        self.delta_t = delta
        # print(delta)
        self._update_ball(vision_frame, delta)
        self._update_players(vision_frame, delta)

    def _kalman_update(self, vision_frame: List, delta: float) -> None:
        self.delta_t = delta
        self.kalman_update_ball(vision_frame)
        self.kalman_update_players(vision_frame)

    def is_team_yellow(self):
        return self.our_team_color == TeamColor.YELLOW

    def _update_ball(self, vision_frame, delta):
        try:
            ball_position = Position(vision_frame.detection.balls[0].x,
                                     vision_frame.detection.balls[0].y,
                                     vision_frame.detection.balls[0].z)
            self.field.move_ball(ball_position, delta)
        except IndexError:
            pass
            # print("Ball not found")

    def _update_players(self, vision_frame, delta):
        blue_team = vision_frame.detection.robots_blue
        yellow_team = vision_frame.detection.robots_yellow

        self._update_players_of_team(blue_team, self.blue_team, delta)
        self._update_players_of_team(yellow_team, self.yellow_team, delta)

    def kalman_update_ball(self, vision_frame):
        self.ball.kalman_update(vision_frame["ball"], self.delta_t)

    def kalman_update_players(self, vision_frame):
        for i in range(PLAYER_PER_TEAM):
            self.blue_team.update_player(i, vision_frame["blues"][i], self.delta_t)
            self.yellow_team.update_player(i, vision_frame["yellows"][i], self.delta_t)

    @staticmethod
    def _update_players_of_team(players, team, delta):
        for player in players:
            player_position = Position(player.x, player.y, player.height)
            player_pose = Pose(player_position, player.orientation)
            team.update_player(player.robot_id, player_pose, delta)
Exemple #5
0
 def setUp(self):
     self.team = Team(TeamColor.BLUE)
     self.player1 = Player(self.team, 1)
     self.player2 = Player(self.team, 2)
Exemple #6
0
 def setUp(self):
     self.team = Team(TeamColor.YELLOW)
     self.team_blue = Team(TeamColor.BLUE)
     self.first_player = self.team.players[0]
     self.second_player = self.team.players[1]
     self.no_player = Player(self.team, 0)
Exemple #7
0
class TestTeam(unittest.TestCase):
    def setUp(self):
        self.team = Team(TeamColor.YELLOW)
        self.team_blue = Team(TeamColor.BLUE)
        self.first_player = self.team.players[0]
        self.second_player = self.team.players[1]
        self.no_player = Player(self.team, 0)

    def test_init(self):
        self.assertEqual(PLAYER_PER_TEAM, len(self.team.players))
        self.assertEqual(0, len(self.team.available_players))
        self.assertEqual(0, self.team.score)
        self.assertFalse(self.team.exiting_players)
        self.assertFalse(self.team.entering_players)
        self.assertEqual(TeamColor.YELLOW, self.team.team_color)

    def test_has_player_exists(self):
        self.assertTrue(self.team.has_player(self.first_player))

    def test_has_player_no_exists(self):
        self.assertFalse(self.team.has_player(self.no_player))

    def test_update_player(self):
        init_pose = self.first_player.pose
        self.assertEqual(init_pose, self.team.players[0].pose)
        self.team.update_player(0, [Pose(Position(500, 500))])
        self.assertNotEqual(init_pose, self.team.players[0].pose)
        self.assertEqual(self.team.players[0].pose, self.first_player.pose)

    def test_update_availability_players(self):
        for i in range(MAX_PLAYER_ON_FIELD_PER_TEAM):
            self.team.update_player(i, [Pose(Position(500, 500))])
            self.assertTrue(
                self.team.players[i] in self.team.available_players.values())
        self.team.update_player(MAX_PLAYER_ON_FIELD_PER_TEAM + 1,
                                [Pose(Position(500, 500))])
        self.assertTrue(
            self.team.players[MAX_PLAYER_ON_FIELD_PER_TEAM +
                              1] in self.team.available_players.values())
        self.assertTrue(
            len(self.team.available_players) == MAX_PLAYER_ON_FIELD_PER_TEAM +
            1)
        # simulating 21 frames where we don't see the robot
        for i in range(21):
            self.team.update_player(0, [None])
        self.assertTrue(
            self.team.players[0] not in self.team.available_players.values())

    def test_invalid_id(self):
        AN_INVALID_ID = PLAYER_PER_TEAM + 1
        uut = self.team.update_player
        self.assertRaises(KeyError, uut, AN_INVALID_ID, Pose())

    def test_is_team_yellow(self):
        self.assertTrue(self.team.is_team_yellow())
        self.assertFalse(self.team_blue.is_team_yellow())
Exemple #8
0
class Game:
    def __init__(self, terrain_type="sim"):
        self.ball = Ball()
        self.field = Field(self.ball, terrain_type)
        self.referee = None
        self.our_team_color = None
        self.enemy_team_color = None
        self.blue_team = Team(TeamColor.BLUE_TEAM, type="friend")
        self.yellow_team = Team(TeamColor.YELLOW_TEAM, type="enemi")
        self.friends = None
        self.enemies = None
        self.delta_t = None
        self.cmd = None

    def set_command(self, cmd):
        for commands in cmd:
            self.friends.update_player_command(commands.player.id, commands)

    def set_referee(self, p_referee):
        self.referee = p_referee

    def set_our_team_color(self, p_our_team_color):
        assert isinstance(p_our_team_color, TeamColor), \
            "The color of any team must be a TeamColor enum!"

        self.our_team_color = p_our_team_color
        self._adjust_teams_color()

    def set_enemy_team_color(self, p_enemy_team_color):
        assert isinstance(p_enemy_team_color, TeamColor), \
            "The color of any team must be a TeamColor enum!"

        self.our_team_color = p_enemy_team_color

    def update_game_state(self, referee_command):
        # TODO: Réviser code, ça semble louche
        blue_team = referee_command.teams[0]
        self.blue_team.score = blue_team.goalie_count
        yellow_team = referee_command.teams[0]
        self.yellow_team.score = yellow_team.goalie_count

        # Commented out since it is not used MGL 2017/01/07
        # command = Referee.Command(referee_command.command.name)
        # self.referee.command = command

    def update(self, vision_frame: messages_robocup_ssl_wrapper_pb2, delta: float):
        self.delta_t = delta
        # print(delta)
        self._update_ball(vision_frame, delta)
        self._update_players(vision_frame, delta)

    def update_kalman(self, vision_frame: List, delta: float):
        self.delta_t = delta
        self.kalman_update_ball(vision_frame, delta)
        self.kalman_update_players(vision_frame, delta)

    def is_team_yellow(self):
        return self.our_team_color == TeamColor.YELLOW_TEAM

    def _adjust_teams_color(self):
        if self.our_team_color == TeamColor.YELLOW_TEAM:
            self.friends = self.yellow_team
            self.enemies = self.blue_team
        elif self.our_team_color == TeamColor.BLUE_TEAM:
            self.friends = self.blue_team
            self.enemies = self.yellow_team
        else:
            raise ValueError("Can't adjust the teamscolor in Game object!")

    def _update_ball(self, vision_frame, delta):
        try:
            ball_position = Position(vision_frame.detection.balls[0].x,
                                     vision_frame.detection.balls[0].y,
                                     vision_frame.detection.balls[0].z)
            self.field.move_ball(ball_position, delta)
        except IndexError:
            pass
            # print("Ball not found")

    def _update_players(self, vision_frame, delta):
        blue_team = vision_frame.detection.robots_blue
        yellow_team = vision_frame.detection.robots_yellow

        self._update_players_of_team(blue_team, self.blue_team, delta)
        self._update_players_of_team(yellow_team, self.yellow_team, delta)

    def kalman_update_ball(self, vision_frame, delta):
        kalman_list = []
        for c in vision_frame:
            kalman_list.append(c["ball"])
        self.ball.kalman_update(kalman_list, delta)

    def kalman_update_players(self, vision_frame, delta):
        kalman_blue = [[] for i in range(0, 5)]
        kalman_yellow = [[] for i in range(0, 5)]
        for c in vision_frame:
            for i in range(0, 5):
                kalman_blue[i].append(c["blues"][i])
                kalman_yellow[i].append(c["yellows"][i])

        for i in range(0, 5):
            self.blue_team.kalman_update(i, kalman_blue[i], delta)
            self.yellow_team.kalman_update(i, kalman_yellow[i], delta)


    @staticmethod
    def _update_players_of_team(players, team, delta):
        for player in players:
            player_position = Position(player.x, player.y, player.height)
            player_pose = Pose(player_position, player.orientation)
            team.update_player(player.robot_id, player_pose, delta)
Exemple #9
0
 def setUp(self):
     self.team = Team(TeamColor.YELLOW_TEAM)
     self.team_blue = Team(TeamColor.BLUE_TEAM)
     self.first_player = self.team.players[0]
     self.second_player = self.team.players[1]
     self.no_player = Player(self.team, 0)
Exemple #10
0
from RULEngine.Game.Team import Team
from RULEngine.Util.Position import Position

COMMAND_HOST = "127.0.0.1"
COMMAND_PORT = 20011
VISION_HOST = "224.5.23.2"
VISION_PORT = 10020

FPS = 1 / 60

gr_sim_cmd_sender = udp_server.GrSimCommandSender(COMMAND_HOST, COMMAND_PORT)
gr_sim_debug_sender = udp_server.GrSimDebugSender(COMMAND_HOST, COMMAND_PORT)
vision = Vision(VISION_HOST, VISION_PORT)

frames = []
blue_team = Team(False)
yellow_team = Team(True)


def main():
    print("Debut test d'asservissement")

    init_field()

    default_player = blue_team.players[0]

    center_player(default_player)
    step_response(default_player)
    wait_time(1)
    stop_player(default_player)