12#ifndef WSFSIXDOFPID_HPP
13#define WSFSIXDOFPID_HPP
15#include "wsf_six_dof_export.h"
21#include "UtOptional.hpp"
41class WSF_SIX_DOF_EXPORT
PID
123 void ProcessPidGainTableBlock(UtInputBlock& aInputBlock,
125 bool& aValidControllingValue,
129 bool& aValidMaxAccum,
130 bool& aValidMaxErrorZero,
131 bool& aValidMinErrorZero,
132 bool& aValidLowpassAlpha,
133 bool& aValidKtAntiWindup);
135 double GetOutputWithLimits(
double aSimTime_sec,
double aMinOutput,
double aMaxOutput,
bool aUseLimits);
137 void CalcPidGainsData(std::vector<PidGainData>& aTables,
138 double aControllingValue,
142 double& aLowpassAlpha,
144 double& aMaxErrorZero,
145 double& aMinErrorZero,
146 double& aKtAntiWindup);
148 float TruncatePidGain(
float aGain);
150 static void CopyPidGainsData(std::vector<PidGainData>& aTargetTables,
const std::vector<PidGainData>& aSourceTables);
152 double mLastSimTime_sec = 0.0;
153 ut::optional<double> mUpdateInterval_sec;
155 double mSetPoint = 0.0;
156 double mCurrentValue = 0.0;
157 double mCurrentError = 0.0;
158 double mCurrentDerivative = 0.0;
160 double mLastValue = 0.0;
161 double mLastError = 0.0;
162 double mLastDerivative = 0.0;
164 double mErrorAccum = 0.0;
165 double mPrelimitedOutput = 0.0;
166 double mOutput = 0.0;
168 double mKpOutputContrib = 0.0;
169 double mKiOutputContrib = 0.0;
170 double mKdOutputContrib = 0.0;
175 std::vector<PidGainData> mGainTables;
177 bool mProportionalBiasActive =
false;
178 double mProportionalBiasValue = 0.0;
184 double mControllingValue = 0.0;
std::vector< PidGainData > * GetPidGainTableData()
Definition WsfSixDOF_PID.cpp:624
double CalcOutputFromTargetWithLimits(double aSetPoint, double aCurValue, double aSimTime_sec, double aMinOutput, double aMaxOutput)
Definition WsfSixDOF_PID.cpp:392
void SetControllingValue(double aControllingValue)
Definition WsfSixDOF_PID.cpp:675
bool GetFeedForward(double &aFeedForward)
Definition WsfSixDOF_PID.cpp:664
void SetFeedForward(double aFeedForward)
Definition WsfSixDOF_PID.cpp:658
void SetCurrentValue(double aCurrentValue)
Definition WsfSixDOF_PID.cpp:581
void ResetPidTiming()
Definition WsfSixDOF_PID.cpp:702
void GetPidValueData(SinglePidValueData &aData) const
Definition WsfSixDOF_PID.cpp:638
double CalcOutputFromTarget(double aSetPoint, double aCurValue, double aSimTime_sec)
Definition WsfSixDOF_PID.cpp:418
void SetTargetValue(double aTargetValue)
Definition WsfSixDOF_PID.cpp:586
void ResetPidState()
Definition WsfSixDOF_PID.cpp:680
bool TrySetUpdateInterval_sec(double aInterval_sec)
Definition WsfSixDOF_PID.cpp:596
double GetUpdateInterval_sec()
Definition WsfSixDOF_PID.cpp:591
PID(const PID &aSrc)=default
void AddElementsToGainTable(size_t aTotalElementsInTable)
Definition WsfSixDOF_PID.cpp:607
double CalcOutputFromErrorWithLimits(double aError, double aCurValue, double aSimTime_sec, double aMinOutput, double aMaxOutput)
Definition WsfSixDOF_PID.cpp:405
void SetBias(double aBias)
Definition WsfSixDOF_PID.cpp:652
double CalcOutputFromError(double aError, double aCurValue, double aSimTime_sec)
Definition WsfSixDOF_PID.cpp:427
void SetPidGainTableData(const std::vector< PidGainData > &aDataTables)
Definition WsfSixDOF_PID.cpp:629
PID * Clone() const
Definition WsfSixDOF_PID.cpp:20
void ProcessInput(UtInputBlock &aInputBlock)
Definition WsfSixDOF_PID.cpp:25
PID & operator=(const PID &other)=delete
Definition WsfSA_Processor.hpp:35
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32
Definition WsfSixDOF_VehicleData.hpp:80
Definition WsfSixDOF_VehicleData.hpp:96