コード例 #1
0
    def workA(self):
        count = 1
        fisrt_time_hold = False
        while not rospy.is_shutdown():
            res = self.call_Handle(1) #start holding device
            if not self.call_Handle(1).BallIsHolding:  # BallIsHolding = 0
                self.call_Handle(1)
                self.chase(MaxSpd_A)
                fisrt_time_hold = True
            else: # BallIsHolding = 1
                global RadHead
                
                # [] give input to L
                
                # [] recieve output from L

                if fisrt_time_hold == True:
                    
                    rel_turn_ang = 90
                    rel_turn_rad = math.radians(rel_turn_ang)
                    self.RadTurn = rel_turn_rad + self.RadHead
                    fisrt_time_hold = False
                else:
                    fisrt_time_hold = False
                    error = math.fabs (turnHead2Kick(self.RadHead, self.RadTurn))
                    if error > angle_thres : # 還沒轉到    
                        self.turn(self.RadTurn)
                    else : # 轉到
                        self.kick()
コード例 #2
0
ファイル: strategy_node.py プロジェクト: jameschen0117/soccer
    def workA(self):
        count = 1
        while not rospy.is_shutdown():
            # while not self.ball_out():
            # ball_out()
            res = self.call_Handle(1)  #start holding device
            # print(turn(100))
            # print(res)
            if not self.call_Handle(1).BallIsHolding:  # BallIsHolding = 0
                self.call_Handle(1)
                self.chase(MaxSpd_A)

                rel_turn_ang = 45
                rel_turn_rad = math.radians(rel_turn_ang)
                self.RadTurn = rel_turn_rad + self.RadHead

            else:  # BallIsHolding = 1
                global RadHead
                # [] you will recieve a relative kick ang (-180~180) rel_turn_ang
                # print(rel_turn_rad)
                # print(self.RadTurn)
                error = math.fabs(turnHead2Kick(self.RadHead, self.RadTurn))

                if error > angle_thres:  # 還沒轉到
                    self.turn(self.RadTurn)
                else:  # 轉到
                    self.kick()
コード例 #3
0
 def turn(self, angle):
     global MaxSpd_A
     self.vec.Vx = MaxSpd_A * math.cos(self.RadHead2Ball)
     self.vec.Vy = MaxSpd_A * math.sin(self.RadHead2Ball)
     # self.vec.Vx = 0
     # self.vec.Vy = 0
     self.vec.w = turnHead2Kick(self.RadHead, angle) * RotConst
     self.vel_pub.publish(self.vec)
     self.show("Turning")
コード例 #4
0
    def workA(self):
        np.set_printoptions(suppress=True)
        i = 0
        fisrt_time_hold = False
        while not rospy.is_shutdown():
            # while self.step_count < 30000:
            while 1:
                # print(self.ball_in(), self.ball_out(), self.stealorfly())
                rospy.wait_for_service('/nubot1/BallHandle')
                self.call_Handle(1)  # open holding device
                if self.game_is_done() and self.real_resart:
                    # print('self.game_is_done()',self.game_is_done())
                    self.r = self.cnt_rwd()
                    # print('h',self.HowEnd)
                    s_ = self.sac_cal.input(self.HowEnd)  #out state
                    if i > 1:
                        if len(self.s) == 7 and len(s_) == 7:
                            # print('000000000000000000',np.shape(self.s), np.shape(self.a))
                            self.agent.replay_buffer.store_transition(
                                self.s, self.a, self.r, s_, self.done)
                        # print('d',self.done)
                        self.ep_rwd = self.r
                        print('ep rwd value=', self.r)
                        self.end_rate(self.HowEnd)
                    self.step_count = self.step_count + 1
                    i += 1
                    self.s = s_
                    self.done = False
                    if i > 512:  # 64
                        self.agent.learn(i, self.r, self.ep_rwd)
                    # self.ready2restart_pub.publish(True)
                    # self.ready2restart_pub.publish(False)
                    self.real_resart = False
                    self.HowEnd = 0
                    # print('i want to go in self.restart()')
                    self.restart()
                    # self.end_rate(self.HowEnd)
                    # print('---')
                # elif not self.game_is_done():

                else:
                    # print('self.game_is_done()',self.game_is_done())
                    rospy.wait_for_service('/nubot1/BallHandle')
                    if not self.call_Handle(
                            1).BallIsHolding:  # BallIsHolding = 0
                        self.chase(MaxSpd_A)
                        fisrt_time_hold = True
                        rospy.wait_for_service('/nubot1/BallHandle')
                        # do real reset before holding
                        self.ready2restart = False
                        self.is_fly = False
                        self.is_steal = False
                        self.is_stealorfly = False
                        self.is_in = False
                        self.is_out = False
                        self.real_resart = True  #
                    elif self.call_Handle(
                            1).BallIsHolding:  # BallIsHolding = 1
                        global RadHead
                        self.chase(MaxSpd_A)
                        if fisrt_time_hold == True:
                            self.real_resart = True  #
                            self.chase(MaxSpd_A)
                            self.show('Touch')
                            self.r = self.cnt_rwd()
                            s_ = self.sac_cal.input(0)  #state_for_sac
                            if i >= 1:
                                if len(self.s) == 7 and len(s_) == 7:
                                    self.agent.replay_buffer.store_transition(
                                        self.s, self.a, self.r, s_, self.done)
                                print('step rwd value= ', self.r)
                            self.step_count = self.step_count + 1
                            self.done = False
                            i += 1
                            self.s = s_
                            self.a = self.agent.choose_action(
                                self.s)  #action_from_sac
                            rel_turn_ang = self.sac_cal.output(
                                self.a)  #action_from_sac

                            global pwr, MAX_PWR
                            pwr = (self.a[1] +
                                   1) * MAX_PWR / 2 + 1.4  #normalize
                            # sac]

                            rel_turn_rad = math.radians(rel_turn_ang)
                            self.RadTurn = rel_turn_rad + self.RadHead
                            fisrt_time_hold = False
                            if i > 512:
                                self.agent.learn(i, self.r, self.ep_rwd)
                        elif fisrt_time_hold == False:
                            self.chase(MaxSpd_A)
                            error = math.fabs(
                                turnHead2Kick(self.RadHead, self.RadTurn))
                            if error > angle_thres:  # 還沒轉到
                                self.turn(self.RadTurn)
                            else:  # 轉到
                                self.kick()
