newPIDParallel
Definition
-- @/lua/common/controlSystems.lua:18
--Usage:
--local myPID = newPIDParallel(1, 0.5, 0.1, 0, 1)
--local control = myPID:get(processVariable, setPoint, dt)
--This PID uses derivative calculation based on the process variable rather than the error to avoid spikes when changing the setpoint
function newPIDParallel(kP, kI, kD, minOutput, maxOutput, integralInCoef, integralOutCoef, minIntegral, maxIntegral, errorDeadzone)
local data = {
kP = kP,
kI = kI,
kD = kD,
error = 0,
integral = 0,
output = 0,
integralInCoef = integralInCoef or 1,
integralOutCoef = integralOutCoef or 1,
lastProcessVariable = 0,
minOutput = minOutput or -math.huge,
maxOutput = maxOutput or math.huge,
errorDeadzone = errorDeadzone or 0.0,
get = PIDParallel.getMethod
}
data.maxIntegral = maxIntegral or data.maxOutput / kI
data.minIntegral = minIntegral or -data.maxIntegral
setmetatable(data, PIDParallel)
return data
end
Callers
@/lua/vehicle/controller/hydraulics/closedLoopLinearControl.lua
local function init(jbeamData)
cylinderPID = newPIDParallel(jbeamData.cylinderPIDKp or 0.5, jbeamData.cylinderPIDKi or 0.3, jbeamData.cylinderPIDKd or 0.01, -1, 1, 1000, 10, nil, nil, 0.01)
cylinderPID:setDebug(true)
@/lua/vehicle/controller/drivingDynamics/actuators/electronicDiffLock.lua
brakingPID = newPIDParallel(controlParameters.brakingPIDkP, controlParameters.brakingPIDkI, controlParameters.brakingPIDkD, -1, 1)
@/lua/vehicle/controller/powertrainControl/antiLag.lua
turboAVPIDController = newPIDParallel(0.01, 0, 0, 0, 1, -10, 10)
@/lua/vehicle/controller/drivingDynamics/actuators/electronicSplitShaftLock.lua
clutchRatioPID = newPIDParallel(controlParameters.clutchPIDkP, controlParameters.clutchPIDkI, controlParameters.clutchPIDkD, 0, 1, nil, nil, 0)
@/lua/vehicle/controller/vehicleController/vehicleController.lua
topSpeedLimitReverse = jbeamData.topSpeedLimitReverse or -1
topSpeedLimitPID = newPIDParallel(0.2, 1, 0, 0, 1, 50, 20, 0, 1)
--topSpeedLimitPID:setDebug(true)
@/lua/vehicle/controller/playerController.lua
local stabilizationPIDs = {
frontRear = newPIDParallel(2, 0.1, 0.3, -1, 1, 100, 50, -1, 1),
leftRight = newPIDParallel(2, 0.1, 0.3, -1, 1, 100, 50, -1, 1),
frontRear = newPIDParallel(2, 0.1, 0.3, -1, 1, 100, 50, -1, 1),
leftRight = newPIDParallel(2, 0.1, 0.3, -1, 1, 100, 50, -1, 1),
yawPosition = newPIDParallel(2, 0.0, 0.5, -1, 1)
leftRight = newPIDParallel(2, 0.1, 0.3, -1, 1, 100, 50, -1, 1),
yawPosition = newPIDParallel(2, 0.0, 0.5, -1, 1)
}
@/lua/vehicle/controller/drivingDynamics/actuators/activeDiffBias.lua
biasPID = newPIDParallel(controlParameters.brakingPIDkP, controlParameters.brakingPIDkI, controlParameters.brakingPIDkD, -1, 1, 1000, 100)
@/lua/vehicle/controller/drivingDynamics/supervisors/components/brakeControl.lua
end
wheelControlData[wheelData.wheel.name].tractionControlBrakingPID = newPIDParallel(kP, kI, kD, 0, 1, integralInCoef, integralOutCoef, 0)
wheelControlData[wheelData.wheel.name].brakeFactorTractionControl = 0
yawControlAVBrakingPID = newPIDParallel(avSettings.kP, avSettings.kI, avSettings.kD, 0, 1, avSettings.integralInCoef, avSettings.integralOutCoef, 0)
yawControlSlipAngleBrakingPID = newPIDParallel(slipAngleSettings.kP, slipAngleSettings.kI, slipAngleSettings.kD, 0, 1, slipAngleSettings.integralInCoef, slipAngleSettings.integralOutCoef, 0)
yawControlAVBrakingPID = newPIDParallel(avSettings.kP, avSettings.kI, avSettings.kD, 0, 1, avSettings.integralInCoef, avSettings.integralOutCoef, 0)
yawControlSlipAngleBrakingPID = newPIDParallel(slipAngleSettings.kP, slipAngleSettings.kI, slipAngleSettings.kD, 0, 1, slipAngleSettings.integralInCoef, slipAngleSettings.integralOutCoef, 0)
slipThreshold = slipThreshold,
absBrakingPID = newPIDParallel(kP, kI, kD, 0, 1, integralInCoef, integralOutCoef, 0),
absCoef = 1,
@/lua/vehicle/controller/drivingDynamics/supervisors/components/motorTorqueControl.lua
wheelGroupControlData[groupSetting.motorName] = {
tractionControlPID = newPIDParallel(kP, kI, kD, 0, 1, integralInCoef, integralOutCoef, 0),
slipThreshold = slipThreshold,
yawControlAVPID = newPIDParallel(avSettings.kP, avSettings.kI, avSettings.kD, 0, 1, avSettings.integralInCoef, avSettings.integralOutCoef, 0)
yawControlSlipAnglePID = newPIDParallel(slipAngleSettings.kP, slipAngleSettings.kI, slipAngleSettings.kD, 0, 1, slipAngleSettings.integralInCoef, slipAngleSettings.integralOutCoef, 0)
yawControlAVPID = newPIDParallel(avSettings.kP, avSettings.kI, avSettings.kD, 0, 1, avSettings.integralInCoef, avSettings.integralOutCoef, 0)
yawControlSlipAnglePID = newPIDParallel(slipAngleSettings.kP, slipAngleSettings.kI, slipAngleSettings.kD, 0, 1, slipAngleSettings.integralInCoef, slipAngleSettings.integralOutCoef, 0)
@/lua/vehicle/controller/drivingDynamics/actuators/activeDiffLock.lua
lockingPID = newPIDParallel(controlParameters.lockingPIDkP, controlParameters.lockingPIDkI, controlParameters.lockingPIDkD, 0, 1)
@/lua/common/controlSystems.lua
--Usage:
--local myPID = newPIDParallel(1, 0.5, 0.1, 0, 1)
--local control = myPID:get(processVariable, setPoint, dt)
@/lua/vehicle/controller/powertrainControl/combustionEngineGovenor.lua
engineRPMPID = newPIDParallel(jbeamData.rpmPIDp or 0.5, jbeamData.rpmPIDi or 0.1, jbeamData.rpmPIDd or 0.05, -1, 1, 1, 1, -10, 10)
@/lua/vehicle/controller/drivingDynamics/actuators/activeCenterDiffLock.lua
lockCoefPID = newPIDParallel(controlParameters.clutchPIDkP, controlParameters.clutchPIDkI, controlParameters.clutchPIDkD, 0, 1, nil, nil, 0)
@/lua/vehicle/controller/hydraulics/orbitrolSteering.lua
local function init(jbeamData)
steeringPID = newPIDParallel(jbeamData.steeringPIDKp or 0.5, jbeamData.steeringPIDKi or 0.3, jbeamData.steeringPIDKd or 0.01, -1, 1, 1000, 1000, -1, 1, 0.002)
--steeringPID:setDebug(true)