concurrence2.py
Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 
00003 import roslib; roslib.load_manifest('asmach_tutorials')
00004 import rospy
00005 import asmach as smach
00006 import smach_ros
00007 
00008 # define state Foo
00009 class Foo(smach.State):
00010     def __init__(self):
00011         smach.State.__init__(self, outcomes=['outcome1','outcome2'])
00012         self.counter = 0
00013 
00014     def execute(self, userdata):
00015         rospy.loginfo('Executing state FOO')
00016         if self.counter < 3:
00017             self.counter += 1
00018             return 'outcome1'
00019         else:
00020             return 'outcome2'
00021 
00022 
00023 # define state Bar
00024 class Bar(smach.State):
00025     def __init__(self):
00026         smach.State.__init__(self, outcomes=['outcome1'])
00027 
00028     def execute(self, userdata):
00029         rospy.loginfo('Executing state BAR')
00030         return 'outcome1'
00031         
00032 
00033 
00034 # define state Bas
00035 class Bas(smach.State):
00036     def __init__(self):
00037         smach.State.__init__(self, outcomes=['outcome3'])
00038 
00039     def execute(self, userdata):
00040         rospy.loginfo('Executing state BAS')
00041         return 'outcome3'
00042 
00043 
00044 
00045 
00046 def main():
00047     rospy.init_node('smach_example_state_machine')
00048 
00049     # Create the top level SMACH state machine
00050     sm_top = smach.StateMachine(outcomes=['outcome6'])
00051     
00052     # Open the container
00053     with sm_top:
00054 
00055         smach.StateMachine.add('BAS', Bas(),
00056                                transitions={'outcome3':'CON'})
00057 
00058         # Create the sub SMACH state machine
00059         sm_con = smach.Concurrence(outcomes=['outcome4','outcome5'],
00060                                    default_outcome='outcome4',
00061                                    outcome_map={'outcome5':
00062                                        { 'FOO':'outcome2',
00063                                          'BAR':'outcome1'}})
00064 
00065         # Open the container
00066         with sm_con:
00067             # Add states to the container
00068             smach.Concurrence.add('FOO', Foo())
00069             smach.Concurrence.add('BAR', Bar())
00070 
00071         smach.StateMachine.add('CON', sm_con,
00072                                transitions={'outcome4':'CON',
00073                                             'outcome5':'outcome6'})
00074 
00075     # Execute SMACH plan
00076     outcome = sm_top.execute()
00077 
00078 
00079 if __name__ == '__main__':
00080     main()


asmach_tutorials
Author(s): Jonathan Bohren
autogenerated on Thu Jan 2 2014 11:27:48