19 from moveit_msgs.srv
import SaveRobotStateToWarehouse
as SaveState
20 from sensor_msgs.msg
import JointState
21 from moveit_msgs.msg
import RobotState
22 from sr_arm_commander
import SrArmCommander
23 from sr_hand_commander
import SrHandCommander
24 from sr_robot_commander
import SrRobotCommander
25 from sr_utilities.hand_finder
import HandFinder
26 from controller_manager_msgs.srv
import ListControllers
27 from control_msgs.msg
import JointTrajectoryControllerState
28 from threading
import Lock
32 def __init__(self, name, hand_or_arm="both", side="right", save_target=False):
34 self.
_save = rospy.ServiceProxy(
35 'save_robot_state', SaveState)
40 if name
is None or name ==
'':
41 raise ValueError(
"Cannot save with empty name.")
45 if hand_or_arm ==
"arm":
46 if side !=
"bimanual":
47 prefix =
"ra" if side ==
"right" else "la" 50 double_error.append(
"Group " + side +
"_arm not found.")
53 elif hand_or_arm ==
'hand':
54 if side !=
"bimanual":
55 prefix =
"rh" if side ==
"right" else "lh" 59 elif hand_or_arm ==
'both':
60 if side !=
"bimanual":
65 if len(double_error) != 0:
66 raise ValueError(
" ".join(double_error))
68 self.
_save_hand = (hand_or_arm ==
"hand" or hand_or_arm ==
"both")
69 self.
_save_arm = (hand_or_arm ==
"arm" or hand_or_arm ==
"both")
73 rospy.loginfo(
"Saving targets instead of current values")
77 self.
_hand_subscriber = rospy.Subscriber(
"/" + prefix +
"_trajectory_controller/state",
78 JointTrajectoryControllerState, self.
_target_cb)
80 self.
_arm_subscriber = rospy.Subscriber(
"/" + prefix +
"_trajectory_controller/state",
81 JointTrajectoryControllerState, self.
_target_cb)
85 JointTrajectoryControllerState, self.
_target_cb)
87 JointTrajectoryControllerState, self.
_target_cb)
90 JointTrajectoryControllerState, self.
_target_cb)
92 JointTrajectoryControllerState, self.
_target_cb)
95 rospy.loginfo(
"Getting current")
96 current_dict = self.
_commander.get_current_state()
100 rospy.loginfo(
"Getting targets")
101 waiting_for_targets =
True 102 while waiting_for_targets
and not rospy.is_shutdown():
104 waiting_for_targets =
False 105 for joint
in current_dict:
109 waiting_for_targets =
True 110 rospy.loginfo(
"Still waiting for %s target" % joint)
112 if waiting_for_targets:
115 if rospy.is_shutdown():
122 for n, joint
in enumerate(data.joint_names):
128 rospy.loginfo(current_dict)
129 rs.joint_state = JointState()
130 rs.joint_state.name = current_dict.keys()
131 rs.joint_state.position = current_dict.values()
def _target_cb(self, data)
def __init__(self, name, hand_or_arm="both", side="right", save_target=False)
def save_state(self, current_dict, robot_name)