Simbody  3.7
SimTK::EdgeEdgeContact Class Reference

(Experimental – API will change – use at your own risk) Define an edge on each of two bodies, by providing an "edge frame" where the origin is the edge center, x axis is aligned with the edge, and z axis points in the "outward" direction away from the solid whose edge it is. More...

+ Inheritance diagram for SimTK::EdgeEdgeContact:

Public Member Functions

 EdgeEdgeContact (MobilizedBody &mobod_F, const Transform &defaultEdgeFrameF, Real defaultHalfLengthF, MobilizedBody &mobod_B, const Transform &defaultEdgeFrameB, Real defaultHalfLengthB, Real minCOR, Real mu_s, Real mu_d, Real mu_v)
 
bool disable (State &state) const override
 Disable the normal and friction constraints if they were enabled. More...
 
bool enable (State &state) const override
 Enable the normal and friction constraints if they were disabled. More...
 
bool isEnabled (const State &state) const override
 Return true if this contact is enabled. More...
 
Vec3 whereToDisplay (const State &state) const override
 This returns a point in the ground frame at which you might want to say the constraint is "located", for purposes of display only. More...
 
Real getPerr (const State &state) const override
 Return the position error for the contact constraint (usually a signed distance function). More...
 
Real getVerr (const State &state) const override
 Return the time derivative of the contact constraint position error. More...
 
Real getAerr (const State &state) const override
 Return the time derivative of the contact constraint velocity error. More...
 
Real calcEffectiveCOR (const State &state, Real defaultCaptureSpeed, Real defaultMinCORSpeed, Real impactSpeed) const override
 Returns the effective coefficient of restitution (COR) for this contact, given an impact speed (a nonnegative scalar). More...
 
bool hasFriction (const State &state) const override
 Returns true if there is a friction constraint associated with this contact constraint. More...
 
Vec2 getSlipVelocity (const State &state) const override
 
Real calcEffectiveCOF (const State &state, Real defaultTransitionSpeed, Real slipSpeed) const override
 Returns the effective coefficient of friction mu for this contact, given a relative slip speed (a nonnegative scalar). More...
 
MultiplierIndex getContactMultiplierIndex (const State &s) const override
 Return the multiplier index Simbody assigned for the unilateral contact constraint (for contact, this is the normal constraint). More...
 
void getFrictionMultiplierIndices (const State &s, MultiplierIndex &ix_x, MultiplierIndex &ix_y) const override
 If hasFriction(), this method returns the multipliers used for the x- and y-direction friction constraints. More...
 
- Public Member Functions inherited from SimTK::UnilateralContact
 UnilateralContact (int sign=1)
 The base class constructor allows specification of the sign convention to be used with this constraint. More...
 
virtual ~UnilateralContact ()
 
Real getSignConvention () const
 Report the sign convention (1 or -1) supplied at construction. More...
 
virtual bool isProximal (const State &state, Real ptol) const
 Given the position constraint tolerance currently in use, is this contact close enough to contacting that we should treat it as though it is in contact? Normally we just see if sign*perr <= tol, but individual contacts can override this if they want to do some scaling. More...
 
virtual Vec3 getPositionInfo (const State &state) const
 TODO: kludge needed because we're misusing existing constraints. More...
 
virtual void setInstanceParameter (State &state, const Vec3 &pos) const
 TODO: kludge to set instance parameters on internal constraints; this should be the same Vec3 you got from getPositionInfo(). More...
 
void setMyIndex (UnilateralContactIndex cx)
 
UnilateralContactIndex getMyIndex () const
 

Detailed Description

(Experimental – API will change – use at your own risk) Define an edge on each of two bodies, by providing an "edge frame" where the origin is the edge center, x axis is aligned with the edge, and z axis points in the "outward" direction away from the solid whose edge it is.

This constraint is only meaningful if the edges are not parallel and if the closest point of the lines containing the edges lies within both edges. This constraint will prevent interpenetration of the solids at the intersection of the lines containing the given edges, and provide for frictional forces when they are in contact. The resulting contact is parameterized by a coefficient of restitution for impacts in the plane normal direction, and by coefficients of friction for frictional forces in the plane containing the edges.

Constructor & Destructor Documentation

◆ EdgeEdgeContact()

SimTK::EdgeEdgeContact::EdgeEdgeContact ( MobilizedBody mobod_F,
const Transform defaultEdgeFrameF,
Real  defaultHalfLengthF,
MobilizedBody mobod_B,
const Transform defaultEdgeFrameB,
Real  defaultHalfLengthB,
Real  minCOR,
Real  mu_s,
Real  mu_d,
Real  mu_v 
)

