A joint from the robot. Models the transform that this joint applies in the kinematic chain. A joint consists of multiple variables. In the simplest case, when the joint is a single DOF, there is only one variable and its name is the same as the joint's name. For multiDOF joints, each variable has a local name (e.g., x, y) but the full variable name as seen from the outside of this class is a concatenation of the "joint name"/"local name" (e.g., a joint named 'base' with local variables 'x' and 'y' will store its full variable names as 'base/x' and 'base/y'). Local names are never used to reference variables directly. More...
#include <joint_model.h>
Public Types  
typedef std::vector< VariableBounds >  Bounds 
The datatype for the joint bounds. More...  
enum  JointType { UNKNOWN, REVOLUTE, PRISMATIC, PLANAR, FLOATING, FIXED } 
The different types of joints we support. More...  
Public Member Functions  
void  addDescendantJointModel (const JointModel *joint) 
void  addDescendantLinkModel (const LinkModel *link) 
void  addMimicRequest (const JointModel *joint) 
Notify this joint that there is another joint that mimics it. More...  
virtual double  distance (const double *value1, const double *value2) const =0 
Compute the distance between two joint states of the same model (represented by the variable values) More...  
const LinkModel *  getChildLinkModel () const 
Get the link that this joint connects to. There will always be such a link. More...  
const std::vector< const JointModel * > &  getDescendantJointModels () const 
Get all the joint models that descend from this joint, in the kinematic tree. More...  
const std::vector< const LinkModel * > &  getDescendantLinkModels () const 
Get all the link models that descend from this joint, in the kinematic tree. More...  
double  getDistanceFactor () const 
Get the factor that should be applied to the value returned by distance() when that value is used in compound distances. More...  
virtual double  getMaximumExtent (const Bounds &other_bounds) const =0 
Get the extent of the state space (the maximum value distance() can ever report) More...  
double  getMaximumExtent () const 
const JointModel *  getMimic () const 
Get the joint this one is mimicking. More...  
double  getMimicFactor () const 
If mimicking a joint, this is the multiplicative factor for that joint's value. More...  
double  getMimicOffset () const 
If mimicking a joint, this is the offset added to that joint's value. More...  
const std::vector< const JointModel * > &  getMimicRequests () const 
The joint models whose values would be modified if the value of this joint changed. More...  
const std::string &  getName () const 
Get the name of the joint. More...  
const std::vector< const JointModel * > &  getNonFixedDescendantJointModels () const 
Get all the nonfixed joint models that descend from this joint, in the kinematic tree. More...  
const LinkModel *  getParentLinkModel () const 
Get the link that this joint connects to. The robot is assumed to start with a joint, so the root joint will return a NULL pointer here. More...  
virtual unsigned int  getStateSpaceDimension () const =0 
Get the dimension of the state space that corresponds to this joint. More...  
JointType  getType () const 
Get the type of joint. More...  
std::string  getTypeName () const 
Get the type of joint as a string. More...  
virtual void  interpolate (const double *from, const double *to, const double t, double *state) const =0 
Computes the state that lies at time t in [0, 1] on the segment that connects from state to to state. The memory location of state is not required to be different from the memory of either from or to. More...  
bool  isPassive () const 
Check if this joint is passive. More...  
JointModel (const std::string &name)  
Construct a joint named name. More...  
void  setChildLinkModel (const LinkModel *link) 
void  setDistanceFactor (double factor) 
Set the factor that should be applied to the value returned by distance() when that value is used in compound distances. More...  
void  setMimic (const JointModel *mimic, double factor, double offset) 
Mark this joint as mimicking mimic using factor and offset. More...  
void  setParentLinkModel (const LinkModel *link) 
void  setPassive (bool flag) 
virtual  ~JointModel () 
Reason about the variables that make up this joint  
const std::vector< std::string > &  getVariableNames () const 
Get the names of the variables that make up this joint, in the order they appear in corresponding states. For single DOF joints, this will be just the joint name. For multiDOF joints these will be the joint name followed by "/", followed by the local names of the variables. More...  
const std::vector< std::string > &  getLocalVariableNames () const 
Get the local names of the variable that make up the joint (suffixes that are attached to joint names to construct the variable names). For single DOF joints, this will be empty. More...  
bool  hasVariable (const std::string &variable) const 
Check if a particular variable is known to this joint. More...  
std::size_t  getVariableCount () const 
Get the number of variables that describe this joint. More...  
int  getFirstVariableIndex () const 
Get the index of this joint's first variable within the full robot state. More...  
void  setFirstVariableIndex (int index) 
Set the index of this joint's first variable within the full robot state. More...  
int  getJointIndex () const 
Get the index of this joint within the robot model. More...  
void  setJointIndex (int index) 
Set the index of this joint within the robot model. More...  
int  getLocalVariableIndex (const std::string &variable) const 
Get the index of the variable within this joint. More...  
Functionality specific to computing state values  
void  getVariableDefaultPositions (double *values) const 
Provide a default value for the joint given the default joint variable bounds (maintained internally). Most joints will use the default implementation provided in this base class, but the quaternion for example needs a different implementation. Enough memory is assumed to be allocated. More...  
virtual void  getVariableDefaultPositions (double *values, const Bounds &other_bounds) const =0 
Provide a default value for the joint given the joint variable bounds. Most joints will use the default implementation provided in this base class, but the quaternion for example needs a different implementation. Enough memory is assumed to be allocated. More...  
void  getVariableRandomPositions (random_numbers::RandomNumberGenerator &rng, double *values) const 
Provide random values for the joint variables (within default bounds). Enough memory is assumed to be allocated. More...  
virtual void  getVariableRandomPositions (random_numbers::RandomNumberGenerator &rng, double *values, const Bounds &other_bounds) const =0 
Provide random values for the joint variables (within specified bounds). Enough memory is assumed to be allocated. More...  
void  getVariableRandomPositionsNearBy (random_numbers::RandomNumberGenerator &rng, double *values, const double *near, const double distance) const 
Provide random values for the joint variables (within default bounds). Enough memory is assumed to be allocated. More...  
virtual void  getVariableRandomPositionsNearBy (random_numbers::RandomNumberGenerator &rng, double *values, const Bounds &other_bounds, const double *near, const double distance) const =0 
Provide random values for the joint variables (within specified bounds). Enough memory is assumed to be allocated. More...  
Functionality specific to verifying bounds  
bool  satisfiesPositionBounds (const double *values, double margin=0.0) const 
Check if the set of values for the variables of this joint are within bounds. More...  
virtual bool  satisfiesPositionBounds (const double *values, const Bounds &other_bounds, double margin) const =0 
Check if the set of position values for the variables of this joint are within bounds, up to some margin. More...  
bool  enforcePositionBounds (double *values) const 
Force the specified values to be inside bounds and normalized. Quaternions are normalized, continuous joints are made between Pi and Pi. Returns true if changes were made. More...  
virtual bool  enforcePositionBounds (double *values, const Bounds &other_bounds) const =0 
Force the specified values to be inside bounds and normalized. Quaternions are normalized, continuous joints are made between Pi and Pi. Return true if changes were made. More...  
bool  satisfiesVelocityBounds (const double *values, double margin=0.0) const 
Check if the set of velocities for the variables of this joint are within bounds. More...  
virtual bool  satisfiesVelocityBounds (const double *values, const Bounds &other_bounds, double margin) const 
Check if the set of velocities for the variables of this joint are within bounds, up to some margin. More...  
bool  enforceVelocityBounds (double *values) const 
Force the specified velocities to be within bounds. Return true if changes were made. More...  
virtual bool  enforceVelocityBounds (double *values, const Bounds &other_bounds) const 
Force the specified velocities to be inside bounds. Return true if changes were made. More...  
const VariableBounds &  getVariableBounds (const std::string &variable) const 
Get the bounds for a variable. Throw an exception if the variable was not found. More...  
const Bounds &  getVariableBounds () const 
Get the variable bounds for this joint, in the same order as the names returned by getVariableNames() More...  
void  setVariableBounds (const std::string &variable, const VariableBounds &bounds) 
Set the lower and upper bounds for a variable. Throw an exception if the variable was not found. More...  
void  setVariableBounds (const std::vector< moveit_msgs::JointLimits > &jlim) 
Override joint limits loaded from URDF. Unknown variables are ignored. More...  
const std::vector< moveit_msgs::JointLimits > &  getVariableBoundsMsg () const 
Get the joint limits known to this model, as a message. More...  
Computing transforms  
virtual void  computeTransform (const double *joint_values, Eigen::Affine3d &transf) const =0 
Given the joint values for a joint, compute the corresponding transform. More...  
virtual void  computeVariablePositions (const Eigen::Affine3d &transform, double *joint_values) const =0 
Given the transform generated by joint, compute the corresponding joint values. More...  
Protected Member Functions  
void  computeVariableBoundsMsg () 
Protected Attributes  
const LinkModel *  child_link_model_ 
The link after this joint. More...  
std::vector< const JointModel * >  descendant_joint_models_ 
Pointers to all the joints that follow this one in the kinematic tree (including mimic joints) More...  
std::vector< const LinkModel * >  descendant_link_models_ 
Pointers to all the links that will be moved if this joint changes value. More...  
double  distance_factor_ 
The factor applied to the distance between two joint states. More...  
int  first_variable_index_ 
The index of this joint's first variable, in the complete robot state. More...  
int  joint_index_ 
Index for this joint in the array of joints of the complete model. More...  
std::vector< std::string >  local_variable_names_ 
The local names to use for the variables that make up this joint. More...  
const JointModel *  mimic_ 
The joint this one mimics (NULL for joints that do not mimic) More...  
double  mimic_factor_ 
The offset to the mimic joint. More...  
double  mimic_offset_ 
The multiplier to the mimic joint. More...  
std::vector< const JointModel * >  mimic_requests_ 
The set of joints that should get a value copied to them when this joint changes. More...  
std::string  name_ 
Name of the joint. More...  
std::vector< const JointModel * >  non_fixed_descendant_joint_models_ 
Pointers to all the joints that follow this one in the kinematic tree, including mimic joints, but excluding fixed joints. More...  
const LinkModel *  parent_link_model_ 
The link before this joint. More...  
bool  passive_ 
Specify whether this joint is marked as passive in the SRDF. More...  
JointType  type_ 
The type of joint. More...  
Bounds  variable_bounds_ 
The bounds for each variable (low, high) in the same order as variable_names_. More...  
std::vector< moveit_msgs::JointLimits >  variable_bounds_msg_ 
VariableIndexMap  variable_index_map_ 
Map from variable names to the corresponding index in variable_names_ (indexing makes sense within the JointModel only) More...  
std::vector< std::string >  variable_names_ 
The full names to use for the variables that make up this joint. More...  
A joint from the robot. Models the transform that this joint applies in the kinematic chain. A joint consists of multiple variables. In the simplest case, when the joint is a single DOF, there is only one variable and its name is the same as the joint's name. For multiDOF joints, each variable has a local name (e.g., x, y) but the full variable name as seen from the outside of this class is a concatenation of the "joint name"/"local name" (e.g., a joint named 'base' with local variables 'x' and 'y' will store its full variable names as 'base/x' and 'base/y'). Local names are never used to reference variables directly.
Definition at line 108 of file joint_model.h.
typedef std::vector<VariableBounds> moveit::core::JointModel::Bounds 
The datatype for the joint bounds.
Definition at line 123 of file joint_model.h.
The different types of joints we support.
Enumerator  

UNKNOWN  
REVOLUTE  
PRISMATIC  
PLANAR  
FLOATING  
FIXED 
Definition at line 112 of file joint_model.h.
moveit::core::JointModel::JointModel  (  const std::string &  name  ) 
Construct a joint named name.
Definition at line 47 of file joint_model.cpp.

virtualdefault 
void moveit::core::JointModel::addDescendantJointModel  (  const JointModel *  joint  ) 
Definition at line 191 of file joint_model.cpp.
void moveit::core::JointModel::addDescendantLinkModel  (  const LinkModel *  link  ) 
Definition at line 198 of file joint_model.cpp.
void moveit::core::JointModel::addMimicRequest  (  const JointModel *  joint  ) 
Notify this joint that there is another joint that mimics it.
Definition at line 186 of file joint_model.cpp.

pure virtual 
Given the joint values for a joint, compute the corresponding transform.
Implemented in moveit::core::PrismaticJointModel, moveit::core::RevoluteJointModel, moveit::core::FixedJointModel, moveit::core::FloatingJointModel, and moveit::core::PlanarJointModel.

protected 
Definition at line 160 of file joint_model.cpp.

pure virtual 
Given the transform generated by joint, compute the corresponding joint values.
Implemented in moveit::core::PrismaticJointModel, moveit::core::RevoluteJointModel, moveit::core::FixedJointModel, moveit::core::FloatingJointModel, and moveit::core::PlanarJointModel.

