return True else: return False # create states waitSittingState = createState("waitSittingState", lambda: None) waitStandingState = createState("waitStandingState", lambda: None) sitState = createState("sitState", sit) restState = createState("restState", rest) standState = createState("standState", stand) hangHeadState = createState("hangHeadState", hMHang) shutdownState = createState("shutdownState", lambda : shutdown("Final state reached")) sayBallState = createState("sayBallState", lambda: say("ball!")) sayNoBallState = createState("sayNoBallState", lambda: say("no ball found!")) lookAtBallState = createState("lookAtBallState", lambda wm: lookAtBall(wm)) # Add transitions addTransition(waitSittingState, detectTouch, standState) addTransition(standState, lambda wm: True, hangHeadState) addTransition(hangHeadState, lambda wm: True, waitStandingState) addTransition(waitStandingState, seeBall, sayBallState) addTransition(waitStandingState, time, sayNoBallState) addTransition(sayBallState, lambda wm: True, lookAtBallState) addTransition(lookAtBallState, noSeeBall, sayNoBallState) addTransition(sayNoBallState, lambda wm: True, sitState) addTransition(sitState, lambda wm: True, restState)
## CREATE STATES ## sitState = createState("sitState", sit) standState = createState("standState", stand) restState = createState("restState", rest) walkState = createState("walkState", startWalking) stopWalkState = createState("stopWalkState", stopWalking) stopWalk2State = createState("stopWalk2State", stopWalking) rotateState = createState("rotateState", lambda: setWalkVelocity(0, 0, 0.5)) uTurnState = createState("uTurnState", lambda: setWalkVelocity(1, 0, 0.2)) shutdownState = createState("shutdownState", lambda: shutdown("Final state reached")) # Create states for talking sayLetsWalkState = createState("sayLetsWalkState", lambda: say("Hej Yousif!")) sayRotateState = createState("sayRotateState", lambda: say("spinn!")) sayUTurnState = createState("sayUTurnState", lambda: say("u turn!")) sayGoodbyeState = createState("sayGoodbyeState", lambda: say("Goodbye World!")) # Create states for waiting for touch waitSittingState = createState("waitSittingState", lambda: None) waitStandingState = createState("waitStandingState", lambda: None) # Create states for function calls # Add transitions according to the state diagram addTransition(waitSittingState, detectTouch, standState) addTransition(standState, lambda wm: True, sayLetsWalkState) addTransition(sayLetsWalkState, lambda wm: True, walkState)
waitSittingState3 = createState("waitSittingState3", lambda : None) waitSittingState2 = createState("waitSittingState2", lambda : None) waitSittingState = createState("waitSittingState", lambda : None) # Create communcationsstates sendStandStatus = createState("sendStandStatus" , lambda: communicate("puff", "Stand")) sendSitStatus = createState("sendSitStatus", lambda: communicate("puff", "Sit")) # States for talking sayShutdownState = createState("sayShutdownState", lambda: say("Shutting Down")) # Add transitions according to the state diagram addTransition(waitSittingState, detectTouch, sendStandStatus) addTransition(sendStandStatus, lambda wm: True, waitSittingState2) addTransition(waitSittingState2, touchDelay, sendSitStatus) addTransition(sendSitStatus, lambda wm: True, waitSittingState3) addTransition(waitSittingState3, touchDelay, sayShutdownState) addTransition(sayShutdownState, lambda wm: True, restState) addTransition(restState, lambda wm: True, shutdownState) # Create the FSM and add the states created above mainFSM = createFSM("mainFSM") addStates(mainFSM , waitSittingState, waitSittingState2, waitSittingState3,
# Define the event function which detects touch def detectTouch(wm): return readWM(wm, "tactile", "middle") ## CREATE STATES ## sitState = createState("sitState", sit) standState = createState("standState", stand) restState = createState("restState", rest) shutdownState = createState("shutdownState", lambda : shutdown("Final state reached")) # Create states for talking sayHelloState = createState("sayHelloState", lambda: say("Hello World")) sayGoodbyeState = createState("sayGoodbyeState", lambda: say("Goodbye World!")) # Create states for waiting for touch waitSittingState = createState("waitSittingState", lambda : None) waitStandingState = createState("waitStandingState", lambda : None) # Add transitions according to the state diagram addTransition(waitSittingState, detectTouch, standState) addTransition(standState, lambda wm: True, sayHelloState) addTransition(sayHelloState, lambda wm: True, waitStandingState) addTransition(waitStandingState, detectTouch, sayGoodbyeState) addTransition(sayGoodbyeState, lambda wm: True, sitState) addTransition(sitState, lambda wm: True, restState) addTransition(restState, lambda wm: True, shutdownState)
# Create communcationsstates robot = "goliath" sendStandStatus = createState("sendStandStatus", lambda: communicate(robot, "Stand")) sendSitStatus = createState("sendSitStatus", lambda: communicate(robot, "Sit")) sendKickStatus = createState("sendKickStatus", lambda: communicate(robot, "Kick")) # States for talking sayShutdownState = createState("sayShutdownState", lambda: say("Shutting Down")) # Add transitions according to the state diagram addTransition(waitSittingState, detectTouch, sendStandStatus) addTransition(sendStandStatus, lambda wm: True, waitSittingState2) addTransition(waitSittingState2, touchDelay, sendKickStatus) addTransition(sendKickStatus, lambda wm: True, waitSittingState3) addTransition(waitSittingState3, touchDelay, sendSitStatus) addTransition(sendSitStatus, lambda wm: True, waitSittingState4) addTransition(waitSittingState4, touchDelay, sayShutdownState) addTransition(sayShutdownState, lambda wm: True, restState) addTransition(restState, lambda wm: True, shutdownState)
from fsm.functions import ( createState, createFSM, addTransition, addStates, setInitialState) # Import primitive robot behaviors from api.pubapi import (sit, stand, rest, say, shutdown) # Create states sitState = createState("sitState", sit) standState = createState("standState", stand) restState = createState("restState", rest) shutdownState = createState("shutdownState", lambda : shutdown("Final state reached")) # Create a state which commands the robot to say "Hello World!" sayState = createState("sayState", lambda: say("Hello World")) # Add transitions between states addTransition(standState, lambda wm: True, sayState) addTransition(sayState, lambda wm: True, sitState) addTransition(sitState, lambda wm: True, restState) addTransition(restState, lambda wm: True, shutdownState) # Create the FSM and add the states created above myFSM = createFSM("fsm") addStates(myFSM, standState, sayState, sitState, restState, shutdownState) # Set the initial state to standState setInitialState(myFSM, standState)
from api.pubapi import (sit, stand, rest, say, shutdown) # Import functions we've written from functions import (waitForStand, waitForSit) ## CREATE STATES ## sitState = createState("sitState", sit) standState = createState("standState", stand) restState = createState("restState", rest) shutdownState = createState("shutdownState", lambda: shutdown("Final state reached")) # Create states for talking sayHelloState = createState("sayHelloState", lambda: say("Hello World")) sayGoodbyeState = createState("sayGoodbyeState", lambda: say("Goodbye World!")) # Create states for waiting for touch waitSittingState = createState("waitSittingState", lambda: None) waitStandingState = createState("waitStandingState", lambda: None) # Create communcationsstates # Add transitions according to the state diagram addTransition(waitSittingState, waitForStand, standState) addTransition(standState, lambda wm: True, sayHelloState) addTransition(sayHelloState, lambda wm: True, waitStandingState) addTransition(waitStandingState, waitForSit, sayGoodbyeState) addTransition(sayGoodbyeState, lambda wm: True, sitState)
sitState = createState("sitState", sit) standState = createState("standState", stand) restState = createState("restState", rest) walkState = createState("walkState", startWalking) stopWalkState = createState("stopWalkState", stopWalking) stopWalk2State = createState("stopWalk2State", stopWalking) rotateState = createState("rotateState", lambda: setWalkVelocity(0, 0, 0.5)) uTurnState = createState("uTurnState", lambda: setWalkVelocity(1, 0, 0.2)) shutdownState = createState("shutdownState", lambda: shutdown("Final state reached")) # Create states for talking sayLetsWalkState = createState("sayLetsWalkState", lambda: say("Hej Yousif!")) sayRotateState = createState("sayRotateState", lambda: say("spinn!")) sayUTurnState = createState("sayUTurnState", lambda: say("u turn!")) sayGoodbyeState = createState("sayGoodbyeState", lambda: say("Goodbye World!")) # Create states for waiting for touch waitSittingState = createState("waitSittingState", lambda: None) waitStandingState = createState("waitStandingState", lambda: None) # Create states for function calls # Add transitions according to the state diagram addTransition(waitSittingState, detectTouch, standState)