30 typename IntermediateType,
33 typename MainError = MainType,
34 typename IntermediateError = IntermediateType
56 mainPid_{
config.mainPidConfig},
57 intermediatePid_{
config.intermediatePidConfig},
58 mainModder_(std::move(mainModder)),
59 intermediateModder_(std::move(intermediateModder))
71 OutputType
runController(
const MainType& mainCurrent,
const IntermediateType& intermediateCurrent)
73 const TimeType kDeltaTime{
static_cast<TimeType
>(runControllerTimer_.
getDurationAndReset())};
74 return runController(mainCurrent, intermediateCurrent, kDeltaTime);
82 const MainType& mainCurrent,
83 const IntermediateType& intermediateCurrent,
84 const TimeType& deltaTime
87 const MainType kMainError{
88 MainError{mainTarget_}
89 - MainError{mainCurrent}
92 const IntermediateType kIntermediateTarget{
99 const IntermediateType kModdedIntermediateTarget{mainModder_->getModdedOutput(kIntermediateTarget)};
101 const IntermediateType kIntermediateError{
102 IntermediateError{kModdedIntermediateTarget}
103 - IntermediateError{intermediateCurrent}
106 const OutputType kOutput{
113 const OutputType kModdedOutput{intermediateModder_->getModdedOutput(kOutput)};
115 return kModdedOutput;
120 mainTarget_ = mainTarget;
126 std::unique_ptr<MainModder> mainModder_;
127 std::unique_ptr<IntermediateModder> intermediateModder_;
129 MainType mainTarget_{};
Definition simple_timer.hpp:12
Microseconds getDurationAndReset()
Definition simple_timer.cpp:20
Definition dual_modded_pid.hpp:37
ModdedPid< IntermediateType, OutputType, TimeType > IntermediatePid
Definition dual_modded_pid.hpp:40
void setTarget(const MainType &mainTarget)
Definition dual_modded_pid.hpp:118
OutputType runController(const MainType &mainCurrent, const IntermediateType &intermediateCurrent)
Definition dual_modded_pid.hpp:71
DualModdedPid(const Config &config, std::unique_ptr< MainModder > mainModder=std::make_unique< NullPidModder< IntermediateType > >(), std::unique_ptr< IntermediateModder > intermediateModder=std::make_unique< NullPidModder< OutputType > >())
Definition dual_modded_pid.hpp:50
ModdedPid< MainType, IntermediateType, TimeType > MainPid
Definition dual_modded_pid.hpp:39
OutputType runController(const MainType &mainCurrent, const IntermediateType &intermediateCurrent, const TimeType &deltaTime)
Definition dual_modded_pid.hpp:81
Definition ipid_modder.hpp:14
ControlType runController(ErrorType error)
Definition modded_pid.hpp:32
Definition ipid_modder.hpp:28
Definition pwm_info.hpp:4
Definition dimensional_smooth_pid.hpp:10
Definition smooth_pid.hpp:36
Definition dual_modded_pid.hpp:45
IntermediatePid::Config intermediatePidConfig
Definition dual_modded_pid.hpp:47
MainPid::Config mainPidConfig
Definition dual_modded_pid.hpp:46