PaceDynamics Documentation Open the app
Contents

Tyres

Combined slip

What a tyre can do when it corners and drives or brakes at once, and how the app weighs one force against the other.

Model as of 0.338Figures from the Formula Student single-car templateOctave check Exact

A tyre has one contact patch and one grip to share between directions. Brake in a corner and the side force falls; corner under braking and the brake force falls. The pure-slip curves of Slip and the Magic Formula are the two ends of that trade. This page is the middle of it: the friction ellipse, the Magic Formula's combined-slip weights, and what the vehicle models ask of them.

The friction ellipse

Side force against drive force for the template’s tyre at its nominal load: one line per slip angle, swept over the slip ratio, inside a dashed ellipse through the two peaks0500100015002000−1800−1200−600060012001800Drive force Fx (N): braking ← → drivingSide force Fy (N)1°2°4°μx Fz, 1615 Nμy Fz, 1710 N
one slip angle, 1° to 12°, over the slip ratio −0.3 to 0.3no slip angle: the pure drive curvethe friction ellipse through the peaks, equation (1)
Fig. 1
Each slip angle traces a line as the slip ratio sweeps from braking to driving. The corners reach past the ellipse through the peaks, at 950 N of load.
Measured

The plainest statement of the trade is that the patch can carry so much force and no more. With the drive force Fx and the side force Fy measured against the peak of each:

Show the equations with
(FxμxFz)2+(FyμyFz)2≤1(1)
μx=1.700,μy=1.800⇒μxFz=1615 N,μyFz=1710 N(Fz=950 N)(1)
μx,μy
the peaks of the pure-slip curves over the load, as the app reads them
Fz
the load, here the template tyre's nominal load

A simple tyre in the app couples its two forces by exactly this rule. It works out each force from its own slip as if the other were zero, and when the pair lands outside the ellipse it scales both back onto it:

d=(Fx0μxFz)2+(Fy0μyFz)2,d>1:Fx=Fx0d,Fy=Fy0d(2)
Fx0,Fy0
the pure-slip forces at the tyre's slip ratio and slip angle

Fig. 1 shows something else: the template's Magic Formula tyre, at every combination of slip angle and slip ratio. Each solid line holds one slip angle and sweeps the slip ratio from braking to driving; the dashed ellipse runs through the two peaks.

The Magic Formula's weights

The Magic Formula keeps the pure-slip curves and multiplies each by a weight: 1 when the other slip is zero, falling as it grows. Each weight is itself a short formula, the cosine of an arctangent:

Show the equations with
Fx=GxαFx0(κ),Gxα=cos⁡(Cxαarctan⁡(Bxαα)),Bxα=rBx1cos⁡(arctan⁡(rBx2κ))(3)
Bxα=13cos⁡(arctan⁡(10⋅0.1))=9.19,Gxα=cos⁡(arctan⁡(9.19⋅5∘))=0.780,Fx=0.780⋅1606=1253 N(3)
Fy=GyκFy0(α)+SVyκ,Gyκ=cos⁡(Cyκarctan⁡(Byκκ)),Byκ=rBy1cos⁡(arctan⁡(rBy2α))(4)
Byκ=12cos⁡(arctan⁡(12⋅5∘))=8.29,Gyκ=cos⁡(arctan⁡(8.29⋅0.1))=0.770,Fy=0.770⋅1580=1216 N(4)
rBx1,rBx2,rBy1,rBy2
the file's combined-slip coefficients
Cxα,Cyκ
the weights' shape factors, rCx1 and rCy1: 1 for this tyre
SVyκ
a side force the drive force itself makes, from the rVy coefficients: zero for this tyre

The worked lines are the template's tyre at its nominal load, at 5° of slip angle and a slip ratio of 0.1: it keeps 78 % of its drive force and 77 % of its side force. The full forms add a shift and a curvature inside each arctangent, as the pure-slip formula has, and a camber term in each B. All of those are zero on this tyre; pd_mf.m carries them.

Left: the share of drive force kept against slip angle, for four slip ratios. Right: the share of side force kept against slip ratio, for three slip angles0.000.250.500.751.00051015Slip angle α (°)Share kept, G (–)0.000.250.500.751.000.00.10.20.3Slip ratio κ (–)κ 0.02κ 0.05κ 0.1κ 0.21°4°8°GxαGyκ
Fig. 2
Each weight starts at 1 and falls as the other slip grows, more slowly the more the tyre already slips the first way.
Measured

