def execute(self, b, h, l):
         if Robot.lBallLostCount() > 15 :
            self.scanForBallSkill.execute(b, h, l)
            return False
         else:
            self.trackBallSkill.execute(b, h, l)

         heading = Robot.vRrBallLocation()['heading']
         distance = Robot.vRrBallLocation()['distance']

         distance -= self.goalDistance
         b.actionType(ActionCommand.Body.FAST)
         if degrees(heading) < abs(30):
            b.turn(heading/2.0)
            b.forward(int(distance/2.5))
            b.left(0)
         else:
            b.forward(0)
            b.left(0)
            b.turn(heading/2.0)

         if distance < 15 and abs(heading) < radians(5):
            return True
         return False
   def execute(self, b, h, l):
      isSucceed = False

      yaw = self.lastYaw
      pitch = self.lastPitch
      yawSpeed = 0.0
      pitchSpeed = 0.0

      lostBall = Robot.lBallLostCount()
      if lostBall < self.LOST_TIME:
         ball = Robot.vRrBallLocation()
         ballD = (self.lastDist + ball['distance']) / 2

         realPitch = Robot.sensorValues()['joints']['angles'][Joints.HeadPitch]
         if realPitch > 0.0 and ballD < 850:
            self.usingTopCamera = False
         elif realPitch < radians(-10.0):
            self.usingTopCamera = True

         if self.usingTopCamera:
            Robot.setCamera(WhichCamera.TOP_CAMERA)
            yaw = self.clipYaw(ball['heading'], self.YAW_FAR_OFFSET)
            pitch = radians(72.5) - atan(ballD / 1050)
            yawSpeed = 0.1
            pitchSpeed = 0.25            
         else:
            Robot.setCamera(WhichCamera.BOTTOM_CAMERA)
            yaw = self.clipYaw(ball['heading'], self.YAW_NEAR_OFFSET)
            pitch = radians(29.5) - atan(ballD / 1050)
            yawSpeed = 0.2
            pitchSpeed = 0.25

         self.lastDistDiff = ballD - self.lastDist
         self.lastDist = ballD

         if pitch < radians(-38.5):
            pitch = radians(-38.5)

         if lostBall > 10:
            yaw += (3.5 * self.lastYawDiff)
            yawSpeed = 0.5

            ballD = self.lastDist + (7.0 * self.lastDistDiff)
            if ballD > 1000:
               Robot.setCamera(WhichCamera.TOP_CAMERA)
               pitch = radians(72.5) - atan(ballD / 1050)
            else:
               Robot.setCamera(WhichCamera.BOTTOM_CAMERA)
               pitch = radians(29.5) - atan(ballD / 1050)
            pitchSpeed = 0.5

         self.lastPitch = pitch

         isSucceed = True

      Robot.setCamera(WhichCamera.BOTTOM_CAMERA)
      h.yaw(yaw)
      h.pitch(pitch)
      h.yawSpeed(yawSpeed)
      h.pitchSpeed(pitchSpeed)
      h.isRelative(False)
      return isSucceed