Go to the documentation of this file.00001
00002
00003
00004 import roslib; roslib.load_manifest('pr2_plugs_actions')
00005 import rospy;
00006 import actionlib;
00007 from pr2_plugs_msgs.msg import *
00008 from pr2_controllers_msgs.msg import *
00009 from actionlib_msgs.msg import *
00010 from trajectory_msgs.msg import JointTrajectoryPoint
00011 from joint_trajectory_action_tools.tools import *
00012 import PyKDL
00013 from tf_conversions.posemath import fromMsg, toMsg
00014 from math import pi
00015
00016
00017 def execute_cb(goal):
00018 rospy.loginfo("Action server received goal")
00019 preempt_timeout = rospy.Duration(5.0)
00020
00021 for i in range(1,5):
00022 rospy.loginfo('Detecting plug in gripper from position %i'%i)
00023
00024
00025 rospy.loginfo("Move in joint space...")
00026 if joint_space_client.send_goal_and_wait(get_action_goal('pr2_plugs_configuration/detect_plug_in_gripper%i'%i), rospy.Duration(20.0), preempt_timeout) != GoalStatus.SUCCEEDED:
00027 rospy.logerr('Move retract in joint space failed')
00028 server.set_aborted()
00029 return
00030
00031
00032 rospy.loginfo("Detecting plug...")
00033 detect_plug_goal = VisionPlugDetectionGoal()
00034 detect_plug_goal.camera_name = "/r_forearm_cam"
00035
00036 detect_plug_goal.prior.pose = toMsg(PyKDL.Frame(PyKDL.Rotation.RPY(-pi/2, pi/9, 0.0), PyKDL.Vector(0.03, 0, -0.01)))
00037 detect_plug_goal.prior.header.stamp = rospy.Time.now()
00038 detect_plug_goal.prior.header.frame_id = "r_gripper_tool_frame"
00039 detect_plug_goal.origin_on_right = True
00040 detect_plug_goal.prior.header.stamp = rospy.Time.now()
00041 if detect_plug_client.send_goal_and_wait(detect_plug_goal, rospy.Duration(5.0), preempt_timeout) == GoalStatus.SUCCEEDED:
00042 server.set_succeeded(DetectPlugInGripperResult(detect_plug_client.get_result().plug_pose))
00043 rospy.loginfo("Action server goal finished")
00044 return
00045
00046
00047 rospy.logerr("Failed to detect plug in gripper")
00048 server.set_aborted(DetectPlugInGripperResult(detect_plug_goal.prior))
00049
00050
00051
00052 if __name__ == '__main__':
00053
00054 name = 'detect_plug'
00055 rospy.init_node(name)
00056
00057
00058 joint_space_client = actionlib.SimpleActionClient('r_arm_controller/joint_trajectory_generator', JointTrajectoryAction)
00059 joint_space_client.wait_for_server()
00060 joint_space_goal = JointTrajectoryGoal()
00061
00062 detect_plug_client = actionlib.SimpleActionClient('vision_plug_detection', VisionPlugDetectionAction)
00063 detect_plug_client.wait_for_server()
00064 detect_plug_goal = VisionPlugDetectionGoal()
00065 rospy.loginfo('Connected to action clients')
00066
00067
00068 server = actionlib.simple_action_server.SimpleActionServer(name, DetectPlugInGripperAction, execute_cb)
00069 rospy.loginfo('%s: Action server running', name)
00070
00071
00072 rospy.spin()