class RobotCat(Char): def __init__(self): self.FSM = FSM(self) # States self.FSM.addState("Sleep", Sleep(self.FSM)) self.FSM.addState("Walk", Walk(self.FSM)) self.FSM.addState("Meow", Meow(self.FSM)) # Transitions self.FSM.addTransition("toSleep", ToSleep("Sleep")) self.FSM.addTransition("toWalk", ToWalk("Walk")) self.FSM.addTransition("toMeow", ToMeow("Meow")) self.FSM.setState("Sleep") def execute(self): self.FSM.execute()
FLOOR_THRESHOLD = 50 def stopBeep(): stop() beepSync(0.5) started = False fsm = FSM( ["free", "rotating", "aligning", "pushing", "reversing", "completed"], "free", failActionSilently=True, verbose=True) fsm.addTransition("start", "free", "free") fsm.addTransition("seeLine", "free", "rotating") fsm.addTransition("rotateCompleted", "rotating", "free") fsm.addTransition("seeTrash", "free", "aligning", beforeChange=lambda a, b, c: stopBeep()) fsm.addTransition("alignCompleted", "aligning", "pushing") fsm.addTransition("seeLine", "pushing", "reversing", beforeChange=lambda a, b, c: stopBeep()) fsm.addTransition("finish", "reversing", "completed") def backupCompletedCb():
from fsm import FSM from threading import Thread uiQueue = Queue(maxsize=1) endAll = False PROX_THRESHOLD = 40 FLOOR_THRESHOLD = 50 fsm = FSM(["free", "turnLeft", "turnRight", "exit"], "free", failActionSilently=True, verbose=True) fsm.addTransition( "obstacleLeft", "free", "turnLeft", ) fsm.addTransition("obstacleRight", "free", "turnRight") fsm.addMultipleTransitions("noObstacle", ["turnLeft", "turnRight"], "free") fsm.addTransition("line", "free", "exit") def freeCb(): tankDrive(50, 50) def turnLeftCb(): tankDrive(-50, 50)