test_jog_joint.py
Go to the documentation of this file.
1 #! /usr/bin/env python
2 # -*- coding: utf-8 -*-
3 import actionlib
4 from control_msgs.msg import (
5  FollowJointTrajectoryAction,
6  FollowJointTrajectoryGoal,
7 )
8 import rospy
9 import sys
10 from trajectory_msgs.msg import (
11  JointTrajectoryPoint,
12 )
13 import sys
14 from jog_msgs.msg import JogJoint
15 import rospy
16 import rostest
17 from sensor_msgs.msg import JointState
18 import unittest
19 
20 
21 
22 class TestJogJointNode(unittest.TestCase):
23  @classmethod
24  def setUpClass(cls):
25  rospy.init_node('test_jog_joint_node')
26 
27  def setUp(self):
28  # Get parameters
29  self.controller_name = rospy.get_param('~controller_name', None)
30  self.action_name = rospy.get_param('~action_name', None)
31  self.joint_names = rospy.get_param('~joint_names', [])
32  self.home_positions = rospy.get_param('~home_positions', [])
33  self.delta = rospy.get_param('~delta', 0.01)
34  # Subscribers
35  self.joint_state_ = rospy.wait_for_message('joint_states', JointState, timeout=10.0)
36  rospy.Subscriber('joint_states', JointState, self.cb_joint_states, queue_size=10)
37  # Publishers
38  self.pub = rospy.Publisher('jog_joint', JogJoint, queue_size=50)
39  # Actionlib
40  self.client = None
41  if self.controller_name and self.action_name:
43  self.controller_name + '/' + self.action_name, FollowJointTrajectoryAction)
44  self.client.wait_for_server()
45  # Move to home position
46  self.move_to_home()
47 
48  def move_to_home(self):
49  goal = FollowJointTrajectoryGoal()
50  goal.trajectory.header.stamp = rospy.Time.now()
51  goal_time_tolerance = rospy.Time(0.1)
52  goal.goal_time_tolerance = rospy.Time(0.1)
53  goal.trajectory.joint_names = self.joint_names
54  point = JointTrajectoryPoint()
55  point.positions = self.home_positions
56  point.time_from_start = rospy.Duration(1.0)
57  goal.trajectory.points.append(point)
58 
59  if self.client:
60  self.client.send_goal(goal)
61  self.assertTrue(self.client.wait_for_result(timeout=rospy.Duration(5.0)))
62  rospy.sleep(1.0)
63 
64  def cb_joint_states(self, msg):
65  self.joint_state_ = msg
66 
68  '''Test to jog a jog command'''
69  joint_state = self.joint_state_
70  jog = JogJoint()
71  jog.header.stamp = rospy.Time.now()
72  jog.joint_names = self.joint_names
73  jog.deltas = [self.delta]*len(jog.joint_names)
74  self.pub.publish(jog)
75  rospy.sleep(1.0)
76  # Check if the robot is jogged by delta
77  for joint in self.joint_names:
78  index = joint_state.name.index(joint)
79  self.assertAlmostEqual(
80  joint_state.position[index] + self.delta, self.joint_state_.position[index], delta=0.0001)
81 
83  '''Test to jog continuous 10 jog commands'''
84  joint_state = self.joint_state_
85  for i in range(10):
86  jog = JogJoint()
87  jog.header.stamp = rospy.Time.now()
88  jog.joint_names = self.joint_names
89  jog.deltas = [self.delta]*len(jog.joint_names)
90  self.pub.publish(jog)
91  rospy.sleep(1.0)
92  # Check if the robot is jogged by 10*delta
93  for joint in self.joint_names:
94  index = joint_state.name.index(joint)
95  self.assertAlmostEqual(
96  joint_state.position[index] + 10*self.delta, self.joint_state_.position[index], delta=0.0001)
97 
99  '''Test to jog same amount for forward and backward'''
100  joint_state = self.joint_state_
101  for i in range(10):
102  jog = JogJoint()
103  jog.header.stamp = rospy.Time.now()
104  jog.joint_names = self.joint_names
105  jog.deltas = [self.delta]*len(jog.joint_names)
106  self.pub.publish(jog)
107  for i in range(10):
108  jog = JogJoint()
109  jog.header.stamp = rospy.Time.now()
110  jog.joint_names = self.joint_names
111  jog.deltas = [-self.delta]*len(jog.joint_names)
112  self.pub.publish(jog)
113  rospy.sleep(1.0)
114  # Check if the robot is not moved
115  for joint in self.joint_names:
116  index = joint_state.name.index(joint)
117  self.assertAlmostEqual(
118  joint_state.position[index],
119  self.joint_state_.position[index],
120  delta=0.0001)
121 
123  '''Test to publish empty jonit_names/positions jog command'''
124  joint_state = self.joint_state_
125  jog = JogJoint()
126  jog.header.stamp = rospy.Time.now()
127  self.pub.publish(jog)
128  rospy.sleep(1.0)
129  # Check if the robot is not moved
130  for joint in self.joint_names:
131  index = joint_state.name.index(joint)
132  self.assertAlmostEqual(
133  joint_state.position[index],
134  self.joint_state_.position[index],
135  delta=0.0001)
136 
137 if __name__ == '__main__':
138  rostest.rosrun('jog_joint', 'test_jog_joint_node', TestJogJointNode)


jog_controller
Author(s): Ryosuke Tajima
autogenerated on Sun May 17 2020 03:25:01