pure virtual 
Compute the distance between two joint states of the same model (represented by the variable values)
Implemented in moveit::core::PrismaticJointModel, moveit::core::RevoluteJointModel, moveit::core::FixedJointModel, moveit::core::FloatingJointModel, and moveit::core::PlanarJointModel.

inline 
Force the specified values to be inside bounds and normalized. Quaternions are normalized, continuous joints are made between Pi and Pi. Returns true if changes were made.
Definition at line 290 of file joint_model.h.

pure virtual 
Force the specified values to be inside bounds and normalized. Quaternions are normalized, continuous joints are made between Pi and Pi. Return true if changes were made.
Implemented in moveit::core::PrismaticJointModel, moveit::core::RevoluteJointModel, moveit::core::FixedJointModel, moveit::core::FloatingJointModel, and moveit::core::PlanarJointModel.

inline 
Force the specified velocities to be within bounds. Return true if changes were made.
Definition at line 310 of file joint_model.h.

virtual 
Force the specified velocities to be inside bounds. Return true if changes were made.
Definition at line 93 of file joint_model.cpp.

inline 
Get the link that this joint connects to. There will always be such a link.
Definition at line 154 of file joint_model.h.

inline 
Get all the joint models that descend from this joint, in the kinematic tree.
Definition at line 400 of file joint_model.h.

