$search
00001 #! /usr/bin/env python 00002 00003 PKG = 'move_arm' 00004 00005 import roslib; roslib.load_manifest(PKG) 00006 import rospy 00007 import arm_navigation_msgs.srv 00008 import sys 00009 import unittest 00010 import actionlib 00011 import actionlib_msgs 00012 import math 00013 00014 import sensor_msgs.msg 00015 import mapping_msgs.msg 00016 from mapping_msgs.msg import CollisionObject, AttachedCollisionObject 00017 from arm_navigation_msgs.msg import CollisionOperation 00018 from arm_navigation_msgs.msg import Shape 00019 from geometry_msgs.msg import Pose, PointStamped 00020 from move_arm_msgs.msg import MoveArmGoal, MoveArmAction 00021 from tf import TransformListener 00022 from arm_navigation_msgs.msg import JointConstraint 00023 00024 class TestMotionExecutionBuffer(unittest.TestCase): 00025 00026 def setUp(self): 00027 00028 self.tf = TransformListener() 00029 00030 self.move_arm_action_client = actionlib.SimpleActionClient("move_right_arm", MoveArmAction) 00031 00032 00033 00034 att_pub = rospy.Publisher('attached_collision_object', AttachedCollisionObject) 00035 obj_pub = rospy.Publisher('collision_object',CollisionObject) 00036 00037 rospy.init_node('test_motion_execution_buffer') 00038 00039 #let everything settle down 00040 rospy.sleep(5.) 00041 00042 obj1 = CollisionObject() 00043 00044 obj1.header.stamp = rospy.Time.now()-rospy.Duration(.1) 00045 obj1.header.frame_id = "base_footprint" 00046 obj1.id = "obj2"; 00047 obj1.operation.operation = mapping_msgs.msg.CollisionObjectOperation.ADD 00048 obj1.shapes = [Shape() for _ in range(3)] 00049 obj1.poses = [Pose() for _ in range(3)] 00050 00051 obj1.shapes[0].type = Shape.BOX 00052 obj1.shapes[0].dimensions = [float() for _ in range(3)] 00053 obj1.shapes[0].dimensions[0] = .5 00054 obj1.shapes[0].dimensions[1] = 1.0 00055 obj1.shapes[0].dimensions[2] = .2 00056 obj1.poses[0].position.x = .95 00057 obj1.poses[0].position.y = -.25 00058 obj1.poses[0].position.z = .62 00059 obj1.poses[0].orientation.x = 0 00060 obj1.poses[0].orientation.y = 0 00061 obj1.poses[0].orientation.z = 0 00062 obj1.poses[0].orientation.w = 1 00063 00064 obj1.shapes[2].type = Shape.BOX 00065 obj1.shapes[2].dimensions = [float() for _ in range(3)] 00066 obj1.shapes[2].dimensions[0] = .5 00067 obj1.shapes[2].dimensions[1] = .1 00068 obj1.shapes[2].dimensions[2] = 1.0 00069 obj1.poses[2].position.x = .95 00070 obj1.poses[2].position.y = -.14 00071 obj1.poses[2].position.z = 1.2 00072 obj1.poses[2].orientation.x = 0 00073 obj1.poses[2].orientation.y = 0 00074 obj1.poses[2].orientation.z = 0 00075 obj1.poses[2].orientation.w = 1 00076 00077 obj1.shapes[1].type = Shape.BOX 00078 obj1.shapes[1].dimensions = [float() for _ in range(3)] 00079 obj1.shapes[1].dimensions[0] = .5 00080 obj1.shapes[1].dimensions[1] = .1 00081 obj1.shapes[1].dimensions[2] = 1.0 00082 obj1.poses[1].position.x = .95 00083 obj1.poses[1].position.y = .12 00084 obj1.poses[1].position.z = 1.2 00085 obj1.poses[1].orientation.x = 0 00086 obj1.poses[1].orientation.y = 0 00087 obj1.poses[1].orientation.z = 0 00088 obj1.poses[1].orientation.w = 1 00089 00090 obj_pub.publish(obj1) 00091 00092 att_object = AttachedCollisionObject() 00093 att_object.object.header.stamp = rospy.Time.now() 00094 att_object.object.header.frame_id = "r_gripper_r_finger_tip_link" 00095 att_object.link_name = "r_gripper_r_finger_tip_link" 00096 att_object.object.operation.operation = mapping_msgs.msg.CollisionObjectOperation.ADD 00097 att_object.object = CollisionObject(); 00098 00099 att_object.object.header.stamp = rospy.Time.now() 00100 att_object.object.header.frame_id = "r_gripper_r_finger_tip_link" 00101 att_object.object.id = "pole" 00102 att_object.object.shapes = [Shape() for _ in range(1)] 00103 att_object.object.shapes[0].type = Shape.CYLINDER 00104 att_object.object.shapes[0].dimensions = [float() for _ in range(2)] 00105 att_object.object.shapes[0].dimensions[0] = .02 00106 att_object.object.shapes[0].dimensions[1] = .1 00107 att_object.object.poses = [Pose() for _ in range(1)] 00108 att_object.object.poses[0].position.x = -.02 00109 att_object.object.poses[0].position.y = .04 00110 att_object.object.poses[0].position.z = 0 00111 att_object.object.poses[0].orientation.x = 0 00112 att_object.object.poses[0].orientation.y = 0 00113 att_object.object.poses[0].orientation.z = 0 00114 att_object.object.poses[0].orientation.w = 1 00115 00116 att_pub.publish(att_object) 00117 00118 rospy.sleep(5.0) 00119 00120 def testMotionExecutionBuffer(self): 00121 00122 global padd_name 00123 global extra_buffer 00124 00125 #too much trouble to read for now 00126 allow_padd = .05#rospy.get_param(padd_name) 00127 00128 00129 joint_names = ['%s_%s' % ('r', j) for j in ['shoulder_pan_joint', 'shoulder_lift_joint', 'upper_arm_roll_joint', 'elbow_flex_joint', 'forearm_roll_joint', 'wrist_flex_joint', 'wrist_roll_joint']] 00130 goal = MoveArmGoal() 00131 00132 goal.motion_plan_request.goal_constraints.joint_constraints = [JointConstraint() for i in range(len(joint_names))] 00133 00134 goal.motion_plan_request.group_name = "right_arm" 00135 goal.motion_plan_request.num_planning_attempts = 1 00136 goal.motion_plan_request.allowed_planning_time = rospy.Duration(5.) 00137 goal.motion_plan_request.planner_id = "" 00138 goal.planner_service_name = "chomp_planner_longrange/plan_path" 00139 goal.disable_collision_monitoring = True; 00140 00141 r = rospy.Rate(10) 00142 00143 goal.motion_plan_request.goal_constraints.joint_constraints = [JointConstraint() for i in range(len(joint_names))] 00144 for z in range(6): 00145 for i in range(len(joint_names)): 00146 goal.motion_plan_request.goal_constraints.joint_constraints[i].joint_name = joint_names[i] 00147 goal.motion_plan_request.goal_constraints.joint_constraints[i].position = 0.0 00148 goal.motion_plan_request.goal_constraints.joint_constraints[i].tolerance_above = 0.08 00149 goal.motion_plan_request.goal_constraints.joint_constraints[i].tolerance_below = 0.08 00150 00151 if(z%2==0): 00152 goal.motion_plan_request.goal_constraints.joint_constraints[0].position = -1.0 00153 goal.motion_plan_request.goal_constraints.joint_constraints[3].position = -0.2 00154 goal.motion_plan_request.goal_constraints.joint_constraints[5].position = -0.2 00155 else: 00156 goal.motion_plan_request.goal_constraints.joint_constraints[0].position = .22 00157 goal.motion_plan_request.goal_constraints.joint_constraints[1].position = .51 00158 goal.motion_plan_request.goal_constraints.joint_constraints[2].position = .05 00159 goal.motion_plan_request.goal_constraints.joint_constraints[3].position = -0.41 00160 goal.motion_plan_request.goal_constraints.joint_constraints[4].position = -.06 00161 goal.motion_plan_request.goal_constraints.joint_constraints[5].position = -.1 00162 goal.motion_plan_request.goal_constraints.joint_constraints[6].position = 0.0 00163 00164 for x in range(3): 00165 00166 self.move_arm_action_client.send_goal(goal) 00167 00168 while True: 00169 cur_state = self.move_arm_action_client.get_state() 00170 if(cur_state != actionlib_msgs.msg.GoalStatus.ACTIVE and 00171 cur_state != actionlib_msgs.msg.GoalStatus.PENDING): 00172 break 00173 r.sleep() 00174 00175 end_state = self.move_arm_action_client.get_state() 00176 00177 if(end_state == actionlib_msgs.msg.GoalStatus.SUCCEEDED): break 00178 00179 final_state = self.move_arm_action_client.get_state() 00180 00181 self.assertEqual(final_state, actionlib_msgs.msg.GoalStatus.SUCCEEDED) 00182 00183 if __name__ == '__main__': 00184 00185 import rostest 00186 rostest.unitrun('test_motion_execution_buffer', 'test_motion_execution_buffer', TestMotionExecutionBuffer) 00187 00188 00189