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
- 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.
// 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
|