5 import moveit_commander
6 import geometry_msgs.msg
9 from tf.transformations
import quaternion_from_euler
10 from control_msgs.msg
import (GripperCommandAction, GripperCommandGoal)
11 from moveit_msgs.msg
import Constraints, OrientationConstraint
14 rospy.init_node(
"sciurus17_pick_and_place_controller")
15 robot = moveit_commander.RobotCommander()
17 eef_constraints = Constraints()
18 l_eef_oc = OrientationConstraint()
19 r_eef_oc = OrientationConstraint()
22 arm = moveit_commander.MoveGroupCommander(
"two_arm_group")
24 arm.set_max_velocity_scaling_factor(0.2)
25 arm.set_max_acceleration_scaling_factor(0.2)
28 r_gripper.wait_for_server()
29 r_gripper_goal = GripperCommandGoal()
30 r_gripper_goal.command.max_effort = 2.0
33 l_gripper.wait_for_server()
34 l_gripper_goal = GripperCommandGoal()
35 l_gripper_goal.command.max_effort = 2.0
41 print(robot.get_group_names())
44 print(
"Current state:")
45 print(robot.get_current_state())
48 r_arm_initial_pose = arm.get_current_pose(
"r_link7").pose
49 print(
"Right arm initial pose:")
50 print(r_arm_initial_pose)
52 l_arm_initial_pose = arm.get_current_pose(
"l_link7").pose
53 print(
"Left arm initial pose:")
54 print(l_arm_initial_pose)
58 r_gripper_goal.command.position = 0.9
59 r_gripper.send_goal(r_gripper_goal)
60 r_gripper.wait_for_result(rospy.Duration(1.0))
62 l_gripper_goal.command.position = -0.9
63 l_gripper.send_goal(l_gripper_goal)
64 l_gripper.wait_for_result(rospy.Duration(1.0))
67 arm.set_named_target(
"two_arm_init_pose")
70 r_gripper_goal.command.position = 0.0
71 r_gripper.send_goal(r_gripper_goal)
72 r_gripper.wait_for_result(rospy.Duration(1.0))
74 l_gripper_goal.command.position = 0.0
75 l_gripper.send_goal(l_gripper_goal)
76 l_gripper.wait_for_result(rospy.Duration(1.0))
80 r_target_pose = geometry_msgs.msg.Pose()
81 r_target_pose.position.x = 0.18
82 r_target_pose.position.y = -0.25
83 r_target_pose.position.z = 0.2
84 q = quaternion_from_euler(3.14/2.0, 0.0, 0.0)
85 r_target_pose.orientation.x = q[0]
86 r_target_pose.orientation.y = q[1]
87 r_target_pose.orientation.z = q[2]
88 r_target_pose.orientation.w = q[3]
90 l_target_pose = geometry_msgs.msg.Pose()
91 l_target_pose.position.x = 0.18
92 l_target_pose.position.y = 0.25
93 l_target_pose.position.z = 0.2
94 q = quaternion_from_euler(-3.14/2.0, 0.0, 0.0)
95 l_target_pose.orientation.x = q[0]
96 l_target_pose.orientation.y = q[1]
97 l_target_pose.orientation.z = q[2]
98 l_target_pose.orientation.w = q[3]
100 arm.set_pose_target(r_target_pose,
"r_link7")
101 arm.set_pose_target(l_target_pose,
"l_link7")
106 r_gripper_goal.command.position = 0.7
107 r_gripper.send_goal(r_gripper_goal)
108 r_gripper.wait_for_result(rospy.Duration(1.0))
110 l_gripper_goal.command.position = -0.7
111 l_gripper.send_goal(l_gripper_goal)
112 l_gripper.wait_for_result(rospy.Duration(1.0))
116 r_target_pose = geometry_msgs.msg.Pose()
117 r_target_pose.position.x = 0.18
118 r_target_pose.position.y = -0.25
119 r_target_pose.position.z = 0.08
120 q = quaternion_from_euler(3.14, 0.0, 0.0)
121 r_target_pose.orientation.x = q[0]
122 r_target_pose.orientation.y = q[1]
123 r_target_pose.orientation.z = q[2]
124 r_target_pose.orientation.w = q[3]
126 l_target_pose = geometry_msgs.msg.Pose()
127 l_target_pose.position.x = 0.18
128 l_target_pose.position.y = 0.25
129 l_target_pose.position.z = 0.08
130 q = quaternion_from_euler(-3.14, 0.0, 0.0)
131 l_target_pose.orientation.x = q[0]
132 l_target_pose.orientation.y = q[1]
133 l_target_pose.orientation.z = q[2]
134 l_target_pose.orientation.w = q[3]
136 arm.set_pose_target(r_target_pose,
"r_link7")
137 arm.set_pose_target(l_target_pose,
"l_link7")
142 r_gripper_goal.command.position = 1.0
143 r_gripper.send_goal(r_gripper_goal)
144 r_gripper.wait_for_result(rospy.Duration(1.0))
146 l_gripper_goal.command.position = -1.0
147 l_gripper.send_goal(l_gripper_goal)
148 l_gripper.wait_for_result(rospy.Duration(1.0))
152 r_target_pose = geometry_msgs.msg.Pose()
153 r_target_pose.position.x = 0.18
154 r_target_pose.position.y = -0.10
155 r_target_pose.position.z = 0.08
156 q = quaternion_from_euler(3.14, 0.0, 0.0)
157 r_target_pose.orientation.x = q[0]
158 r_target_pose.orientation.y = q[1]
159 r_target_pose.orientation.z = q[2]
160 r_target_pose.orientation.w = q[3]
162 l_target_pose = geometry_msgs.msg.Pose()
163 l_target_pose.position.x = 0.18
164 l_target_pose.position.y = 0.10
165 l_target_pose.position.z = 0.08
166 q = quaternion_from_euler(-3.14, 0.0, 0.0)
167 l_target_pose.orientation.x = q[0]
168 l_target_pose.orientation.y = q[1]
169 l_target_pose.orientation.z = q[2]
170 l_target_pose.orientation.w = q[3]
173 r_eef_pose = arm.get_current_pose(
"r_link7").pose
174 r_eef_oc.header.stamp = rospy.Time.now()
175 r_eef_oc.header.frame_id =
"/base_link" 176 r_eef_oc.link_name =
"r_link7" 177 r_eef_oc.orientation = r_eef_pose.orientation
178 r_eef_oc.absolute_x_axis_tolerance = 1.5708
179 r_eef_oc.absolute_y_axis_tolerance = 0.4
180 r_eef_oc.absolute_z_axis_tolerance = 0.7
183 l_eef_pose = arm.get_current_pose(
"l_link7").pose
184 l_eef_oc.header.stamp = rospy.Time.now()
185 l_eef_oc.header.frame_id =
"/base_link" 186 l_eef_oc.link_name =
"l_link7" 187 l_eef_oc.orientation = l_eef_pose.orientation
188 l_eef_oc.absolute_x_axis_tolerance = 1.5708
189 l_eef_oc.absolute_y_axis_tolerance = 0.4
190 l_eef_oc.absolute_z_axis_tolerance = 0.7
192 eef_constraints.orientation_constraints.append(r_eef_oc)
193 eef_constraints.orientation_constraints.append(l_eef_oc)
194 arm.set_path_constraints(eef_constraints)
196 arm.set_pose_target(r_target_pose,
"r_link7")
197 arm.set_pose_target(l_target_pose,
"l_link7")
202 r_target_pose = geometry_msgs.msg.Pose()
203 r_target_pose.position.x = 0.18
204 r_target_pose.position.y = -0.08
205 r_target_pose.position.z = 0.08
206 q = quaternion_from_euler(3.14, 0.0, 0.0)
207 r_target_pose.orientation.x = q[0]
208 r_target_pose.orientation.y = q[1]
209 r_target_pose.orientation.z = q[2]
210 r_target_pose.orientation.w = q[3]
212 l_target_pose = geometry_msgs.msg.Pose()
213 l_target_pose.position.x = 0.18
214 l_target_pose.position.y = 0.08
215 l_target_pose.position.z = 0.08
216 q = quaternion_from_euler(-3.14, 0.0, 0.0)
217 l_target_pose.orientation.x = q[0]
218 l_target_pose.orientation.y = q[1]
219 l_target_pose.orientation.z = q[2]
220 l_target_pose.orientation.w = q[3]
222 arm.set_pose_target(r_target_pose,
"r_link7")
223 arm.set_pose_target(l_target_pose,
"l_link7")
228 r_gripper_goal.command.position = 0.4
229 r_gripper.send_goal(r_gripper_goal)
230 r_gripper.wait_for_result(rospy.Duration(1.0))
232 l_gripper_goal.command.position = -0.4
233 l_gripper.send_goal(l_gripper_goal)
234 l_gripper.wait_for_result(rospy.Duration(1.0))
238 r_target_pose = geometry_msgs.msg.Pose()
239 r_target_pose.position.x = 0.35
240 r_target_pose.position.y = -0.09
241 r_target_pose.position.z = 0.08
242 q = quaternion_from_euler(3.14, 0.0, 0.0)
243 r_target_pose.orientation.x = q[0]
244 r_target_pose.orientation.y = q[1]
245 r_target_pose.orientation.z = q[2]
246 r_target_pose.orientation.w = q[3]
248 l_target_pose = geometry_msgs.msg.Pose()
249 l_target_pose.position.x = 0.35
250 l_target_pose.position.y = 0.09
251 l_target_pose.position.z = 0.08
252 q = quaternion_from_euler(-3.14, 0.0, 0.0)
253 l_target_pose.orientation.x = q[0]
254 l_target_pose.orientation.y = q[1]
255 l_target_pose.orientation.z = q[2]
256 l_target_pose.orientation.w = q[3]
258 arm.set_pose_target(r_target_pose,
"r_link7")
259 arm.set_pose_target(l_target_pose,
"l_link7")
264 r_gripper_goal.command.position = 1.5
265 r_gripper.send_goal(r_gripper_goal)
266 r_gripper.wait_for_result(rospy.Duration(1.0))
268 l_gripper_goal.command.position = -1.5
269 l_gripper.send_goal(l_gripper_goal)
270 l_gripper.wait_for_result(rospy.Duration(1.0))
273 arm.set_path_constraints(
None)
280 r_target_pose = geometry_msgs.msg.Pose()
281 r_target_pose.position.x = 0.28
282 r_target_pose.position.y = -0.20
283 r_target_pose.position.z = 0.12
284 q = quaternion_from_euler(3.14/2.0, 0.0, 0.0)
285 r_target_pose.orientation.x = q[0]
286 r_target_pose.orientation.y = q[1]
287 r_target_pose.orientation.z = q[2]
288 r_target_pose.orientation.w = q[3]
290 l_target_pose = geometry_msgs.msg.Pose()
291 l_target_pose.position.x = 0.28
292 l_target_pose.position.y = 0.20
293 l_target_pose.position.z = 0.12
294 q = quaternion_from_euler(-3.14/2.0, 0.0, 0.0)
295 l_target_pose.orientation.x = q[0]
296 l_target_pose.orientation.y = q[1]
297 l_target_pose.orientation.z = q[2]
298 l_target_pose.orientation.w = q[3]
300 arm.set_pose_target(r_target_pose,
"r_link7")
301 arm.set_pose_target(l_target_pose,
"l_link7")
306 r_gripper_goal.command.position = 0.4
307 r_gripper.send_goal(r_gripper_goal)
308 r_gripper.wait_for_result(rospy.Duration(1.0))
310 l_gripper_goal.command.position = -0.4
311 l_gripper.send_goal(l_gripper_goal)
312 l_gripper.wait_for_result(rospy.Duration(1.0))
316 r_target_pose = geometry_msgs.msg.Pose()
317 r_target_pose.position.x = 0.32
318 r_target_pose.position.y = -0.25
319 r_target_pose.position.z = 0.30
320 q = quaternion_from_euler(3.14/2.0, -3.14/2.0, 0.0)
321 r_target_pose.orientation.x = q[0]
322 r_target_pose.orientation.y = q[1]
323 r_target_pose.orientation.z = q[2]
324 r_target_pose.orientation.w = q[3]
326 l_target_pose = geometry_msgs.msg.Pose()
327 l_target_pose.position.x = 0.32
328 l_target_pose.position.y = 0.25
329 l_target_pose.position.z = 0.30
330 q = quaternion_from_euler(-3.14/2.0, -3.14/2.0, 0.0)
331 l_target_pose.orientation.x = q[0]
332 l_target_pose.orientation.y = q[1]
333 l_target_pose.orientation.z = q[2]
334 l_target_pose.orientation.w = q[3]
336 arm.set_pose_target(r_target_pose,
"r_link7")
337 arm.set_pose_target(l_target_pose,
"l_link7")
341 arm.set_named_target(
"two_arm_init_pose")
347 if __name__ ==
'__main__':
350 if not rospy.is_shutdown():
352 except rospy.ROSInterruptException: