Drake
Drake C++ Documentation
CoulombFriction< T > Class Template Reference

Detailed Description

template<typename T>
class drake::multibody::CoulombFriction< T >

Parameters for Coulomb's Law of Friction, namely:

  • Static friction coefficient, for a pair of surfaces at rest relative to each other.
  • Dynamic (or kinematic) friction coefficient, for a pair of surfaces in relative motion.

These coefficients are an empirical property characterizing the interaction by friction between a pair of contacting surfaces. Friction coefficients depend upon the mechanical properties of the surfaces' materials and on the roughness of the surfaces. They are determined experimentally.

Even though the Coulomb's law coefficients of friction characterize a pair of surfaces interacting by friction, we associate the abstract idea of friction coefficients to a single surface by considering the coefficients for contact between two identical surfaces. For this case of two identical surfaces, the friction coefficients that describe the surface pair are taken to equal those of one of the identical surfaces. We extend this idea to the case of different surfaces by defining a combination law that allow us to obtain the Coulomb's law coefficients of friction characterizing the pair of surfaces, given the individual friction coefficients of each surface. We would like this combination law to satisfy:

  • The friction coefficient of two identical surfaces is the friction coefficient of one of the surfaces.
  • The combination law is commutative. That is, surface A combined with surface B gives the same results as surface B combined with surface A.
  • For two surfaces M and N with very different friction coefficients, say μₘ ≪ μₙ, the combined friction coefficient should be in the order of magnitude of the smallest friction coefficient (in the example μₘ). To understand this requirement, consider rubber (high friction coefficient) sliding on ice (low friction coefficient). We'd like the surface pair to be defined by a friction coefficient close to that of ice, since rubber will easily slide on ice.

These requirements are met by the following ad-hoc combination law:

  μ = 2μₘμₙ/(μₘ + μₙ)

See CalcContactFrictionFromSurfaceProperties(), which implements this law. More complex combination laws could also be a function of other parameters such as the mechanical properties of the interacting surfaces or even their roughnesses. For instance, if the rubber surface above has metal studs (somehow making the surface "rougher"), it will definitely have a better grip on an ice surface. Therefore this new variable should be taken into account in the combination law. Notice that in this example, this new combination law model for tires, will have a different set of requirements from the ones stated above.

Template Parameters
TThe scalar type, which must be one of the default scalars.

#include <drake/multibody/plant/coulomb_friction.h>

Public Member Functions

 CoulombFriction ()=default
 Default constructor for a frictionless surface, i.e. More...
 
 CoulombFriction (const T &static_friction, const T &dynamic_friction)
 Specifies both the static and dynamic friction coefficients for a given surface. More...
 
const T & static_friction () const
 Returns the coefficient of static friction. More...
 
const T & dynamic_friction () const
 Returns the coefficient of dynamic friction. More...
 
boolean< T > operator== (const CoulombFriction &other) const
 Performs a bitwise-identical comparison, not done to any tolerance. More...
 
Implements CopyConstructible, CopyAssignable, MoveConstructible, MoveAssignable
 CoulombFriction (const CoulombFriction &)=default
 
CoulombFrictionoperator= (const CoulombFriction &)=default
 
 CoulombFriction (CoulombFriction &&)=default
 
CoulombFrictionoperator= (CoulombFriction &&)=default
 

Constructor & Destructor Documentation

◆ CoulombFriction() [1/4]

CoulombFriction ( const CoulombFriction< T > &  )
default

◆ CoulombFriction() [2/4]

CoulombFriction ( CoulombFriction< T > &&  )
default

◆ CoulombFriction() [3/4]

CoulombFriction ( )
default

Default constructor for a frictionless surface, i.e.

with zero static and dynamic coefficients of friction.

◆ CoulombFriction() [4/4]

CoulombFriction ( const T &  static_friction,
const T &  dynamic_friction 
)

Specifies both the static and dynamic friction coefficients for a given surface.

Exceptions
std::exceptionif any of the friction coefficients are negative or if dynamic_friction > static_friction (they can be equal.)

Member Function Documentation

◆ dynamic_friction()

const T& dynamic_friction ( ) const

Returns the coefficient of dynamic friction.

◆ operator=() [1/2]

CoulombFriction& operator= ( const CoulombFriction< T > &  )
default

◆ operator=() [2/2]

CoulombFriction& operator= ( CoulombFriction< T > &&  )
default

◆ operator==()

boolean<T> operator== ( const CoulombFriction< T > &  other) const

Performs a bitwise-identical comparison, not done to any tolerance.

◆ static_friction()

const T& static_friction ( ) const

Returns the coefficient of static friction.


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