Skip to content
LIBRARY
tests.SlipVsPacejkaSpinUp.md

tests.SlipVsPacejkaSpinUp

Slip vs Pacejka spin-up comparison

A SlippingWheel (triple-S friction) and a PacejkaSlippingWheel (magic-formula friction) placed side by side, each starting with the same large initial spin (der_angles = [0, 25, 0.1]) and zero linear velocity, with the same mass/inertia. The two wheels are offset in z (the spin direction is x).

The peak friction coefficient is matched (Dx = mu_A = 0.95), with the other magic-formula factors at their defaults. The trajectories still differ because the two friction laws have genuinely different shapes: the triple-S spikes to its peak then drops to the lower sliding plateau mu_S, whereas the magic formula rises smoothly to Dx and stays near it with only a gentle tail — so the Pacejka wheel keeps more traction past the peak and rolls further. This comparison is qualitative; the two parameter sets have no exact common calibration. Their roles correspond roughly as:

  • Dxmu_A: peak friction coefficient.

  • magic-formula tail Dx·sin(Cx·π/2) (for Ex < 1) ↔ mu_S: the level the curve relaxes to at large slip, so Cx plays the role of the mu_S / mu_A ratio.

  • Bx (stiffness / initial slope) ↔ 1/vAdhesion: larger Bx puts the peak at a smaller slip velocity. Note vAdhesion, vSlide scale with rolling speed (sAdhesion, sSlide × radius·w_roll, floored by vAdhesion_min, vSlide_min), whereas Bx is a fixed slip-velocity stiffness.

  • Ex (curvature) shapes the peak→tail descent, loosely analogous to the sSlide − sAdhesion transition width.

The lateral factors (By, Cy, Dy, Ey) play the analogous roles in the lateral direction; here the spin-up is essentially pure longitudinal slip.

Usage

MultibodyComponents.tests.SlipVsPacejkaSpinUp()

Behavior

Source

dyad
"""
# Slip vs Pacejka spin-up comparison

A `SlippingWheel` (triple-S friction) and a `PacejkaSlippingWheel`
(magic-formula friction) placed side by side, each starting with the same large
initial spin (`der_angles = [0, 25, 0.1]`) and zero linear velocity, with the
same mass/inertia. The two wheels are offset in z (the spin direction is x).

The peak friction coefficient is matched (`Dx = mu_A = 0.95`), with the other
magic-formula factors at their defaults. The trajectories still differ because
the two friction laws have genuinely different shapes: the triple-S spikes to
its peak then drops to the lower sliding plateau `mu_S`, whereas the magic
formula rises smoothly to `Dx` and stays near it with only a gentle tail — so
the Pacejka wheel keeps more traction past the peak and rolls further. This
comparison is qualitative; the two parameter sets have no exact common
calibration. Their roles correspond roughly as:

  - `Dx` ↔ `mu_A`: peak friction coefficient.
  - magic-formula tail `Dx·sin(Cx·π/2)` (for `Ex < 1`) ↔ `mu_S`: the level the
    curve relaxes to at large slip, so `Cx` plays the role of the `mu_S / mu_A`
    ratio.
  - `Bx` (stiffness / initial slope) ↔ `1/vAdhesion`: larger `Bx` puts the peak
    at a smaller slip velocity. Note `vAdhesion, vSlide` scale with rolling speed
    (`sAdhesion, sSlide` × `radius·w_roll`, floored by `vAdhesion_min,
    vSlide_min`), whereas `Bx` is a fixed slip-velocity stiffness.
  - `Ex` (curvature) shapes the peak→tail descent, loosely analogous to the
    `sSlide − sAdhesion` transition width.

The lateral factors (`By, Cy, Dy, Ey`) play the analogous roles in the lateral
direction; here the spin-up is essentially pure longitudinal slip.
"""
example component SlipVsPacejkaSpinUp
  world = MultibodyComponents.World() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 20, "y1": 20, "x2": 120, "y2": 120, "rot": 0}
      },
      "tags": []
    }
  }
  slip = MultibodyComponents.SlippingWheel(radius = 0.3, m = 2, I_axis = 0.06, I_long = 0.12, mu_A = 0.95, mu_S = 0.5, sAdhesion = 0.04, sSlide = 0.12, vAdhesion_min = 0.05, vSlide_min = 0.15, x(initial = 0.2), z(initial = 0.6), angles(initial = [0, 0, 0]), der_angles(initial = [0, 25, 0.1])) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 200, "y1": 20, "x2": 300, "y2": 120, "rot": 0}
      },
      "tags": []
    }
  }
  pacejka = MultibodyComponents.PacejkaSlippingWheel(radius = 0.3, m = 2, I_axis = 0.06, I_long = 0.12, Dx = 0.95, Dy = 0.9, x(initial = 0.2), z(initial = -0.6), angles(initial = [0, 0, 0]), der_angles(initial = [0, 25, 0.1])) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 360, "y1": 20, "x2": 460, "y2": 120, "rot": 0}
      },
      "tags": []
    }
  }
