Ravelin
Public Types | Public Member Functions | Public Attributes | Protected Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
SPHERICALJOINT Class Reference

Defines a joint for purely rotational motion. More...

#include <SphericalJoint.h>

Inheritance diagram for SPHERICALJOINT:
JOINT Ravelin::virtual_enable_shared_from_this< JOINT > Ravelin::virtual_enable_shared_from_this_base

Public Types

enum  Axis { eAxis1, eAxis2, eAxis3 }
 
- Public Types inherited from JOINT
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

 SPHERICALJOINT ()
 Initializes the joint. More...
 
virtual void update_spatial_axes ()
 Updates the spatial axis for this joint.
 
virtual void determine_q (VECTORN &q)
 Determines (and sets) the value of Q from the axes and the inboard link and outboard link transforms.
 
virtual boost::shared_ptr
< const POSE3
get_induced_pose ()
 Gets the (local) transform for this joint.
 
virtual const std::vector
< SVELOCITY > & 
get_spatial_axes ()
 Gets the spatial axes for this joint. More...
 
virtual const std::vector
< SVELOCITY > & 
get_spatial_axes_dot ()
 Gets the derivative of the spatial-axis. More...
 
virtual unsigned num_dof () const
 Gets the number of degrees-of-freedom for this joint.
 
virtual void evaluate_constraints (REAL C[])
 Evaluates the constraint equations.
 
VECTOR3 get_axis (Axis a) const
 Gets the global axis for this joint. More...
 
void set_axis (const VECTOR3 &axis, Axis a)
 Sets the local axis of rotation for this joint (MUST BE CALLED AFTER set_location(.)) More...
 
virtual void calc_constraint_jacobian (bool inboard, MATRIXN &Cq)
 Computes the constraint jacobian with respect to a body.
 
virtual void calc_constraint_jacobian_dot (bool inboard, MATRIXN &Cq)
 Computes the time derivative of the constraint jacobian with respect to a body. More...
 
virtual bool is_singular_config () const
 Spherical joint is singular if sin(q1) = 0 and cos(q2) = 0.
 
- Public Member Functions inherited from JOINT
 JOINT ()
 Initializes the 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 evaluate_constraints_dot (REAL C[])
 Evaluates the time derivative of the constraint equations.
 
virtual void set_q_tare (const VECTORN &tare)
 
virtual const VECTORNget_q_tare () const
 
boost::shared_ptr< RIGIDBODYget_inboard_link () const
 Gets the inboard link for this joint.
 
boost::shared_ptr< RIGIDBODYget_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 POSE3get_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 POSE3get_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 unsigned num_constraint_eqns () const
 Gets the number of constraint equations for this joint.
 
- Public Member Functions inherited from Ravelin::virtual_enable_shared_from_this< JOINT >
boost::shared_ptr< JOINTshared_from_this ()
 
boost::shared_ptr< const JOINTshared_from_this () const
 

Public Attributes

REAL SINGULAR_TOL
 The tolerance to which a joint configuration is considered singular. More...
 
- Public Attributes inherited from JOINT
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

bool assign_axes ()
 Attempts to compute unassigned axes.
 
MATRIX3 get_rotation () const
 Gets the (local) rotation induced by this joint.
 
void setup_joint ()
 
- Protected Member Functions inherited from JOINT
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 POSE3get_inboard_pose ()
 
boost::shared_ptr< const POSE3get_outboard_pose ()
 
virtual void init_data ()
 Method for initializing all variables in the joint. More...
 

Static Protected Member Functions

static bool rel_equal (REAL x, REAL y)
 Determines whether two values are relatively equal.
 

Protected Attributes

VECTOR3 _u [3]
 The local joint axes.
 
std::vector< SVELOCITY_s_dot
 The derivative of the spatial axis.
 
- Protected Attributes inherited from JOINT
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
 

Detailed Description

Defines a joint for purely rotational motion.

Constructor & Destructor Documentation

SPHERICALJOINT::SPHERICALJOINT ( )

Initializes the joint.

The axes of rotation are each set to [0 0 0]. The inboard and outboard links are set to NULL.

References JOINT::_F, _s_dot, _u, JOINT::init_data(), num_dof(), VECTOR3::pose, and SINGULAR_TOL.

Member Function Documentation

void SPHERICALJOINT::calc_constraint_jacobian_dot ( bool  inboard,
MATRIXN Cq 
)
virtual

Computes the time derivative of the constraint jacobian with respect to a body.

TODO: implement this

Implements JOINT.

VECTOR3 SPHERICALJOINT::get_axis ( Axis  a) const

Gets the global axis for this joint.

The global axis for this joint takes the orientation of the inboard link into account; thus, if the orientation of the inboard link changes, then the global axis changes.

See Also
getAxisLocal()
setAxisLocal()

References JOINT::_q_tare, _u, VECTOR3::pose, and JOINT::q.

const vector< SVELOCITY > & SPHERICALJOINT::get_spatial_axes ( )
virtual

Gets the spatial axes for this joint.

Note
these spatial axes are not constant, unlike many joints.

Reimplemented from JOINT.

References JOINT::_q_tare, JOINT::_s, _u, JOINT::get_pose(), JOINT::get_spatial_axes(), and JOINT::q.

const vector< SVELOCITY > & SPHERICALJOINT::get_spatial_axes_dot ( )
virtual

Gets the derivative of the spatial-axis.

Note
these spatial axes are not constant, unlike many joints.

Implements JOINT.

References JOINT::_q_tare, _s_dot, _u, ORIGIN3::cross(), JOINT::get_pose(), JOINT::q, and JOINT::qd.

void SPHERICALJOINT::set_axis ( const VECTOR3 axis,
Axis  a 
)

Sets the local axis of rotation for this joint (MUST BE CALLED AFTER set_location(.))

The local axis for this joint does not take the orientation of the inboard link into account; thus, if the orientation of the inboard link changes, then the local axis remains constant.

Parameters
axisa unit vector
See Also
get_axis_global()
set_axis_global()

References _u, JOINT::get_pose(), and update_spatial_axes().

Member Data Documentation

REAL SPHERICALJOINT::SINGULAR_TOL

The tolerance to which a joint configuration is considered singular.

Note
if this tolerance is too low, then dynamics computation may become unstable; if the tolerance is too high, then dynamics computation will be slower. A safe value is 1e-2.

Referenced by is_singular_config(), and SPHERICALJOINT().


The documentation for this class was generated from the following files: