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
Additional information for ObjectContactConvexRoll:
- This
Object
has/provides the following types =Connector
- Requested
Marker
type =Position
+Orientation
- Requested
Node
type =GenericData
The item ObjectContactConvexRoll with type = ‘ContactConvexRoll’ has the following parameters:
- name [type = String, default = ‘’]:constraints’s unique name
- markerNumbers [\([m0,m1]\tp\), type = ArrayMarkerIndex, size = 2, default = [ invalid [-1], invalid [-1] ]]: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 [\(n_d\), type = NodeIndex, default = invalid (-1)]:node number of a NodeGenericData (size=3) for 3 dataCoordinates, needed for discontinuous iteration (friction and contact)
- contactStiffness [\(k_c\), type = Real, default = 0.]:normal contact stiffness [SI:N/m]
- contactDamping [\(d_c\), type = Real, default = 0.]:normal contact damping [SI:N/(m s)]
- dynamicFriction [\(\mu_d\), type = UReal, default = 0.]:dynamic friction coefficient for friction model, see StribeckFunction in exudyn.physics, Section Module: physics
- staticFrictionOffset [\(\mu_{s_off}\), type = UReal, default = 0.]:static friction offset for friction model (static friction = dynamic friction + static offset), see StribeckFunction in exudyn.physics, Section Module: physics
- viscousFriction [\(\mu_v\), type = UReal, default = 0.]:viscous friction coefficient (velocity dependent part) for friction model, see StribeckFunction in exudyn.physics, Section Module: physics
- exponentialDecayStatic [\(v_{exp}\), type = PReal, default = 1e-3]:exponential decay of static friction offset (must not be zero!), see StribeckFunction in exudyn.physics (named expVel there!), Section Module: physics
- frictionProportionalZone [\(v_{reg}\), type = UReal, default = 1e-3]: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!), Section Module: physics
- rollLength [\(L\), type = UReal, default = 0.]:roll length [m], symmetric w.r.t.centerpoint
- coefficientsHull [\({\mathbf{k}} \in \Rcal^{n_p}\), type = NumpyVector, default = []]: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 [\({\mathbf{k}}^\prime \in \Rcal^{n_p}\), type = NumpyVector, default = []]:polynomial coefficients of the polynomial \(\mathrm{hull}^\prime(x)\)
- coefficientsHullDDerivative [type = NumpyVector, default = []]:second derivative of the hull polynomial.
- rBoundingSphere [type = UReal, default = 0]:The radius of the bounding sphere for the contact pre-check, calculated from the polynomial coefficients of the hull
- pContact [type = Vector3D, default = [0,0,0]]:The current potential contact point. Contact occures if pContact[2] < 0.
- activeConnector [type = Bool, default = True]:flag, which determines, if the connector is active; used to deactivate (temporarily) a connector or constraint
- visualization [type = VObjectContactConvexRoll]:parameters for visualization of item
The item VObjectContactConvexRoll has the following parameters:
- show [type = Bool, default = True]:set true, if item is shown in visualization and false if it is not shown
- color [type = Float4, default = [-1.,-1.,-1.,-1.]]:RGBA connector color; if R==-1, use default color
DESCRIPTION of ObjectContactConvexRoll
The following output variables are available as OutputVariableType in sensors, Get…Output() and other functions:
Position
: \(\LU{0}{{\mathbf{p}}}_{C}\)current global position of contact point between roller and groundVelocity
: \(\LU{0}{{\mathbf{v}}}_{C}\)current velocity of the trail (contact) point in global coordinates; this is the velocity with which the contact moves over the ground planeForce
: \(\LU{0}{{\mathbf{f}}}\)Roll-ground force in ground coordinatesTorque
: \(\LU{0}{{\mathbf{m}}}\)Roll-ground torque in ground coordinates
Definition of quantities
intermediate variables
|
symbol
|
description
|
---|---|---|
marker m0 position
|
\(\LU{0}{{\mathbf{p}}}_{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}{{\mathbf{p}}}_{m1}\)
|
center of roll
|
Contact position
|
\(\LU{0}{{\mathbf{p}}}_{C}\)
|
Position of the Contact point C in the global frame 0
|
Position marker m1 to contact
|
\(\LU{0}{{\mathbf{p}}}_{\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
|
\({\mathbf{x}}=[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}{{\mathbf{v}}}_{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}{{\mathbf{n}}}\)
|
normalized normal vector to the (moving, but not rotating) ground, by default [0,0,1]
|
Geometric relations
The geometrical setup is shown in Fig. 42. 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
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}}{\mathbf{p}}_{\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. 42, explained in detail in .
At the contact point a normal force \({\mathbf{f}}_{\mathrm{N}} = [ 0 \; 0 \; \mathrm{f}_{\mathrm{N}} ]\tp\) with
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{\mathbf{p}}_{\mathrm{C}}}\).
The revolution results in a velocity of
in the contact point, while the tangential component of the velocity of the body itself with the normal Vector to the contact plane \({\mathbf{n}}\) follows to
Therefore the slip velocity of the body can be calculated with
and points in the direction
The slip force is then calculated
and uses for the friction coefficient \(\mu\) the regularized friction approach from the StribeckFunction, see Section Module: physics. The torque
acts onto the body, resulting from the slip force acting not in the bodies center.
Relevant Examples and TestModels with weblink:
ConvexContactTest.py (TestModels/)
The web version may not be complete. For details, consider also the Exudyn PDF documentation : theDoc.pdf