A 1D (translational) mass which is attached to Node1D. Note, that the mass does not need to have the interpretation as a translational mass.
Additional information for ObjectMass1D:
- This
Object
has/provides the following types =Body
,SingleNoded
- Requested
Node
type =GenericODE2
- Short name for Python =
Mass1D
- Short name for Python visualization object =
VMass1D
The item ObjectMass1D with type = 'Mass1D' has the following parameters:
- name [type = String, default = '']:objects's unique name
- physicsMass [m, type = UReal, default = 0.]:mass [SI:kg] of mass
- nodeNumber [n0, type = NodeIndex, default = invalid (-1)]:node number (type NodeIndex) for Node1D
- referencePosition [\LU{0}{\pRef_0}, type = Vector3D, size = 3, default = [0.,0.,0.]]:a reference position, used to transform the 1D coordinate to a position
- referenceRotation [\LU{0b}{\Rot_{0}} \in \Rcal^{3 \times 3}, type = Matrix3D, default = [[1,0,0], [0,1,0], [0,0,1]]]:the constant body rotation matrix, which transforms body-fixed (b) to global (0) coordinates
- visualization [type = VObjectMass1D]:parameters for visualization of item
The item VObjectMass1D has the following parameters:
- show [type = Bool, default = True]:set true, if item is shown in visualization and false if it is not shown
- graphicsData [type = BodyGraphicsData]:Structure contains data for body visualization; data is defined in special list / dictionary structure
The following output variables are available as OutputVariableType in sensors, Get...Output() and other functions:
Position
: \LU{0}{{\mathbf{p}}}\cConfigglobal position vector; for interpretation see intermediate variablesDisplacement
: \LU{0}{{\mathbf{u}}}\cConfigglobal displacement vector; for interpretation see intermediate variablesVelocity
: \LU{0}{{\mathbf{v}}}\cConfigglobal velocity vector; for interpretation see intermediate variablesRotationMatrix
: \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}\cConfigangular velocity of bodyAngularVelocityLocal
: \LU{b}{\tomega}\cConfiglocal (body-fixed) 3D velocity vector of node
intermediate variables
|
symbol
|
description
|
---|---|---|
position coordinate
|
{p_0}\cConfig = {c_0}\cConfig + {c_0}\cRef
|
position coordinate of node (nodal coordinate c_0) in any configuration
|
displacement coordinate
|
{u_0}\cConfig = {c_0}\cConfig
|
displacement coordinate of mass node in any configuration
|
velocity coordinate
|
{u_0}\cConfig
|
velocity coordinate of mass node in any configuration
|
Position
|
\LU{0}{{\mathbf{p}}}\cConfig =\LU{0}{\pRef_0} + \LU{0b}{\Rot_{0}} \LU{b}{\vr{p_0}{0}{0}}\cConfig
|
(translational) position of mass object in any configuration
|
Displacement
|
\LU{0}{{\mathbf{u}}}\cConfig = \LU{0b}{\Rot_{0}} \LU{b}{\vr{q_0}{0}{0}}\cConfig
|
(translational) displacement of mass object in any configuration
|
Velocity
|
\LU{0}{{\mathbf{v}}}\cConfig = \LU{0b}{\Rot_{0}} \LU{b}{\vr{\dot q_0}{0}{0}}\cConfig
|
(translational) velocity of mass object in any configuration
|
residual force
|
f
|
residual of all forces on mass object
|
applied force
|
\LU{0}{{\mathbf{f}}}_a = [f_0,\;f_1,\;f_2]\tp
|
3D applied force (loads, connectors, joint reaction forces, ...)
|
applied torque
|
\LU{0}{\ttau}_a = [\tau_0,\;\tau_1,\;\tau_2]\tp
|
3D applied torque (loads, connectors, joint reaction forces, ...)
|
A rigid body marker (e.g., MarkerBodyRigid) may be attached to this object and forces/torques can be applied. However, torques will have no effect and forces will only have effect in 'direction' of the coordinate.
m \cdot \ddot q_0 = f.
Note that f is computed from all connectors and loads upon the object. E.g., a 3D force vector \LU{0}{{\mathbf{f}}}_a is transformed to f as
f = \LU{b}{[1,\,0,\,0]} \LU{b0}{\Rot_{0}} \LU{0}{{\mathbf{f}}}_a
Thus, the position jacobian reads
{\mathbf{J}}_{pos} = \partial {\mathbf{p}}\cCur / \partial {q_0}\cCur = \LU{b}{[1,\,0,\,0]} \LU{b0}{\Rot_{0}}
node = mbs.AddNode(Node1D(referenceCoordinates = [1],
initialCoordinates=[0.5],
initialVelocities=[0.5]))
mass = mbs.AddObject(Mass1D(nodeNumber = node, physicsMass=1))
#assemble and solve system for default parameters
mbs.Assemble()
mbs.SolveDynamic()
#check result, get current mass position at local position [0,0,0]
exudynTestGlobals.testResult = mbs.GetObjectOutputBody(mass, exu.OutputVariableType.Position, [0,0,0])[0]
#final x-coordinate of position shall be 2
Relevant Examples and TestModels with weblink:
craneReevingSystem.py (Examples/), lugreFrictionTest.py (Examples/), mpi4pyExample.py (Examples/), multiprocessingTest.py (Examples/), nMassOscillator.py (Examples/), nMassOscillatorEigenmodes.py (Examples/), nMassOscillatorInteractive.py (Examples/), driveTrainTest.py (TestModels/)
The web version may not be complete. For details, consider also the Exudyn PDF documentation : theDoc.pdf