MarkerNodeRotationCoordinate

A node-Marker attached to a a node containing rotation; the Marker measures a rotation coordinate (Tait-Bryan angles) or angular velocities on the velocity level.

Interface

Parameters

The parameters of the item; in a dictionary, its type is ‘NodeRotationCoordinate’:

name

type

size

default

description

name

String

‘’

marker’s unique name

nodeNumber

NodeIndex

invalid (-1)

node number to which marker is attached to

rotationCoordinate

UInt

invalid (-1)

rotation coordinate: 0=x, 1=y, 2=z; must be given: the default is only a placeholder

visualization

VMarkerNodeRotationCoordinate

parameters for visualization of item

Visualization parameters

VMarkerNodeRotationCoordinate has no parameters.

Drawing

The item draws nothing.

Detailed description

Marker quantities

quantity

symbol

as computed

rotation

\(\varphi_i\)

the Tait-Bryan angle \(i\) = rotationCoordinate (0: about \(x\), 1: \(y\), 2: \(z\)), computed from the rotation matrix of the node

its velocity

\(\omega_i\)

component \(i\) of the global angular velocity of the node

The angle is recomputed from the rotation matrix, whatever the rotation parameters of the node are, so it lies in \((-\pi,\,\pi]\) and jumps after a full turn; and \(\omega_i\) is the time derivative of \(\varphi_i\) only while the rotations about the other two axes are small. Use the marker for rotations that stay in that range - a spring about one axis of a nearly planar motion - and a MarkerBodiesRelativeRotationCoordinate or an Euler angle coordinate otherwise.

Jacobians

Row \(i\) of the rotation Jacobian of the node, \(\Jm = \partial \omega_i / \partial \dot\qv\).

Mini example

#a rotation coordinate of a rigid body node, held by a coordinate constraint
inertia = InertiaCuboid(density=1000, sideLengths=[0.4,0.2,0.1])
node = mbs.AddNode(NodeRigidBodyRxyz(referenceCoordinates=[0,0,0, 0,0,0]))
mbs.AddObject(ObjectRigidBody(nodeNumber=node, mass=inertia.Mass(),
                              inertia=inertia.GetInertia6D()))
mRotZ = mbs.AddMarker(MarkerNodeRotationCoordinate(nodeNumber=node, rotationCoordinate=2))
mGround = mbs.AddMarker(MarkerNodeCoordinate(nodeNumber=nGround, coordinate=0))
oHold = mbs.AddObject(ObjectConnectorCoordinate(markerNumbers=[mGround, mRotZ]))
mbs.AddLoad(LoadTorqueVector(markerNumber=mbs.AddMarker(MarkerNodeRigid(nodeNumber=node)), loadVector=[0,0,2]))

mbs.Assemble()
mbs.SolveDynamic()

#the constraint holds the rotation about z against the torque: its force is the reaction torque
exu.sys['testResult'] = mbs.GetObjectOutput(oHold, exu.OutputVariableType.Force) #2

Relevant Examples (Ex) and TestModels (TM) with weblink to github: pistonEngine.py (Ex), rigidRotor3DbasicBehaviour.py (Ex), sliderCrank3DwithANCFbeltDrive2.py (Ex), driveTrainTest.py (TM), sliderCrank3Dbenchmark.py (TM)