ObjectMass1D
A 1D (translational) mass which is attached to Node1D. Note, that the mass does not need to have the interpretation as a translational mass.
Interface
Python names:
ObjectMass1DorMass1D, andVMass1Dfor its visualizationNodes it takes: Node1D, NodeGenericODE2, NodePointGround
Body markers that can be placed on it: MarkerBodyMass, MarkerBodyPosition, MarkerBodyRigid
Parameters
The parameters of the item; in a dictionary, its type is ‘Mass1D’:
name |
type |
size |
default |
description |
|---|---|---|---|---|
name |
String |
‘’ |
objects’s unique name |
|
mass |
UReal |
0. |
(symbol: \(m\)) mass [SI:kg] of mass |
|
nodeNumber |
NodeIndex |
invalid (-1) |
(symbol: \(n0\)) node number (type NodeIndex) for Node1D |
|
referencePosition |
Vector3D |
3 |
[0.,0.,0.] |
(symbol: \(\LU{0}{\pRef_0}\)) a reference position, used to transform the 1D coordinate to a position |
referenceRotation |
Matrix3D |
9 |
[[1,0,0], [0,1,0], [0,0,1]] |
(symbol: \(\LU{0b}{\Rot_{0}} \in \Rcal^{3 \times 3}\)) the constant body rotation matrix, which transforms body-fixed (b) to global (0) coordinates |
visualization |
VObjectMass1D |
parameters for visualization of item |
Renamed parameters, still taken with a DeprecationWarning: physicsMass (deprecated since 1.12.258, removed in 2031): use mass.
Visualization parameters
The parameters of VObjectMass1D, given as visualization:
name |
type |
size |
default |
description |
|---|---|---|---|---|
show |
Bool |
True |
set true, if item is shown in visualization and false if it is not shown |
|
graphicsData |
BodyGraphicsData |
Structure contains data for body visualization; data is defined in special list / dictionary structure |
Drawing
Drawn as all bodies; its graphicsData, moved along the axis of its reference rotation by the coordinate of its node.
Output variables
Available as OutputVariableType in sensors, Get...Output() and other functions:
output variable |
symbol |
description |
|---|---|---|
Position |
\(\LU{0}{\pv}\cConfig\) |
global position vector; for interpretation see intermediate variables |
Displacement |
\(\LU{0}{\uv}\cConfig\) |
global displacement vector; for interpretation see intermediate variables |
Velocity |
\(\LU{0}{\vv}\cConfig \) |
global velocity vector; for interpretation see intermediate variables |
RotationMatrix |
\(\LU{0b}{\Rot}\) |
vector with 9 components of the rotation matrix (row-major format) |
Rotation |
vector with 3 components of the Euler/Tait-Bryan angles in xyz-sequence (\(\LU{0b}{\Rot}\cConfig=:\Rot_0(\varphi_0) \cdot \Rot_1(\varphi_1) \cdot \Rot_2(\varphi_2)\)), recomputed from rotation matrix \(\LU{0b}{\Rot}\) |
|
AngularVelocity |
\(\LU{0}{\tomega}\cConfig\) |
global 3D angular velocity vector of body |
AngularVelocityLocal |
\(\LU{b}{\tomega}\cConfig\) |
local (body-fixed) 3D angular velocity vector of body |
KineticEnergy |
\(T = \frac{1}{2} m\, \dot q_0^2\) |
kinetic energy of the mass; localPosition must be \([0,0,0]\) |
PotentialEnergy |
\(V = 0\) |
the body has no elastic energy; gravity and other loads are not part of it (see exudyn.advancedUtilities.LoadPotentialEnergy) - the value stays the same when a body gets a built-in gravity; localPosition must be \([0,0,0]\) |
Detailed description
Definition of quantities
intermediate variables |
symbol |
description |
|---|---|---|
position coordinate |
\({p_0}\cConfig = {c_0}\cConfig + {c_0}\cRef\) |
the coordinate \(c_0\) of the node plus its reference value |
Position |
\(\LU{0}{\pv}\cConfig = \LU{0}{\pRef_0} + \LU{0b}{\Rot_{0}} \LU{b}{\vr{p_0}{0}{0}}\cConfig\) |
the mass moves along the local \(x\)-axis of the frame given by |
Velocity |
\(\LU{0}{\vv}\cConfig = \LU{0b}{\Rot_{0}} \LU{b}{\vr{\dot c_0}{0}{0}}\cConfig\) |
velocity of the mass |
applied force |
\(\LU{0}{\fv}_a\) |
3D force from loads, connectors and joints |
residual force |
\(f\) |
the component of the applied forces along the axis |
The coordinate need not be a translation: the object is any scalar mass-spring-damper equation.
Equations of motion
Marker interfaces
a force acts with its component along the axis, a torque has no effect. The mass-weighted Jacobian is \(m\) times \(\LU{0}{\Jm_{pos}}\).
Mini example
node = mbs.AddNode(Node1D(referenceCoordinates = [1],
initialCoordinates=[0.5],
initialVelocities=[0.5]))
mass = mbs.AddObject(Mass1D(nodeNumber = node, mass=1))
#assemble and solve system for default parameters
mbs.Assemble()
mbs.SolveDynamic()
#check result, get current mass position at local position [0,0,0]
exu.sys['testResult'] = mbs.GetObjectOutputBody(mass, exu.OutputVariableType.Position, [0,0,0])[0]
#final x-coordinate of position shall be 2
Relevant Examples (Ex) and TestModels (TM) with weblink to github: craneReevingSystem.py (Ex), lugreFrictionTest.py (Ex), mpi4pyExample.py (Ex), multiprocessingTest.py (Ex), nMassOscillator.py (Ex), nMassOscillatorEigenmodes.py (Ex), nMassOscillatorInteractive.py (Ex), connectorOutputVariablesTest.py (TM), contactComparisonTest.py (TM), coordinateSpringDamperExtVelocityOffsetTest.py (TM), energiesTest.py (TM), explicitSolversPostNewtonTest.py (TM), driveTrainTest.py (TM), mainSystemUserFunctionsTest.py (TM)