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,
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
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
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
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.
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
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.