Ejemplo n.º 1
0
    def nextTurn(self, gameobj, userinputobj):
        if (userinputobj.up_pressed == True):
            gameobj.p2.paddleobj.up(5)
        if (userinputobj.down_pressed == True):
            gameobj.p2.paddleobj.down(5)
        if (userinputobj.w_pressed == True):
            gameobj.p1.paddleobj.up(5)
        if (userinputobj.s_pressed == True):
            gameobj.p1.paddleobj.down(5)
        if (userinputobj.n_pressed == True):
            gameobj.clearPoints()

        # calc ball position
        gameobj.ballobj.position_ball_x += gameobj.ballobj.velocity_ball_x
        gameobj.ballobj.position_ball_y += gameobj.ballobj.velocity_ball_y

        if (gameobj.ballobj.position_ball_y <= 0):
            gameobj.ballobj.velocity_ball_y = 2

        if (gameobj.ballobj.position_ball_y >= 350):
            gameobj.ballobj.velocity_ball_y = -2

        if (gameobj.ballobj.position_ball_x < 10):
            gameobj.addPointP2()
            gameobj.ballobj = entity.Ball()
        elif (gameobj.ballobj.position_ball_x >= 20
              and gameobj.ballobj.position_ball_x < 30):
            if (gameobj.ballobj.position_ball_y >=
                    gameobj.p1.paddleobj.position
                    and gameobj.ballobj.position_ball_y <
                    gameobj.p1.paddleobj.position + 55):
                gameobj.ballobj.velocity_ball_x = -gameobj.ballobj.velocity_ball_x

        if (gameobj.ballobj.position_ball_x > 580):
            gameobj.addPointP1()
            gameobj.ballobj = entity.Ball()
        elif (gameobj.ballobj.position_ball_x >= 565
              and gameobj.ballobj.position_ball_x < 575):
            if (gameobj.ballobj.position_ball_y >=
                    gameobj.p2.paddleobj.position
                    and gameobj.ballobj.position_ball_y <
                    gameobj.p2.paddleobj.position + 55):
                gameobj.ballobj.velocity_ball_x = -gameobj.ballobj.velocity_ball_x

        temp = random.random() * 100
        if (temp >= 98):
            gameobj.ballobj.velocity_ball_x = gameobj.ballobj.velocity_ball_x * 1.1
        temp = random.random() * 100
        if (temp >= 98):
            gameobj.ballobj.velocity_ball_y = gameobj.ballobj.velocity_ball_y * 1.1
Ejemplo n.º 2
0
 def __init__(self, player_left, player_right, configuration):
     self.player_left = player_left
     self.player_right = player_right
     self.configuration = configuration
     self.background = pygame.Surface(configuration['screen_size'])
     self.sprites = pygame.sprite.OrderedUpdates()
     line = entity.Line(load_image(configuration['line_image']), self.sprites)
     line.rect.topleft = ((configuration['screen_size'][0]-line.rect.width)/2, 0)
     paddle_image = load_image(configuration['paddle_image'])
     self.paddle_left = entity.Paddle(configuration['paddle_velocity'], paddle_image, configuration['paddle_bounds'], self.sprites)
     self.paddle_right = entity.Paddle(configuration['paddle_velocity'], paddle_image, configuration['paddle_bounds'], self.sprites)
     self.paddle_left.rect.topleft = (self.configuration['paddle_left_position'], (self.configuration['screen_size'][1]-self.paddle_left.rect.height)/2)
     self.paddle_right.rect.topleft = (self.configuration['paddle_right_position'], (self.configuration['screen_size'][1]-self.paddle_left.rect.height)/2)
     digit_images = [load_image(configuration['digit_image'] % n) for n in xrange(10)]
     self.score_left = entity.Score(digit_images, self.sprites)
     self.score_left.rect.topleft = configuration['score_left_position']
     self.score_right = entity.Score(digit_images, self.sprites)
     self.score_right.rect.topleft = configuration['score_right_position']
     ball_image = load_image(configuration['ball_image'])
     self.ball = entity.Ball(self.configuration['ball_velocity'], ball_image, self.sprites)
     self.bounds = pygame.Rect(20, 0, configuration['screen_size'][0]-ball_image.get_width()-20, configuration['screen_size'][1]-ball_image.get_height())
     self.sound_missed = pygame.mixer.Sound(configuration['sound_missed'])
     self.sound_paddle = pygame.mixer.Sound(configuration['sound_paddle'])
     self.sound_wall = pygame.mixer.Sound(configuration['sound_wall'])
     self.reset_game(random.random()<0.5)
     self.running = True
