This manual provides a detailed list and usage information regarding command statements, model statements, functions and
the Subroutine Interface available in MotionSolve.
Model ElementCoupler defines an algebraic relationship between the degrees of freedom of two or three joints. This constraint element
may be used to model idealized spur gears, rack and pinion gears, and differentials as simple constraints that relate
the displacements in a set of joints.
Model ElementThe DeformCurve element allows you to represent a curve defined in the model as a DeformableCurve element. The graphic is defined by a number of straight line segments connecting vertices on the curve defined by
DeformableCurve reference.
Model ElementThe DeformSurface element allows you to represent a deformable surface defined in the model as a DeformSurface element. The graphic is defined by a number of straight line segments connecting vertices on the surface defined
by DeformSurface reference.
Model ElementDv defines a special type of solver state variable. It is used in the evaluation and computation of design sensitivity
as a design parameter. Its value is modified during the simulation in case of Design Sensitivity Analysis.
Model ElementEquilibrium defines the solution control parameters for Static and Quasi-static analysis. These parameters control the accuracy
the solution and the method to be used for solution.
Model ElementField defines a force and torque acting between two markers, I and J. The force and torque can only be a function of time
and the relative displacement between the I and J markers. The six components (three forces and three moments) are defined
in the coordinate system of the J marker.
Model ElementFlexBody defines a flexible body object in MotionSolve. This entity has mass and inertia properties, like a rigid body. In addition, it has flexibility properties that
allow it to deform under loads.
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.
Model ElementThe Frustumelement allows you to represent the portion of a cone that remains after its upper part has been cut off by a plane
parallel to its base, or that is intercepted between two such planes.
Model ElementThe GCON element is used to specify a user defined general constraint. Your constraint equations may involve position as well
as velocity measures of the system. Although MotionSolve provides a large set of constraints to choose from (see JOINT), there are situations that require non-standard constraints.
Model ElementGse is an abstract modeling element that defines a generic dynamic system. The dynamic system is characterized by a vector
of inputs u, a vector of dynamic states x, and a vector of outputs y. The state vector x is defined through a set of differential equations.
Model ElementJprim is used to remove degrees of freedom between two bodies by specifying
conditions in which the relative translational or rotational motion can occur. Jprim differs from JOINT in that the former specifies mathematical constraints, which may not have
concrete physical realizations like the latter.
Model ElementThe LineMesh element connects a number of vertices in space with straight lines. It is similar to the Outline element except it does not require markers. You can pass coordinates to the LineMesh geometry.
Model ElementMarker defines an orthonormal, right-handed coordinate system and reference frame in MotionSolve. A Marker must belong to a part. The body can be any type: rigid, flexible, or point.
Model ElementMate is used to specify general mating constraints between geometric
primitives. Mate differs from JOINT and JPRIM in that it specifies more general constraints based on distance, tangency,
and coincidence relations between mating
geometries.
Model ElementNforce defines a force and torque acting between many markers. The force and the torque can only be linear functions of
the relative displacement and velocity of the various markers.
Model ElementThe ParamCurve element allows you to represent a curve defined in the model as a Curve element. The graphic is defined by a number of straight line segments connecting vertices on the curve defined by
Curve reference.
Model ElementPtcv defines a higher pair constraint. A fixed point on one body slides on a curve that is fixed on a second body. The
point is not allowed to lift off the curve.
Model ElementPTSF defines a higher pair constraint. A fixed point on one body slides on a surface that is fixed on a second body. The
point is not allowed to lift off the surface.
Model ElementRv defines a special type of solver state variable. It is used in the evaluation and computation of design sensitivity
as a response variable.
Model ElementSfsf defines a higher pair constraint. The constraint consists of a surface on one body rolling and sliding on a surface
on a second body. The surfaces are required to have a unique contact point.
Model ElementThe UserMsg element allows you to control the output of MotionSolve messages. Any message that MotionSolve prints to standard output goes through the
This manual provides a detailed list and usage information regarding command statements, model statements, functions and
the Subroutine Interface available in MotionSolve.
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.
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 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_static ≥ mu_dynamic
mu_dynamic
Double
Specifies the dynamic friction coefficient 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_dynamic ≤ mu_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:
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
Create a friction element on a revolute joint, revjt, with default
properties.
jfric = Friction (joint=revjt)
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
Comments
See Properties for an
explanation about what properties are, why they are used, and how you can extend these.