Skip to content

flight/pid,sensors/gyro: D-term pre-diff LPF + code quality improvements#11465

Open
19379353560 wants to merge 2 commits intoiNavFlight:maintenance-9.xfrom
19379353560:feature/gyro-pid-v2-for-pr
Open

flight/pid,sensors/gyro: D-term pre-diff LPF + code quality improvements#11465
19379353560 wants to merge 2 commits intoiNavFlight:maintenance-9.xfrom
19379353560:feature/gyro-pid-v2-for-pr

Conversation

@19379353560
Copy link
Copy Markdown

Summary

Combines the D-term pre-differentiation LPF optimization with follow-up code quality improvements.

Part 1: D-term pre-differentiation LPF

Filters gyro before differentiation instead of after, reducing noise amplification.

Metric Before After
Noise amplification ~9× ~3.6×
Added latency +0.6ms
D-gain headroom baseline +15–25%

Files changed:

  • pid.h: add dterm_lpf2_hz to pidProfile_t
  • pid.c: add dtermLpf2State / previousFilteredGyroRate to pidState_t, initialize and apply in pidInitFilters() / dTermProcess()
  • settings.yaml: add dterm_lpf2_hz parameter (default 250Hz, range 0–500)

Part 2: Code quality improvements

  • dTermProcess: early return when kD==0, remove redundant newDTerm variable
  • pidInitFilters: merge 3 separate axis loops into 1, extract const float dT = US2S(refreshRate)
  • pidApplyMulticopterRateController: factor out antiWindupScaler*dT from I-term update
  • Add const to itermLimit in both FW and MC rate controllers
  • gyroFilter: rename preLulupreFilterGyro, add const

Test plan

  • Build MATEKH743: compiles cleanly, zero errors
  • Run unit tests: make check

艾多多 added 2 commits March 31, 2026 01:43
- dTermProcess: early return when kD==0, remove redundant variable
- pidInitFilters: merge 3 init loops into 1, extract common US2S(refreshRate) subexpression
- pidApplyMulticopterRateController: factor out antiWindupScaler*dT from I-term update
- gyroFilter: rename preLulu to preFilterGyro, add const
- pidApplyFixedWingRateController/pidApplyMulticopterRateController: add const to itermLimit

No behavior change. All modifications are structural/readability improvements.
…ments

Pre-differentiation LPF (v1, from master):
- pid.h: add dterm_lpf2_hz field to pidProfile_t
- pid.c: add dtermLpf2State and previousFilteredGyroRate to pidState_t
- pid.c: initialize pre-diff filter in pidInitFilters()
- pid.c: apply pre-diff filter in dTermProcess() before differentiation
- settings.yaml: add dterm_lpf2_hz parameter (default 250Hz, range 0-500)

Code quality improvements (v2):
- dTermProcess: early return when kD==0, remove redundant newDTerm variable
- pidInitFilters: merge 3 axis loops into 1, extract common dT subexpression
- pidApplyMulticopterRateController: factor out antiWindupScaler*dT
- Add const to itermLimit in both FW and MC rate controllers
- gyroFilter: rename preLulu to preFilterGyro, add const

Noise reduction: diff amplification ~9x -> ~3.6x, latency +0.6ms at 1kHz.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant