ObjectContactConvexRoll

A contact connector representing a convex roll (marker 1) on a flat surface (marker 0, ground body, not moving) in global \(x\)-\(y\) plane. The connector is similar to ObjectConnectorRollingDiscPenalty, but includes a (strictly) convex shape of the roll defined by a polynomial. It is based on a penalty formulation and adds friction and slipping. The formulation is still under development and needs further testing. Note that the rolling body must have the reference point at the center of the disc.

Author: Manzl Peter

Interface

Parameters

The parameters of the item; in a dictionary, its type is ‘ContactConvexRoll’:

name

type

size

default

description

name

String

‘’

constraints’s unique name

markerNumbers

ArrayMarkerIndex

2

[ invalid (-1), invalid (-1) ]

(symbol: \([m0,m1]\tp\)) list of markers used in connector; \(m0\) represents the ground, which can undergo translations but not rotations, and \(m1\) represents the rolling body, which has its reference point (=local position [0,0,0]) at the roll’s center point

nodeNumber

NodeIndex

invalid (-1)

(symbol: \(n_d\)) node number of a NodeGenericData (size=3) for 3 dataCoordinates, needed for discontinuous iteration (friction and contact)

contactStiffness

Real

0.

(symbol: \(k_c\)) normal contact stiffness [SI:N/m]

contactDamping

Real

0.

(symbol: \(d_c\)) normal contact damping [SI:N/(m s)]

dynamicFriction

UReal

0.

(symbol: \(\mu_d\)) dynamic friction coefficient for friction model, see StribeckFunction in exudyn.physics, Module: physics

staticFrictionOffset

UReal

0.

(symbol: \(\mu_{s_off}\)) static friction offset for friction model (static friction = dynamic friction + static offset), see StribeckFunction in exudyn.physics, Module: physics

viscousFriction

UReal

0.

(symbol: \(\mu_v\)) viscous friction coefficient (velocity dependent part) for friction model, see StribeckFunction in exudyn.physics, Module: physics

exponentialDecayStatic

PReal

0.001

(symbol: \(v_{exp}\)) exponential decay of static friction offset (must not be zero!), see StribeckFunction in exudyn.physics (named expVel there!), Module: physics

frictionProportionalZone

UReal

0.001

(symbol: \(v_{reg}\)) limit velocity [m/s] up to which the friction is proportional to velocity (for regularization / avoid numerical oscillations), see StribeckFunction in exudyn.physics (named regVel there!), Module: physics

rollLength

UReal

0.

(symbol: \(L\)) roll length [m], symmetric w.r.t. centerpoint

coefficientsHull

NumpyVector

[]

(symbol: \(\kv \in \Rcal^{n_p}\)) a vector of polynomial coefficients, which provides the polynomial of the CONVEX hull of the roll; \(\mathrm{hull}(x) = k_0 x^{n_p-1} + k x^{n_p-2} + \ldots + k_{n_p-2} x + k_{n_p-1}\)

coefficientsHullDerivative

NumpyVector

[]

(symbol: \(\kv^\prime \in \Rcal^{n_p}\)) polynomial coefficients of the polynomial \(\mathrm{hull}^\prime(x)\)

coefficientsHullDDerivative

NumpyVector

[]

second derivative of the hull polynomial.

rBoundingSphere

UReal

0

radius of the bounding sphere for the contact pre-check; computed from coefficientsHull whenever the parameters change, and therefore read-only

pContact

Vector3D

3

[0,0,0]

the current potential contact point; computed in every contact evaluation and therefore read-only. Contact occurs if pContact[2] \(< 0\)

activeConnector

Bool

True

flag, which determines, if the connector is active; used to deactivate (temporarily) a connector or constraint

visualization

VObjectContactConvexRoll

parameters for visualization of item

Visualization parameters

The parameters of VObjectContactConvexRoll, 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

color

Float4

4

[-1.,-1.,-1.,-1.]

RGBA connector color; if R==-1, use default color

Drawing

Drawn as all connectors; the contact point, a small sphere.

Output variables

Available as OutputVariableType in sensors, Get...Output() and other functions:

output variable

symbol

description

Position

\(\LU{0}{\pv}_{C}\)

current global position of contact point between roller and ground

Velocity

\(\LU{0}{\vv}_{C}\)

current velocity of the trail (contact) point in global coordinates; this is the velocity with which the contact moves over the ground plane

Force

\(\LU{0}{\fv}\)

Roll-ground force in ground coordinates

Torque

\(\LU{0}{\mv}\)

Roll-ground torque in ground coordinates

Detailed description

Definition of quantities

intermediate variables

symbol

description

marker m0 position

\(\LU{0}{\pv}_{m0}\)

current global position which is provided by marker m0, any ground reference point; currently unused

marker m0 orientation

\(\LU{0,m0}{\Rot}\)

current rotation matrix provided by marker m0; currently unused

marker m1 position

\(\LU{0}{\pv}_{m1}\)

center of roll

Contact position

\(\LU{0}{\pv}_{C}\)

Position of the Contact point C in the global frame 0

Position marker m1 to contact

\(\LU{0}{\pv}_{\mathrm{m1, C}}\)

Position of the contact point C relative to the marker m1 in global frame

marker m1 orientation

\(\LU{0,m1}{\Rot}\)

current rotation matrix provided by marker m1

data coordinates

\(\xv=[x_0,\,x_1,\,x_2]\tp\)

data coordinates for \([x_0,\,x_1]\): hold the sliding velocity in lateral and longitudinal direction of last discontinuous iteration; \(x_2\): represents gap of last discontinuous iteration (in contact normal direction)

marker m1 velocity

\(\LU{0}{\vv}_{m1}\)

current global velocity which is provided by marker m1

marker m1 angular velocity

\(\LU{0}{\tomega}_{m1}\)

current angular velocity vector provided by marker m1

ground normal vector

\(\LU{0}{\nv}\)

normalized normal vector to the (moving, but not rotating) ground, by default [0,0,1]

Geometric relations

The geometrical setup is shown in Fig. 39. To calculate the contact point of the convex body of revolution the contact (ground) plane is rotated into the local frame of the body. In this local frame in which the generatrix of the body of revolution is described by the polynomial function

(78)\[ \mathrm{r}(^bx) = \sum_{i=0}^n k_i \; x^{n-i} \]

with the coefficients of the hull \(a_i\). As a pre-Check for the contact two spheres are put into both ends of the object with the maximum radius and only if one of these is in contact. The contact point \(^{\mathrm{b}}\pv_{\mathrm{m1,C}} \) is calculated relative to the bodies marker m1 in the bodies local frame and transformed accordingly. The contact point C can for be calculated convex bodies by matching the derivative of the polynomial \(r(^bx)\) with the gradient of the contact plane, shown in Fig. 39, explained in detail in ManzlGerstmayr2021. At the contact point a normal force \(\fv_{\mathrm{N}} = [ 0 \; 0 \; \mathrm{f}_{\mathrm{N}} ]\tp\) with

(79)\[\begin{split} \mathrm{f}_{\mathrm{N}} = \begin{cases} - (k_c \, z_{\mathrm{pen}} + d_c \, \dot{z}_{\mathrm{pen}}) &\text{$z_{\mathrm{pen}}>0$} \\ 0 &\text{else} \end{cases} \end{split}\]

acts against the penetration of the ground. The penetration depth \(z_{\mathrm{pen}}\) is the z-component of the position vector of the contact point relative to the ground frame \({^0\pv_{\mathrm{C}}}\).

../../../_images/ConvexRolling.png

Fig. 39 Sketch of the roller Dimensions. The rollers radius \(r({^bx})\) is described by the polynomial coefficientsHull.

The revolution results in a velocity of

\[ ^{0}\vv_{C} ={^{0}{\tomega_{\mathrm{m1}}}} \times {^{0}{\pv_{\mathrm{m1,\,C}}}} \]

in the contact point, while the tangential component of the velocity of the body itself with the normal Vector to the contact plane \(\nv\) follows to

\[ \LURU{0}{\vv}{\mathrm{m1,\,t}}{} = \LU{0}{\vv_{\mathrm{m1}}} - {^0\nv} \, \left({^0\nv}^T \, \LU{0}{\vv_{\mathrm{m1}}}\right). \]

Therefore the slip velocity of the body can be calculated with

\[ \LURU{0}{\vv}{\mathrm{s}}{} = \LURU{0}{\vv}{C}{} - {^0\vv_{\mathrm{m1,\,t}}} \]

and points in the direction

\[ \LURU{0}{\rv}{s}{} = \frac{1}{\left\lVert \LURU{0}{\vv}{\mathrm{s}}{}\right\rVert} {^0{\vv}_{\mathrm{s}}}. \]

The slip force is then calculated

\[ ^0\fv_{\mathrm{s}} = \mu(\left\lVert\LU{}{^0\vv_{\mathrm{s}}}\right\rVert) \, \mathrm{f}_{\mathrm{N}} \, {^0\rv_\mathrm{s}} \]

and uses for the friction coefficient \(\mu\) the regularized friction approach from the StribeckFunction, see Module: physics. The torque

\[ ^0\ttau = {^0\pv_{\mathrm{m1,\,C}}} \times (^0\fv_{\mathrm{N}} + {^0\fv_{\mathrm{s}}}) \]

acts onto the body, resulting from the slip force acting not in the bodies center.

Relevant Examples (Ex) and TestModels (TM) with weblink to github: ConvexContactTest.py (TM)