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
 T The 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

## ◆ 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::exception if any of the friction coefficients are negative or if dynamic_friction > static_friction (they can be equal.)

## ◆ 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 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: