Observed since 20 Oct, 19:49 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Active Disturbance Rejection Control (ADRC) with Tracking Differentiator
This repository contains Python, C++, MATLAB, and Simulink implementation of Active Disturbance Rejection Control with Extended State Observer (ESO), Tracking Differentiator (TD), input delay compensation, control saturation, and support for optional use of the cascaded structure.
I've summarized a comprehensive note on the theoretical background of actve disturbance rejection controller and tracking differentiators. You can find it in here (I'll add the cascaded ADRC documentation as soon as possible).
Note: The Python version on Pypi (which can be installed with pip install adrc) is currently not the latest version. This is because access to the global internet has been cut off in Iran for the past two months! I'll update that as soon as possible. For now, I highly recommend using the implementation available on Github.
Note: Important notes for the Python, C++, Matlab, and Simulink implementations are given after the introduction!
New: Cascaded ADRC is now supported for all the environments as well.
Here are some figures showing the controller in action, in presence of time-varying referece signal, input delay, input saturation, etc.




Please pay attention to the following:
Note: Good news! You can install the Python implementation using
pip install adrc
You can look at the project page on Pypi for more information. (Note: I recommend using the version on Github for now until I update the Pypi version)
Note: To be able to use all the Python codes, especially the demo script, you need to have the following packages installed:
Discrete controller implementations are available for first and second-order systems in simulink. There is also a continuous-time implementation for second-order systems. Continuous-time first-order systems will be added as well. Please pay attention to the following:
You can take a look at this file to see how the code works.
Note: I have tried to use the same names in MATLAB, Python, and C++; however, I still feel it's necessary to add proper documentation for each. This is in the TODOs.
dT can differ from simulation time step dt. The controller should be called at rate dT.initialize() before step(). The controller will throw an error if used uninitialized.step(). Manual reference derivatives can still be provided via varargin to override TD estimates.getEstimatedStates() for monitoring or additional processing.Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 1.0.3 | 11 Sept 2026 | 8 |
This describes our collected data; it is not a security assessment.
Shared repository data · GitHub
Observed since 20 Oct, 19:49 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:1363d8ac641237fbeb75db9321db9c11c7a71d4a00b86b358c976b4e609e662b