43 maxIntegral(o.maxIntegral),
44 conditionalIntegralErrorTreshold(o.conditionalIntegralErrorTreshold),
45 derivative(o.derivative),
46 previousError(o.previousError),
47 processValue(o.processValue),
49 lastUpdateTime(o.lastUpdateTime),
50 controlValue(o.controlValue),
51 controlValueDerivation(o.controlValueDerivation),
52 maxControlValue(o.maxControlValue),
53 maxDerivation(o.maxDerivation),
55 limitless(o.limitless),
56 threadSafe(o.threadSafe),
57 differentialFilter(
std::move(o.differentialFilter)),
58 pdOutputFilter(
std::move(o.pdOutputFilter))
67 maxIntegral(o.maxIntegral),
68 conditionalIntegralErrorTreshold(o.conditionalIntegralErrorTreshold),
69 derivative(o.derivative),
70 previousError(o.previousError),
71 processValue(o.processValue),
73 lastUpdateTime(o.lastUpdateTime),
74 controlValue(o.controlValue),
75 controlValueDerivation(o.controlValueDerivation),
76 maxControlValue(o.maxControlValue),
77 maxDerivation(o.maxDerivation),
79 limitless(o.limitless),
80 threadSafe(o.threadSafe),
81 differentialFilter(o.differentialFilter->clone()),
82 pdOutputFilter(o.pdOutputFilter->clone())
141 double maxControlValue,
142 double maxDerivation,
154 controlValueDerivation(0),
155 maxControlValue(maxControlValue),
156 maxDerivation(maxDerivation),
157 limitless(limitless),
158 threadSafe(threadSafe)
166 ScopedRecursiveLockPtr lock = getLock();
186 return std::make_unique<ScopedRecursiveLock>(mutex);
190 return ScopedRecursiveLockPtr();
197 ScopedRecursiveLockPtr lock = getLock();
206 update(
dt, measuredValue, targetValue);
213 ScopedRecursiveLockPtr lock = getLock();
220 ScopedRecursiveLockPtr lock = getLock();
227 ScopedRecursiveLockPtr lock = getLock();
234 ScopedRecursiveLockPtr lock = getLock();
274 pdControlValue =
pdOutputFilter->update(deltaSec, pdControlValue);
279 double deriv = (
controlValue - oldControlValue) / deltaSec;
287 double const controlValueClamped =
292 <<
", cV clamped: " << controlValueClamped <<
", i: " << (
Ki *
integral)
293 <<
", d: " << (
Kd *
derivative) <<
", dt: " << deltaSec;
304 ScopedRecursiveLockPtr lock = getLock();