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: v*v/R - vehicles lack perfect grip for generating lateral acceleration to follow ideal curves
- side slip rate is the difference between
AccelerationSway
and v*ω - 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?
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
- Automobilista 2 - Rangey Under_Over Steer Front & Rear Slip with Brake surge 04-05-25
- IRacing - Rangey Over & Under Steer & Slip 12-08-24.
RangeyRover’s JavaScript: ``` //Dont waste processing time if in pits or in pit lane or is less than 5kph$prop(‘SpeedKmh’) //if ($prop(‘IsInPit’)==1 || $prop(‘IsInPitLane’)==1 || $prop(‘SpeedKmh’)<=5){return 0;} var degreeRad = Math.PI/180; // 360 degrees to radians, which is 2π radians
// 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 bySpeedKmh
- 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 matchAccelerationSway
- but acceleration plot does not zero when velocity plot has zero slope:
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