ObjectConnectorReevingSystemSprings

A rD reeving system defined by a list of torque-free and friction-free sheaves or points that are connected with one rope (modelled as massless spring). NOTE that the spring can undergo tension AND compression (in order to avoid compression, use a PreStepUserFunction to turn off stiffness and damping in this case!). The force is assumed to be constant all over the rope. The sheaves or connection points are defined by \(nr\) rigid body markers \([m_0, \, m_1, \, \ldots, \, m_{nr-1}]\). At both ends of the rope there may be a prescribed motion coupled to a coordinate marker each, given by \(m_{c0}\) and \(m_{c1}\) .

Additional information for ObjectConnectorReevingSystemSprings:

  • This Object has/provides the following types = Connector
  • Requested Marker type = _None
  • Short name for Python = ReevingSystemSprings
  • Short name for Python visualization object = VReevingSystemSprings

The item ObjectConnectorReevingSystemSprings with type = ‘ConnectorReevingSystemSprings’ has the following parameters:

  • name [type = String, default = ‘’]:
    connector’s unique name
  • markerNumbers [\([m_0, \, m_1, \, \ldots, \, m_{nr-1},\, m_{c0}, \, m_{c1}]\tp\), type = ArrayMarkerIndex, default = [ invalid [-1], invalid [-1] ]]:
    list of position or rigid body markers used in reeving system and optional two coordinate markers (\(m_{c0}, \, m_{c1}\)); the first marker \(m_0\) and the last rigid body marker \(m_{nr-1}\) represent the ends of the rope and are directly connected to a position; the markers \(m_1, \, \ldots, \, m_{nr-2}\) can be connected to sheaves, for which a radius and an axis can be prescribed. The coordinate markers are optional and represent prescribed length at the rope ends (marker \(m_{c0}\) is added length at start, marker \(m_{c1}\) is added length at end of the rope in the reeving system)
  • hasCoordinateMarkers [type = Bool, default = False]:
    flag, which determines, the list of markers (markerNumbers) contains two coordinate markers at the end of the list, representing the prescribed change of length at both ends
  • coordinateFactors [\([f_0,\, f_1]\tp\), type = Vector2D, default = [1,1]]:
    factors which are multiplied with the values of coordinate markers; this can be used, e.g., to change directions or to transform rotations (revolutions of a sheave) into change of length
  • stiffnessPerLength [\(EA\), type = UReal, default = 0.]:
    stiffness per length [SI:N/m/m] of rope; in case of cross section \(A\) and Young’s modulus \(E\), this parameter results in \(E\cdot A\); the effective stiffness of the reeving system is computed as \(EA/L\) in which \(L\) is the current length of the rope
  • dampingPerLength [\(DA\), type = UReal, default = 0.]:
    axial damping per length [SI:N/(m/s)/m] of rope; the effective damping coefficient of the reeving system is computed as \(DA/L\) in which \(L\) is the current length of the rope
  • dampingTorsional [\(DT\), type = UReal, default = 0.]:
    torsional damping [SI:Nms] between sheaves; this effect can damp rotations around the rope axis, pairwise between sheaves; this parameter is experimental
  • dampingShear [\(DS\), type = UReal, default = 0.]:
    damping of shear motion [SI:Ns] between sheaves; this effect can damp motion perpendicular to the rope between each pair of sheaves; this parameter is experimental
  • regularizationForce [\(F_{reg}\), type = Real, default = 0.1]:
    small regularization force [SI:N] in order to avoid large compressive forces; this regularization force can either be \(<0\) (using a linear tension/compression spring model) or \(>0\), which restricts forces in the rope to be always \(\ge -F_{reg}\). Note that smaller forces lead to problems in implicit integrators and smaller time steps. For explicit integrators, this force can be chosen close to zero.
  • referenceLength [\(L_{ref}\), type = Real, default = 0.]:
    reference length for computation of roped force
  • sheavesAxes [\({\mathbf{l}}_a = [\LU{m0}{{\mathbf{a}}_0},\, \LU{m1}{{\mathbf{a}}_1},\, \ldots ] in [\Rcal^{3}, ...]\), type = Vector3DList, default = []]:
    list of local vectors axes of sheaves; vectors refer to rigid body markers given in list of markerNumbers; first and last axes are ignored, as they represent the attachment of the rope ends
  • sheavesRadii [\({\mathbf{l}}_r = [r_0,\, r_1,\, \ldots]\tp \in \Rcal^{n}\), type = Vector, default = []]:
    radius for each sheave, related to list of markerNumbers and list of sheaveAxes; first and last radii must always be zero.
  • activeConnector [type = Bool, default = True]:
    flag, which determines, if the connector is active; used to deactivate (temporarily) a connector or constraint
  • visualization [type = VObjectConnectorReevingSystemSprings]:
    parameters for visualization of item

