It's just a tolerance on the velocity value to be considered as "stopped".
For ex: ideally the robot (or a joint) would be considered "stopped" when the velocity reaches 0. But in practice there might be some small roll/slip or delays in the motor circuit. For this purpose, any velocity within this tolerance would be considered as 0 and the robot would be considered to be stopped. The default value is 0.01 which means that the robot would be considered to be "stopped" when its velocity is equal to or less than 0.01 rad/s.
You could set this to be 0, but depending upon your application, may want to put some small actual value in there.
EDIT: changed m/s to rad/s for robot arm joints.
Originally posted by Akhil Kurup with karma: 459 on 2022-01-05
This answer was ACCEPTED on the original site
Post score: 1
Original comments
Comment by mug on 2022-01-06:
When I set it to 0.01, ros controllers will have this warning message: Controller'/th6/arm_controller' failed with error GOAL_TOLERANCE_VIOLATED
. But if it is set to 0, ros controllers will prompt SUCCESS
. This result seems to be inconsistent with its definition.
Comment by Akhil Kurup on 2022-01-06:
I don't have much experience with this. Maybe answer #272328 will help.
Comment by mug on 2022-01-06:
@Akhil Kurup Thanks.
Comment by Mike Scheutzow on 2022-01-06:
@mug on a real robot arm, the joint rotation velocity is being measured by a sensor. The joint motor has to fight gravity, so the value is noisy and usually non-zero, even if your eyes tell you the joint is "not moving". This parameter sets the max. velocity for moveit to consider the joint to be "not moving". If you set the value too high, moveit will give up too early as the arm movement slows down as it approaches the specified goal.
Comment by Mike Scheutzow on 2022-01-06:
@Akhil Kurup We are discussing joint velocity, so the units in your answer should be radians/sec.
Comment by Akhil Kurup on 2022-01-06:
@Mike Scheutzow that makes sense! Thanks
Comment by mug on 2022-01-07:
@Mike Scheutzow Thanks for your reply, sir. I have now understood the meaning of this parameter. But I now encounter a situation where I am using position_controllers/JointTrajectoryController
to control the robot model in Gazebo. When the robot model reaches the goal position, the controller will issue such a warning: Controller'/th6/arm_controller' failed with error GOAL_TOLERANCE_VIOLATED
. At this time, I set the parameter to 0.01
. But when I set the parameter to 0
, I will get a success prompt from the controller. The above situation does not seem to be consistent with the definition of this parameter.
Comment by Mike Scheutzow on 2022-01-07:
@mug look at the messages on your /joint_states
topic when the arm is not moving. Do you see the velocity values jumping around, or are they exactly 0? If the values are 0, I've already explained to you what is happening.
Comment by mug on 2022-01-10:
@Mike Scheutzow I checked the topic and I can see that the joint speed is not 0 when the arm is not moving, and it is jumping around.
Comment by Mike Scheutzow on 2022-01-11:
@mug if you set it this threshold to zero on a real robot arm, you'll likely see the final joint values overshoot their target value. But it's your code - set it where ever you want.