示例#1
0
def chaseAroundBox(player):
    if player.firstFrame():
        player.shouldNotChaseAroundBox = 0

        player.brain.CoA.setRobotGait(player.brain.motion)

    if transitions.shouldKick(player):
        return player.goNow('waitBeforeKick')
    elif transitions.shouldScanFindBall(player):
        return player.goLater('scanFindBall')
    elif transitions.shouldAvoidObstacle(
            player):  # Has potential to go into box!
        return player.goLater('avoidObstacle')

    if not transitions.shouldChaseAroundBox(player):
        player.shouldChaseAroundBox += 1
    else:
        player.shouldChaseAroundBox = 0
    if player.shouldChaseAroundBox > constants.STOP_CHASING_AROUND_BOX:
        return player.goLater('chase')

    ball = player.brain.ball
    my = player.brain.my
    if my.x > NogginConstants.MY_GOALBOX_RIGHT_X:
        # go to corner nearest ball
        if ball.y > NogginConstants.MY_GOALBOX_TOP_Y:
            player.brain.nav.goTo(
                RobotLocation(
                    NogginConstants.MY_GOALBOX_RIGHT_X +
                    constants.GOALBOX_OFFSET,
                    NogginConstants.MY_GOALBOX_TOP_Y +
                    constants.GOALBOX_OFFSET, NogginConstants.MY_GOAL_HEADING))

        if ball.y < NogginConstants.MY_GOALBOX_BOTTOM_Y:
            player.brain.nav.goTo(
                RobotLocation(
                    NogginConstants.MY_GOALBOX_RIGHT_X +
                    constants.GOALBOX_OFFSET,
                    NogginConstants.MY_GOALBOX_BOTTOM_Y -
                    constants.GOALBOX_OFFSET, NogginConstants.MY_GOAL_HEADING))

    if my.x < NogginConstants.MY_GOALBOX_RIGHT_X:
        # go to corner nearest ball
        if my.y > NogginConstants.MY_GOALBOX_TOP_Y:
            player.brain.nav.goTo(
                RobotLocation(
                    NogginConstants.MY_GOALBOX_RIGHT_X +
                    constants.GOALBOX_OFFSET,
                    NogginConstants.MY_GOALBOX_TOP_Y +
                    constants.GOALBOX_OFFSET, NogginConstants.MY_GOAL_HEADING))

        if my.y < NogginConstants.MY_GOALBOX_BOTTOM_Y:
            player.brain.nav.goTo(
                RobotLocation(
                    NogginConstants.MY_GOALBOX_RIGHT_X +
                    constants.GOALBOX_OFFSET,
                    NogginConstants.MY_GOALBOX_BOTTOM_Y -
                    constants.GOALBOX_OFFSET, NogginConstants.MY_GOAL_HEADING))
    return player.stay()
示例#2
0
 def getApproachHeadingFromFront(self):
     ball = self.brain.ball
     my = self.brain.my
     kickDest = KickingHelpers.getShotFarAimPoint(self)
     ballLoc = RobotLocation(ball.x, ball.y, NogginConstants.OPP_GOAL_HEADING)
     ballBearingToKickDest = ballLoc.getRelativeBearing(kickDest)
     if my.y > ball.y:
         destH = ballBearingToKickDest - 90
     else :
         destH = ballBearingToKickDest + 90
     return destH
示例#3
0
def playbookPosition(player):
    """
    Have the robot navigate to the position reported to it from playbook
    """
    brain = player.brain
    nav = brain.nav
    my = brain.my
    ball = brain.ball
    gcState = brain.gameController.currentState

    if player.firstFrame():
        if gcState == 'gameReady':
            brain.tracker.locPans()
        else:
            brain.tracker.activeLoc()

    # determine final goal heading
    if ball.on:
        destHeading = my.h + ball.bearing
    elif ball.framesOff < 30:
        destHeading = my.h + ball.locBearing
    else:
        destHeading = NogginConstants.OPP_GOAL_HEADING

    # turn playbook value into location for navigator
    position = player.brain.play.getPosition()
    position = RobotLocation(position[0], position[1], destHeading)

    if gcState == 'gameReady':
        position.h = NogginConstants.OPP_GOAL_HEADING

    nav.positionPlaybook(position)

    if brain.my.locScore == NogginConstants.BAD_LOC:
        player.shouldRelocalizeCounter += 1

        # only need to check after we increment counter
        if player.shouldRelocalizeCounter >=\
               constants.SHOULD_RELOC_FRAME_THRESH:
            return player.goLater('relocalize')

    else:
        player.shouldRelocalizeCounter = 0

    if transitions.shouldAvoidObstacle(player):
        return player.goNow('avoidObstacle')

    # we're at the point, let's switch to another state
    if nav.isStopped() and player.counter > 0:
        return player.goLater('atPosition')

    return player.stay()
