back

Oversteer

Whatever it is, let us agree that understeer is its opposite.
Wikipedia: "Understeer Angle is the amount of additional steering (at road wheels)
that must be added in any given steady-state maneuver beyond the Ackermann steer angle"


by Wikipedia definition, B and D would represent understeer

tangential speed v vs yaw velocity

  • straight line speed is tangential speed with infinite radius and zero yaw velocity
  • yaw velocity ω (SimHub OrientationYawVelocity) is already vehicle center of gravity angular velocity;
    v = ω*R
  • SimHub AccelerationSway is lateral acceleration required to follow a curve of some radius R:
    AccelerationSway = v*v/R
  • vehicles lack perfect grip for generating lateral acceleration to follow ideal curves
  • side slip angle rate, AccelerationSway - v*ω, is arguably most important.
  • lateral velocity is time integral of side slip rate
  • center of gravity (body) slip angle is ratio of lateral velocity / tangential speed
  • rear wheel slip angles sum vehicle yaws relative to trajectories and body slip angles
  • front wheel slip angles sum steering angles, vehicle yaws relative to trajectories, and center of gravity slip angles

lateral velocity wants numerical integration; simplifying approximations?

Don't bother approximating integration;  side slip angle rate is already useful...

Front tire slip ~ (steering angle + yaw velocity) - (side slip rate / tangential speed))
Rear tire Slip ~ yaw velocity - (side slip rate / tangential speed)

  • alternative (1) for oversteer: more slip at rear tires than front
  • alternative (2): vehicle yaw relative to vehicle direction (B, C, D, E)
  • alternative (3): vehicle side slip rate with steering changes

Assetto Corsa wheel slip telemetry for alternative (1):

DataCorePlugin.GameRawData.Physics.WheelSlip04 + DataCorePlugin.GameRawData.Physics.WheelSlip03 - (DataCorePlugin.GameRawData.Physics.WheelSlip02 + DataCorePlugin.GameRawData.Physics.WheelSlip01)
At least one issue: locked brakes in a straight line presents as massive over- or understeer,
    depending on which end locks up first/most.

SimHub telemetry for alternative (3):

AccelerationSway - rescale * OrientationYawVelocity
where rescale zeroes average differences for small AccelerationSway values.

@rangerover estimates Wikipedia’s oversteer

// Angular velocities in radians per second

var angle1 = $prop(‘GameRawData.mAngularVelocity01’); // [ UNITS = Radians per-second ] (roll rate)
var angle2 = $prop(‘GameRawData.mAngularVelocity02’); // [ UNITS = Radians per-second ] (yaw rate)
var angle3 = $prop(‘GameRawData.mAngularVelocity03’); // [ UNITS = Radians per-second ] (pitch rate)

// Normalized steering input
var steeringInput = $prop(‘GameRawData.mSteering’); // [ RANGE = -1.0f->1.0f ]
var steeringAngleDeg = steeringInput * 24; //Typical steering angle 24 degrees, match to what is set in game

// Convert normalized steering input to actual steering angle in radians
var steeringAngleRad = steeringAngleDeg * degreeRad;

// Local velocities in metres per second

var local1 = $prop(‘GameRawData.mLocalVelocity01’); // [ UNITS = Metres per-second ] (Lateral velocity)
var local2 = $prop(‘GameRawData.mLocalVelocity02’); // [ UNITS = Metres per-second ] (Vertical velocity, not used in slip angle calculations)
var local3 = $prop(‘GameRawData.mLocalVelocity03’); // [ UNITS = Metres per-second ] (Longitudinal velocity)

// Assumed distances to front and rear axles in meters not available in game

var L_f = 1.2; // Distance to front axle [ UNITS = Metres ]
var L_r = 1.6; // Distance to rear axle [ UNITS = Metres ]

// Extract yaw rate, lateral and longitudinal velocities

var yaw_rate = angle2; // Yaw rate in rad/s
var v_y = local1; // Lateral velocity in m/s
var v_x = local3; // Longitudinal velocity in m/s

// Calculate front slip angle in radians from simplified equation
var alpha_f = steeringAngleRad - Math.atan((v_y + L_f * yaw_rate) / v_x);

// Calculate rear slip angle in radians from simplified equation
var alpha_r = -Math.atan((v_y - L_r * yaw_rate) / v_x);

// Convert slip angles from radians to degrees

var alpha_f_deg = alpha_f * (180 / Math.PI);
var alpha_r_deg = alpha_r * (180 / Math.PI);

//Output Oversteer in degrees

var over =  Math.abs(alpha_r_deg) - Math.abs(alpha_f_deg); // Oversteer
if(over <= 0) {
  over = 0;
}
var pit = $prop(‘IsInPit’);
var game =  NewRawData().mGameState;
if(pit !=1 && game!=4 ){
  return Math.abs(over) * 10;
}
return 0

Plugin derivative of RangeRover slip angle calculator
  • ignores center of gravity
  • arctan only of 1000 * (game-independent) AccelerationSway divided by SpeedKmh
    • steering and yaw are already angles

SimHub AccelerationSway

  • By observation, does not change sign while steering stays one side of center
  • some games have local velocity X and local acceleration X properties…
    • but acceleration plot does not zero when velocity plot has zero slope:

          local acceleration plots match AccelerationSway

slip angle properties - mostly from Load.cs SlipAngle()

  • YawRate: OrientationYawVelocity radians per second
  • LPdiff: LPyaw - View.Model.SlipGain * LPsway
  • RangeRover: slip angle including steering
  • SlipAngle: *slip angle without steering ayaw - View.Model.SlipGain * asway
  • SwayAcc: AccelerationSway really, lateral velocity
  • Steering: game0dependent steering wheel telemetry converted to radians
  • SwayRate: Math.Atan(1000 * SwayAcc / SpeedKmh)
  • Vsway: game-dependent lateral velocity
  • YawRate: OrientationYawVelocity vehicle angle relative to trajectory
maintained by blekenbleu