https://github.com/baggepinnen/activedisturbancerejectioncontrol.jl
Proof that linear ADRC is equivalent to PI(D) control with set-point weighting
https://github.com/baggepinnen/activedisturbancerejectioncontrol.jl
Science Score: 23.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
○.zenodo.json file
-
○DOI references
-
✓Academic publication links
Links to: arxiv.org -
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (11.3%) to scientific vocabulary
Keywords
Repository
Proof that linear ADRC is equivalent to PI(D) control with set-point weighting
Basic Info
- Host: GitHub
- Owner: baggepinnen
- Language: TeX
- Default Branch: main
- Homepage: https://arxiv.org/html/2501.11374v1
- Size: 1.28 MB
Statistics
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
- Releases: 0
Topics
Metadata Files
readme.md
Active Disturbance Rejection Control (ADRC)
arxiv paper: Linear ADRC is equivalent to PID with set-point weighting and measurement filter.
ADRC is a recent trend (fad?) in the control-systems community. A recent paper, referenced below, demonstrated that linear ADRC is a rebranding of a well established concept, state feedback with state provided by a disturbance observer with the disturbance model is $1/s$. This kind approach is a common way of providing integral action in a state-feedback controller.
This repo demonstrates that linear first-order ADRC is in fact equivalent also to a filtered 2DOF PID controller, and very close to equivalent to a PI controller with set-point weighting and first-order low-pass filtering of the measurement.
The proof makes use of the formulation of ADRC provided in
"A Simulative Study on Active Disturbance Rejection Control (ADRC) as a Control Tool for Practitioners", Gernot Herbst
that is, with the "bandwidth parametrization" of the disturbance observer. The paper suggests tuning the PI controller to meet a certain reference step response, which is oftentimes a practice recommended against:
It may be strongly misleading to only show properties of a few systems for example the response of the output to command signals. A common omission in many papers and books. "Feedback Fundamentals", Karl Johan Åström
“The user should not test the loop using set-point changes if the set point is to remain constant most of the time. To tune for fast recovery from load changes, a load disturbance should be simulated by stepping the controller output in manual, and then transferring to auto. For lag-dominant processes, the two responses are markedly different.”, - Shinskey 1993
This is also why the paper makes it look like the PID controller is much worse than the ADRC controller. If the PI(D) controller is instead tuned to perform well for disturbance rejection, one can later tune the reference response by adjusting the set-point weight (or performing more elaborate reference prefiltering). This little analysis demonstrates that the linear first-order ADRC controller is in fact completely equivalent to a 2DOF PID controller, and with only very minor approximation error, equivalent also to a PI controller with set-point weighting and first-order low-pass filtering of the measurement.
For second-order linear ADRC, the conclusions are similar. The controller transfer function from the measurement to the control signal is a second-order-filtered PID controller, and the response from reference to control signal is approximately a PI controller (that is, set-point weighting in the proportional term, and zero set-point weighting in the derivative). The expressions for the parameters are much more complex, but the conclusion that a 2DOF PID controller can do the job equally well remains.
Julia package
This repo contains a simple Julia package that can be installed by running
julia
using Pkg
Pkg.add(url="https://github.com/baggepinnen/ActiveDisturbanceRejectionControl.jl")
The package exports the two functions adrc and equivalent_pid that can be used to design an ADRC controller and a 2DOF PID controller with the same properties.
Scripts
The two scripts
- adrc.jl
- adrc_second_order.jl
performs the numerical experiments presented in the paper, as well as the symbolic computations used to derive the PID+filter parameters.
Owner
- Name: Fredrik Bagge Carlson
- Login: baggepinnen
- Kind: user
- Location: Lund, Sweden
- Website: baggepinnen.github.io
- Twitter: baggepinnen
- Repositories: 59
- Profile: https://github.com/baggepinnen
Control systems, system identification, signal processing and machine learning
GitHub Events
Total
- Watch event: 5
- Delete event: 1
- Public event: 1
- Push event: 20
- Pull request event: 1
- Fork event: 1
- Create event: 1
Last Year
- Watch event: 5
- Delete event: 1
- Public event: 1
- Push event: 20
- Pull request event: 1
- Fork event: 1
- Create event: 1
Issues and Pull Requests
Last synced: 6 months ago
All Time
- Total issues: 0
- Total pull requests: 2
- Average time to close issues: N/A
- Average time to close pull requests: 1 minute
- Total issue authors: 0
- Total pull request authors: 1
- Average comments per issue: 0
- Average comments per pull request: 0.0
- Merged pull requests: 2
- Bot issues: 0
- Bot pull requests: 0
Past Year
- Issues: 0
- Pull requests: 2
- Average time to close issues: N/A
- Average time to close pull requests: 1 minute
- Issue authors: 0
- Pull request authors: 1
- Average comments per issue: 0
- Average comments per pull request: 0.0
- Merged pull requests: 2
- Bot issues: 0
- Bot pull requests: 0
Top Authors
Issue Authors
Pull Request Authors
- baggepinnen (2)