5#ifndef DEF_SpeedPidController_H
6#define DEF_SpeedPidController_H
36 const double MAX_POWER;
37 const double INTERVAL_S;
46 unsigned long callInterval_us,
47 double maxPower = 10000) noexcept
48 : constant{ kPro, kInt, kDif }
56 , INTERVAL_S(callInterval_us / 1000000.0)
64 void update(
double controlValue,
double targetValue)
noexcept
67 const auto coefficient = requestConstant ? *requestConstant : constant;
68 requestConstant.reset();
71 const double error = targetValue - controlValue;
74 power.p = (error - lastError) / INTERVAL_S * coefficient.p;
77 power.i = error * coefficient.i;
80 power.d = (power.p - lastPowerPro) / INTERVAL_S;
83 rowPassDif += (power.d - rowPassDif) / 8 * coefficient.d;
85 const double deltaPower = power.p + power.i + rowPassDif;
90 lastPowerPro = power.p;
105 double getPower(
double min,
double max)
const noexcept
123 double operator()(
double controlValue,
double targetValue)
noexcept
125 update(controlValue, targetValue);
135 double operator()(
double controlValue,
double targetValue,
double min,
138 update(controlValue, targetValue);
149 return operator()(controlValue, targetValue, range.min, range.max);
168 requestConstant->p = value;
172 requestConstant =
Parameter{ value, constant.i, constant.d };
182 requestConstant->i = value;
186 requestConstant =
Parameter{ constant.p, value, constant.d };
196 requestConstant->d = value;
200 requestConstant =
Parameter{ constant.p, constant.i, value };
208 requestConstant = value;
オプショナル型
Definition Optional.hpp:62
double getPowerInt() const noexcept
積分量の取得
Definition SpeedPid.hpp:249
void requestParamDif(double value) noexcept
一周期のみ適用する微分係数の設定
Definition SpeedPid.hpp:192
double getPowerDif() const noexcept
微分量の取得
Definition SpeedPid.hpp:253
void requestParam(const Parameter &value) noexcept
一周期のみ適用する係数の設定
Definition SpeedPid.hpp:206
void clearPower() noexcept
操作量のクリア
Definition SpeedPid.hpp:154
SpeedPidController(double kPro, double kInt, double kDif, unsigned long callInterval_us, double maxPower=10000) noexcept
コンストラクタ
Definition SpeedPid.hpp:45
const Parameter & getParam() const noexcept
係数の取得
Definition SpeedPid.hpp:241
double getParamPro() const noexcept
比例係数の取得
Definition SpeedPid.hpp:229
double operator()(double controlValue, double targetValue) noexcept
更新、操作量の取得
Definition SpeedPid.hpp:123
double getPower(const Udon::Range< double > &range) const noexcept
操作量の取得
Definition SpeedPid.hpp:114
void setParamPro(double value) noexcept
比例係数の設定
Definition SpeedPid.hpp:213
void requestParamInt(double value) noexcept
一周期のみ適用する積分係数の設定
Definition SpeedPid.hpp:178
double getPowerPro() const noexcept
比例量の取得
Definition SpeedPid.hpp:245
double getParamInt() const noexcept
積分係数の取得
Definition SpeedPid.hpp:233
double operator()(double controlValue, double targetValue, double min, double max) noexcept
更新、操作量の取得
Definition SpeedPid.hpp:135
double getPower() const noexcept
操作量の取得
Definition SpeedPid.hpp:96
double operator()(double controlValue, double targetValue, const Udon::Range< double > &range) noexcept
更新、操作量の取得
Definition SpeedPid.hpp:147
void update(double controlValue, double targetValue) noexcept
データ更新
Definition SpeedPid.hpp:64
void setParam(const Parameter &value) noexcept
係数の設定
Definition SpeedPid.hpp:225
void requestParamPro(double value) noexcept
一周期のみ適用する比例係数の設定
Definition SpeedPid.hpp:164
double getPower(double min, double max) const noexcept
操作量の取得
Definition SpeedPid.hpp:105
void setParamInt(double value) noexcept
積分係数の設定
Definition SpeedPid.hpp:217
void setParamDif(double value) noexcept
微分係数の設定
Definition SpeedPid.hpp:221
double getParamDif() const noexcept
微分係数の取得
Definition SpeedPid.hpp:237
constexpr A Constrain(const A &amt, const B &low, const C &high)
値を指定された範囲内に収める (std::clamp)
Definition Math.hpp:69
範囲を表す型
Definition Range.hpp:8
Definition SpeedPid.hpp:19
double d
Definition SpeedPid.hpp:22
double p
Definition SpeedPid.hpp:20
double i
Definition SpeedPid.hpp:21