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
Provides:
CoordinateNodes it can be attached to: NodeRigidBodyEP, NodeRigidBodyRxyz, NodeRigidBodyRotVecLG, NodePointSlope12, NodePointSlope23, NodePointGround
Connectors, constraints and loads that can use it: ObjectConnectorCoordinateSpringDamper, ObjectConnectorCoordinateSpringDamperExt, ObjectConnectorCoordinate, ObjectContactCoordinate, LoadCoordinate
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\) = |
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)