NodeRigidBody2D
A 2D rigid body node for rigid bodies or beams. The node has 2 displacement degrees of freedom and one rotation coordinate (rotation around z-axis: \(\psi_0\)). All coordinates are ODE2, used for second order differetial equations.
Interface
Python names:
NodeRigidBody2DorRigid2D, andVRigid2Dfor its visualizationProvides:
Position2D,Orientation2D,RigidBodyNode markers that can be attached: MarkerNodePosition, MarkerNodeRigid
Objects that take this node: ObjectMassPoint2D, ObjectRigidBody2D, ObjectBeamGeometricallyExact2D
Parameters
The parameters of the item; in a dictionary, its type is ‘RigidBody2D’:
name |
type |
size |
default |
description |
|---|---|---|---|---|
name |
String |
‘’ |
node’s unique name |
|
referenceCoordinates |
Vector3D |
3 |
[0.,0.,0.] |
(symbol: \(\qv\cRef = [q_0,\,q_1,\,\psi_0]\tp\cRef\)) reference coordinates (x-pos,y-pos and rotation) of node ==> e.g. ref. coordinates for finite elements; global position of node without displacement |
initialCoordinates |
Vector3D |
3 |
[0.,0.,0.] |
(symbol: \(\qv\cIni = [q_0,\,q_1,\,\psi_0]\tp\cIni\)) initial displacement coordinates and angle (relative to reference coordinates) |
initialVelocities |
Vector3D |
3 |
[0.,0.,0.] |
(symbol: \(\dot \qv\cIni = [\dot q_0,\,\dot q_1,\,\dot \psi_0]\tp\cIni = [v_0,\,v_1,\,\omega_2]\tp\cIni\)) initial velocity coordinates |
visualization |
VNodeRigidBody2D |
parameters for visualization of item |
Visualization parameters
The parameters of VNodeRigidBody2D, 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 |
|
drawSize |
float |
-1. |
drawing size (diameter, dimensions of underlying cube, etc.) for item; size == -1.f means that default size is used |
|
color |
Float4 |
4 |
[-1.,-1.,-1.,-1.] |
Default RGBA color for nodes; 4th value is alpha-transparency; R=-1.f means, that default color is used |
Drawing
Drawn as all nodes; with nodes.showBasis, also its frame, of length nodes.basisSize.
Settings beyond those of all nodes: general.axesTiling, nodes.basisSize, nodes.showBasis.
Output variables
Available as OutputVariableType in sensors, Get...Output() and other functions:
output variable |
symbol |
description |
|---|---|---|
Position |
\(\LU{0}{\pv}\cConfig = \LU{0}{[p_0,\,p_1,\,0]}\cConfig\tp= \LU{0}{\uv}\cConfig + \LU{0}{\pv}\cRef\) |
global 3D position vector of node; \(\uv\cRef=0\) |
Displacement |
\(\LU{0}{\uv}\cConfig = [q_0,\,q_1,\,0]\cConfig\tp\) |
global 3D displacement vector of node |
Velocity |
\(\LU{0}{\vv}\cConfig = [\dot q_0,\,\dot q_1,\,0]\cConfig\tp\) |
global 3D velocity vector of node |
Acceleration |
\(\LU{0}{\av}\cConfig = [\ddot q_0,\,\ddot q_1,\,0]\cConfig\tp\) |
global 3D acceleration vector of node |
AngularVelocity |
\(\LU{0}{\tomega}\cConfig = \LU{0}{[0,\,0,\,\dot \psi_0]}\cConfig\tp\) |
global 3D angular velocity vector of node |
CoordinatesTotal |
displacement/rotation coordinates of node including reference configuration |
|
Coordinates |
\(\cv\cConfig = [q_0,\,q_1,\,\psi_0]\tp\cConfig\) |
coordinate vector of node, having 2 displacement coordinates and 1 angle |
Coordinates_t |
\(\dot\cv\cConfig = [\dot q_0,\,\dot q_1,\,\dot \psi_0]\tp\cConfig\) |
velocity coordinates vector of node |
Coordinates_tt |
\(\ddot\cv\cConfig = [\ddot q_0,\,\ddot q_1,\,\ddot \psi_0]\tp\cConfig\) |
acceleration coordinates vector of node |
RotationMatrix |
\([A_{00},\,A_{01},\,A_{02},\,A_{10},\,\ldots,\,A_{21},\,A_{22}]\cConfig\tp\) |
vector with 9 components of the rotation matrix \(\LU{0b}{\Rot}\cConfig\) in row-major format, in any configuration; the rotation matrix transforms local (\(b\)) to global (0) coordinates |
Rotation |
\([0,\,0,\,\theta_0]\tp\cConfig = [0,\,0,\,\psi_0]\tp\cRef + [0,\,0,\,\psi_0]\tp\cConfig\) |
vector with 3rd angle around out of plane axis |
AngularVelocityLocal |
\(\LU{b}{\tomega}\cConfig = \LU{b}{[0,\,0,\,\dot \psi_0]}\cConfig\tp\) |
local (body-fixed) 3D angular velocity vector of node |
AngularAcceleration |
\(\LU{0}{\talpha}\cConfig = \LU{0}{[0,\,0,\,\ddot \psi_0]}\cConfig\tp\) |
global 3D angular acceleration vector of node |
Detailed description
Coordinates
index |
symbol |
kind |
meaning |
frame |
|---|---|---|---|---|
0, 1 |
\(q_0,\,q_1\) |
displacement of the reference point of the body in \(x\) and \(y\) |
global |
|
2 |
\(\psi_0\) |
change of the rotation angle about the \(z\)-axis |
- |
Configuration
With the rotation angle \(\theta_{0} = \psi_{0}\cRef + \psi_{0}\cConfig\), the rotation matrix is
Frame and interpretation
The displacement is given in the global \(x\)-\(y\) plane and the angle about the global \(z\)-axis; body frame and global frame share the \(z\)-axis.
Action on the equations of motion
The three coordinates lead to three ODE2 equations: the residuals of the forces in \(x\) and \(y\), and the residual of the torque about the \(z\)-axis, which is the same in the body and in the global frame. The velocity transformation is the identity, \(\omega_z = \dot\theta_0\).
Example: see ObjectRigidBody2D
Mini example
#a planar rigid body: x, y and the rotation angle, thrown with a spin
node = mbs.AddNode(NodeRigidBody2D(referenceCoordinates=[0.5,0.2,0], initialVelocities=[1,0,2]))
mbs.AddObject(ObjectRigidBody2D(nodeNumber=node, mass=2, inertia=0.1))
mbs.Assemble()
mbs.SolveDynamic()
#x = 1*t, angle = 2*t at t=1
exu.sys['testResult'] = sum(mbs.GetNodeOutput(node, exu.OutputVariableType.Coordinates)) #3
Examples (Ex) and TestModels (TM) that show this item, with weblink to github: rigidPendulum.py (Ex), doublePendulum2D.py (Ex), SliderCrank.py (Ex), simple4linkPendulumBing.py (Ex), slidercrankWithMassSpring.py (Ex)