コード例 #5
0
 def turn(self, angle):
     self.vec.Vx = 0
     self.vec.Vy = 0
     self.vec.w = turnHead2Kick(self.RadHead, angle) * RotConst
     self.vel_pub.publish(self.vec)
     self.show("Turning")
コード例 #6
0
    def workA(self):
        np.set_printoptions(suppress=True)
        i = 0 
        while not rospy.is_shutdown():
            rospy.wait_for_service('/nubot1/BallHandle')
            self.Acall_Handle(1) # open holding device
            rospy.wait_for_service('/nubot2/BallHandle')
            self.Bcall_Handle(1) # open holding device
                        
            if self.game_is_done() and self.real_resart:
                self.r = self.cnt_rwd()
                s_ = self.sac_cal.input(self.HowEnd) #out state
                if i > 1:
                    if len(self.s) == 10 and len(s_) == 10:
                        self.agent.replay_buffer.store_transition(self.s , self.a, self.r, s_, self.done)
                    self.ep_rwd = self.r
                    print('ep rwd value=',self.r)
                    self.end_rate(self.HowEnd)
                self.step_count = self.step_count + 1
                i += 1
                self.s = s_
                self.done = False
                if i > 512: # 64
                    self.agent.learn(i, self.r, self.ep_rwd)
                self.real_resart = False
                self.HowEnd = 0
                self.restart()               
            else:
                rospy.wait_for_service('/nubot1/BallHandle')
                rospy.wait_for_service('/nubot2/BallHandle')
                self.Acall_Handle(1)
                self.Bcall_Handle(1)
               
                self.real_resart = True 
                self.r = self.cnt_rwd()
                s_ = self.sac_cal.input(0)                 #state_for_sac
                if i >= 1:
                    if len(self.s) == 10 and len(s_) == 10:
                        self.agent.replay_buffer.store_transition(self.s, self.a, self.r, s_, self.done)
                    print('step rwd value= ',self.r)
                self.step_count = self.step_count + 1
                self.done = False
                i += 1  
                self.s = s_
                self.a = self.agent.choose_action(self.s)        #action_from_sac
                self.a2Action

                global pwr, MAX_PWR
                pwr = (self.a[1]+1) * MAX_PWR/2 + 1.4    #normalize
                # sac]
                                
                rel_turn_rad = math.radians(rel_turn_ang)
                self.RadTurn = rel_turn_rad + self.RadHead
                fisrt_time_hold = False
                if i > 512:
                    self.agent.learn(i, self.r, self.ep_rwd)
            elif fisrt_time_hold == False:
                self.chase(MaxSpd_A)
                error = math.fabs (turnHead2Kick(self.RadHead, self.RadTurn))
                if error > angle_thres : # 還沒轉到    
                    self.turn(self.RadTurn)
                else : # 轉到
                    self.kick()