Parameters for Joint Safety Controllers. More...
#include <joint.h>
Public Member Functions | |
void | clear () |
bool | initXml (TiXmlElement *config) |
JointSafety () | |
clear variables on construction | |
Public Attributes | |
double | k_position |
double | k_velocity |
double | soft_lower_limit |
double | soft_upper_limit |
urdf::JointSafety::JointSafety | ( | ) | [inline] |
void urdf::JointSafety::clear | ( | ) | [inline] |
bool urdf::JointSafety::initXml | ( | TiXmlElement * | config | ) |
IMPORTANT: The safety controller support is very much PR2 specific, not intended for generic usage.
Basic safety controller operation is as follows
current safety controllers will take effect on joints outside the position range below:
position range: [JointSafety::soft_lower_limit + JointLimits::velocity / JointSafety::k_position, JointSafety::soft_uppper_limit - JointLimits::velocity / JointSafety::k_position]
if (joint_position is outside of the position range above) velocity_limit_min = -JointLimits::velocity + JointSafety::k_position * (joint_position - JointSafety::soft_lower_limit) velocity_limit_max = JointLimits::velocity + JointSafety::k_position * (joint_position - JointSafety::soft_upper_limit) else velocity_limit_min = -JointLimits::velocity velocity_limit_max = JointLimits::velocity
velocity range: [velocity_limit_min + JointLimits::effort / JointSafety::k_velocity, velocity_limit_max - JointLimits::effort / JointSafety::k_velocity]
if (joint_velocity is outside of the velocity range above) effort_limit_min = -JointLimits::effort + JointSafety::k_velocity * (joint_velocity - velocity_limit_min) effort_limit_max = JointLimits::effort + JointSafety::k_velocity * (joint_velocity - velocity_limit_max) else effort_limit_min = -JointLimits::effort effort_limit_max = JointLimits::effort
Final effort command sent to the joint is saturated by [effort_limit_min,effort_limit_max]
Please see wiki for more details: http://www.ros.org/wiki/pr2_controller_manager/safety_limits