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

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 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).

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)