MarkerNodeRigid
A rigid-body (position+orientation) node-marker attached to a rigid-body node. It provides position and orientation (rotation), as well as the according derivatives. It can be used for most connectors, joints or loads where either position, position and orientation, or orientation are required.
Interface
Provides:
Position,OrientationNodes it can be attached to: NodeRigidBodyEP, NodeRigidBodyRxyz, NodeRigidBodyRotVecLG, NodeRigidBody2D, NodePoint2DSlope1, NodePointSlope12, NodePointSlope23, NodePointGround
Connectors, constraints and loads that can use it: ObjectConnectorSpringDamper, ObjectConnectorCartesianSpringDamper, ObjectConnectorRigidBodySpringDamper, ObjectConnectorLinearSpringDamper, ObjectConnectorTorsionalSpringDamper, ObjectConnectorGravity, ObjectConnectorHydraulicActuatorSimple, ObjectConnectorDistance, ObjectConnectorRollingDiscPenalty, ObjectContactConvexRoll, ObjectContactSphereSphere, ObjectContactSphereTorus, ObjectContactSphereTriangle, ObjectContactCurveCircles, ObjectJointGeneric, ObjectJointRevoluteZ, ObjectJointPrismaticX, ObjectJointSpherical, ObjectJointRollingDisc, ObjectJointRevolute2D, ObjectJointPrismatic2D, LoadForceVector, LoadTorqueVector
Parameters
The parameters of the item; in a dictionary, its type is ‘NodeRigid’:
name |
type |
size |
default |
description |
|---|---|---|---|---|
name |
String |
‘’ |
marker’s unique name |
|
nodeNumber |
NodeIndex |
invalid (-1) |
node number to which marker is attached to |
|
localHT |
HomogeneousTransformation |
None (identity) |
(symbol: \(\LU{n}{\Hm}_{m}\)) the frame of the marker in the node frame, as homogeneous transformation: its rotation turns the marker frame against the node; its translation must be zero for now; a 4x4 matrix, its 16 values row by row or an exu.HT; None: the node frame |
|
visualization |
VMarkerNodeRigid |
parameters for visualization of item |
Visualization parameters
The parameters of VMarkerNodeRigid, 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 |
Drawing
Drawn as all markers.
Detailed description
Marker quantities
quantity |
symbol |
as computed |
|---|---|---|
position |
\(\LU{0}{\pv}_m\) |
the position of the node |
velocity |
\(\LU{0}{\vv}_m\) |
the velocity of the node |
rotation matrix |
\(\LU{0m}{\Rot} = \LU{0n}{\Rot} \LU{nm}{\Rot}\) |
the rotation matrix of the node, turned by the rotation \(\LU{nm}{\Rot}\) of |
angular velocity |
\(\LU{m}{\tomega} = \LU{nm}{\Rot}\tp \LU{n}{\tomega}\) |
the angular velocity of the node, in the marker frame |
The translation of localHT must be zero: the marker is at the node.
Jacobians
with respect to the coordinates of the node; for a rigid body node \(\LU{0}{\Jm_{rot}}\) is the velocity transformation \(\LU{0}{\Gm}\) of its rotation parameters in the rotation columns, see the page of the node. For a slope node the orientation is that of its slope vector(s).
Mini example
#position and orientation of a rigid body node: a torque spins the body up
inertia = InertiaCuboid(density=1000, sideLengths=[0.4,0.2,0.1])
node = mbs.AddNode(NodeRigidBodyRxyz(referenceCoordinates=[0.5,0.2,0.1, 0,0,0]))
mbs.AddObject(ObjectRigidBody(nodeNumber=node, mass=inertia.Mass(),
inertia=inertia.GetInertia6D()))
mNode = mbs.AddMarker(MarkerNodeRigid(nodeNumber=node))
mbs.AddLoad(LoadTorqueVector(markerNumber=mNode, loadVector=[0,0,1]))
mbs.Assemble()
mbs.SolveDynamic()
#angle = M/(2*J_zz)*t^2 at t=1
Jzz = inertia.GetInertia6D()[2]
exu.sys['testResult'] = mbs.GetNodeOutput(node, exu.OutputVariableType.Rotation)[2]*2*Jzz #1
Examples (Ex) and TestModels (TM) that show this item, with weblink to github: connectorRigidBodySpringDamperTest.py (TM)