Initial Commit
This commit is contained in:
commit
ee5c2f922d
2255 changed files with 547750 additions and 0 deletions
87
Assets/Scripts/Util/PIDFloat.cs
Normal file
87
Assets/Scripts/Util/PIDFloat.cs
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Trive.Core
|
||||
{
|
||||
[Serializable]
|
||||
public struct PIDFloat
|
||||
{
|
||||
public float pFactor, iFactor, dFactor;
|
||||
private float integral;
|
||||
private float lastError;
|
||||
|
||||
public PIDFloat(Vector3 factors)
|
||||
{
|
||||
pFactor = factors.x;
|
||||
iFactor = factors.y;
|
||||
dFactor = factors.z;
|
||||
integral = 0;
|
||||
lastError = 0;
|
||||
}
|
||||
|
||||
public PIDFloat(float pFactor, float iFactor, float dFactor)
|
||||
{
|
||||
this.pFactor = pFactor;
|
||||
this.iFactor = iFactor;
|
||||
this.dFactor = dFactor;
|
||||
integral = 0;
|
||||
lastError = 0;
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
integral = 0;
|
||||
lastError = 0;
|
||||
}
|
||||
|
||||
public void SetFactors(float pFactor, float iFactor, float dFactor)
|
||||
{
|
||||
this.pFactor = pFactor;
|
||||
this.iFactor = iFactor;
|
||||
this.dFactor = dFactor;
|
||||
}
|
||||
|
||||
public void SetFactors(Vector3 factors)
|
||||
{
|
||||
SetFactors(factors.x, factors.y, factors.y);
|
||||
}
|
||||
|
||||
public PIDFloat Update(float setpoint, float actual, float timeFrame, out float val)
|
||||
{
|
||||
var present = setpoint - actual;
|
||||
var newIntegral = integral + present * timeFrame;
|
||||
var deriv = (present - lastError) / timeFrame;
|
||||
val = present * pFactor + newIntegral * iFactor + deriv * dFactor;
|
||||
return new PIDFloat(pFactor, iFactor, dFactor) { lastError = present, integral = newIntegral };
|
||||
}
|
||||
|
||||
public float Update(float setpoint, float actual, float timeFrame)
|
||||
{
|
||||
return Update(setpoint, actual, timeFrame, ref lastError, ref integral);
|
||||
}
|
||||
|
||||
public float Update(float setpoint, float actual, float timeFrame, ref float lastError, ref float integral)
|
||||
{
|
||||
var present = setpoint - actual;
|
||||
integral += present * timeFrame;
|
||||
var deriv = (present - lastError) / timeFrame;
|
||||
var val = present * pFactor + integral * iFactor + deriv * dFactor;
|
||||
lastError = present;
|
||||
return val;
|
||||
}
|
||||
|
||||
public float UpdateAngle(float setpoint, float actual, float timeFrame)
|
||||
{
|
||||
return UpdateAngle(setpoint, actual, timeFrame, ref integral, ref lastError);
|
||||
}
|
||||
|
||||
public float UpdateAngle(float setpoint, float actual, float timeFrame, ref float integral, ref float lastError)
|
||||
{
|
||||
var present = Mathf.DeltaAngle(actual, setpoint);
|
||||
integral += present * timeFrame;
|
||||
var deriv = Mathf.DeltaAngle(lastError, present) / timeFrame;
|
||||
lastError = present;
|
||||
return present * pFactor + integral * iFactor + deriv * dFactor;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue