19 import moveit_commander
20 import geometry_msgs.msg
23 from tf.transformations
import quaternion_from_euler
24 from control_msgs.msg
import (GripperCommandAction, GripperCommandGoal)
25 from moveit_msgs.msg
import Constraints, OrientationConstraint
28 rospy.init_node(
"sciurus17_pick_and_place_controller")
29 robot = moveit_commander.RobotCommander()
31 eef_constraints = Constraints()
32 l_eef_oc = OrientationConstraint()
33 r_eef_oc = OrientationConstraint()
37 arm = moveit_commander.MoveGroupCommander(
"two_arm_group")
40 arm.set_max_velocity_scaling_factor(0.2)
41 arm.set_max_acceleration_scaling_factor(0.2)
45 r_gripper.wait_for_server()
46 r_gripper_goal = GripperCommandGoal()
47 r_gripper_goal.command.max_effort = 2.0
51 l_gripper.wait_for_server()
52 l_gripper_goal = GripperCommandGoal()
53 l_gripper_goal.command.max_effort = 2.0
60 print(robot.get_group_names())
64 print(
"Current state:")
65 print(robot.get_current_state())
69 r_arm_initial_pose = arm.get_current_pose(
"r_link7").pose
70 print(
"Right arm initial pose:")
71 print(r_arm_initial_pose)
74 l_arm_initial_pose = arm.get_current_pose(
"l_link7").pose
75 print(
"Left arm initial pose:")
76 print(l_arm_initial_pose)
82 r_gripper_goal.command.position = 0.9
83 r_gripper.send_goal(r_gripper_goal)
84 r_gripper.wait_for_result(rospy.Duration(1.0))
87 l_gripper_goal.command.position = -0.9
88 l_gripper.send_goal(l_gripper_goal)
89 l_gripper.wait_for_result(rospy.Duration(1.0))
93 arm.set_named_target(
"two_arm_init_pose")
97 r_gripper_goal.command.position = 0.0
98 r_gripper.send_goal(r_gripper_goal)
99 r_gripper.wait_for_result(rospy.Duration(1.0))
102 l_gripper_goal.command.position = 0.0
103 l_gripper.send_goal(l_gripper_goal)
104 l_gripper.wait_for_result(rospy.Duration(1.0))
110 r_target_pose = geometry_msgs.msg.Pose()
111 r_target_pose.position.x = 0.18
112 r_target_pose.position.y = -0.25
113 r_target_pose.position.z = 0.2
115 q = quaternion_from_euler(3.14/2.0, 0.0, 0.0)
116 r_target_pose.orientation.x = q[0]
117 r_target_pose.orientation.y = q[1]
118 r_target_pose.orientation.z = q[2]
119 r_target_pose.orientation.w = q[3]
122 l_target_pose = geometry_msgs.msg.Pose()
123 l_target_pose.position.x = 0.18
124 l_target_pose.position.y = 0.25
125 l_target_pose.position.z = 0.2
127 q = quaternion_from_euler(-3.14/2.0, 0.0, 0.0)
128 l_target_pose.orientation.x = q[0]
129 l_target_pose.orientation.y = q[1]
130 l_target_pose.orientation.z = q[2]
131 l_target_pose.orientation.w = q[3]
133 arm.set_pose_target(r_target_pose,
"r_link7")
134 arm.set_pose_target(l_target_pose,
"l_link7")
141 r_gripper_goal.command.position = 0.7
142 r_gripper.send_goal(r_gripper_goal)
143 r_gripper.wait_for_result(rospy.Duration(1.0))
146 l_gripper_goal.command.position = -0.7
147 l_gripper.send_goal(l_gripper_goal)
148 l_gripper.wait_for_result(rospy.Duration(1.0))
154 r_target_pose = geometry_msgs.msg.Pose()
155 r_target_pose.position.x = 0.18
156 r_target_pose.position.y = -0.25
157 r_target_pose.position.z = 0.08
159 q = quaternion_from_euler(3.14, 0.0, 0.0)
160 r_target_pose.orientation.x = q[0]
161 r_target_pose.orientation.y = q[1]
162 r_target_pose.orientation.z = q[2]
163 r_target_pose.orientation.w = q[3]
166 l_target_pose = geometry_msgs.msg.Pose()
167 l_target_pose.position.x = 0.18
168 l_target_pose.position.y = 0.25
169 l_target_pose.position.z = 0.08
171 q = quaternion_from_euler(-3.14, 0.0, 0.0)
172 l_target_pose.orientation.x = q[0]
173 l_target_pose.orientation.y = q[1]
174 l_target_pose.orientation.z = q[2]
175 l_target_pose.orientation.w = q[3]
177 arm.set_pose_target(r_target_pose,
"r_link7")
178 arm.set_pose_target(l_target_pose,
"l_link7")
185 r_gripper_goal.command.position = 1.0
186 r_gripper.send_goal(r_gripper_goal)
187 r_gripper.wait_for_result(rospy.Duration(1.0))
190 l_gripper_goal.command.position = -1.0
191 l_gripper.send_goal(l_gripper_goal)
192 l_gripper.wait_for_result(rospy.Duration(1.0))
198 r_target_pose = geometry_msgs.msg.Pose()
199 r_target_pose.position.x = 0.18
200 r_target_pose.position.y = -0.10
201 r_target_pose.position.z = 0.08
202 q = quaternion_from_euler(3.14, 0.0, 0.0)
203 r_target_pose.orientation.x = q[0]
204 r_target_pose.orientation.y = q[1]
205 r_target_pose.orientation.z = q[2]
206 r_target_pose.orientation.w = q[3]
209 l_target_pose = geometry_msgs.msg.Pose()
210 l_target_pose.position.x = 0.18
211 l_target_pose.position.y = 0.10
212 l_target_pose.position.z = 0.08
213 q = quaternion_from_euler(-3.14, 0.0, 0.0)
214 l_target_pose.orientation.x = q[0]
215 l_target_pose.orientation.y = q[1]
216 l_target_pose.orientation.z = q[2]
217 l_target_pose.orientation.w = q[3]
222 r_eef_pose = arm.get_current_pose(
"r_link7").pose
223 r_eef_oc.header.stamp = rospy.Time.now()
224 r_eef_oc.header.frame_id =
"/base_link"
225 r_eef_oc.link_name =
"r_link7"
226 r_eef_oc.orientation = r_eef_pose.orientation
227 r_eef_oc.absolute_x_axis_tolerance = 1.5708
228 r_eef_oc.absolute_y_axis_tolerance = 0.4
229 r_eef_oc.absolute_z_axis_tolerance = 0.7
233 l_eef_pose = arm.get_current_pose(
"l_link7").pose
234 l_eef_oc.header.stamp = rospy.Time.now()
235 l_eef_oc.header.frame_id =
"/base_link"
236 l_eef_oc.link_name =
"l_link7"
237 l_eef_oc.orientation = l_eef_pose.orientation
238 l_eef_oc.absolute_x_axis_tolerance = 1.5708
239 l_eef_oc.absolute_y_axis_tolerance = 0.4
240 l_eef_oc.absolute_z_axis_tolerance = 0.7
242 eef_constraints.orientation_constraints.append(r_eef_oc)
243 eef_constraints.orientation_constraints.append(l_eef_oc)
244 arm.set_path_constraints(eef_constraints)
247 arm.set_pose_target(r_target_pose,
"r_link7")
248 arm.set_pose_target(l_target_pose,
"l_link7")
255 r_target_pose = geometry_msgs.msg.Pose()
256 r_target_pose.position.x = 0.18
257 r_target_pose.position.y = -0.08
258 r_target_pose.position.z = 0.08
259 q = quaternion_from_euler(3.14, 0.0, 0.0)
260 r_target_pose.orientation.x = q[0]
261 r_target_pose.orientation.y = q[1]
262 r_target_pose.orientation.z = q[2]
263 r_target_pose.orientation.w = q[3]
266 l_target_pose = geometry_msgs.msg.Pose()
267 l_target_pose.position.x = 0.18
268 l_target_pose.position.y = 0.08
269 l_target_pose.position.z = 0.08
270 q = quaternion_from_euler(-3.14, 0.0, 0.0)
271 l_target_pose.orientation.x = q[0]
272 l_target_pose.orientation.y = q[1]
273 l_target_pose.orientation.z = q[2]
274 l_target_pose.orientation.w = q[3]
277 arm.set_pose_target(r_target_pose,
"r_link7")
278 arm.set_pose_target(l_target_pose,
"l_link7")
285 r_gripper_goal.command.position = 0.4
286 r_gripper.send_goal(r_gripper_goal)
287 r_gripper.wait_for_result(rospy.Duration(1.0))
290 l_gripper_goal.command.position = -0.4
291 l_gripper.send_goal(l_gripper_goal)
292 l_gripper.wait_for_result(rospy.Duration(1.0))
298 r_target_pose = geometry_msgs.msg.Pose()
299 r_target_pose.position.x = 0.35
300 r_target_pose.position.y = -0.09
301 r_target_pose.position.z = 0.08
302 q = quaternion_from_euler(3.14, 0.0, 0.0)
303 r_target_pose.orientation.x = q[0]
304 r_target_pose.orientation.y = q[1]
305 r_target_pose.orientation.z = q[2]
306 r_target_pose.orientation.w = q[3]
309 l_target_pose = geometry_msgs.msg.Pose()
310 l_target_pose.position.x = 0.35
311 l_target_pose.position.y = 0.09
312 l_target_pose.position.z = 0.08
313 q = quaternion_from_euler(-3.14, 0.0, 0.0)
314 l_target_pose.orientation.x = q[0]
315 l_target_pose.orientation.y = q[1]
316 l_target_pose.orientation.z = q[2]
317 l_target_pose.orientation.w = q[3]
320 arm.set_pose_target(r_target_pose,
"r_link7")
321 arm.set_pose_target(l_target_pose,
"l_link7")
328 r_gripper_goal.command.position = 1.5
329 r_gripper.send_goal(r_gripper_goal)
330 r_gripper.wait_for_result(rospy.Duration(1.0))
333 l_gripper_goal.command.position = -1.5
334 l_gripper.send_goal(l_gripper_goal)
335 l_gripper.wait_for_result(rospy.Duration(1.0))
339 arm.set_path_constraints(
None)
349 r_target_pose = geometry_msgs.msg.Pose()
350 r_target_pose.position.x = 0.28
351 r_target_pose.position.y = -0.20
352 r_target_pose.position.z = 0.12
354 q = quaternion_from_euler(3.14/2.0, 0.0, 0.0)
355 r_target_pose.orientation.x = q[0]
356 r_target_pose.orientation.y = q[1]
357 r_target_pose.orientation.z = q[2]
358 r_target_pose.orientation.w = q[3]
361 l_target_pose = geometry_msgs.msg.Pose()
362 l_target_pose.position.x = 0.28
363 l_target_pose.position.y = 0.20
364 l_target_pose.position.z = 0.12
366 q = quaternion_from_euler(-3.14/2.0, 0.0, 0.0)
367 l_target_pose.orientation.x = q[0]
368 l_target_pose.orientation.y = q[1]
369 l_target_pose.orientation.z = q[2]
370 l_target_pose.orientation.w = q[3]
373 arm.set_pose_target(r_target_pose,
"r_link7")
374 arm.set_pose_target(l_target_pose,
"l_link7")
381 r_gripper_goal.command.position = 0.4
382 r_gripper.send_goal(r_gripper_goal)
383 r_gripper.wait_for_result(rospy.Duration(1.0))
386 l_gripper_goal.command.position = -0.4
387 l_gripper.send_goal(l_gripper_goal)
388 l_gripper.wait_for_result(rospy.Duration(1.0))
394 r_target_pose = geometry_msgs.msg.Pose()
395 r_target_pose.position.x = 0.32
396 r_target_pose.position.y = -0.25
397 r_target_pose.position.z = 0.30
398 q = quaternion_from_euler(3.14/2.0, -3.14/2.0, 0.0)
399 r_target_pose.orientation.x = q[0]
400 r_target_pose.orientation.y = q[1]
401 r_target_pose.orientation.z = q[2]
402 r_target_pose.orientation.w = q[3]
405 l_target_pose = geometry_msgs.msg.Pose()
406 l_target_pose.position.x = 0.32
407 l_target_pose.position.y = 0.25
408 l_target_pose.position.z = 0.30
409 q = quaternion_from_euler(-3.14/2.0, -3.14/2.0, 0.0)
410 l_target_pose.orientation.x = q[0]
411 l_target_pose.orientation.y = q[1]
412 l_target_pose.orientation.z = q[2]
413 l_target_pose.orientation.w = q[3]
416 arm.set_pose_target(r_target_pose,
"r_link7")
417 arm.set_pose_target(l_target_pose,
"l_link7")
422 arm.set_named_target(
"two_arm_init_pose")
428 if __name__ ==
'__main__':
431 if not rospy.is_shutdown():
433 except rospy.ROSInterruptException: