VE Lua Documentation

Press F to search!

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)