inline 
Get all the link models that descend from this joint, in the kinematic tree.
Definition at line 394 of file joint_model.h.

inline 
Get the factor that should be applied to the value returned by distance() when that value is used in compound distances.
Definition at line 346 of file joint_model.h.

inline 
Get the index of this joint's first variable within the full robot state.
Definition at line 202 of file joint_model.h.

inline 
Get the index of this joint within the robot model.
Definition at line 214 of file joint_model.h.
int moveit::core::JointModel::getLocalVariableIndex  (  const std::string &  variable  )  const 
Get the index of the variable within this joint.
Definition at line 85 of file joint_model.cpp.

inline 
Get the local names of the variable that make up the joint (suffixes that are attached to joint names to construct the variable names). For single DOF joints, this will be empty.
Definition at line 184 of file joint_model.h.

pure virtual 
Get the extent of the state space (the maximum value distance() can ever report)
Implemented in moveit::core::PrismaticJointModel, moveit::core::RevoluteJointModel, moveit::core::FixedJointModel, moveit::core::FloatingJointModel, and moveit::core::PlanarJointModel.

inline 
Definition at line 431 of file joint_model.h.

inline 
Get the joint this one is mimicking.
Definition at line 362 of file joint_model.h.

inline 
If mimicking a joint, this is the multiplicative factor for that joint's value.
Definition at line 374 of file joint_model.h.