relations
  initial slip.body.v_0[1] = 0
  initial slip.body.v_0[3] = 0
  initial pacejka.body.v_0[1] = 0
  initial pacejka.body.v_0[3] = 0
end
Flattened Source
dyad
"""
# Slip vs Pacejka spin-up comparison

A `SlippingWheel` (triple-S friction) and a `PacejkaSlippingWheel`
(magic-formula friction) placed side by side, each starting with the same large
initial spin (`der_angles = [0, 25, 0.1]`) and zero linear velocity, with the
same mass/inertia. The two wheels are offset in z (the spin direction is x).

The peak friction coefficient is matched (`Dx = mu_A = 0.95`), with the other
magic-formula factors at their defaults. The trajectories still differ because
the two friction laws have genuinely different shapes: the triple-S spikes to
its peak then drops to the lower sliding plateau `mu_S`, whereas the magic
formula rises smoothly to `Dx` and stays near it with only a gentle tail — so
the Pacejka wheel keeps more traction past the peak and rolls further. This
comparison is qualitative; the two parameter sets have no exact common
calibration. Their roles correspond roughly as:

  - `Dx` ↔ `mu_A`: peak friction coefficient.
  - magic-formula tail `Dx·sin(Cx·π/2)` (for `Ex < 1`) ↔ `mu_S`: the level the
    curve relaxes to at large slip, so `Cx` plays the role of the `mu_S / mu_A`
    ratio.
  - `Bx` (stiffness / initial slope) ↔ `1/vAdhesion`: larger `Bx` puts the peak
    at a smaller slip velocity. Note `vAdhesion, vSlide` scale with rolling speed
    (`sAdhesion, sSlide` × `radius·w_roll`, floored by `vAdhesion_min,
    vSlide_min`), whereas `Bx` is a fixed slip-velocity stiffness.
  - `Ex` (curvature) shapes the peak→tail descent, loosely analogous to the
    `sSlide − sAdhesion` transition width.

The lateral factors (`By, Cy, Dy, Ey`) play the analogous roles in the lateral
direction; here the spin-up is essentially pure longitudinal slip.
"""
example component SlipVsPacejkaSpinUp
  world = MultibodyComponents.World() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 20, "y1": 20, "x2": 120, "y2": 120, "rot": 0}
      },
      "tags": []
    }
  }
  slip = MultibodyComponents.SlippingWheel(radius = 0.3, m = 2, I_axis = 0.06, I_long = 0.12, mu_A = 0.95, mu_S = 0.5, sAdhesion = 0.04, sSlide = 0.12, vAdhesion_min = 0.05, vSlide_min = 0.15, x(initial = 0.2), z(initial = 0.6), angles(initial = [0, 0, 0]), der_angles(initial = [0, 25, 0.1])) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 200, "y1": 20, "x2": 300, "y2": 120, "rot": 0}
      },
      "tags": []
    }
  }
  pacejka = MultibodyComponents.PacejkaSlippingWheel(radius = 0.3, m = 2, I_axis = 0.06, I_long = 0.12, Dx = 0.95, Dy = 0.9, x(initial = 0.2), z(initial = -0.6), angles(initial = [0, 0, 0]), der_angles(initial = [0, 25, 0.1])) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 360, "y1": 20, "x2": 460, "y2": 120, "rot": 0}
      },
      "tags": []
    }
  }
relations
  initial slip.body.v_0[1] = 0
  initial slip.body.v_0[3] = 0
  initial pacejka.body.v_0[1] = 0
  initial pacejka.body.v_0[3] = 0
metadata {}
end


Test Cases

No test cases defined.

  • Examples

  • Experiments

  • Analyses