def set_right_arm_current(self, target_current, interpolation=None, accuracy=0.01): """ :param target_current: Set left arm current. :param interpolation: None and 0 -> no interpolation; >=1 -> interpolate target current. :param accuracy: Target current accuracy, 0.008 is roughly about 1 degree/sec^2. :return: """ assert type(target_current) is list, 'Velocity input is list' right_arm = JointState() right_arm.name = self._right_arm_name while not self.rospy.is_shutdown(): right_arm.current = target_current self._ginger_pub.publish(right_arm) error_cur = [ np.abs(s - g) for (s, g) in zip(target_current, self.get_right_arm_current()) ] if np.all([e < accuracy for e in error_cur]): print('Target current achieved') break