inline 
If mimicking a joint, this is the offset added to that joint's value.
Definition at line 368 of file joint_model.h.

inline 
The joint models whose values would be modified if the value of this joint changed.
Definition at line 383 of file joint_model.h.

inline 
Get the name of the joint.
Definition at line 131 of file joint_model.h.

inline 
Get all the nonfixed joint models that descend from this joint, in the kinematic tree.
Definition at line 406 of file joint_model.h.

inline 
Get the link that this joint connects to. The robot is assumed to start with a joint, so the root joint will return a NULL pointer here.
Definition at line 148 of file joint_model.h.

pure virtual 
Get the dimension of the state space that corresponds to this joint.
Implemented in moveit::core::PrismaticJointModel, moveit::core::RevoluteJointModel, moveit::core::FixedJointModel, moveit::core::FloatingJointModel, and moveit::core::PlanarJointModel.

inline 
Get the type of joint.
Definition at line 137 of file joint_model.h.
std::string moveit::core::JointModel::getTypeName  (  )  const 
Get the type of joint as a string.
Definition at line 64 of file joint_model.cpp.
const VariableBounds & moveit::core::JointModel::getVariableBounds  (  const std::string &  variable  )  const 
Get the bounds for a variable. Throw an exception if the variable was not found.
Definition at line 120 of file joint_model.cpp.

inline 
Get the variable bounds for this joint, in the same order as the names returned by getVariableNames()
Definition at line 322 of file joint_model.h.

inline 
Get the joint limits known to this model, as a message.
Definition at line 334 of file joint_model.h.

inline 
Get the number of variables that describe this joint.
Definition at line 196 of file joint_model.h.

inline 
Provide a default value for the joint given the default joint variable bounds (maintained internally). Most joints will use the default implementation provided in this base class, but the quaternion for example needs a different implementation. Enough memory is assumed to be allocated.
Definition at line 236 of file joint_model.h.

pure virtual 
Provide a default value for the joint given the joint variable bounds. Most joints will use the default implementation provided in this base class, but the quaternion for example needs a different implementation. Enough memory is assumed to be allocated.
Implemented in moveit::core::PrismaticJointModel, moveit::core::RevoluteJointModel, moveit::core::FixedJointModel, moveit::core::FloatingJointModel, and moveit::core::PlanarJointModel.

inline 
Get the names of the variables that make up this joint, in the order they appear in corresponding states. For single DOF joints, this will be just the joint name. For multiDOF joints these will be the joint name followed by "/", followed by the local names of the variables.
Definition at line 176 of file joint_model.h.

inline 
Provide random values for the joint variables (within default bounds). Enough memory is assumed to be allocated.
Definition at line 248 of file joint_model.h.

pure virtual 
Provide random values for the joint variables (within specified bounds). Enough memory is assumed to be allocated.
Implemented in moveit::core::PrismaticJointModel, moveit::core::RevoluteJointModel, moveit::core::FixedJointModel, moveit::core::FloatingJointModel, and moveit::core::PlanarJointModel.

inline 
Provide random values for the joint variables (within default bounds). Enough memory is assumed to be allocated.
Definition at line 260 of file joint_model.h.

pure virtual 
Provide random values for the joint variables (within specified bounds). Enough memory is assumed to be allocated.
Implemented in moveit::core::PrismaticJointModel, moveit::core::RevoluteJointModel, moveit::core::FixedJointModel, moveit::core::FloatingJointModel, and moveit::core::PlanarJointModel.

inline 
Check if a particular variable is known to this joint.
Definition at line 190 of file joint_model.h.

pure virtual 
Computes the state that lies at time t in [0, 1] on the segment that connects from state to to state. The memory location of state is not required to be different from the memory of either from or to.
Implemented in moveit::core::PrismaticJointModel, moveit::core::RevoluteJointModel, moveit::core::FixedJointModel, moveit::core::FloatingJointModel, and moveit::core::PlanarJointModel.

inline 
Check if this joint is passive.
Definition at line 412 of file joint_model.h.

