Add time-aware PID control method (fixes #35) #37
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Adds
next_control_output_with_dt(measurement, dt)
method to handle time intervals properly in PID calculations, resolving the mathematical inaccuracies mentioned in #35.Problem Solved
Previously, the PID controller ignored actual time intervals (
dt
) when calculating:error * ki
instead oferror * ki * dt
measurement_change * kd
instead of(measurement_change / dt) * kd
This led to inconsistent behavior when:
Solution
New Method
next_control_output_with_dt(measurement: T, dt: T) -> ControlOutput<T>
∫e(t)dt ≈ Σ(error × dt)
de/dt = Δmeasurement / dt
Backwards Compatibility
next_control_output()
unchanged - now a thin wrapper calling new method withdt=1.0
Testing
Added comprehensive test coverage:
integral_with_dt
: Verifies proper time-weighted integrationderivative_with_dt
: Verifies proper rate-of-change calculationbackwards_compatibility
: Ensures existing behavior unchangedirregular_intervals
: Tests real-world irregular timing scenarios