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 _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!")
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())
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)
def setUp(self): self.team = Team(TeamColor.BLUE) self.player1 = Player(self.team, 1) self.player2 = Player(self.team, 2)
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)
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())
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)
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)
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)