ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange |
1 | initial version |
Adding joint limits to a URDF is only the specification part. For these limits to be taken into account, you need an implementation that enforces them.
As you have already noticed, not all URDF-parsing implementations take the complete specification into account. The joint_state_publisher
, for instance, takes joint names, types and position limits into account for publishing sensor_msgs/JointState
messages, but does not not consider joint velocity limits. Also, there are certain specifications, like the maximum joint effort, that cannot be enforced with a kinematic-only implementation. So, the important thing is to understand the scope and limitations of an implementation, and a package's documentation should help here. I went ahead and added to the joint_state_publisher
ROS wiki entry a comment to this effect.
As @lucasw mentions, you could consider using the ros_control
framework for setting up your robot and move it with controllers that are aware of the complete URDF joint limits spec. You might find the joint_limits_interface
package of particular interest. A more general discussion can be found on 24:14 of this video. Note that the overhead of setting up ros_control
for your robot will be higher than setting up the joint_state_publisher
, there's no free lunch.