rBx2 and rBy2 make each weight fall more slowly the more the tyre already slips the other way. A tyre already sliding fore and aft has less of its grip left in reserve, so a little slip angle on top of it costs it less; the same holds the other way round.

Not an ellipse

The weights are fitted to tests with both slips at once, not derived from the ellipse, and nothing makes them agree with it. On the template's tyre they put the envelope's corners outside the ellipse: at 5° and a slip ratio of −0.1 the tyre makes 1.05 times what equation (1) allows. The ellipse is a convenient bound, not a law of the rubber.

What the vehicle models ask

The most brake and drive force the template’s tyre can make while holding each side force, against the friction ellipse through its peaks0500100015002000−1800−1200−600060012001800Drive force Fx (N): braking ← → drivingSide force Fy (N)1444 N1399 Nhalf the peak side force
the most drive or brake force at each side force, as the grip envelope asksthe friction ellipse through the peaks
Fig. 3
Holding half its peak side force, the tyre can still brake with 1444 N, more than the ellipse’s 1399 N.
Measured

A car in a corner asks a different question from the one the formula answers. It is not "what force at this slip angle and slip ratio", but "holding this much side force, how much brake or drive force is left?" The grip envelope a lap is solved on asks it of every wheel. The app answers it on the tyre itself. At each slip ratio it finds the slip angle that still makes the side force asked, and then takes the largest drive or brake force over the slip ratio. At half its peak side force the template's tyre can still brake with 1444 N, where the ellipse through its peaks would allow 1399 N.

The transient car reads the same coupling from a table per wheel. The optimal lap's reduced car uses a friction ellipse.

Which way the forces point

Forces here are in the app's sense: positive slip angle makes positive side force, and positive slip ratio is driving. On the template's tyre braking and driving cost the same side force, since its weights have no shift and are even in κ. A file with a shift rHy1 or an induced side force SVyκ would make the two sides differ.

What the model assumes

  • Steady state: the forces follow the slips at once. The transient car adds a lag on the slip angle (Relaxation length).
  • Zero camber and the nominal pressure. rBx3 and rBy4 add camber to the weights; the template's tyre has none.
  • The weights are only as good as the tests behind them. A tyre fitted from cornering and drive runs alone has no data for them. The app then fills in one measured 10-inch tyre's weights, rounded, and marks the tyre as assuming them, with how much its envelope moves when they move by a quarter.
  • No turn slip: the patch is not itself turning about the vertical, which matters for tight turns at walking pace and little else.

In the app

Tyres draws "Friction ellipse (combined slip)" at the analysis load: the tyre's forces over a grid of slip angle and slip ratio, as Fig. 1 does. For a tyre fitted in the app, the Fit tab adds "Fitted data — side force kept while driving or braking" and "Fitted data — combined-slip envelope, per unit load", the weights over the rig data they came from.

Laptime › Replay draws, under "Friction circles and slip curves", each tyre's own combined-slip edge at its load at that moment, the boundary of Fig. 3, and the force it is making. A simple tyre's edge is its ellipse. The tyre capacity ring fills against the same edge, so a wheel at its limit sits on its line.

Check it yourself

The script works equations (3) and (4) at three slip angles and four slip ratios, with every shift and curvature the file carries, and compares the forces with the app's. It also prints how much of the friction ellipse each point uses. Paste your own file's coefficients into example_tyre.m to read your tyre.

combined_slip.mwith example_tyre.m, pd_mf.m, pd_peak.m, pd_compare.mExact: agrees to machine precision
>> combined_slip

