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:
Dx↔mu_A: peak friction coefficient.magic-formula tail
Dx·sin(Cx·π/2)(forEx < 1) ↔mu_S: the level the curve relaxes to at large slip, soCxplays the role of themu_S / mu_Aratio.Bx(stiffness / initial slope) ↔1/vAdhesion: largerBxputs the peak at a smaller slip velocity. NotevAdhesion, vSlidescale with rolling speed (sAdhesion, sSlide×radius·w_roll, floored byvAdhesion_min, vSlide_min), whereasBxis a fixed slip-velocity stiffness.Ex(curvature) shapes the peak→tail descent, loosely analogous to thesSlide − sAdhesiontransition 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
"""
# 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
endFlattened Source
"""
# 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 {}
endTest Cases
No test cases defined.
Related
Examples
Experiments
Analyses