Friction

Model ElementThe Friction element is used to specify joint friction in a specific joint in your model. Friction is supported only in the following types of joints: revolute, spherical, translational, cylindrical and universal. MotionSolve uses the LuGre (Lundt-Grenoble) model for friction.

Class Name

Friction

Description

The LuGre model is capable of representing several different effects:
  • Dynamic friction
  • Static friction (stiction)
  • The effect of the mating surfaces being pushed apart by lubricant
  • The Stribeck effect (at very low speed). When partial fluid lubrication exists, contact between the surfaces decreases and thus friction decreases exponentially from stiction
  • Rate dependent friction phenomena, such as varying break-away force and frictional lag
  • The model is explained in great detail in the MotionSolve Reference Manual.

Attribute Summary

Inputs   = "PRELOAD NONE ALL  REACTION_FORCE BENDING_MOMENT TORSIONAL_MOMENT"

Effect   = "ALL STICTION SLIDING"

Overlaps = "INCREASE DECREASE CONSTANT"
Name Property Modifiable by command? Designable?
id Int ()    
label Str () Yes  
joint Reference (Joint)    
mu_static Double (0.3) Yes FD Only
mu_dynamic Double (0.2) Yes FD Only
inactive Enum ("NONE STATIC", default="NONE")    
stiction_transition_velocity Double (0.1) Yes FD Only
max_stiction_deformation Double (0.01) Yes FD Only
effect Enum (Effect, default="ALL") Yes  
input_forces EnumStr (Inputs, count=0, default="ALL") Yes  
# Translational      
friction_force_preload Double (0.0) Yes FD Only
reaction_arm Double (1.0) Yes FD Only
initial_overlap Double (1000.0) Yes FD Only
overlap_delta Enum (Overlaps, default="CONSTANT") Yes  
# Revolute      
friction_torque_preload Double (0.0) Yes FD Only
friction_arm Double (1.0) Yes FD Only
pin_radius Double (1.0) Yes FD Only
bending_reaction_arm Double (1.0) Yes FD Only
# Universal      
yoke Enum ("I J") Yes  
       
# Spherical      
ball_radius Double (1.0) Yes FD Only
# effects:      
bristle_stiffness Double (100.0) Yes FD Only
damping_effects Double (0.316) Yes FD Only
viscous_effects Double (0.0004) Yes FD Only

Usage

Friction (joint=objJoint, optional_arguments)

Attributes

Attributes Common For All Joints
id
Integer
Specifies the element identification number for the friction object. This number must be unique among all the Friction objects in the model.
This attribute is optional. MotionSolve will automatically create an ID when one is not specified.
Range of values: id > 0
label
String
Specifies the name of the Friction object.
This attribute is optional. When not specified, MotionSolve will create a label for you.
joint
Reference to an existing Joint in the model.
This specifies the joint on which the friction is to act on.
The joint attribute is mandatory.
mu_static
Double
Specifies the static friction coefficient μ s in the joint. mu_static is a property of the two mating surfaces. It is dependent on factors such as surface finish, surface texture and lubrication.
The attribute mu_static is optional. When not specified, mu_static =0.3.
When specified:
  • mu_static > 0
  • mu_staticmu_dynamic
mu_dynamic
Double
Specifies the dynamic friction coefficient μ d in the joint. This is the friction coefficient when the two mating surfaces are sliding with respect to each other.
The attribute mu_dynamic is optional. When not specified, mu_dynamic =0.2.
When specified:
  • mu_dynamic > 0
  • mu_dynamicmu_static
max_stiction_deformation
Double
Specifies the maximum deformation that can occur in a joint for static friction.
If specified to be non-zero, a finite static friction force is applied even if the relative velocity is zero.
This attribute is optional. When not specified, max_stiction_deformation=0.01 length units.
When specified, max_stiction_deformation > 0
stiction_transition_velocity
Double
The absolute velocity below, which the friction transitions from dynamic friction to static friction.
This attribute is optional. When not specified, stiction_transition_velocity = 0.1 length_units/time.
When specified, stiction_transition_velocity > 0
effect
String
Specifies the frictional effects to be considered for this joint. Select one from:
  • "ALL": Consider both static and dynamic friction
  • "STICTION": Model static friction only. Ignore dynamic friction.
  • "SLIDING": Model dynamic friction only. Ignore static friction.