The weights at 950 N: what is left of each pure-slip force.

  alpha \ kappa    -0.10    -0.05     0.05     0.10
  G_xa    2 deg     0.952    0.927    0.927    0.952
  G_xa    5 deg     0.780    0.702    0.702    0.780
  G_xa    8 deg     0.615    0.524    0.524    0.615
  G_yk    2 deg     0.670    0.875    0.875    0.670
  G_yk    5 deg     0.770    0.924    0.924    0.770
  G_yk    8 deg     0.852    0.956    0.956    0.852

  Share of the friction ellipse used, sqrt((Fx/mu_x Fz)^2 + (Fy/mu_y Fz)^2):
             2 deg     1.004    0.836    0.836    1.004
             5 deg     1.052    1.010    1.010    1.052
             8 deg     1.048    1.037    1.037    1.048

  Quantity                                This script   PaceDynamics       Diff
  -----------------------------------------------------------------------------
  F_x at 2 deg, kappa -0.10 [N]              -1529.09       -1529.09         0% 
  F_x at 2 deg, kappa -0.05 [N]              -1150.84       -1150.84         0% 
  F_x at 2 deg, kappa  0.05 [N]               1150.84        1150.84         0% 
  F_x at 2 deg, kappa  0.10 [N]               1529.09        1529.09         0% 
  F_x at 5 deg, kappa -0.10 [N]              -1252.65       -1252.65   1.8e-14% 
  F_x at 5 deg, kappa -0.05 [N]              -871.815       -871.815   1.3e-14% 
  F_x at 5 deg, kappa  0.05 [N]               871.815        871.815   1.3e-14% 
  F_x at 5 deg, kappa  0.10 [N]               1252.65        1252.65   1.8e-14% 
  F_x at 8 deg, kappa -0.10 [N]              -986.975       -986.975         0% 
  F_x at 8 deg, kappa -0.05 [N]              -651.375       -651.375         0% 
  F_x at 8 deg, kappa  0.05 [N]               651.375        651.375         0% 
  F_x at 8 deg, kappa  0.10 [N]               986.975        986.975         0% 
  F_y at 2 deg, kappa -0.10 [N]               572.866        572.866         0% 
  F_y at 2 deg, kappa -0.05 [N]               747.667        747.667     3e-14% 
  F_y at 2 deg, kappa  0.05 [N]               747.667        747.667     3e-14% 
  F_y at 2 deg, kappa  0.10 [N]               572.866        572.866         0% 
  F_y at 5 deg, kappa -0.10 [N]               1216.41        1216.41   1.9e-14% 
  F_y at 5 deg, kappa -0.05 [N]                1459.5         1459.5   1.6e-14% 
  F_y at 5 deg, kappa  0.05 [N]                1459.5         1459.5   1.6e-14% 
  F_y at 5 deg, kappa  0.10 [N]               1216.41        1216.41   1.9e-14% 
  F_y at 8 deg, kappa -0.10 [N]               1456.57        1456.57         0% 
  F_y at 8 deg, kappa -0.05 [N]               1634.45        1634.45         0% 
  F_y at 8 deg, kappa  0.05 [N]               1634.45        1634.45         0% 
  F_y at 8 deg, kappa  0.10 [N]               1456.57        1456.57         0% 
  F_x0 at kappa -0.10 [N]                    -1605.88       -1605.88         0% 
  F_x0 at kappa -0.05 [N]                    -1242.03       -1242.03         0% 
  F_x0 at kappa  0.05 [N]                     1242.03        1242.03         0% 
  F_x0 at kappa  0.10 [N]                     1605.88        1605.88         0% 
  F_y0 at 2 deg [N]                           854.523        854.523   2.7e-14% 
  F_y0 at 5 deg [N]                           1579.84        1579.84   1.4e-14% 
  F_y0 at 8 deg [N]                           1709.98        1709.98         0% 
  mu_x, peak drive force / load [-]           1.69998        1.69998         0% 
  mu_y, peak side force / load [-]            1.79998        1.79998         0% 

  All 33 quantities agree with PaceDynamics (largest difference 3e-14 %).
The script
%% Combined slip: a tyre slipping both ways at once
%
% Companion to the documentation page "Combined slip". Runs unchanged in GNU Octave
% (7 or later) and MATLAB. Edit the tyre in example_tyre.m and run:
%
%   >> combined_slip
%
% A tyre asked for drive or brake force while it corners gives up some of its side
% force, and the other way round. The Magic Formula writes that as two weights on the
% pure-slip forces, each a cosine of an arctangent:
%
%   F_x = G_xa F_x0(kappa),             G_xa = cos( C_xa atan(B_xa alpha) )
%   F_y = G_yk F_y0(alpha) + S_Vyk,     G_yk = cos( C_yk atan(B_yk kappa) )
%
%   B_xa = r_Bx1 cos( atan(r_Bx2 kappa) ),   B_yk = r_By1 cos( atan(r_By2 alpha) )
%
% shown here without the shifts and curvatures, which are zero on the template's tyre
% (pd_mf.m carries them all). Each weight is 1 at pure slip and falls as the other slip
% grows; r_Bx2 and r_By2 make it fall more slowly the harder the tyre already slips.
%
% Reference: H. B. Pacejka, Tyre and Vehicle Dynamics, 3rd ed. (Butterworth-Heinemann,
% 2012), ch. 4.3.2.
%
% Part of the PaceDynamics documentation, https://pacedyn.dev/docs
% SPDX-License-Identifier: MIT