The item VObjectConnectorReevingSystemSprings has the following parameters:

  • show [type = Bool, default = True]:
    set true, if item is shown in visualization and false if it is not shown
  • ropeRadius [type = float, default = 0.001]:
    radius of rope
  • color [type = Float4, default = [-1.,-1.,-1.,-1.]]:
    RGBA connector color; if R==-1, use default color

DESCRIPTION of ObjectConnectorReevingSystemSprings

The following output variables are available as OutputVariableType in sensors, Get…Output() and other functions:

  • Distance: \(L\)
    current total length of rope
  • VelocityLocal: \(\dot L\)
    scalar time derivative of current total length of rope
  • ForceLocal: \(F\)
    scalar force in reeving system (constant over length of rope)

General model assumptions

The ConnectorReevingSystemSprings model is based on a linear elastic, visco-elastic, and mass-less spring which is tangent to a list of rolls. The contact with the rolls is friction-less, causing no torque w.r.t.the rolling axis of the sheave. The force in the rope results from the difference of the total length \(L\) compared to the reference length or the rope, which may be changed by adding or subtracting rope length at the end points. All geometric operations are performed in 3D, allowing to model simple reeving systems in 3D.

../../../_images/CommonTangents3D.png

Fig. 41 Geometry of common tangent for two spatial circles defined by radii \(R_A\) and \(R_B\) as well as by the normalized axis vectors \({\mathbf{a}}_A\) and \({\mathbf{a}}_B\). The tangent is undefined, if one of the axis vectors is parallel to the vector \({\mathbf{c}}\), which connects the two center points. The positive rotation sense is indicated by means of the angular velocities \(\omega_A\) and \(\omega_B\).

Common tangent of two circles in 3D

In order to compute the total length of the rope of the reeving system, the tangent of two arbitrary circles in space needs to be computed. Considering Fig. 41, the relations are based on the center points of the circles \({\mathbf{p}}_A\) and \({\mathbf{p}}_B\), the radii \(R_A\) and \(R_B\) as well as the axis vectors \({\mathbf{a}}_A\) and \({\mathbf{a}}_B\), the latter vectors also defining the side at which the tangent contacts. For the definition of the tangent, the vectors \({\mathbf{r}}_A\) and \({\mathbf{r}}_B\) need to be computed.

For the special case of \(R_A=R_B=0\), it follows that \({\mathbf{r}}_A={\mathbf{p}}_A\) and \({\mathbf{r}}_B={\mathbf{p}}_B\). Otherwise, we first compute the vector between circle centers,

\[{\mathbf{c}} = {\mathbf{p}}_B - {\mathbf{p}}_A, \quad \mathrm{and} \quad {\mathbf{c}}_0 = \frac{{\mathbf{c}}}{|{\mathbf{c}}|} ,\]

and obtain the tangent vectors

\[{\mathbf{t}}_A = {\mathbf{t}}_B = {\mathbf{c}}_0 ,\]

as well as the normal vectors

\[{\mathbf{n}}_A = {\mathbf{a}}_A \times {\mathbf{c}}_0, \quad \mathrm{and} \quad {\mathbf{n}}_B = {\mathbf{a}}_B \times {\mathbf{c}}_0 .\]

Note that the orientation of the axis vectors \({\mathbf{a}}_A\) and \({\mathbf{a}}_B\) defines the orientation of the normals. By definition, we assume the following conditions,

\[{\mathbf{n}}_A\tp {\mathbf{r}}_A < 0, \quad \mathrm{and} \quad {\mathbf{n}}_B\tp {\mathbf{r}}_B < 0 .\]

For two circles with equal radius and axes orientations, the angles result in \(\varphi_A=\varphi_B=\pi\). In general, the unknown vectors \({\mathbf{r}}_A\) and \({\mathbf{r}}_B\) are computed by means of Newton’s method. The unknown tangent vector is given as

\[{\mathbf{t}}_c = {\mathbf{p}}_B + {\mathbf{r}}_B - {\mathbf{p}}_A - {\mathbf{r}}_A = {\mathbf{c}} + {\mathbf{r}}_B - {\mathbf{r}}_A .\]

