Moby
Classes | Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
Moby::UnilateralConstraint Class Reference

Container class for describing a unilateral constraint in the simulation. More...

#include <UnilateralConstraint.h>

Public Types

enum  UnilateralConstraintType { eNone, eContact, eLimit }
 
enum  UnilateralConstraintClass { ePositive, eZero, eNegative }
 
enum  Compliance { eRigid, eCompliant }
 

Public Member Functions

 UnilateralConstraint ()
 Creates an empty constraint.
 
 UnilateralConstraint (const UnilateralConstraint &e)
 
UnilateralConstraintoperator= (const UnilateralConstraint &e)
 
double calc_contact_vel (const Ravelin::Vector3d &v) const
 
double calc_constraint_vel () const
 Computes the velocity of this constraint. More...
 
double calc_constraint_tol () const
 Computes the constraint tolerance. More...
 
UnilateralConstraintClass determine_constraint_class () const
 Determines the type of constraint.
 
bool is_impacting () const
 
bool is_resting () const
 
bool is_separating () const
 
void set_contact_parameters (const ContactParameters &cparams)
 Sets the contact parameters for this constraint.
 
void determine_contact_tangents ()
 Determines the set of contact tangents.
 
boost::shared_ptr< const
Ravelin::Pose3d > 
get_pose () const
 
void compute_constraint_data (Ravelin::MatrixNd &M, Ravelin::VectorNd &q) const
 Computes the constraint data.
 
void compute_cross_constraint_data (const UnilateralConstraint &e, Ravelin::MatrixNd &M) const
 Updates the constraint data.
 
template<class OutputIterator >
OutputIterator get_super_bodies (OutputIterator begin) const
 
osg::Node * to_visualization_data () const
 Makes a contact visualizable.
 
void write_vrml (const std::string &filename, double sphere_radius=0.1, double normal_length=1.0) const
 Writes an constraint to the specified filename in VRML format for visualization. More...
 
template<class BidirectionalIterator >
void insertion_sort (BidirectionalIterator first, BidirectionalIterator last)
 
template<class OutputIterator >
OutputIterator get_super_bodies (OutputIterator begin) const
 

Static Public Member Functions

static void determine_connected_constraints (const std::vector< UnilateralConstraint > &constraints, const std::vector< JointPtr > &implicit_joints, std::list< std::pair< std::list< UnilateralConstraint * >, std::list< boost::shared_ptr< Ravelin::SingleBodyd > > > > &groups, std::list< std::vector< boost::shared_ptr< Ravelin::DynamicBodyd > > > &remaining_islands)
 Given a vector of constraints, determines all of the sets of connected constraints. More...
 
static void remove_inactive_groups (std::list< std::pair< std::list< UnilateralConstraint * >, std::list< boost::shared_ptr< Ravelin::SingleBodyd > > > > &groups)
 Removes groups of contacts that contain no active contacts.
 

Public Attributes

UnilateralConstraintType constraint_type
 The type of constraint.
 
Compliance compliance
 Compliance of the constraint.
 
JointPtr limit_joint
 The joint at which the limit is reached (for limit constraints)
 
double contact_stiffness
 
double contact_damping
 
double limit_stiffness
 
double limit_damping
 
double signed_violation
 Signed violation for this constraint.
 
double limit_epsilon
 The coefficient of restitution for this limit.
 
unsigned limit_dof
 The DOF at which the limit is reached (for limit constraints)
 
bool limit_upper
 Whether the upper/lower limit is reached (for limit constraints)
 
double limit_impulse
 Limit impulse magnitude (for limit constraints)
 
Point3d contact_point
 The point contact (for contact constraints)
 
Ravelin::Vector3d contact_normal
 The vector pointing outward from the contact on the first body, in world coordinates (for contact constraints)
 
Ravelin::Vector3d contact_tan1
 The first tangent direction to the contact normal.
 
Ravelin::Vector3d contact_tan2
 The second tangent direction to the contact normal.
 
Ravelin::SMomentumd contact_impulse
 Impulse that has been applied (for contact constraints) More...
 
CollisionGeometryPtr contact_geom1
 The collision geometries involved (for contact constraints)
 
CollisionGeometryPtr contact_geom2
 
double contact_mu_coulomb
 The coefficient of Coulomb friction (for contact constraints)
 
double contact_mu_viscous
 The coefficient of viscous friction (for contact constraints)
 
double contact_penalty_Kp
 Penalty Method Depth Penalty.
 
double contact_penalty_Kv
 Penalty Method Interpenetration Speed.
 
double contact_epsilon
 The coefficient of restitution (for contact constraints)
 
unsigned contact_NK
 The number of friction directions >= 4 (for contact constraints)
 
double tol
 Tolerance for the constraint (users never need to modify this)
 

Detailed Description

Container class for describing a unilateral constraint in the simulation.

Member Function Documentation

double UnilateralConstraint::calc_constraint_tol ( ) const

Computes the constraint tolerance.

Positive velocity indicates separation, negative velocity indicates impact, zero velocity indicates rest.

double UnilateralConstraint::calc_constraint_vel ( ) const

Computes the velocity of this constraint.

Positive velocity indicates separation, negative velocity indicates impact, zero velocity indicates rest.

Referenced by Moby::operator<<().

void UnilateralConstraint::determine_connected_constraints ( const std::vector< UnilateralConstraint > &  constraints,
const std::vector< JointPtr > &  implicit_joints,
std::list< std::pair< std::list< UnilateralConstraint * >, std::list< boost::shared_ptr< Ravelin::SingleBodyd > > > > &  groups,
std::list< std::vector< boost::shared_ptr< Ravelin::DynamicBodyd > > > &  remaining_islands 
)
static

Given a vector of constraints, determines all of the sets of connected constraints.

A set of connected constraints is the set of all constraints such that, for a given constraint A in the set, there exists another constraint B for which A and B share at least one rigid body.

Parameters
constraintsthe list of constraints
groupsthe islands of connected constraints on return

References constraint_type.

void UnilateralConstraint::write_vrml ( const std::string &  fname,
double  sphere_radius = 0.1,
double  normal_length = 1.0 
) const

Writes an constraint to the specified filename in VRML format for visualization.

Todo:
add a cone onto the arrows

Member Data Documentation

Ravelin::SMomentumd Moby::UnilateralConstraint::contact_impulse

Impulse that has been applied (for contact constraints)

Impulse applied to the body of the first geometry; the reverse of this force / impulse is applied to the body of the second geometry.


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