Ravelin
|
Defines a bilateral constraint (a joint) More...
#include <Joint.h>
Public Types | |
enum | ConstraintType { eUnknown, eExplicit, eImplicit } |
enum | DOFs { DOF_1 =0, DOF_2 =1, DOF_3 =2, DOF_4 =3, DOF_5 =4, DOF_6 =5 } |
Public Member Functions | |
JOINT () | |
Initializes the joint. More... | |
virtual const std::vector < SVELOCITY > & | get_spatial_axes () |
Gets the spatial axes for this joint. More... | |
void | add_force (const VECTORN &force) |
Adds a force to the joint. | |
void | reset_force () |
Resets the force on the joint. | |
ConstraintType | get_constraint_type () const |
void | set_constraint_type (ConstraintType type) |
Sets whether this constraint is implicit or explicit (or unknown) | |
boost::shared_ptr < ARTICULATED_BODY > | get_articulated_body () |
Gets the articulated body corresponding to this body. More... | |
void | set_articulated_body (boost::shared_ptr< ARTICULATED_BODY > abody) |
Sets the articulated body corresponding to this body. More... | |
virtual void | set_inboard_link (boost::shared_ptr< RIGIDBODY > link, bool update_pose) |
virtual void | set_outboard_link (boost::shared_ptr< RIGIDBODY > link, bool update_pose) |
void | set_location (const VECTOR3 &p, boost::shared_ptr< RIGIDBODY > inboard, boost::shared_ptr< RIGIDBODY > outboard) |
VECTOR3 | get_location (bool use_outboard=false) const |
Gets the location of this joint. More... | |
virtual void | set_inboard_pose (boost::shared_ptr< const POSE3 > inboard_pose, bool update_joint_pose) |
virtual void | set_outboard_pose (boost::shared_ptr< POSE3 > outboard_pose, bool update_joint_pose) |
virtual void | update_spatial_axes () |
Abstract method to update the local spatial axes. More... | |
virtual void | evaluate_constraints_dot (REAL C[]) |
Evaluates the time derivative of the constraint equations. | |
virtual void | set_q_tare (const VECTORN &tare) |
virtual const VECTORN & | get_q_tare () const |
boost::shared_ptr< RIGIDBODY > | get_inboard_link () const |
Gets the inboard link for this joint. | |
boost::shared_ptr< RIGIDBODY > | get_outboard_link () const |
Gets the outboard link for this joint. | |
unsigned | get_index () const |
Gets the joint index (returns UINT_MAX if not set) | |
void | set_index (unsigned index) |
Sets the joint index. More... | |
unsigned | get_constraint_index () const |
Gets the constraint index for this joint. | |
void | set_constraint_index (unsigned idx) |
Sets the constraint index for this joint. | |
void | set_coord_index (unsigned index) |
Sets the coordinate index for this joint. More... | |
unsigned | get_coord_index () const |
Gets the starting coordinate index for this joint. | |
boost::shared_ptr< const POSE3 > | get_pose () const |
Gets the pose of this joint (relative to the inboard pose instead of the outboard pose as returned by get_pose_from_outboard()) | |
boost::shared_ptr< const POSE3 > | get_pose_from_outboard () const |
Gets the pose of this joint relative to the outboard pose (rather than the inboard pose as returned by get_pose()) | |
virtual bool | is_singular_config () const =0 |
Gets whether this joint is in a singular configuration. More... | |
virtual unsigned | num_constraint_eqns () const |
Gets the number of constraint equations for this joint. | |
virtual void | evaluate_constraints (REAL C[])=0 |
Evaluates the constraint equations for this joint. More... | |
virtual const std::vector < SVELOCITY > & | get_spatial_axes_dot ()=0 |
Abstract method to get the spatial axes derivatives for this joint. More... | |
virtual boost::shared_ptr < const POSE3 > | get_induced_pose ()=0 |
Abstract method to get the local transform for this joint. More... | |
virtual void | determine_q (VECTORN &q)=0 |
Abstract method to determine the value of Q (joint position) from current transforms. | |
virtual unsigned | num_dof () const =0 |
Gets the number of degrees-of-freedom for this joint. | |
virtual void | calc_constraint_jacobian (bool inboard, MATRIXN &Cq)=0 |
Computes the constraint Jacobian for this joint with respect to the given body. More... | |
virtual void | calc_constraint_jacobian_dot (bool inboard, MATRIXN &Cq)=0 |
Computes the time derivative of the constraint Jacobian for this joint with respect to the given body. More... | |
Public Member Functions inherited from Ravelin::virtual_enable_shared_from_this< JOINT > | |
boost::shared_ptr< JOINT > | shared_from_this () |
boost::shared_ptr< const JOINT > | shared_from_this () const |
Public Attributes | |
std::string | joint_id |
The ID of this joint. | |
VECTORN | qdd |
The acceleration of this joint. | |
VECTORN | force |
The actuator force (user/controller sets this) | |
VECTORN | lambda |
Constraint forces calculated by forward dynamics. | |
VECTORN | q |
The position of this joint. | |
VECTORN | qd |
The velocity of this joint. | |
Protected Member Functions | |
void | calc_constraint_jacobian_numeric (bool inboard, MATRIXN &Cq) |
Computes the constraint jacobian with respect to a body numerically | |
bool | transform_jacobian (MATRIXN &J, bool use_inboard, MATRIXN &output) |
Transforms a Jacobian (if necessary) More... | |
void | invalidate_pose_vectors () |
boost::shared_ptr< const POSE3 > | get_inboard_pose () |
boost::shared_ptr< const POSE3 > | get_outboard_pose () |
virtual void | init_data () |
Method for initializing all variables in the joint. More... | |
Protected Attributes | |
boost::shared_ptr< POSE3 > | _Fprime |
The frame induced by the joint. | |
boost::shared_ptr< POSE3 > | _F |
The frame of this joint. | |
boost::shared_ptr< POSE3 > | _Fb |
The frame of this joint backward from the outboard link. | |
std::vector< SVELOCITY > | _s |
The spatial axes (in joint frame) for the joint. More... | |
VECTORN | _q_tare |
The stored "tare" value for the initial joint configuration. More... | |
boost::weak_ptr< RIGIDBODY > | _inboard_link |
boost::weak_ptr< RIGIDBODY > | _outboard_link |
boost::weak_ptr< ARTICULATED_BODY > | _abody |
ConstraintType | _constraint_type |
unsigned | _joint_idx |
unsigned | _coord_idx |
unsigned | _constraint_idx |
Defines a bilateral constraint (a joint)
JOINT::JOINT | ( | ) |
|
pure virtual |
Computes the constraint Jacobian for this joint with respect to the given body.
inboard | 'true' if the Jacobian is to be computed w.r.t. the inboard link; 'false' for the outboard |
Cq | a 6 x ndof matrix for the given body (on return) |
Implemented in SPHERICALJOINT, UNIVERSALJOINT, FIXEDJOINT, PRISMATICJOINT, REVOLUTEJOINT, and PLANARJOINT.
|
pure virtual |
Computes the time derivative of the constraint Jacobian for this joint with respect to the given body.
inboard | 'true' if the Jacobian is to be computed w.r.t. the inboard link; 'false' for the outboard |
Cq | a 6 x ndof matrix for the given body (on return) |
Implemented in SPHERICALJOINT, UNIVERSALJOINT, FIXEDJOINT, PRISMATICJOINT, REVOLUTEJOINT, and PLANARJOINT.
|
pure virtual |
Evaluates the constraint equations for this joint.
When the joint constraints are exactly satisfied, the result will be the zero vector.
C | a vector of size num_constraint_eqns(); contains the evaluation (on return) |
Implemented in UNIVERSALJOINT, SPHERICALJOINT, FIXEDJOINT, PRISMATICJOINT, REVOLUTEJOINT, and PLANARJOINT.
Referenced by evaluate_constraints_dot().
|
inline |
Gets the articulated body corresponding to this body.
|
pure virtual |
Abstract method to get the local transform for this joint.
The local transform for the joint transforms the coordinate frame attached to the joint center and aligned with the inner link frame.
Implemented in UNIVERSALJOINT, SPHERICALJOINT, FIXEDJOINT, PLANARJOINT, PRISMATICJOINT, and REVOLUTEJOINT.
VECTOR3 JOINT::get_location | ( | bool | use_outboard = false | ) | const |
Gets the location of this joint.
use_outboard | if true then the joint position is calculated using the outboard link rather than inboard link; the position will not be identical if the joint constraint is violated (therefore, this method will behave identically for reduced-coordinate articulated bodies) |
Referenced by REVOLUTEJOINT::evaluate_constraints().
|
virtual |
Gets the spatial axes for this joint.
Spatial axes describe the motion of the joint. Note that for rftype = eLink, spatial axes are given in outboard link's frame.
Reimplemented in UNIVERSALJOINT, and SPHERICALJOINT.
References _s.
Referenced by SPHERICALJOINT::get_spatial_axes().
|
pure virtual |
Abstract method to get the spatial axes derivatives for this joint.
Only applicable for reduced-coordinate articulated bodies
Implemented in PLANARJOINT, UNIVERSALJOINT, SPHERICALJOINT, FIXEDJOINT, PRISMATICJOINT, and REVOLUTEJOINT.
|
protectedvirtual |
Method for initializing all variables in the joint.
Sets the number of degrees-of-freedom for this joint.
This method should be called at the beginning of all constructors of all derived classes.
References _q_tare, _s, force, lambda, num_constraint_eqns(), num_dof(), q, qd, qdd, and VECTORN::set_zero().
Referenced by FIXEDJOINT::FIXEDJOINT(), PLANARJOINT::PLANARJOINT(), REVOLUTEJOINT::REVOLUTEJOINT(), and SPHERICALJOINT::SPHERICALJOINT().
|
pure virtual |
Gets whether this joint is in a singular configuration.
Implemented in SPHERICALJOINT, UNIVERSALJOINT, FIXEDJOINT, PRISMATICJOINT, REVOLUTEJOINT, and PLANARJOINT.
|
inline |
Sets the articulated body corresponding to this body.
body | a pointer to the articulated body or NULL if this body is not a link in an articulated body |
|
inline |
Sets the coordinate index for this joint.
This is set automatically by the articulated body. Users should not change this index or unknown behavior will result.
|
inline |
Sets the joint index.
This is set automatically by the articulated body. Users should not change this index or unknown behavior will result.
Transforms a Jacobian (if necessary)
If the inboard/outboard link is part of an articulated body, transforms the Jacobian to the coordinates of that body.
References ARTICULATED_BODY::calc_jacobian(), get_inboard_link(), and get_outboard_link().
Referenced by PLANARJOINT::calc_constraint_jacobian(), FIXEDJOINT::calc_constraint_jacobian(), REVOLUTEJOINT::calc_constraint_jacobian(), and SPHERICALJOINT::calc_constraint_jacobian().
|
virtual |
Abstract method to update the local spatial axes.
Only applicable for reduced-coordinate articulated bodies
Reimplemented in UNIVERSALJOINT, SPHERICALJOINT, FIXEDJOINT, PLANARJOINT, PRISMATICJOINT, and REVOLUTEJOINT.
References _s, get_pose(), and num_dof().
Referenced by FIXEDJOINT::update_spatial_axes(), PLANARJOINT::update_spatial_axes(), REVOLUTEJOINT::update_spatial_axes(), and SPHERICALJOINT::update_spatial_axes().
|
protected |
The stored "tare" value for the initial joint configuration.
The tare value is the value that the joint assumes in the an articulated body's initial configuration. This value is necessary so that- when the body's joints are set to the zero vector- the body re-enters the initial configuration.
Referenced by SPHERICALJOINT::get_axis(), PLANARJOINT::get_induced_pose(), REVOLUTEJOINT::get_induced_pose(), SPHERICALJOINT::get_rotation(), SPHERICALJOINT::get_spatial_axes(), SPHERICALJOINT::get_spatial_axes_dot(), init_data(), and JOINT().
|
protected |
The spatial axes (in joint frame) for the joint.
Spatial axes are used in the dynamics equations for reduced-coordinate articulated bodies only.
Referenced by SPHERICALJOINT::get_spatial_axes(), get_spatial_axes(), init_data(), REVOLUTEJOINT::update_spatial_axes(), PLANARJOINT::update_spatial_axes(), SPHERICALJOINT::update_spatial_axes(), and update_spatial_axes().