Ejemplo n.º 3
0
 def __init__(self,
              width=config.SANDBOX_WIDTH,
              balls=config.BALLS,
              height=config.SANDBOX_HEIGHT,
              limit=config.SCORE_LIMIT):
     self.width = width
     self.height = height
     self.limit = limit
     self.balls = []
     # заполняем комнату противниками
     for _ in range(balls):
         e = entity.Ball(width=width, height=height)
         self.balls.append(e)
     # создаем нашего агента
     self.agent = entity.Ball(width=width,
                              height=height,
                              speed=config.AGENT_SPEED,
                              radius=config.AGENT_SIZE,
                              color=config.AGENT_COLOR)
     self.run = False
Ejemplo n.º 4
0
    def __init__(self,
                 team_color,
                 team_side,
                 robot_total,
                 enemy_total,
                 node="default"):
        # type: (str, int, int, int, str) -> None

        # シングルトンなので2度呼ばれたときに再作成しないようにする
        if not self._node_name:
            self._node_name = node
            rospy.loginfo("initialized Objects: as \"" + self._node_name +
                          "\"")

            self.team_color = team_color
            self.team_side = team_side
            self.robot_total = robot_total
            self.enemy_total = enemy_total

            self._robot_ids = range(self.robot_total)
            self._enemy_ids = range(self.enemy_total)

            self._active_robot_ids = range(self.robot_total)
            self._active_enemy_ids = range(self.robot_total)

            self.robot = [entity.Robot(id=i) for i in self._robot_ids
                          ]  # type: typing.List[entity.Robot]
            self.enemy = [entity.Robot(id=i) for i in self._enemy_ids
                          ]  # type: typing.List[entity.Robot]

            # roles = ["RFW", "LFW", "RDF", "LDF", "GK"]
            # for robot, role in zip(self.robot, roles):
            #     robot.set_role(role)

            roles = ["RFW", "LFW", "RDF", "LDF", "GK"]
            for robot_id, role in zip(self._robot_ids, roles):
                self.get_robot_by_id(robot_id).set_role(role)
            self.roles = roles  # 保存

            rospy.Timer(rospy.Duration(1.0), self.redefine_roles)

            self.ball = entity.Ball()
            """---ボール軌道の考慮時間幅(linear Regressionで軌道予測するため)---"""
            self.ball_dynamics_window = 5
            self.ball_dynamics = [[0., 0.]
                                  for i in range(self.ball_dynamics_window)]

            self.odom_listener()
            self.existing_listener()
        else:
            rospy.loginfo("argument of Objects: \"node=" + node +
                          "\" not used because already initialized as \"" +
                          self._node_name + "\".")
    def __init__(self, team_color, robot_total, enemy_total):
        self.team_color = team_color
        self.robot_total = robot_total
        self.enemy_total = enemy_total
        self.robot = [entity.Robot() for i in range(self.robot_total)]
        self.enemy = [entity.Robot() for i in range(self.enemy_total)]
        self.ball = entity.Ball()
        """---ボール軌道の考慮時間幅(linear Regressionで軌道予測するため)---"""
        self.ball_dynamics_window = 5
        self.ball_dynamics = [[0., 0.]
                              for i in range(self.ball_dynamics_window)]

        self.odom_listener()
Ejemplo n.º 6
0
 def __init__(self, player_left, player_right, configuration):
     self.player_left = player_left
     self.player_right = player_right
     self.configuration = configuration
     self.paddle_left = entity.Paddle(configuration['paddle_velocity'], configuration['paddle_image'], \
         configuration['paddle_bounds'])
     self.paddle_right = entity.Paddle(configuration['paddle_velocity'], configuration['paddle_image'], \
         configuration['paddle_bounds'])
     self.paddle_left.rect.topleft = (self.configuration['paddle_left_position'], \
         (self.configuration['screen_size'][1]-self.paddle_left.rect.height)/2)
     self.paddle_right.rect.topleft = (self.configuration['paddle_right_position'],\
         (self.configuration['screen_size'][1]-self.paddle_left.rect.height)/2)
     self.ball = entity.Ball( self.configuration['ball_velocity'], configuration['ball_image'] )
     self.bounds = entity.Rect(20, 0, \
         configuration['screen_size'][0]-self.ball.rect.width-20, \
         configuration['screen_size'][1]-self.ball.rect.height)
     self.reset_game(random.random()<0.5)
     self.running = True