[t, app] = example_tyre();
C = app.combined;
deg = pi / 180;

% Which way the file's side force points, as the app finds it: by its slope across
% +-2 deg at the nominal load. The app turns the side force round when it is negative.
up = pd_mf(t, t.FNOMIN, 2 * deg, 0);
dn = pd_mf(t, t.FNOMIN, -2 * deg, 0);
sign_fy = 2 * ((up.Fy0 - dn.Fy0) >= 0) - 1;

%% The forces at each slip angle (rows) and slip ratio (columns)
[K, A] = meshgrid(C.kappa, C.alphaDeg * deg);
f = pd_mf(t, C.load, A, K);
Fx = f.Fx;
Fy = sign_fy * f.Fy;

px = pd_mf(t, C.load, 0 * C.kappa, C.kappa);          % pure slip ratio
py = pd_mf(t, C.load, C.alphaDeg * deg, 0 * C.alphaDeg);   % pure slip angle
fx0 = px.Fx0;
fy0 = sign_fy * py.Fy0;

% The friction coefficients, as the app reads them: the peak of each pure-slip curve.
Fy_at = @(a) getfield(pd_mf(t, C.load, a * deg, 0), 'Fy0');
Fx_at = @(k) getfield(pd_mf(t, C.load, 0, k), 'Fx0');
mu_y = pd_peak(Fy_at, 45, 1) / max(1, C.load);
mu_x = pd_peak(Fx_at, 0.6, 0.02) / max(1, C.load);

fprintf('\nThe weights at %g N: what is left of each pure-slip force.\n\n', C.load);
fprintf('  %-12s', 'alpha \ kappa');
fprintf('%9.2f', C.kappa);
fprintf('\n');
for i = 1:numel(C.alphaDeg)
  fprintf('  G_xa %4g deg ', C.alphaDeg(i));
  fprintf('%9.3f', f.Gxa(i, :));
  fprintf('\n');
end
for i = 1:numel(C.alphaDeg)
  fprintf('  G_yk %4g deg ', C.alphaDeg(i));
  fprintf('%9.3f', f.Gyk(i, :));
  fprintf('\n');
end

% Against the friction ellipse through the two peaks: 1 is on it, below 1 inside it.
use = sqrt((Fx / (mu_x * C.load)).^2 + (Fy / (mu_y * C.load)).^2);
fprintf('\n  Share of the friction ellipse used, sqrt((Fx/mu_x Fz)^2 + (Fy/mu_y Fz)^2):\n');
for i = 1:numel(C.alphaDeg)
  fprintf('  %12g deg ', C.alphaDeg(i));
  fprintf('%9.3f', use(i, :));
  fprintf('\n');
end

%% Against the app
for i = 1:numel(C.alphaDeg)
  for j = 1:numel(C.kappa)
    pd_compare(sprintf('F_x at %g deg, kappa %5.2f [N]', C.alphaDeg(i), C.kappa(j)), Fx(i, j), C.fx(i, j));
  end
end
for i = 1:numel(C.alphaDeg)
  for j = 1:numel(C.kappa)
    pd_compare(sprintf('F_y at %g deg, kappa %5.2f [N]', C.alphaDeg(i), C.kappa(j)), Fy(i, j), C.fy(i, j));
  end
end
for j = 1:numel(C.kappa)
  pd_compare(sprintf('F_x0 at kappa %5.2f [N]', C.kappa(j)), fx0(j), C.fx0(j));
end
for i = 1:numel(C.alphaDeg)
  pd_compare(sprintf('F_y0 at %g deg [N]', C.alphaDeg(i)), fy0(i), C.fy0(i));
end
pd_compare('mu_x, peak drive force / load [-]', mu_x, C.muX);
pd_compare('mu_y, peak side force / load [-]', mu_y, C.muY);
pd_compare();

Download: combined_slip.m · example_tyre.m · pd_mf.m · pd_peak.m · pd_compare.m. The scripts are MIT licensed.

Further reading

  • H. B. Pacejka, Tyre and Vehicle Dynamics, 3rd ed. (Butterworth-Heinemann, 2012), ch. 4.3.2, on the combined-slip weighting functions.
  • W. F. Milliken and D. L. Milliken, Race Car Vehicle Dynamics (SAE, 1995), ch. 2, on the friction circle.
ChapterCombined slip
PartTyres
Model as of0.338
Example carthe Formula Student single-car template