void setCtrlState(SASList ID, double error, double rate, ref float axisCtrlState) { PIDmode mode = PIDmode.PID; if (!vesModule.vesselRef.checkLanded() && vesModule.vesselRef.IsControllable) { mode = PIDmode.PD; // no integral when it can't do anything useful } if (allowControl(ID)) { axisCtrlState = ID.GetSAS(this).ResponseF(error, rate, mode); } else if (!Utils.hasInput(ID)) { axisCtrlState = 0; // kill off stock SAS inputs } // nothing happens if player input is present }
public virtual double ResponseD(double error, double rate, PIDmode mode) { if (invertInput) { error *= -1; rate *= -1; } double res_d = 0, res_i = 0, res_p = 0; res_d = derivativeError(rate); if (mode == PIDmode.PID) res_i = integralError(error, true); if (mode == PIDmode.PD || mode == PIDmode.PID) res_p = proportionalError(error); lastOutput = (invertOutput ? -1 : 1) * Utils.Clamp(res_p + res_i + res_d, OutMin, OutMax); return lastOutput; }
public virtual double ResponseD(double error, double rate, PIDmode mode) { if (invertInput) { error *= -1; rate *= -1; } double res_d = 0, res_i = 0, res_p = 0; res_d = derivativeError(rate); if (mode == PIDmode.PID) { res_i = integralError(error, true); } if (mode == PIDmode.PD || mode == PIDmode.PID) { res_p = proportionalError(error); } lastOutput = (invertOutput ? -1 : 1) * Utils.Clamp(res_p + res_i + res_d, OutMin, OutMax); return(lastOutput); }
public virtual float ResponseF(double error, double rate, PIDmode mode) { return((float)ResponseD(error, rate, mode)); }
public virtual float ResponseF(double error, double rate, PIDmode mode) { return (float)ResponseD(error, rate, mode); }