Ejemplo n.º 7
0
    def __init__(self):
        rospy.init_node("world_model")

        self.team_color = str(rospy.get_param("team_color"))
        """---devisionの選択---"""
        self.devision = "A"
        self.devision = "B"
        """---味方ロボット台数と敵ロボット台数---"""
        self.robot_num = 4
        self.enemy_num = 8
        """---フィールドとロボットのパラメータ---"""
        self.robot_r = 0.09
        if self.devision == "A":
            self.field_x_size = 12.
            self.field_y_size = 9.
        elif self.devision == "B":
            self.field_x_size = 9.
            self.field_y_size = 6.
        self.field_x_min = -self.field_x_size / 2.
        self.field_x_max = self.field_x_size / 2.
        self.field_y_min = -self.field_y_size / 2.
        self.field_y_max = self.field_y_size / 2.
        self.goal_y_size = 1.2
        self.goal_y_min = -self.goal_y_size / 2.
        self.goal_y_max = self.goal_y_size / 2.
        """---team cloorと攻撃方向---"""
        #self.color = "Yellow"
        self.color = "Blue"
        self.goal_direction = "Right"
        #self.goal_direction = "Left"
        """---PID制御用パラメータ---"""
        self.Kpv = 0.3
        self.Kpr = 0.1
        """---Potential法用パラメータ---"""
        self.Kpv_2 = 0.5
        self.Kpr_2 = 0.1
        """---refereeからの指示をもとにどのループを回すかの指標---"""
        self.referee_branch = None
        """---ボール軌道の考慮時間幅(linear Regressionで軌道予測するため)---"""
        self.ball_dynamics_window = 5
        self.ball_dynamics_x = [0. for i in range(self.ball_dynamics_window)]
        self.ball_dynamics_y = [0. for i in range(self.ball_dynamics_window)]

        self.goal_keeper_x = self.field_x_min + 0.05
        """---robot、ballオブジェクトのインスタンス---"""
        self.robot = [entity.Robot() for i in range(self.robot_num)]
        self.enemy = [entity.Robot() for i in range(self.enemy_num)]
        self.ball = entity.Ball()
        """---Publisherオブジェクトのインスタンス---"""
        self.robot_0_pub = rospy.Publisher("/" + self.team_color +
                                           "/robot_0/robot_commands",
                                           robot_commands,
                                           queue_size=10)
        self.robot_1_pub = rospy.Publisher("/" + self.team_color +
                                           "/robot_1/robot_commands",
                                           robot_commands,
                                           queue_size=10)
        self.robot_2_pub = rospy.Publisher("/" + self.team_color +
                                           "/robot_2/robot_commands",
                                           robot_commands,
                                           queue_size=10)
        self.robot_3_pub = rospy.Publisher("/" + self.team_color +
                                           "/robot_3/robot_commands",
                                           robot_commands,
                                           queue_size=10)
        """
        self.robot_4_pub = rospy.Publisher("/robot_4/robot_commands", robot_commands, queue_size=10)
        self.robot_5_pub = rospy.Publisher("/robot_5/robot_commands", robot_commands, queue_size=10)
        self.robot_6_pub = rospy.Publisher("/robot_6/robot_commands", robot_commands, queue_size=10)
        self.robot_7_pub = rospy.Publisher("/robot_7/robot_commands", robot_commands, queue_size=10)
        """
        """---status Publisherオブジェクトのインスタンス---"""
        self.robot_0_status_pub = rospy.Publisher("/" + self.team_color +
                                                  "/robot_0/status",
                                                  Status,
                                                  queue_size=10)
        self.robot_1_status_pub = rospy.Publisher("/" + self.team_color +
                                                  "/robot_1/status",
                                                  Status,
                                                  queue_size=10)
        self.robot_2_status_pub = rospy.Publisher("/" + self.team_color +
                                                  "/robot_2/status",
                                                  Status,
                                                  queue_size=10)
        self.robot_3_status_pub = rospy.Publisher("/" + self.team_color +
                                                  "/robot_3/status",
                                                  Status,
                                                  queue_size=10)
        self.robot_4_status_pub = rospy.Publisher("/" + self.team_color +
                                                  "/robot_4/status",
                                                  Status,
                                                  queue_size=10)
        self.robot_5_status_pub = rospy.Publisher("/" + self.team_color +
                                                  "/robot_5/status",
                                                  Status,
                                                  queue_size=10)
        self.robot_6_status_pub = rospy.Publisher("/" + self.team_color +
                                                  "/robot_6/status",
                                                  Status,
                                                  queue_size=10)
        self.robot_7_status_pub = rospy.Publisher("/" + self.team_color +
                                                  "/robot_7/status",
                                                  Status,
                                                  queue_size=10)
        """pid用のflag初期化"""
        for id in range(self.robot_num):
            self.robot[id].pid_init_flag = True
        """cmdの立ち上げ"""
        self.cmd = [robot_commands() for i in range(self.robot_num)]
        """statusの立ち上げ"""
        self.status = [Status() for i in range(self.robot_num)]
        """cmdのパラメータ初期化"""
        for id in range(self.robot_num):
            self.cmd[id].vel_surge = 0.  #vel_x
            self.cmd[id].vel_sway = 0.  #vel_y
            self.cmd[id].omega = 0.  #vel_theta
            self.cmd[id].kick_speed_x = 0
            self.cmd[id].kick_speed_z = 0
            self.cmd[id].dribble_power = 0
        """statusのパラメータ初期化"""
        for id in range(self.robot_num):
            self.status[id].status = "None"
        """positionの割り振り(動的にPositionが切り替わるのは多分大事、現状使っていない)"""
        """
        if self.robot_num == 8:
            self.robot[0].position = "GK"
            self.robot[1].position = "LCB"
            self.robot[2].position = "RCB"
            self.robot[3].position = "LSB"
            self.robot[4].position = "RSB"
            self.robot[5].position = "LMF"
            self.robot[6].position = "RMF"
        elif self.robot_num == 4:
            self.robot[0].position = "GK"
            self.robot[1].position = "LCB"
            self.robot[2].position = "CCB"
            self.robot[3].position = "RCB"
        """
        """publishのrate(多分rospyのを使うからいらない)"""
        self.publish_rate = 0.05  #s #
        """strategyの選択(いまはつかっていない)"""
        self.strategy = None
        """refereeから受信する情報(現状cmdしか使っていない)"""
        self.referee = None
        """---敵と味方どっちがボールをもっているか(現状使ってない)---"""
        self.which_has_a_ball = None
        """---攻撃かdefenceか(これをうまく使っていきたい)---"""
        self.attack_or_defence = None
        """---ポテンシャル法用のパラメータ(1/x)---"""
        self.weight_enemy = 1.0
        self.weight_goal = 100.0
        self.delta = 0.0000001
        """---ポテンシャル法用のパラメータ(ガウス関数)---"""
        self.weight_enemy_2 = 7.0
        self.weight_goal_2 = 20000000.0
        self.width_enemy = 0.1
        self.width_goal = 0.1
        self.delta_2 = 0.00001
