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/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/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)
@/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/actuators/activeDiffLock.lua
lockingPID = newPIDParallel(controlParameters.lockingPIDkP, controlParameters.lockingPIDkI, controlParameters.lockingPIDkD, 0, 1)
@/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/electronicSplitShaftLock.lua
clutchRatioPID = newPIDParallel(controlParameters.clutchPIDkP, controlParameters.clutchPIDkI, controlParameters.clutchPIDkD, 0, 1, nil, nil, 0)
@/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/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/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/activeCenterDiffLock.lua
lockCoefPID = newPIDParallel(controlParameters.clutchPIDkP, controlParameters.clutchPIDkI, controlParameters.clutchPIDkD, 0, 1, nil, nil, 0)
@/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/common/controlSystems.lua
--Usage:
--local myPID = newPIDParallel(1, 0.5, 0.1, 0, 1)
--local control = myPID:get(processVariable, setPoint, dt)
@/lua/vehicle/controller/drivingDynamics/actuators/activeDiffBias.lua
biasPID = newPIDParallel(controlParameters.brakingPIDkP, controlParameters.brakingPIDkI, controlParameters.brakingPIDkD, -1, 1, 1000, 100)