I like the work that you have done with your toolbox, and especially the work on root locus. As you might be aware of it, there is already a registered package with the name ControlToolbox.jl
in āMETADATA.jlā, which I have been working on with @aytekinar and CristianRojas quite for some time. If you would like to register your package to make it accessible to more people easily, the name of your package might be problematic, until the packaging system of Julia
is changed.
It is nice to to see that you have opted to rely on the ODE solvers found in
DifferentialEquations.jl
. We have tried to use a similar philosophy in our toolbox, where DiffEqBase.jl
is used for the simulation engine, Plots.jl
(through RecipiesBase.jl
) is used for the plotting support, and MathProgBase.jl
is used for solving the optimization problems involved in some computations. Using these āBaseā packages allows the package to be a more social package (apologies if the word is misused) in the sense that it can use any ODE solver, plotting backend and optimization solver supported by these base packages. In fact, using RecipesBase.jl
it is possible to use all the powerful features of Plots.jl
, e.g., animations, gifs and interactive plots, and using MathProgBase.jl
, it is possible to change the solver as you experiment with the code (as in the case of
place
).
Keeping this base package design philosophy in mind, we have tried to come up with a set of tools regarding control systems. Since a lot of application areas might rely on some set of basic functionality (as is already mentioned by the posters under this thread regarding, for instance, StateSpace.jl
), we have tried to abstract away some basic operations on linear, time-invariant systems in the package LTISystems.jl
. To this end, we have created RationalFunctions.jl
and PolynomialMatrices.jl
, which have helped facilitate working with ratinal transfer function models and polynomial matrices (matrix fraction descriptions). Maybe you will find them useful. Similarly, LTISystems.jl
might be a good starting point, should you want, as it contains mathematical operations among transfer function,
state space and matrix fractional description based system models, all in both continuous and discrete time, and in SISO and MIMO mode. We have also done our best to support simulation through the use of DifferentialEquations.jl
ecosystem, be it in discrete time or countinuous time, for different input signal abstractions and their superpositions.
Currently we are trying to spend our free time in implementing some basic
functionality regarding system identification and control.
As for IdentificationToolbox.jl
, so far, we support identification of basic polynomial models, and we aim to add support state-space system identification, as well. Currently, we are working on having also the identification toolbox use DifferentialEquations.jl
for doing the work for us. For ControlToolbox.jl
, we currently support basic analysis tools such as dcgain
and root locus, design tools such as robust pole placement, some matrix computation tools such as lyap
, gram
, care
, dare
, and c2d
functionality with different discretizers. Since we are also a small group working on the project, mostly as a serious hobby, we slowly add things to our toolboxes.
From what I see, though, the most important thing we are missing in our package is the documentation. If we had had a nice documentation, it could have taken a bit of attention.
We hope that any of the above functionality would be of help to some people in the community, and we are open to discussions on how to change the design and/or improve the ecosystem.