Ejemplo n.º 8
0
    def __init__(self, robot_num, enemy_num):
        self.robot_num = robot_num
        self.enemy_num = enemy_num
        self.robot = [entity.Robot() for i in range(robot_num)]
        self.enemy = [entity.Robot() for i in range(enemy_num)]
        self.ball = entity.Ball()

        self.field_x_size = 12000.
        self.field_y_size = 9000.
        self.field_x_min = - self.field_x_size / 2.
        self.field_x_max = self.field_x_size / 2.
        self.field_y_min = - self.field_y_size / 2.
        self.field_y_max = self.field_y_size / 2.

        self.goal_y_size = 1200.
        self.goal_y_min = -self.goal_y_size / 2.
        self.goal_y_max = self.goal_y_size / 2.

        self.ball_dynamics_window = 10
        self.ball_dynamics_x = [0. for i in range(self.ball_dynamics_window)]
        self.ball_dynamics_y = [0. for i in range(self.ball_dynamics_window)]

        self.goal_keeper_x = self.field_x_min + 20

        # position
        if self.robot_num == 8:
            self.robot[0].position = "GK"
            self.robot[1].position = "LCB"
            self.robot[2].position = "RCB"
            self.robot[3].position = "LSB"
            self.robot[4].position = "RSB"
            self.robot[5].position = "LMF"
            self.robot[6].position = "RMF"
        elif self.robot_num == 4:
            self.robot[0].position = "GK"
            self.robot[1].position = "LCB"
            self.robot[2].position = "CCB"
            self.robot[3].position = "RCB"
        elif self.robot_num == 5:
            self.robot[0].position = "GK"
            self.robot[1].position = "LCB"
            self.robot[2].position = "CCB"
            self.robot[3].position = "RCB"
            self.robot[4].position = "CF"

        self.rate = 0.05 #s

        self.strategy = None

        self.referee = None

        self.which_has_a_ball = None
        self.attack_or_defence = None

        # weight for potential
        self.weight_enemy = 1.0
        self.weight_goal = 5.0
        self.delta = 0.1
        self.speed = self.robot[0].max_velocity

        self.counter = 0