Member Function Documentation

◆ disable()

bool SimTK::EdgeEdgeContact::disable ( State state) const
inlineoverridevirtual

Disable the normal and friction constraints if they were enabled.

Return true if we actually had to disable something.

Implements SimTK::UnilateralContact.

◆ enable()

bool SimTK::EdgeEdgeContact::enable ( State state) const
inlineoverridevirtual

Enable the normal and friction constraints if they were disabled.

Return true if we actually had to enable something.

Implements SimTK::UnilateralContact.

◆ isEnabled()

bool SimTK::EdgeEdgeContact::isEnabled ( const State state) const
inlineoverridevirtual

Return true if this contact is enabled.

Implements SimTK::UnilateralContact.

◆ whereToDisplay()

Vec3 SimTK::EdgeEdgeContact::whereToDisplay ( const State state) const
overridevirtual

This returns a point in the ground frame at which you might want to say the constraint is "located", for purposes of display only.

Implements SimTK::UnilateralContact.

◆ getPerr()

Real SimTK::EdgeEdgeContact::getPerr ( const State state) const
overridevirtual

Return the position error for the contact constraint (usually a signed distance function).

You have to apply the sign convention to interpret this properly.

Implements SimTK::UnilateralContact.

◆ getVerr()

Real SimTK::EdgeEdgeContact::getVerr ( const State state) const
inlineoverridevirtual

Return the time derivative of the contact constraint position error.

You have to apply the sign convention to interpret this properly.

Implements SimTK::UnilateralContact.

◆ getAerr()

Real SimTK::EdgeEdgeContact::getAerr ( const State state) const
inlineoverridevirtual

Return the time derivative of the contact constraint velocity error.

You have to apply the sign convention to interpret this properly.

Implements SimTK::UnilateralContact.

◆ calcEffectiveCOR()

Real SimTK::EdgeEdgeContact::calcEffectiveCOR ( const State state,
Real  defaultCaptureSpeed,
Real  defaultMinCORSpeed,
Real  impactSpeed 
) const
inlineoverridevirtual

Returns the effective coefficient of restitution (COR) for this contact, given an impact speed (a nonnegative scalar).

For a given pair of contacting materials this is typically a function of just the impact speed, but it could also depend on the time and configuration in state, which should be realized through Stage::Position. The given default impact speed thresholds (also nonnegative) are used to calculate the COR unless this Contact overrides those.

Implements SimTK::UnilateralContact.

◆ hasFriction()

bool SimTK::EdgeEdgeContact::hasFriction ( const State state) const
inlineoverridevirtual

Returns true if there is a friction constraint associated with this contact constraint.

If so, calcEffectiveCOF() must be overridden.

Reimplemented from SimTK::UnilateralContact.

◆ getSlipVelocity()

Vec2 SimTK::EdgeEdgeContact::getSlipVelocity ( const State state) const
inlineoverridevirtual

Reimplemented from SimTK::UnilateralContact.

◆ calcEffectiveCOF()

Real SimTK::EdgeEdgeContact::calcEffectiveCOF ( const State state,
Real  defaultTransitionSpeed,
Real  slipSpeed 
) const
inlineoverridevirtual

Returns the effective coefficient of friction mu for this contact, given a relative slip speed (a nonnegative scalar).

For a given pair of contacting materials this is typically a function of just the slip speed, but it could also depend on the time and configuration in state, which should be realized through Stage::Position. The given default slip-to-roll transition speed threshold (also nonnegative) is used to calculate mu unless this Contact overrides it with its own transition speed.

Reimplemented from SimTK::UnilateralContact.

◆ getContactMultiplierIndex()

MultiplierIndex SimTK::EdgeEdgeContact::getContactMultiplierIndex ( const State state) const
overridevirtual

Return the multiplier index Simbody assigned for the unilateral contact constraint (for contact, this is the normal constraint).

If the constraint is not enabled, there is no multiplier and the returned index will be invalid.

Implements SimTK::UnilateralContact.

◆ getFrictionMultiplierIndices()

void SimTK::EdgeEdgeContact::getFrictionMultiplierIndices ( const State state,
MultiplierIndex ix_x,
MultiplierIndex ix_y 
) const
overridevirtual

If hasFriction(), this method returns the multipliers used for the x- and y-direction friction constraints.

If no friction, or if this constraint is disabled, the returned values are invalid.

Reimplemented from SimTK::UnilateralContact.


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