updateWheelVelocities
Definition
-- @/lua/vehicle/wheels.lua:559
local function updateWheelVelocities(dt)
updateVirtualAirspeedMethod(dt)
local airspeed = absBehavior == "arcade" and electrics.values.airspeed or virtualAirspeed
--local airspeed = controller.getController("CMU").virtualSensors.virtual.speed or 0
local invAirspeed = 1 / (airspeed + 1e-30)
local airspeedCutOffSpeed = 5
local airspeedCutOff = airspeed > airspeedCutOffSpeed
local parkingbrakeInput = input.parkingbrake or 0
absActive = false
brakeABSCoefLimitCache.left = 0
brakeABSCoefLimitCache.right = 0
local avgAV = 0
local avgWheelSpeed = 0
local wheels = M.wheels
for i = 0, initialWheelCountDec do
local wd = wheels[i]
if not wd.isBroken then
local brake = electrics.values[wd.brakeElectricsName] or 0
wd.lastAngularVelocity = wd.angularVelocity
wd.lastAngularVelocityBrakeCouple = wd.angularVelocityBrakeCouple
local wav = wd.coreData
local wheelAV = wav.angularVelocity
wd.angularVelocity = wheelAV
wd.angularVelocityBrakeCouple = wav.angularVelocityBrakeCouple
local wheelAVdir = wheelAV * wd.wheelDir
local wheelSpeed = wheelAVdir * wd.dynamicRadius
local isSpeedo = wd.isSpeedo
avgAV = avgAV + wheelAVdir * isSpeedo
avgWheelSpeed = avgWheelSpeed + wheelSpeed * isSpeedo
wd.wheelSpeed = wheelSpeed
-- composite brake (normal + parking)
wd.desiredMainBrakingTorque = wd:updateBrake(brake * wd.defaultBrakeInputUsageCoef, invAirspeed, airspeed, airspeedCutOff, dt)
wd.desiredBrakingTorque = max(wd.desiredMainBrakingTorque, wd.parkingTorque * parkingbrakeInput * wd.defaultBrakeInputUsageCoef)
end
end
local rotators = M.rotators
for i = 0, initialRotatorCountDec do
local wd = rotators[i]
if not wd.isBroken then
local brake = electrics.values[wd.brakeElectricsName] or 0
local wav = wd.coreData
wd.lastAngularVelocity = wd.angularVelocity
wd.lastAngularVelocityBrakeCouple = wd.angularVelocityBrakeCouple
local wheelAV = wav.angularVelocity
wd.angularVelocity = wheelAV
wd.angularVelocityBrakeCouple = wav.angularVelocityBrakeCouple
local wheelAVdir = wheelAV * wd.wheelDir
local wheelSpeed = wheelAVdir * wd.radius
local isSpeedo = wd.isSpeedo
avgAV = avgAV + wheelAVdir * isSpeedo
avgWheelSpeed = avgWheelSpeed + wheelSpeed * isSpeedo
wd.wheelSpeed = wheelSpeed
-- composite brake (normal + parking)
wd.desiredMainBrakingTorque = wd:updateBrake(brake * wd.defaultBrakeInputUsageCoef, invAirspeed, airspeed, airspeedCutOff, dt)
wd.desiredBrakingTorque = max(wd.desiredMainBrakingTorque, wd.parkingTorque * parkingbrakeInput * wd.defaultBrakeInputUsageCoef)
end
end
local evals = electrics.values
avgAV = avgAV * invSpeedoWheelCount
avgAV = isnaninf(avgAV) and 0 or avgAV
evals.avgWheelAV = avgAV
avgWheelSpeed = abs(avgWheelSpeed) * invSpeedoWheelCount
avgWheelSpeed = isnaninf(avgWheelSpeed) and 0 or avgWheelSpeed
evals.wheelspeed = avgWheelSpeed
brakeABSCoefLimits.left = brakeABSCoefLimitCache.left
brakeABSCoefLimits.right = brakeABSCoefLimitCache.right
end
Callers
@/lua/vehicle/main.lua
function onPhysicsStep(dtPhys)
wheels.updateWheelVelocities(dtPhys)
powertrain.update(dtPhys)