The attribute effect is optional. When not specified, it defaults to "ALL".
inputs
List of strings.
Specifies the input forces/torques to consider for modeling the friction. Select one from:
"ALL"
Consider all the input forces and torques that can affect the friction force
"PRELOAD"
Consider the joint preload when computing the friction force
"REACTION_FORCE"
Consider the joint reaction forces when computing the friction force
"BENDING_MOMENT"
Consider the bending moments in the joint when computing the friction force
"TORSIONAL_MOMENT"
Consider the torsional moments in the joint when computing the friction force
"NONE"
Do not consider any inputs. The friction force will be zero. Used primarily when debugging the model.
The options available per joint type are defined below:
Revolute
Preload, Reaction_Force, Bending_Moment
Universal
Preload, Reaction_Force, Bending_Moment
Hooke
Preload, Reaction_Force, Bending_Moment
Spherical
Preload, Reaction_Force
Cylindrical
Preload, Reaction_Force, Bending_Moment
Translational
Preload, Reaction_Force, Bending_Moment, Torsional_Moment
The attribute inputs is optional. When not specified, inputs = "ALL".
inactive
String
Specify "STATIC" to disable joint friction during static analysis.
The attribute inactive is optional. When not specified, inactive = "NONE".
bristle_stiffness
Double
Specifies the bristle stiffness in the LuGre model. See the MotionSolve Reference Manual for more detailed information about this attribute.
The attribute bristle_stiffness is optional. When not specified, bristle_stiffness = 100 Force Units / Length unit
damping_effects
Double
Defines the damping coefficient for the pre-displacement (or stiction) regime. Its main role is to damp out bristle vibrations in the pre-displacement regime.
The attribute damping_effects is optional. When not specified, damping_effects = 0.316 Force Units / Velocity unit
viscous_effects
Double
Specifies the coefficient for the viscous damping force that occurs when relative sliding actually begins.
The attribute viscous_effects is optional. When not specified, viscous_effects = 0.0004 Force Units / Velocity unit
Attributes specific to a Revolute Joint
friction_torque_preload
Double
Specifies the preload friction torque in the joint.
The attribute friction_torque_preload is optional. When not specified, friction_torque_preload = 0.
See the MotionSolve Reference Manual for more detailed information about this attribute.
friction_arm
Double
Specifies the moment arm used to compute axial friction torque in the joint.
The attribute friction_arm is optional. When not specified, friction_arm = 1.0 length units.
See the MotionSolve Reference Manual for more detailed information about this attribute.
pin_radius
Double
Specifies the radius of the pin.
The attribute pin_radius is optional. When not specified, pin_radius = 1.0 length units.
See the MotionSolve Reference Manual for more detailed information about this attribute.
bending_reaction_arm
Double
Specifies the moment arm to compute the bending moment.
The attribute bending_reaction_arm is optional. When not specified, bending_reaction_arm = 1.0 length units.
See the MotionSolve Reference Manual for more detailed information about this attribute.
Attributes specific to a Spherical Joint
friction_torque_preload
Double
Specifies the preload friction torque in the joint.
The attribute friction_torque_preload is optional. When not specified, friction_torque_preload = 0
See the MotionSolve Reference Manual for more detailed information about this attribute.
ball_radius
Double
Specifies the radius of the ball in the Spherical joint.
The attribute ball_radius is optional. When not specified, ball_radius = 1.0 length units
See the MotionSolve Reference Manual for more detailed information about this attribute.
Attributes specific to a Translational Joint
friction_force_preload
Double
Specifies the preload friction force in the joint.
The attribute friction_force_preload is optional. When not specified, friction_force_preload = 0
See the MotionSolve Reference Manual for more detailed information about this attribute.
reaction_arm
Double
Specifies the moment arm to compute the reaction torque about the joint axial direction.
The attribute reaction_arm is optional. When not specified, reaction_arm = 1.0 length units
See the MotionSolve Reference Manual for more detailed information about this attribute.
initial_overlap
Double
Specifies the initial overlap of the sliding parts in the joint.
The attribute initial_overlap is optional. When not specified, initial_overlap = 1000 length units
See the MotionSolve Reference Manual for more detailed information about this attribute.
overlap_delta
String
Specifies friction characteristics in the sliding joint. Select one from:
  • "INCREASE": Overlap increases as the I Marker translates in the positive direction of the z-axis of the J Marker.
  • "DECREASE": Overlap decreases in the positive direction of the J marker.
  • "CONSTANT": Overlap is independent of the relative displacement between the I and J markers of the joint
