ObjectRigidBody2D
A 2D rigid body which is attached to a rigid body 2D node. The body obtains coordinates, position, velocity, etc. from the underlying 2D node
Additional information for ObjectRigidBody2D:
- This
Object
has/provides the following types =Body
,SingleNoded
- Requested
Node
type =Position2D
+Orientation2D
+Position
+Orientation
- Short name for Python =
RigidBody2D
- Short name for Python visualization object =
VRigidBody2D
The item ObjectRigidBody2D with type = ‘RigidBody2D’ has the following parameters:
- name [type = String, default = ‘’]:objects’s unique name
- physicsMass [\(m\), type = UReal, default = 0.]:mass [SI:kg] of rigid body
- physicsInertia [\(J\), type = UReal, default = 0.]:inertia [SI:kgm\(^2\)] of rigid body w.r.t. center of mass
- nodeNumber [\(n_0\), type = NodeIndex, default = invalid (-1)]:node number (type NodeIndex) for 2D rigid body node
- visualization [type = VObjectRigidBody2D]:parameters for visualization of item
The item VObjectRigidBody2D has the following parameters:
- show [type = Bool, default = True]:set true, if item is shown in visualization and false if it is not shown
- graphicsDataUserFunction [type = PyFunctionGraphicsData, default = 0]:A Python function which returns a bodyGraphicsData object, which is a list of graphics data in a dictionary computed by the user function; the graphics elements need to be defined in the local body coordinates and are transformed by mbs to global coordinates
- graphicsData [type = BodyGraphicsData]:Structure contains data for body visualization; data is defined in special list / dictionary structure
DESCRIPTION of ObjectRigidBody2D
The following output variables are available as OutputVariableType in sensors, Get…Output() and other functions:
Position
: \(\LU{0}{{\mathbf{p}}}\cConfig(\pLocB) = \LU{0}{\pRef}\cConfig + \LU{0}{\pRef}\cRef + \LU{0b}{\Rot}\pLocB\)global position vector of body-fixed point given by local position vector \(\pLocB\)Displacement
: \(\LU{0}{{\mathbf{u}}}\cConfig + \LU{0b}{\Rot}\pLocB\)global displacement vector of body-fixed point given by local position vector \(\pLocB\)Velocity
: \(\LU{0}{{\mathbf{v}}}\cConfig(\pLocB) = \LU{0}{\dot{\mathbf{u}}}\cConfig + \LU{0b}{\Rot}(\LU{b}{\tomega} \times \pLocB\cConfig)\)global velocity vector of body-fixed point given by local position vector \(\pLocB\)VelocityLocal
: \(\LU{b}{{\mathbf{v}}}\cConfig(\pLocB) = \LU{b0}{\Rot} \LU{0}{{\mathbf{v}}}\cConfig(\pLocB)\)local (body-fixed) velocity vector of body-fixed point given by local position vector \(\pLocB\)RotationMatrix
: \(\mathrm{vec}(\LU{0b}{\Rot})=[A_{00},\,A_{01},\,A_{02},\,A_{10},\,\ldots,\,A_{21},\,A_{22}]\cConfig\tp\)vector with 9 components of the rotation matrix (row-major format)Rotation
: \(\theta_{0\mathrm{config}}\)scalar rotation angle of bodyAngularVelocity
: \(\LU{0}{\tomega}\cConfig\)angular velocity of bodyAngularVelocityLocal
: \(\LU{b}{\tomega}\cConfig\)local (body-fixed) 3D velocity vector of nodeAcceleration
: \(\LU{0}{{\mathbf{a}}}\cConfig(\pLocB) = \LU{0}{\ddot{\mathbf{u}}} + \LU{0}{\talpha} \times (\LU{0b}{\Rot} \pLocB) + \LU{0}{\tomega} \times ( \LU{0}{\tomega} \times(\LU{0b}{\Rot} \pLocB))\)global acceleration vector of body-fixed point given by local position vector \(\pLocB\)AccelerationLocal
: \(\LU{b}{{\mathbf{a}}}\cConfig(\pLocB) = \LU{b0}{\Rot} \LU{0}{{\mathbf{a}}}\cConfig(\pLocB)\)local (body-fixed) acceleration vector of body-fixed point given by local position vector \(\pLocB\)AngularAcceleration
: \(\LU{0}{\talpha}\cConfig\)angular acceleration vector of bodyAngularAccelerationLocal
: \(\LU{b}{\talpha}\cConfig = \LU{b0}{\Rot} \LU{0}{\talpha}\cConfig\)local angular acceleration vector of body
Definition of quantities
intermediate variables
|
symbol
|
description
|
---|---|---|
COM position
|
\(\pRefG\cConfig + \pRefG\cRef = \LU{0}{{\mathbf{p}}}(n_0)\cConfig\)
|
reference point, equal to the position of COM; provided by node \(n_0\) in any configuration (except reference)
|
COM displacement
|
\(\LU{0}{{\mathbf{u}}}\cConfig =\pRefG\cConfig = [q_0,\;q_1,\;0]\cConfig\tp = \LU{0}{{\mathbf{u}}}(n_0)\cConfig\)
|
displacement of center of mass which is provided by node \(n_0\) in any configuration; NOTE that for configurations other than reference, it is follows that \(\pRefG\cRef - \pRefG\cConfig\)
|
COM velocity
|
\(\LU{0}{{\mathbf{v}}}\cConfig = [\dot q_0,\;\dot q_1,\;0]\cConfig\tp = \LU{0}{{\mathbf{v}}}(n_0)\cConfig\)
|
velocity of center of mass which is provided by node \(n_0\) in any configuration
|
body rotation
|
\(\LU{0}{\theta}_{0\mathrm{config}} = \theta_0(n_0)\cConfig = \psi_0(n_0)\cRef + \psi_0(n_0)\cConfig\)
|
rotation of body as provided by node \(n_0\) in any configuration
|
body rotation matrix
|
\(\LU{0b}{\Rot}\cConfig = \LU{0b}{\Rot}(n_0)\cConfig\)
|
rotation matrix which transforms local to global coordinates as given by node
|
local position
|
\(\pLocB = [\LU{b}{b_0},\,\LU{b}{b_1},\,0]\tp\)
|
local position as used by markers or sensors
|
body angular velocity
|
\(\LU{0}{\tomega}\cConfig = \LU{0}{[\omega_0(n_0),\,0,\,0]}\cConfig\tp\)
|
rotation of body as provided by node \(n_0\) in any configuration
|
(generalized) coordinates
|
\({\mathbf{c}}\cConfig = [q_0,q_1,\;\psi_0]\tp\)
|
generalized coordinates of body (= coordinates of node)
|
generalized forces
|
\(\LU{0}{{\mathbf{f}}} = [f_0,\;f_1,\;\tau_2]\tp\)
|
generalized forces applied to body
|
applied forces
|
\(\LU{0}{{\mathbf{f}}}_a = [f_0,\;f_1,\;0]\tp\)
|
applied forces (loads, connectors, joint reaction forces, …)
|
applied torques
|
\(\LU{0}{\ttau}_a = [0,\;0,\;\tau_2]\tp\)
|
applied torques (loads, connectors, joint reaction forces, …)
|
Equations of motion
For example, a LoadCoordinate on coordinate 2 of the node would add a torque \(\tau_2\) on the RHS.
Position-based markers can measure position \({\mathbf{p}}\cConfig(\pLocB)\) depending on the local position \(\pLocB\). The position jacobian depends on the local position \(\pLocB\) and is defined as,
which transforms the action of global forces \(\LU{0}{{\mathbf{f}}}\) of position-based markers on the coordinates \({\mathbf{c}}\),
The rotation jacobian, which is computed from angular velocity, reads
and transforms the action of global torques \(\LU{0}{\ttau}\) of orientation-based markers on the coordinates \({\mathbf{c}}\),
Userfunction: graphicsDataUserFunction(mbs, itemNumber)
A user function, which is called by the visualization thread in order to draw user-defined objects.
The function can be used to generate any BodyGraphicsData
, see Section GraphicsData.
Use exudyn.graphics
functions, see Section Module: graphics, to create more complicated objects.
Note that graphicsDataUserFunction
needs to copy lots of data and is therefore
inefficient and only designed to enable simpler tests, but not large scale problems.
For an example for graphicsDataUserFunction
see ObjectGround, Section ObjectGround.
arguments / return
|
type or size
|
description
|
---|---|---|
mbs |
MainSystem
|
provides reference to mbs, which can be used in user function to access all data of the object
|
itemNumber |
int
|
integer number of the object in mbs, allowing easy access
|
returnValue
|
BodyGraphicsData
|
list of
GraphicsData dictionaries, see Section GraphicsData |
MINI EXAMPLE for ObjectRigidBody2D
1node = mbs.AddNode(NodeRigidBody2D(referenceCoordinates = [1,1,0.25*np.pi],
2 initialCoordinates=[0.5,0,0],
3 initialVelocities=[0.5,0,0.75*np.pi]))
4mbs.AddObject(RigidBody2D(nodeNumber = node, physicsMass=1, physicsInertia=2))
5
6#assemble and solve system for default parameters
7mbs.Assemble()
8mbs.SolveDynamic()
9
10#check result
11exudynTestGlobals.testResult = mbs.GetNodeOutput(node, exu.OutputVariableType.Position)[0]
12exudynTestGlobals.testResult+= mbs.GetNodeOutput(node, exu.OutputVariableType.Coordinates)[2]
13#final x-coordinate of position shall be 2, angle theta shall be np.pi
Relevant Examples and TestModels with weblink:
beltDriveALE.py (Examples/), beltDriveReevingSystem.py (Examples/), beltDrivesComparison.py (Examples/), reevingSystem.py (Examples/), reevingSystemOpen.py (Examples/), sliderCrank3DwithANCFbeltDrive2.py (Examples/), ANCFmovingRigidbody.py (Examples/), ANCFslidingJoint2D.py (Examples/), ANCFslidingJoint2Drigid.py (Examples/), ANCFswitchingSlidingJoint2D.py (Examples/), doublePendulum2D.py (Examples/), finiteSegmentMethod.py (Examples/), ANCFbeltDrive.py (TestModels/), ANCFgeneralContactCircle.py (TestModels/), ANCFcontactFrictionTest.py (TestModels/)
The web version may not be complete. For details, consider also the Exudyn PDF documentation : theDoc.pdf