24 from trajectory_msgs.msg
import JointTrajectory
25 from control_msgs.msg
import JointTrajectoryControllerState
26 from simple_script_server
import *
30 super(UnitTest, self).
__init__(*args)
31 rospy.init_node(
'component_test')
42 if not rospy.has_param(
'~component'):
43 self.fail(
'Parameter component does not exist on ROS Parameter Server')
44 component = rospy.get_param(
'~component')
47 if not rospy.has_param(
'~target'):
48 self.fail(
'Parameter target does not exist on ROS Parameter Server')
49 target = rospy.get_param(
'~target')
52 wait_time = rospy.get_param(
'~wait_time',5)
55 if not rospy.has_param(
'~error_range'):
56 self.fail(
'Parameter error_range does not exist on ROS Parameter Server')
57 error_range = rospy.get_param(
'~error_range')
60 self.fail(
'Parameters not set properly')
66 Error Range: %s"""%(component, target, wait_time, error_range))
71 error_msg =
"Parameter error_range should be positive, but is " + error_range
74 error_msg =
"Parameter wait_time should be positive, but is " + wait_time
78 command_topic =
"/" + component +
"_controller/command" 79 state_topic =
"/" + component +
"_controller/state" 80 rospy.Subscriber(command_topic, JointTrajectory, self.
cb_command)
81 rospy.Subscriber(state_topic, JointTrajectoryControllerState, self.
cb_state)
84 init_handle = self.sss.init(component)
85 if init_handle.get_error_code() != 0:
86 error_msg =
'Could not initialize ' + component
90 print(
"Waiting for messages")
92 wallclock_timeout_t = time.time() + wait_time
97 self.fail(
'No state message received within wait_time')
100 move_handle = self.sss.move(component,target)
102 if move_handle.get_error_code() != 0:
103 error_msg =
'Could not move ' + component
104 self.fail(error_msg +
"; errorCode: " + str(move_handle.get_error_code()))
107 traj_endpoint = self.command_traj.points[len(self.command_traj.points)-1]
110 timeout_t = traj_endpoint.time_from_start.to_sec()*0.5
111 rospy.sleep(timeout_t)
112 print(
"Done waiting, validating results")
116 for i
in range(len(traj_endpoint.positions)):
117 self.assert_(((traj_endpoint.positions[i] - actual_pos[i]) < error_range),
"Target position out of error_range")
126 if __name__ ==
'__main__':
128 rostest.run(
'rostest',
'component_test', UnitTest, sys.argv)
129 except KeyboardInterrupt:
def cb_command(self, msg)