sr_right_hand_arm_waypoints.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 # Copyright 2020 Shadow Robot Company Ltd.
3 #
4 # This program is free software: you can redistribute it and/or modify it
5 # under the terms of the GNU General Public License as published by the Free
6 # Software Foundation version 2 of the License.
7 #
8 # This program is distributed in the hope that it will be useful, but WITHOUT
9 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
11 # more details.
12 #
13 # You should have received a copy of the GNU General Public License along
14 # with this program. If not, see <http://www.gnu.org/licenses/>.
15 
16 # This example demonstrates some of the functions of the hand, arm and robot commander.
17 # The arm, hand and robot will be moved through a sequence of goals generated via different functions in the commander.
18 # PLEASE NOTE: move_to_joint_value_target_unsafe is used in this script, so collision checks
19 # between the hand and arm are not made!
20 
21 # For more information, please see:
22 # https://dexterous-hand.readthedocs.io/en/latest/user_guide/2_software_description.html#robot-commander
23 
24 # roslaunch commands used with this script to launch the robot:
25 # real robot with a NUC (or a separate computer with an RT kernel):
26 # roslaunch sr_robot_launch sr_right_ur10arm_hand.launch
27 # external_control_loop:=true sim:=false scene:=true
28 # simulated robot:
29 # roslaunch sr_robot_launch sr_right_ur10arm_hand.launch sim:=true scene:=true
30 
31 # It is recommended to run this script in simulation first.
32 
33 import rospy
34 import sys
35 from trajectory_msgs.msg import JointTrajectory, JointTrajectoryPoint
36 from sr_robot_commander.sr_robot_commander import SrRobotCommander
37 from sr_robot_commander.sr_arm_commander import SrArmCommander
38 from sr_robot_commander.sr_hand_commander import SrHandCommander
39 import geometry_msgs.msg
40 
41 rospy.init_node("hand_arm_waypoints", anonymous=True)
42 
43 # The constructors for the SrArmCommander, SrHandCommander and SrRobotCommander
44 # take a name parameter that should match the group name of the robot to be used.
45 # How to command the hand or arm separately
46 hand_commander = SrHandCommander(name="right_hand")
47 arm_commander = SrArmCommander(name="right_arm")
48 # How to command the arm and hand together
49 robot_commander = SrRobotCommander(name="right_arm_and_hand")
50 arm_commander.set_max_velocity_scaling_factor(0.1)
51 
52 rospy.sleep(1.0)
53 
54 arm_home_joints_goal = {'ra_shoulder_pan_joint': 0.00, 'ra_elbow_joint': 2.00,
55  'ra_shoulder_lift_joint': -1.25, 'ra_wrist_1_joint': -0.733,
56  'ra_wrist_2_joint': 1.5708, 'ra_wrist_3_joint': 0.00}
57 
58 arm_hand_home_joints_goal = {'ra_shoulder_pan_joint': 0.00, 'ra_elbow_joint': 2.00,
59  'ra_shoulder_lift_joint': -1.25, 'ra_wrist_1_joint': -0.733,
60  'ra_wrist_2_joint': 1.5708, 'ra_wrist_3_joint': 0.00,
61  'rh_THJ1': 0.52, 'rh_THJ2': 0.61, 'rh_THJ3': 0.0, 'rh_THJ4': 1.20,
62  'rh_THJ5': 0.17, 'rh_FFJ1': 1.5707, 'rh_FFJ2': 1.5707, 'rh_FFJ3': 1.5707,
63  'rh_FFJ4': 0.0, 'rh_MFJ1': 1.5707, 'rh_MFJ2': 1.5707, 'rh_MFJ3': 1.5707,
64  'rh_MFJ4': 0.0, 'rh_RFJ1': 1.5707, 'rh_RFJ2': 1.5707, 'rh_RFJ3': 1.5707,
65  'rh_RFJ4': 0.0, 'rh_LFJ1': 1.5707, 'rh_LFJ2': 1.5707, 'rh_LFJ3': 1.5707,
66  'rh_LFJ4': 0.0, 'rh_LFJ5': 0.0, 'rh_WRJ1': 0.0, 'rh_WRJ2': 0.0}
67 
68 example_goal_1 = [0.9, 0.16, 0.95, -0.99, 8.27, -0.0, 1.4]
69 
70 # Evaluate the plan quality from starting position of robot.
71 # https://github.com/shadow-robot/sr_interface/blob/melodic-devel/sr_robot_commander/src/sr_robot_commander/sr_robot_commander.py#L263-L310
72 # This is to confirm that the arm is in a safe place to move to the home joints goal,
73 # if the outcome is poor please refer to the readthedocs of where the start arm home position is.
74 arm_to_home_plan = arm_commander.plan_to_joint_value_target(arm_home_joints_goal)
75 arm_to_home_plan_quality = arm_commander.evaluate_given_plan(arm_to_home_plan)
76 eval_arm_home_plan_quality = arm_commander.evaluate_plan_quality(arm_to_home_plan_quality)
77 
78 if eval_arm_home_plan_quality != 'good':
79  rospy.logfatal("Plan quality to the home position is poor! " +
80  "For safety please refer to the hand and arm documentation " +
81  "for where to start the arm " +
82  "to ensure no unexpected movements during plan and execute.")
83  sys.exit("Exiting script to allow for the arm to be manually moved to better start position ...")
84 
85 # Execute arm to home plan
86 rospy.loginfo("Planning and moving arm to home joint states\n" + str(arm_home_joints_goal) + "\n")
87 arm_commander.execute_plan(arm_to_home_plan)
88 rospy.sleep(2.0)
89 
90 # Moving arm to initial pose
91 raw_input("Press Enter to continue...")
92 rospy.loginfo("Planning the move to the pose:\n" + str(example_goal_1) + "\n")
93 arm_commander.plan_to_pose_target(example_goal_1)
94 rospy.loginfo("Finished planning, moving the arm now.")
95 arm_commander.execute()
96 rospy.sleep(2.0)
97 
98 raw_input("Press Enter to continue...")
99 rospy.loginfo("Following trajectory defined by waypoints")
100 waypoints = []
101 
102 # start with the initial position
103 initial_pose = arm_commander.get_current_pose()
104 
105 # Using the method plan_to_waypoints_target, it is possible to specify a set of waypoints
106 # for the end-effector and create a plan to follow it.
107 # https://github.com/shadow-robot/sr_interface/blob/melodic-devel/sr_robot_commander/src/sr_robot_commander/sr_robot_commander.py#L830
108 
109 wpose = geometry_msgs.msg.Pose()
110 wpose.position.x = initial_pose.position.x
111 wpose.position.y = initial_pose.position.y - 0.10
112 wpose.position.z = initial_pose.position.z
113 wpose.orientation = initial_pose.orientation
114 waypoints.append(wpose)
115 
116 wpose = geometry_msgs.msg.Pose()
117 wpose.position.x = initial_pose.position.x - 0.10
118 wpose.position.y = initial_pose.position.y
119 wpose.position.z = initial_pose.position.z + 0.1
120 wpose.orientation = initial_pose.orientation
121 waypoints.append(wpose)
122 
123 waypoints.append(initial_pose)
124 
125 arm_commander.plan_to_waypoints_target(waypoints, eef_step=0.02)
126 arm_commander.execute()
127 
128 rospy.sleep(2.0)
129 
130 # Finish arm at home and hand at pack
131 raw_input("Press Enter to continue...")
132 rospy.loginfo("Moving arm to joint states\n" + str(arm_hand_home_joints_goal) + "\n")
133 robot_commander.move_to_joint_value_target_unsafe(arm_hand_home_joints_goal, 6.0, True)
134 rospy.sleep(2.0)


sr_example
Author(s): Ugo Cupcic
autogenerated on Mon Feb 28 2022 23:52:10