示例#4
0
def playbookPosition(player):
    """
    Have the robot navigate to the position reported to it from playbook
    """
    brain = player.brain
    nav = brain.nav
    my = brain.my
    ball = brain.ball
    gcState = brain.gameController.currentState

    if player.firstFrame():
        if gcState == 'gameReady':
            brain.tracker.locPans()
        else:
            brain.tracker.activeLoc()

    # determine final goal heading
    if ball.on:
        destHeading = my.h + ball.bearing
    elif ball.framesOff < 30:
        destHeading = my.h + ball.locBearing
    else:
        destHeading = NogginConstants.OPP_GOAL_HEADING

    # turn playbook value into location for navigator
    position = player.brain.play.getPosition()
    position = RobotLocation(position[0], position[1], destHeading)

    if gcState == 'gameReady':
        position.h = NogginConstants.OPP_GOAL_HEADING

    nav.positionPlaybook(position)

    if brain.my.locScore == NogginConstants.BAD_LOC:
        player.shouldRelocalizeCounter += 1

        # only need to check after we increment counter
        if player.shouldRelocalizeCounter >=\
               constants.SHOULD_RELOC_FRAME_THRESH:
            return player.goLater('relocalize')

    else:
        player.shouldRelocalizeCounter = 0

    if transitions.shouldAvoidObstacle(player):
        return player.goNow('avoidObstacle')

    # we're at the point, let's switch to another state
    if nav.isStopped() and player.counter > 0:
        return player.goLater('atPosition')

    return player.stay()
def goalieAtPosition(player):
    brain = player.brain
    nav = player.brain.nav

    if brain.ball.dist >= constants.ACTIVE_LOC_THRESH:
        player.brain.tracker.activeLoc()
    else:
        player.brain.tracker.trackBall()

    # Check that the position is correct
    ball = brain.ball
    heading = None

    if ball.on:
        heading = brain.my.h + ball.bearing
    elif ball.framesOff < 3:
        heading = brain.my.h + ball.locBearing
    else:
        heading = NogginConstants.OPP_GOAL_HEADING

    position = player.brain.play.getPosition()
    position = RobotLocation(position[0], position[1], heading)

    if (abs(nav.dest.x - position.x) > constants.SHOULD_POSITION_DIFF
            or abs(nav.dest.y - position.y) > constants.SHOULD_POSITION_DIFF
            or not player.atDestinationGoalie() or not player.atHeading()):
        return player.goNow("goalieAwesomePosition")
    return player.stay()
def goalieAwesomePosition(player):
    """
    Have the robot navigate to the position reported to it from playbook
    """
    brain = player.brain
    nav = brain.nav
    my = brain.my

    if player.firstFrame():
        player.changeOmniGoToCounter = 0

    if brain.ball.dist >= constants.ACTIVE_LOC_THRESH:
        player.brain.tracker.activeLoc()
    else:
        player.brain.tracker.trackBall()

    heading = None
    ball = brain.ball

    if ball.on:
        heading = brain.my.h + ball.bearing
    elif ball.framesOff < 3:
        heading = brain.my.h + ball.locBearing
    else:
        heading = NogginConstants.OPP_GOAL_HEADING

    position = player.brain.play.getPosition()
    position = RobotLocation(position[0], position[1], heading)
    nav.positionPlaybook(position)

    if nav.isStopped():
        return player.goLater("goalieAtPosition")

    return player.stay()
示例#7
0
def penaltyKickBall(player):
    ball = player.brain.ball

    if not player.penaltyMadeFirstKick:
        return player.goLater('penaltyKickShortDribble')
        #return player.goLater('kickBallStraightShort')
    if not player.penaltyMadeSecondKick:

        ballLoc = RobotLocation(ball.x, ball.y, NogginConstants.OPP_GOAL_HEADING)

        goalLoc = Location( NogginConstants.OPP_GOAL_MIDPOINT[0],
                            NogginConstants.OPP_GOAL_MIDPOINT[1])

        ballBearingToGoal = ballLoc.getRelativeBearing(goalLoc)

        player.angleToAlign = ballBearingToGoal - player.brain.my.h
        if player.angleToAlign < constants.ALIGN_FOR_KICK_MIN_ANGLE:
            player.bigKick = True
            return player.goLater('kickBallStraight')
        else :
            return player.goLater('alignOnBallStraightKick')
    return player.stay()
示例#8
0
def walkToBallLocPos(player):
    player.brain.tracker.trackBall()
    if transitions.shouldApproachBallWithLoc(player):
        player.brain.tracker.trackBall()
        return player.goLater('approachBallWithLoc')
    elif transitions.shouldTurnToBall_FoundBall(player):
        return player.goLater('turnToBall')

    ball = player.brain.ball
    destH = player.brain.my.getTargetHeading(ball)
    dest = RobotLocation(ball.x, ball.y, destH)

    nav = player.brain.nav
    if player.firstFrame() or \
            nav.dest != dest:
        nav.goTo(dest)
    return player.stay()
示例#9
0
    def __init__(self, brain):
        """it gets you where you want to go"""

        FSA.FSA.__init__(self, brain)
        self.brain = brain
        self.addStates(NavStates)
        self.addStates(PlaybookPositionStates)
        self.currentState = 'stopped'
        self.setName('Navigator')
        self.setPrintStateChanges(True)
        self.setPrintFunction(self.brain.out.printf)
        self.stateChangeColor = 'cyan'

        # Goto controls
        self.dest = RobotLocation(0, 0, 0)

        # Walk controls
        self.currentGait = None
        self.walkX = 0
        self.walkY = 0
        self.walkTheta = 0
        self.orbitDir = 0
        self.angleToOrbit = 0
        self.curSpinDir = 0
示例#10
0
 def getApproachHeadingFromBehind(self):
     ball = self.brain.ball
     aimPoint = KickingHelpers.getShotFarAimPoint(self)
     ballLoc = RobotLocation(ball.x, ball.y, NogginConstants.OPP_GOAL_HEADING)
     ballBearingToGoal = ballLoc.getRelativeBearing(aimPoint)
     return ballBearingToGoal