Ejemplo n.º 9
0
    def __init__(self):
        rospy.init_node("world_model")
        self.team_color = str(rospy.get_param("~team_color"))

        self.robot_total = 8
        self.enemy_total = 8
        """---robot、ballオブジェクトのインスタンス---"""
        self.robot = [entity.Robot() for i in range(self.robot_total)]
        self.enemy = [entity.Robot() for i in range(self.enemy_total)]
        self.ball = entity.Ball()
        """statusの立ち上げ msg"""
        self.status = [Status() for i in range(self.robot_total)]
        """statusのパラメータ初期化"""
        for id in range(self.robot_total):
            self.status[id].status = "None"
            self.status[id].pid_goal_pos_x = 0.
            self.status[id].pid_goal_pos_y = 0.
            self.status[id].pid_goal_theta = 0.
            self.status[id].pid_circle_center_x = 0.
            self.status[id].pid_circle_center_y = 0.
            self.status[id].pass_target_pos_x = 0.
            self.status[id].pass_target_pos_y = 0.

        #print(self.status)
        """----上の5つの変数、インスタンスをまとめたもの、callbackをもつ---"""
        self.objects = Objects(self.robot_total, self.enemy_total, self.robot,
                               self.enemy, self.ball)
        """---World State(固定パラが多い)---"""
        self.world_state = WorldState(self.objects)
        """---Referee---"""
        self.referee = Referee(self.world_state)
        """---DecisionMaker---"""
        self.decision_maker = DecisionMaker(self.world_state, self.objects,
                                            self.referee, self.status)
        """---status Publisherオブジェクトのインスタンス---"""
        self.robot_0_status_pub = rospy.Publisher("/" + self.team_color +
                                                  "/robot_0/status",
                                                  Status,
                                                  queue_size=10)
        self.robot_1_status_pub = rospy.Publisher("/" + self.team_color +
                                                  "/robot_1/status",
                                                  Status,
                                                  queue_size=10)
        self.robot_2_status_pub = rospy.Publisher("/" + self.team_color +
                                                  "/robot_2/status",
                                                  Status,
                                                  queue_size=10)
        self.robot_3_status_pub = rospy.Publisher("/" + self.team_color +
                                                  "/robot_3/status",
                                                  Status,
                                                  queue_size=10)
        self.robot_4_status_pub = rospy.Publisher("/" + self.team_color +
                                                  "/robot_4/status",
                                                  Status,
                                                  queue_size=10)
        self.robot_5_status_pub = rospy.Publisher("/" + self.team_color +
                                                  "/robot_5/status",
                                                  Status,
                                                  queue_size=10)
        self.robot_6_status_pub = rospy.Publisher("/" + self.team_color +
                                                  "/robot_6/status",
                                                  Status,
                                                  queue_size=10)
        self.robot_7_status_pub = rospy.Publisher("/" + self.team_color +
                                                  "/robot_7/status",
                                                  Status,
                                                  queue_size=10)