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()
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
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()
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()
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()
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
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