# Joint Safety Limits Explained

The effort limit is an attribute of the limit tag. In this case, a controller cannot command an effort of more than 30 N (N-m for revolute) nor less than -30 N (N-m for revolute) on the joint. If the controller tries to command an effort beyond the effort limit, the magnitude of the effort is truncated.

The velocity limit specifies the bounds on the magnitude of the joint velocity (m/s for prismatic, rad/s for revolute). The velocity limit is enforced by bounding the commanded effort such that no effort can be applied to push the joint beyond the velocity limit, and a damping effort is applied if the joint is moving at a velocity beyond the limit. The k_velocity term determines the scale of the effort bound.

For a velocity v, a velocity limit of v^{+} and a k_velocity of k_{v} the upper bound on effort is -k_{v} * (v - v^{+})

The safety_length_min and safety_length_max determine the locations of the software joint limits (the "soft" limits). The upper soft limit is the upper hardware limit minus the safety_length_max and the lower soft limit is the lower hardware limit plus safety_length_min. When the joint is near the soft limits, the possible velocities are bounded to keep the position from crossing the soft limits. The k_position term determines the scale of the bound on velocity.

For position x, soft upper limit x^{+} and a k_position of k_{x} the upper bound on velocity is -k_{x}*(x - x^{+}), see figures below:

These bounds on velocity are taken into account when determining the bounds on effort.