Robotics StackExchange | Archived questions

GOAL_TOLERANCE_VIOLATED (Gazebo/Moveit)

I'm observing the trajectory planned by Moveit! in Gazebo for PANDA arm. Sometime i get error saying:

Controller panda/panda_arm_controller failed with error code GOAL_TOLERANCE_VIOLATED

Controller handle panda/panda_arm_controller reports status ABORTED

Here is my ros_controllers.yaml file

I'm reading about JointTrajectoryController from here, from this source i also have following question:

What is upper limit of constraints/goal_time and constraints/goal??

I have understood that the error is with roscontrol side and moveit being client the error is being reported to it by gazebo + roscontrol side.

Any kind of help is appreciated.

Asked by mvish7 on 2019-01-07 14:49:58 UTC

Comments

Did you find a solution to GOAL_TOLERANCE_VIOLATED ?

Asked by Deastan on 2019-07-08 07:08:12 UTC

Answers

The problem arises because, when movegroup is sending out the JointTrajectoryAction/goal msg to a foo arm_controller, the 'tolerance' msg fields are empty, resulting a GOAL_TOLREANCE_VIOLATED.

I also tried to spent some time on solving this issue, after digging into joint_trajectory_controller in ros_controller, i found that the param is being retrieved here: tolerances.h.

To solve this, changes need to be made on the controller.yaml for gazebo controller. For my case, I am using a velocity_controllers here, thus changing stopped_velocity_tolerance from a number to 0 solved this.

arm_controller:
  type: velocity_controllers/JointTrajectoryController
  joints:
     - shoulder_pan_joint
     - shoulder_lift_joint
     - elbow_joint
     - wrist_1_joint
     - wrist_2_joint
     - wrist_3_joint
  constraints:
      goal_time: 0.6
      # vel_tolerance is 0 for due to the movegroup/follow_joint_trajectory/goal tolerance is empty
      stopped_velocity_tolerance: 0
      shoulder_pan_joint: {trajectory: 0.1, goal: 0.1}
      shoulder_lift_joint: {trajectory: 0.1, goal: 0.1}
      elbow_joint: {trajectory: 0.1, goal: 0.1}
      wrist_1_joint: {trajectory: 0.1, goal: 0.1}
      wrist_2_joint: {trajectory: 0.1, goal: 0.1}
      wrist_3_joint: {trajectory: 0.1, goal: 0.1}
  gains:
      shoulder_pan_joint: {p: 100, d: 1, i: 1, i_clamp: 1}
      shoulder_lift_joint: {p: 100, d: 1, i: 1, i_clamp: 1}
      elbow_joint: {p: 100, d: 1, i: 1, i_clamp: 1}
      wrist_1_joint: {p: 100, d: 1, i: 1, i_clamp: 1}
      wrist_2_joint: {p: 100, d: 1, i: 1, i_clamp: 1}
      wrist_3_joint: {p: 100, d: 1, i: 1, i_clamp: 1}
  stop_trajectory_duration: 0.5
  state_publish_rate:  25
  action_monitor_rate: 10

After this change, i managed to receive SUCCESS. Similarly, If you are using a position_controllers, I believe the goal for each joint need to be changed to 0. Hopefully this works for you.

Asked by tanyouliang on 2019-10-16 00:32:03 UTC

Comments

works for me, thanks!

Asked by epsilon11101 on 2020-02-12 13:04:59 UTC

I am using a position_controller, I tried changing the goal to 0, however I'm still not able to solve it. Any suggestions?

Asked by ThreeForElvenKings on 2020-05-22 01:14:51 UTC

How does reducing the tolerance help? Shouldn't the tolerance be increased?

Asked by thejose on 2020-06-28 20:42:55 UTC

Check my other answer Controller failed with error code PATH_TOLERANCE_VIOLATED. which is related to a similar problem like GOAL_TOLERANCE_VIOLATED.

Asked by Asan A. on 2023-01-25 10:17:16 UTC

Comments