Simbody
|
This provides deformed geometry and force details for one element of a contact patch that may be composed of many elements. More...
#include <CompliantContactSubsystem.h>
Public Member Functions | |
const Vec3 & | getContactPoint () const |
This is the point at which this contact element applies equal and opposite forces to the two bodies. | |
const UnitVec3 & | getContactNormal () const |
This is the normal direction for this contact element, pointing away from body 1's exterior and towards body 2's interior, that is, in the direction of the normal force applied to body 2 by body1. | |
const Vec3 & | getSlipVelocity () const |
Get the relative slip velocity between the bodies at the contact point, as body 2's velocity in body 1. | |
const Vec3 & | getForceOnSurface2 () const |
Get the total force applied to body 2 at the contact point by this contact element; negate this to find the force on body 1 at the same point. | |
Real | getDeformation () const |
Get the total normal material deformation at the contact point; this is the sum of the deformations of the two surfaces there. | |
Real | getDeformationRate () const |
Get the instantaneous rate at which the material at the contact point is deforming; this is the material derivative of the deformation and does not reflect that fact that the contact point itself is changing with time. | |
Real | getPatchArea () const |
This is the surface area represented by this contact element. | |
Real | getPeakPressure () const |
This is the peak pressure on this element; typically it is just the normal force divided by the patch area since most contact models assume constant force across a contact element's patch. | |
Real | getPotentialEnergy () const |
Get the amount of potential energy currently stored in the deformation of this contact element. | |
Real | getPowerDissipation () const |
Get the energy dissipation rate (power loss) due to the deformation rate and friction losses for this element (this is a signed value with positive indicating dissipation). | |
void | changeFrameInPlace (const Transform &X_BA) |
This object is currently in an assumed frame A; given a transform from another frame B to A we'll re-measure and re-express this in B. | |
void | changeFrameAndSwitchSurfacesInPlace (const Transform &X_BA) |
Assuming that this object is currently reporting surface 2 information in frame A, here we want to both change the frame to B and swap which surface is to be considered as surface 2. | |
Public Attributes | |
Vec3 | m_contactPt |
UnitVec3 | m_patchNormal |
Vec3 | m_slipVelocity |
Vec3 | m_forceOnSurface2 |
Real | m_deformation |
Real | m_deformationRate |
Real | m_patchArea |
Real | m_peakPressure |
Real | m_potentialEnergy |
Real | m_powerLoss |
This provides deformed geometry and force details for one element of a contact patch that may be composed of many elements.
Every element generates equal and opposite forces on both surfaces so we can use a consistent patch-centered convention for reporting details regardless of the original source of the element.
Vector results are expressed in Ground. We return
It is important to note that we are interested in the motion (deformations) of material points here, not the motion of the contact point which is a non-material concept and thus not directly involved in producing forces. The patch area is provided separately and its significance also depends on the model.
We report the combined deformation (>= 0) of the two surfaces at C, along the normal n. We do not attempt to report angular deformation of the element. Elastic deformation rate is also provided. This is the rate that the material points currently at C are compressing or relaxing along the normal. That is, we are not including the fact that the contact point C may be moving along the surfaces, we just report what is happening to the material in its own frame. Note that we do not attempt to report angular deformation rate.
Slip velocity measures the relative velocity of the body stations that are instantaneously coincident with C. This will be in the plane for which n is the normal, but it is expressed in Ground so is a 3d vector.
Contact force is the force being applied to surface 2 by surface 1 at the contact point C. This includes the normal force due to elasticity and dissipation, and the tangential force due to friction and to tangential elasticity and dissipation, if any.
Peak pressure is a scalar providing the worst-case pressure present somewhere in the patch, if the model can provide that. Otherwise it will be the normal force divided by the patch area to give the average pressure across the patch.
Potential energy is the amount of energy currently stored in the elastic deformation of this element. Summing this over all the contact detail elements should yield the same value as is reported as the resultant potential energy for this contact.
Power loss is the rate at which energy is being lost due to dissipation and to friction, but not due to elastic deformation because that is contributing to potential energy and we expect to get it back. Summing this over all the contact detail elements should yield the same value as is reported as the resultant power loss for this contact.
const Vec3& SimTK::ContactDetail::getContactPoint | ( | ) | const [inline] |
This is the point at which this contact element applies equal and opposite forces to the two bodies.
const UnitVec3& SimTK::ContactDetail::getContactNormal | ( | ) | const [inline] |
This is the normal direction for this contact element, pointing away from body 1's exterior and towards body 2's interior, that is, in the direction of the normal force applied to body 2 by body1.
const Vec3& SimTK::ContactDetail::getSlipVelocity | ( | ) | const [inline] |
Get the relative slip velocity between the bodies at the contact point, as body 2's velocity in body 1.
This is a vector in the contact plane, that is, it is perpendicular to the contact normal.
const Vec3& SimTK::ContactDetail::getForceOnSurface2 | ( | ) | const [inline] |
Get the total force applied to body 2 at the contact point by this contact element; negate this to find the force on body 1 at the same point.
Real SimTK::ContactDetail::getDeformation | ( | ) | const [inline] |
Get the total normal material deformation at the contact point; this is the sum of the deformations of the two surfaces there.
This is sometimes called the "approach" of the two bodies and represents the amount of overlap of the undeformed surfaces at this point; that is, they have to deform this much in order not to overlap.
Real SimTK::ContactDetail::getDeformationRate | ( | ) | const [inline] |
Get the instantaneous rate at which the material at the contact point is deforming; this is the material derivative of the deformation and does not reflect that fact that the contact point itself is changing with time.
Energy dissipation in the material depends on the rate at which the material is deforming, it does not depend on contact point changes.
Real SimTK::ContactDetail::getPatchArea | ( | ) | const [inline] |
This is the surface area represented by this contact element.
Real SimTK::ContactDetail::getPeakPressure | ( | ) | const [inline] |
This is the peak pressure on this element; typically it is just the normal force divided by the patch area since most contact models assume constant force across a contact element's patch.
Real SimTK::ContactDetail::getPotentialEnergy | ( | ) | const [inline] |
Get the amount of potential energy currently stored in the deformation of this contact element.
Real SimTK::ContactDetail::getPowerDissipation | ( | ) | const [inline] |
Get the energy dissipation rate (power loss) due to the deformation rate and friction losses for this element (this is a signed value with positive indicating dissipation).
void SimTK::ContactDetail::changeFrameInPlace | ( | const Transform & | X_BA | ) | [inline] |
This object is currently in an assumed frame A; given a transform from another frame B to A we'll re-measure and re-express this in B.
Cost is 63 flops.
void SimTK::ContactDetail::changeFrameAndSwitchSurfacesInPlace | ( | const Transform & | X_BA | ) | [inline] |
Assuming that this object is currently reporting surface 2 information in frame A, here we want to both change the frame to B and swap which surface is to be considered as surface 2.
Cost is 72 flops.