inline 
Check if the set of values for the variables of this joint are within bounds.
Definition at line 278 of file joint_model.h.

pure virtual 
Check if the set of position values for the variables of this joint are within bounds, up to some margin.
Implemented in moveit::core::PrismaticJointModel, moveit::core::RevoluteJointModel, moveit::core::FixedJointModel, moveit::core::FloatingJointModel, and moveit::core::PlanarJointModel.

inline 
Check if the set of velocities for the variables of this joint are within bounds.
Definition at line 301 of file joint_model.h.

virtual 
Check if the set of velocities for the variables of this joint are within bounds, up to some margin.
Definition at line 110 of file joint_model.cpp.

inline 
Definition at line 164 of file joint_model.h.

inline 
Set the factor that should be applied to the value returned by distance() when that value is used in compound distances.
Definition at line 353 of file joint_model.h.

inline 
Set the index of this joint's first variable within the full robot state.
Definition at line 208 of file joint_model.h.

inline 
Set the index of this joint within the robot model.
Definition at line 220 of file joint_model.h.
void moveit::core::JointModel::setMimic  (  const JointModel *  mimic, 
double  factor,  
double  offset  
) 
Mark this joint as mimicking mimic using factor and offset.
Definition at line 179 of file joint_model.cpp.

inline 
Definition at line 159 of file joint_model.h.

inline 
Definition at line 417 of file joint_model.h.
void moveit::core::JointModel::setVariableBounds  (  const std::string &  variable, 
const VariableBounds &  bounds  
) 
Set the lower and upper bounds for a variable. Throw an exception if the variable was not found.
Definition at line 125 of file joint_model.cpp.
void moveit::core::JointModel::setVariableBounds  (  const std::vector< moveit_msgs::JointLimits > &  jlim  ) 
Override joint limits loaded from URDF. Unknown variables are ignored.
Definition at line 131 of file joint_model.cpp.

protected 
The link after this joint.
Definition at line 475 of file joint_model.h.

protected 
Pointers to all the joints that follow this one in the kinematic tree (including mimic joints)
Definition at line 493 of file joint_model.h.

protected 
Pointers to all the links that will be moved if this joint changes value.
Definition at line 490 of file joint_model.h.

protected 
The factor applied to the distance between two joint states.
Definition at line 503 of file joint_model.h.

protected 
The index of this joint's first variable, in the complete robot state.
Definition at line 506 of file joint_model.h.

protected 
Index for this joint in the array of joints of the complete model.
Definition at line 509 of file joint_model.h.

protected 
The local names to use for the variables that make up this joint.
Definition at line 457 of file joint_model.h.

protected 
The joint this one mimics (NULL for joints that do not mimic)
Definition at line 478 of file joint_model.h.

protected 
The offset to the mimic joint.
Definition at line 481 of file joint_model.h.

protected 
The multiplier to the mimic joint.
Definition at line 484 of file joint_model.h.

protected 
The set of joints that should get a value copied to them when this joint changes.
Definition at line 487 of file joint_model.h.

protected 
Name of the joint.
Definition at line 451 of file joint_model.h.

protected 
Pointers to all the joints that follow this one in the kinematic tree, including mimic joints, but excluding fixed joints.
Definition at line 497 of file joint_model.h.

protected 
The link before this joint.
Definition at line 472 of file joint_model.h.

protected 
Specify whether this joint is marked as passive in the SRDF.
Definition at line 500 of file joint_model.h.

protected 
The type of joint.
Definition at line 454 of file joint_model.h.

protected 
The bounds for each variable (low, high) in the same order as variable_names_.
Definition at line 463 of file joint_model.h.

protected 
Definition at line 465 of file joint_model.h.

protected 
Map from variable names to the corresponding index in variable_names_ (indexing makes sense within the JointModel only)
Definition at line 469 of file joint_model.h.

protected 
The full names to use for the variables that make up this joint.
Definition at line 460 of file joint_model.h.