MATLAB

GGV ENVELOPE

Combined lateral-longitudinal acceleration envelopes with speed dependency. Angle-parameterised bisection with Pacejka MF5.2, load transfer, aero maps, and friction ellipse coupling.

Get Module — £29 Try Demo ↓
VEHICLE PARAMS
Mass268 kg
CoG Height0.28 m
CL4.3
Cd1.5

The GGV diagram maps the maximum achievable acceleration envelope (Ax, Ay) at each speed Vx. This module uses an angle-parameterised bisection approach:

θ ∈ [0, 2π] → ax = a·cos(θ), ay = a·sin(θ)(1)

At each angle θ, the magnitude a is bisected until the vehicle reaches the combined tyre friction limit via Pacejka MF 5.2:

F = D · sin(C · arctan(B·x − E·(B·x − arctan(B·x))))(2)

Load transfer from steady-state equilibrium:

ΔFz_lat = m · Ay · h_cg / track_width(3)
ΔFz_lon = m · Ax · h_cg / wheelbase(4)

Aerodynamic downforce grows with V² and shifts the friction limit upward at higher speeds — the defining feature of GGV vs. flat GG diagrams.

GG_sweep.m — Full sweep implementation
  ████████░░░░░██████████████████░░░░
    ██████████████████████░░░░░░░░██████
  ████████████░░░░██████████████████████░░░
  ██████░░░░██████████████████████░░░████
      ████████████████████████░░░░░░██████
  ██████████░░░██████████████████████░░████
    ████████████████████████░░░░░░░░░██████
  ████░░░░██████████████████████░░░██████
  ██████████████████░░░░██████████████████
    ██████████████████████░░░░░░░░██████████
Included with purchase
Setup Guide — Configuring your vehicle for GGV
  ████████░░░░░██████████████████░░░░
    ██████████████████████░░░░░░░░██████
  ████████████░░░░██████████████████████░░░
  ██████░░░░██████████████████████░░░████
      ████████████████████████░░░░░░██████
  ██████████░░░██████████████████████░░████
    ████████████████████████░░░░░░░░░██████
  ████░░░░██████████████████████░░░██████
  ██████████████████░░░░██████████████████
    ██████████████████████░░░░░░░░██████████
Included with purchase
Process walkthrough — Running for your team
  ████████░░░░░██████████████████░░░░
    ██████████████████████░░░░░░░░██████
  ████████████░░░░██████████████████████░░░
  ██████░░░░██████████████████████░░░████
      ████████████████████████░░░░░░██████
  ██████████░░░██████████████████████░░████
    ████████████████████████░░░░░░░░░██████
  ████░░░░██████████████████████░░░██████
  ██████████████████░░░░██████████████████
    ██████████████████████░░░░░░░░██████████
Included with purchase
REF Tremlett et al. (2014) · Milliken & Milliken, Ch. 8 · Limebeer, Massaro & Dollar (2024)
MATLABGG_sweep.m
LOCKED
function [ax_bnd, ay_bnd] = GG_sweep(Vx, veh, tyre, N_theta)
% Angle-parameterised GGV envelope generation
% Bisects acceleration magnitude at each angle theta
%
% Inputs:  Vx      - forward speed (m/s)
%          veh     - struct: m, a, b, h_cg, CL, Cd, Aref
%          tyre    - struct: Pacejka coefficients
%          N_theta - angular resolution (default 72)

if nargin < 4, N_theta = 72; end
theta = linspace(0, 2*pi, N_theta+1);
ax_bnd = zeros(size(theta));
ay_bnd = zeros(size(theta));

for i = 1:length(theta)
    dir_ax = cos(theta(i));
    dir_ay = sin(theta(i));
    a_lo = 0;  a_hi = 4.0;
    for k = 1:20
        a_mid = (a_lo + a_hi) / 2;
        ax = a_mid * dir_ax;
        ay = a_mid * dir_ay;
        [feasible] = check_tyre_limits(ax, ay, Vx, veh, tyre);
        if feasible, a_lo = a_mid;
        else,        a_hi = a_mid; end
    end
    ax_bnd(i) = a_lo * dir_ax;
    ay_bnd(i) = a_lo * dir_ay;
end

Full source code

Purchase to unlock code, docs & examples

Unlock — £29
GG_sweep.mMain envelope generator
MATLAB
check_tyre_limits.mFeasibility check with combined slip
MATLAB
pacejka_Fy.mMF5.2 lateral force
MATLAB
pacejka_Fx.mMF5.2 longitudinal force
MATLAB
load_transfer.mSteady-state lateral + longitudinal ΔFz
MATLAB
plot_ggv.m3D GGV surface visualisation
MATLAB
ggv_sweep.pyPython equivalent (standalone)
PYTHON
example_run.mWorked example with baseline params
MATLAB
1
Unzip & add to path
Extract and run addpath(genpath('T2T_GGV')). Requires MATLAB R2020a+ — no toolboxes needed.
2
Configure vehicle parameters
Edit VehParam.m with your mass, wheelbase, CoG height, aero coefficients, and track widths. SI units throughout.
3
Load your tyre data
Drop your .tir file into /tyres/. The loader auto-parses MF5.2 and MF6.1. Use the Tyre Fitting module first if you have raw TTC data.
4
Run
Execute example_run.m to generate a full GGV surface. Output: .mat file + publication-ready plots.
FS Student
£29 / team

Full source code, documentation, and email support. Unlimited use within your FS team.

Get Started
With Setup
£99 / team

Full source + 1hr setup call + priority support. Custom vehicle config and tyre fitting included.

Contact Us

No toolboxes required. All optimisation uses custom solvers — no Optimization Toolbox, no Curve Fitting Toolbox. Works on base MATLAB R2020a+ / Python 3.8+.