```{raw} latex \clearpage ``` (sec-item-markernoderigid)= # 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`, `Orientation` - Nodes it can be attached to: [](#sec-item-noderigidbodyep), [](#sec-item-noderigidbodyrxyz), [](#sec-item-noderigidbodyrotveclg), [](#sec-item-noderigidbody2d), [](#sec-item-nodepoint2dslope1), [](#sec-item-nodepointslope12), [](#sec-item-nodepointslope23), [](#sec-item-nodepointground) - Connectors, constraints and loads that can use it: [](#sec-item-objectconnectorspringdamper), [](#sec-item-objectconnectorcartesianspringdamper), [](#sec-item-objectconnectorrigidbodyspringdamper), [](#sec-item-objectconnectorlinearspringdamper), [](#sec-item-objectconnectortorsionalspringdamper), [](#sec-item-objectconnectorgravity), [](#sec-item-objectconnectorhydraulicactuatorsimple), [](#sec-item-objectconnectordistance), [](#sec-item-objectconnectorrollingdiscpenalty), [](#sec-item-objectcontactconvexroll), [](#sec-item-objectcontactspheresphere), [](#sec-item-objectcontactspheretorus), [](#sec-item-objectcontactspheretriangle), [](#sec-item-objectcontactcurvecircles), [](#sec-item-objectjointgeneric), [](#sec-item-objectjointrevolutez), [](#sec-item-objectjointprismaticx), [](#sec-item-objectjointspherical), [](#sec-item-objectjointrollingdisc), [](#sec-item-objectjointrevolute2d), [](#sec-item-objectjointprismatic2d), [](#sec-item-loadforcevector), [](#sec-item-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](#sec-drawing-markers). (description-markernoderigid)= ## 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 `localHT` | | 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 $$ \LU{0}{\Jm_{pos}} = \frac{\partial \LU{0}{\pv}}{\partial \qv} , \quad \LU{0}{\Jm_{rot}} = \frac{\partial \LU{0}{\tomega}}{\partial \dot\qv} , $$ 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). (miniexample-markernoderigid)= ## Mini example ```python #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`](https://github.com/jgerstmayr/EXUDYN/blob/master/python/TestModels/connectorRigidBodySpringDamperTest.py) (TM)