See_Wait_N_Walk.py
Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 
00003 import roslib; roslib.load_manifest('fake_action_clients')
00004 import rospy
00005 import smach
00006 import smach_ros
00007 import iri_door_detector.msg
00008 from move_base_msgs.msg import MoveBaseAction, MoveBaseGoal
00009 from arm_navigation_msgs.msg import *
00010 from smach_ros import SimpleActionState
00011 
00012 def main():
00013     rospy.init_node('smach_example_state_machine')
00014 
00015     sm = smach.StateMachine(outcomes=['succeeded','aborted','preempted'])
00016     with sm:
00017 
00018         #---smach callbacks
00019 
00020         def find_a_door_goal_cb(userdata, goal):
00021                 find_a_door_goal = iri_door_detector.msg.FindADoorGoal()
00022                 find_a_door_goal.start = 1
00023                 return find_a_door_goal
00024 
00025         @smach.cb_interface(
00026                 outcomes=['succeeded_closed','succeeded_open','aborted','preempted'])
00027 
00028         def find_a_door_base_result_cb(userdata, status, result):
00029                 #according to actionlib_msgs/GoalStatus.msg, SUCCEEDED = 3
00030                 rospy.loginfo("status code %d" % status)
00031                 rospy.loginfo("\n door state: %s" % result.state + "\n base poses: \n %s" % result.base_poses)
00032                 if status == 3 and result.state == "fully_open": 
00033                         return 'succeeded_open'
00034                 elif status == 3 and result.state == "open_left": 
00035                         return 'succeeded_open'
00036                 elif status == 3 and result.state == "open_right": 
00037                         return 'succeeded_open'
00038                 elif status == 3 and result.state == "closed_right":
00039                         return 'succeeded_closed'
00040                 elif status == 3 and result.state == "closed_left": 
00041                         return 'succeeded_closed'
00042                 else:
00043                         return 'aborted'
00044 
00045 
00046         #---smach states
00047         
00048         #Find a door 
00049         smach.StateMachine.add('FIND_A_DOOR_BASE',
00050                 SimpleActionState('/iri_door_detector/door_detector_actions/find_a_door',
00051                                 iri_door_detector.msg.FindADoorAction,
00052                                 goal_cb=find_a_door_goal_cb,
00053                                 result_slots=['base_poses',
00054                                               'state']),
00055                 transitions={'succeeded':'BASE_POSES',
00056                              'aborted':'FIND_A_DOOR_BASE'},
00057                 remapping={'base_poses':'user_data_base_poses',
00058                            'state':'user_data_state'})
00059         
00060         #Print goal for move_base
00061         smach.StateMachine.add('BASE_POSES',
00062                 SimpleActionState('/iri_door_detector/door_detector_actions/find_a_door',
00063                                 iri_door_detector.msg.FindADoorAction,
00064                                 result_cb=find_a_door_base_result_cb),
00065                 transitions={'succeeded_open':'MOVE_BASE_OPEN',
00066                              'succeeded_closed':'FIND_A_DOOR_BASE',
00067                              'aborted':'FIND_A_DOOR_BASE'})
00068 
00069         #Move towards the door
00070         smach.StateMachine.add('MOVE_BASE_OPEN',
00071                 SimpleActionState('move_base',
00072                                 MoveBaseAction,
00073                                 goal_slots=['target_pose']),
00074                 transitions={'succeeded':'succeeded',
00075                              'aborted':'FIND_A_DOOR_BASE'},
00076                 remapping={'target_pose':'user_data_base_poses'})
00077 
00078 
00079     # Execute SMACH plan
00080     outcome = sm.execute()
00081 
00082 if __name__ == '__main__':
00083     main()


iri_door_detector
Author(s): Jose Rodriguez
autogenerated on Fri Dec 6 2013 23:57:16