The attribute overlap_delta is optional. When not specified, overlap_delta = "CONSTANT"
See the MotionSolve Reference Manual for more detailed information about this attribute.
Attributes specific to a Cylindrical Joint
friction_force_preload
Double
Specifies the preload friction force in the joint.
The attribute friction_force_preload is optional. When not specified, friction_force_preload = 0
See the MotionSolve Reference Manual for more detailed information about this attribute.
friction_torque_preload
Double
Specifies the preload friction torque in the joint.
The attribute friction_torque_preload is optional. When not specified, friction_torque_preload = 0
See the MotionSolve Reference Manual for more detailed information about this attribute.
pin_radius
Double
Specifies the radius of the pin.
The attribute pin_radius is optional. When not specified, pin_radius = 1.0 length units
See the MotionSolve Reference Manual for more detailed information about this attribute.
initial_overlap
Double
Specifies the initial overlap of the sliding parts in the joint.
The attribute initial_overlap is optional. When not specified, initial_overlap = 1000 length units
See the MotionSolve Reference Manual for more detailed information about this attribute.
overlap_delta
String
Specifies friction characteristics in the sliding joint. Select one from:
  • "INCREASE": Overlap increases as the I Marker translates in the positive direction of the z-axis of the J Marker.
  • "DECREASE": Overlap decreases in the positive direction of the J marker.
  • "CONSTANT": Overlap is independent of the relative displacement between the I and J markers of the joint
The attribute overlap_delta is optional. When not specified, overlap_delta = "CONSTANT"
See the MotionSolve Reference Manual for more detailed information about this attribute.
Attributes specific to a Universal/Hooke Joint
friction_torque_preload
Double
Specifies the preload friction torque in the joint.
The attribute friction_torque_preload is optional. When not specified, friction_torque_preload= 0
See the MotionSolve Reference Manual for more detailed information about this attribute.
friction_arm
Double
Specifies the moment arm used to compute axial friction torque in the joint.
The attribute friction_arm is optional. When not specified, friction_arm = 1.0 length units
See the MotionSolve Reference Manual for more detailed information about this attribute.
bending_reaction_arm
Double
Specifies the moment arm to compute the bending moment.
The attribute bending_reaction_arm is optional. When not specified, bending_reaction_arm = 1.0 length units
See the MotionSolve Reference Manual for more detailed information about this attribute.
pin_radius
Double
Specifies the radius of the pin.
The attribute pin_radius is optional. When not specified, pin_radius = 1.0 length units
See the MotionSolve Reference Manual for more detailed information about this attribute.
yoke
String
Specifies the yoke choice for Hooke and Universal joints on which the frictional force is to be applied. Select one from:
  • "I": Apply the friction force/torque about the Z axis of the I-marker
  • "J": Apply the friction force/torque about the Z axis of the J-marker

Examples

  1. Create a friction element on a revolute joint, revjt, with default properties.
    jfric = Friction (joint=revjt)
  2. Create a simple pendulum, add friction, perform a simulation and show the friction torques.

Model

from msolve import *

def PendulumWithFriction():
  m = Model ()
  Units      (mass="KILOGRAM", length="MILLIMETER", time="SECOND", force="NEWTON")
  Accgrav    (jgrav=-9800)
  Integrator (error=1e-5)
  Output     (reqsave=True)
  
  length = Dv (label="Link Length", b=600)
  
  pivot  = Point (0,0,0)
  pz     = pivot + Vector (0,0,1) # along global Z
  px     = pivot + Vector (1,0,0) # along global X
  
  midpt  = Point (length/2,0,0)
  mz     = midpt + Vector (1,0,0) # along global X
  mx     = midpt + Vector (0,1,0) # along global Y
  
  ground = Part (ground=True)
  
  # Pendulum Link
  pend = Part (mass=1.4702, ip=[44144.717,44144.717,73.5132,0,0,0])
  pend.cm = Marker (part=pend, qp=midpt, zp=mz, xp=mx)
  
  # Joint w/ rotation axis = global Z axis
  jim = Marker (part=pend,   qp=pivot, zp=pz, xp=px)
  jjm = Marker (part=ground, qp=pivot, zp=pz, xp=px)
  rev = Joint (type="REVOLUTE", i=jim, j=jjm)
  
  # Joint friction
  jfric = Friction (joint=rev, mu_static=0.6, mu_dynamic=0.2, effect="ALL", friction_torque_preload=20)

  # Requests
  m.r1 = Request (type="DISPLACEMENT", i=pend.cm, j=jjm, comment="Pend CM Displacement")
  m.r2 = Request (type="VELOCITY",     i=pend.cm, j=jjm, comment="Pend CM Velocity")
  m.r3 = Request (type="ACCELERATION", i=pend.cm, j=jjm, comment="Pend CM Acceleration")
  m.r4 = Request (type="FORCE",        i=jim,     j=jjm, comment="Reaction forces in Joint")
  
  return m
###############################################################################
## Entry Point ################################################################
###############################################################################
if __name__ == "__main__":
  model = PendulumWithFriction()
  model.simulate (type="DYNAMICS", end=4, dtout=.01)

Results



Figure 1.

Comments

  1. See Properties for an explanation about what properties are, why they are used, and how you can extend these.
  2. For a more detailed explanation about Friction, see Constraint: General