We now parameterize the two unknown vectors by means of unknown angles \(\varphi_A\) and \(\varphi_B\),

\[{\mathbf{r}}_A = -R_A \left( \cos(\varphi_A) {\mathbf{t}}_A - \sin(\varphi_A) {\mathbf{n}}_A \right), \quad \mathrm{and} \quad {\mathbf{r}}_B = -R_B \left( \cos(\varphi_B) {\mathbf{t}}_B - \sin(\varphi_B) {\mathbf{n}}_B \right) .\]

As vectors \({\mathbf{r}}_A\) and \({\mathbf{r}}_B\) must be perpendicular to \({\mathbf{t}}_c\), it follows that

\[{\mathbf{r}}_A\tp ({\mathbf{c}} + {\mathbf{r}}_B - {\mathbf{r}}_A) = 0, \quad \mathrm{and} \quad {\mathbf{r}}_B\tp ({\mathbf{c}} + {\mathbf{r}}_B - {\mathbf{r}}_A) = 0,\]

or

(75)\[{\mathbf{r}}_A\tp {\mathbf{c}} + {\mathbf{r}}_A\tp {\mathbf{r}}_B - R_A^2 = 0, \quad \mathrm{and} \quad {\mathbf{r}}_B\tp {\mathbf{c}} - {\mathbf{r}}_B\tp{\mathbf{r}}_A + R_B^2 = 0 .\]

The relations Eq. (75) reduce to only one equation, if either \(R_A=0\) or \(R_B = 0\). The equations can be solved by Newton’s method by computing the jacobian of \({\mathbf{J}}_{CT}\) of Eq. (75) w.r.t.the unknown angles \(\varphi_A\) and \(\varphi_B\). The iterations are started with

\[\varphi_A = \pi \quad \mathrm{and} \quad \varphi_B = \pi,\]

and iterate until the error is below a certain tolerance, for details see the implementation in Geometry.h.

Connector forces

The current rope length results from the configuration of sheaves, including start and end position:

\[L = d_{m_0-m_1} + C_{m_1} + d_{m_1-m_2} + C_{m_2} + \ldots + d_{m_{nr-2}-m_{nr-1}}\]

in which \(d_{...}\) represents the free spans between two sheaves as computed from the common tangent in the previous section, and \(C_{...}\) represents the length along the circumference of the according marker if the according radius \(r\) is non-zero. The quantity \(C_{...}\) can be computed easily as soon as the radius vectors to the tangents \({\mathbf{r}}_A\) and \({\mathbf{r}}_B\)are known. Within a series of tangents, the previous to the current tangent will always enclose an angle between \(0\) and \(2\cdot \pi\).

In case that hasCoordinateMarkers=True, the total reference length and its derivative result as

\[L_0 = L_{ref} + f_0 \cdot q_{m_{c0}} + f_1 \cdot q_{m_{c1}}, \quad \dot L_0 = f_0 \cdot \dot q_{m_{c0}} + f_1 \cdot \dot q_{m_{c1}}, \quad\]

while we set \(L_0 = L_{ref}\) and \(\dot L_0=0\) otherwise. The linear force in the reeving system (assumed to be constant all over the rope) is computed as

\[F_{lin} = (L-L_{0}) \frac{EA}{L_0} + (\dot L - \dot L_0)\frac{DA}{L_0}\]

The rope force is computed from

\[\begin{split}F = \begin{cases} F_{lin} \quad \mathrm{if} \quad F_{lin} > 0 \\ F_{reg} \cdot \mathrm{tanh}(F_{lin}/F_{reg})\quad \mathrm{else} \end{cases}\end{split}\]

Which allows small compressive forces \(F_{reg}\). In case that \(F_{reg} < 0\), compressive forces are not regularized (linear spring). The case \(F_{reg} = 0\) will be used in future only in combination with a data node, which allows switching similar as in friction and contact elements.

Note that in case of \(L_0=0\), the term \(\frac{1}{L_0}\) is replaced by \(1000\). However, this case must be avoided by the user by choosing appropriate parameters for the system.

Additional damping may be added via the parameters \(DT\) and \(DS\), which have to be treated carefully. The shearing parameter may be helpful to damp undesired oscillatory shearing motion, however, it may also damp rigid body motion of the overall mechanism.

Further details are given in the implementation and examples are provided in the Examples and TestModels folders.

Relevant Examples and TestModels with weblink:

The web version may not be complete. For details, consider also the Exudyn PDF documentation : theDoc.pdf