00001
00002 """
00003 Description:
00004 Create a simple 3-state state sequence. A Sequence is a StateMachine
00005 that just assumes that states added in some sequence should be
00006 executed in the order in which they were added, but only if they
00007 return the "connector outcome" given in the Sequence constructor.
00008
00009 Usage:
00010 $> ./sequence.py
00011
00012 Output:
00013 [INFO] : State machine starting in initial state 'FOO' with userdata:
00014 []
00015 [INFO] : State machine transitioning 'FOO':'done'-->'BAR'
00016 [INFO] : State machine transitioning 'BAR':'done'-->'BAZ'
00017 [INFO] : State machine terminating 'BAZ':'done':'succeeded'
00018 """
00019
00020 import roslib; roslib.load_manifest('asmach_tutorials')
00021 import rospy
00022 import asmach as smach
00023 import smach_ros
00024
00025 class ExampleState(smach.State):
00026 def __init__(self):
00027 smach.State.__init__(self, outcomes = ['done'])
00028 def execute(self, ud):
00029 return 'done'
00030
00031 def main():
00032 rospy.init_node('smach_example_sequence')
00033
00034
00035 sq = smach.Sequence(
00036 outcomes = ['succeeded'],
00037 connector_outcome = 'done')
00038
00039
00040 with sq:
00041
00042 smach.Sequence.add('FOO', ExampleState())
00043 smach.Sequence.add('BAR', ExampleState())
00044 smach.Sequence.add('BAZ', ExampleState(), {'done':'succeeded'})
00045
00046
00047 outcome = sq.execute()
00048
00049 if __name__ == '__main__':
00050 main()