In file /home/blah/darwin2k/src/dyno/mechanism/dynoConstraint.h:

class frictionContact

A unilateral constraint for a frictional contact between a link and a fixed surface.

Inheritance:


Public Methods

[more] frictionContact(void)
constructor
[more] frictionContact(link* l, const triple &xlink, const triple &cworld, const triple &n, double tol, part* p = NULL)
constructor.
[more] frictionContact(link* l, link* l2, const triple &xlink, const triple &xlink2, const triple &n, double tol, part* p = NULL, part* p2 = NULL)
constructor.
[more]inline int dim(void) const
the dimension of the constraint (3 for frictionContacts)


Inherited from contactConstraint:

Public Methods

ovirtual int updateConstants(const triple &xlink, const triple &cworld, const triple &n, double tol)


Inherited from uconstraint:


Inherited from constraint:

Public Fields

omechanism* mech
optrList* otherMechs
olinkForceRecord* frec
omatrix Jc
odouble cDotTol
ovector C
ovector Cdot
oint jdirty
oint* _hasPosLimit
odouble* maxForce
odouble* minForce
ovector prevF
oint eindex
oint iindex
oint fdindex
oint inSystem
odouble kp
odouble kv

Public Methods

oinline int index(void) const
ovirtual int correctDrift(int i) const
oinline virtual double computeCorrection(int i, int includeVel)
oinline virtual int hasPosLimit(int i) const
oinline virtual int hasNegLimit(int i) const
oinline virtual int hasForceLimits(void) const
oinline virtual void allocatePosLimits(void)
ovirtual void print(int printVal = 0)
ovirtual int createConstraintEquations(void)
ovirtual int deleteConstraintEquations(void)
ovirtual int setDynamicValues(void)
ovirtual const double* getCoefficients(int whichDof) const
ovirtual int resize(int newSize)
ovirtual int setDirtyFlags(void)
ovirtual int updateFlags(void)
oinline virtual int isBilateral(void) const
oinline virtual int isFrictional(int i) const
ovirtual int eval(int onlyConst = 0)
oinline virtual double computeFStep(vector &a, vector &da, vector &f, vector &df, int i)
oinline virtual double computeAStep(vector &a, vector &da, vector &f, vector &df, int i)
ovirtual int satisfied(const vector &a, const vector &f, int j)
oinline virtual int needsImpulse(int i)
oint computeJacobian(void)
ovirtual int violated(void)
ovirtual int applyToMech(mechanism* m, int subtract = 0)
oint getGeneralizedForce(vector &gf)
ovirtual const linkForceRecord* getForces(void)


Inherited from dynoObject:

Public Fields

odynamicSystem* ds
oint active
oint stateSize

Public Methods

oinline virtual int getState(double* state)
oinline virtual int setState(const double* state)
oinline virtual int reset(void)


Inherited from synObject:

Public Fields

ostatic int staticClassID
oint objectID
oint verboseLevel

Public Methods

ovirtual const char* className(void) const
ovirtual synObject* copy(void) const
ovirtual int isOfType(int typeNum, int derivedOk)
ostatic int setStaticClassID(void)
ovirtual int classID(void) const


Documentation

A unilateral constraint for a frictional contact between a link and a fixed surface. Friction constraints are fairly complex in relation to other constraint types. For static friction (i.e. when the tangential velocity is zero), the constraint equations are:
 1.  an >= 0                        (normal acceleration must be non-negative)
 2.  fn >= 0                        (normal force must be non-negative)
 3.  fn*an >= 0                     (normal force and/or normal acceleration 
                                     must be zero)
 4.  sqrt(fx*fx + fy*fy) <= muS*fn  (magnitude of the frictional force 
                                     must be less than muS*magnitude 
                                     of normal force)
 5.  ax*fx + ay*fy <= 0             (frictional force must be at least
                                     partially opposed to the tangential 
                                     acceleration)
 
For dynamic friction, the last two conditions above are replaced by:
 4.  fx = -fn*muD*vx/sqrt(vx+vy) 
` 5.  fy = -fn*muD*vy/sqrt(vx+vy) 
 
These two conditions ensure that the frictional force has magnitude muD*fn and is directly opposed to the tangential velocity.

Note that contact between multiple movable links is not yet implemented (it shouldn't be hard, but I haven't needed it yet.)

o frictionContact(void)
constructor

o frictionContact(link* l, const triple &xlink, const triple &cworld, const triple &n, double tol, part* p = NULL)
constructor. l is the link acted on by the contact. xlink is the world-space location of contact point on the link and cworld is the world-space location of the contact point on the fixed surface. n is the surface normal at cworld and points outward from the fixed surface. tol is the tolerance on interpenetration for the contact. Ideally xlink and cworld are the same; however, since there is a depth tolerance involved, some interpenetration always occurs. cworld is thus used to compute the amount of constraint violation and corrective acceleration.

o frictionContact(link* l, link* l2, const triple &xlink, const triple &xlink2, const triple &n, double tol, part* p = NULL, part* p2 = NULL)
constructor. l is the link acted on by the contact. xlink is the world-space location of contact point on the link and cworld is the world-space location of the contact point on the fixed surface. n is the surface normal at cworld and points outward from the fixed surface. tol is the tolerance on interpenetration for the contact. Ideally xlink and cworld are the same; however, since there is a depth tolerance involved, some interpenetration always occurs. cworld is thus used to compute the amount of constraint violation and corrective acceleration.

oinline int dim(void) const
the dimension of the constraint (3 for frictionContacts)


Direct child classes:
rollingContact

Alphabetic index HTML hierarchy of classes or Java



This page was generated with the help of DOC++.