ControlSystems.jl
A control systems design toolbox for Julia.
Installation
To install, in the Julia REPL:
using Pkg; Pkg.add("ControlSystems")News
2021-01
- Breaking: Support for julia versions older than 1.3 is dropped
- Breaking:
c2d(::StateSpace)now returns only the system, not thex0map. Seec2d_x0mapfor the old functionality. - System order can be specified in
baltrunc. - New discretization methods in
c2d. We now support:zoh,:foh,:fwdeuler,:tustin - Symbolic computation utilities in SymbolicControlSystems.jl
More details under releases.
2021-11
- Time-domain simuations now return a result structure (non breaking)
- Breaking:
lsimplot, stepplot, impulseplothave been replaced byplot(lsim())etc. - Breaking:
pole, tzerohas been renamed to their plural form,poles, tzeros. - Breaking:
c2dnow no longer returns thex0mapfor statespace systems, see functionc2d_x0mapfor the old behavior. - Breaking: The array layout of time and frequency responses has been transposed, i.e., in
y,t,x,u = lsim(sys, ...), the output arraysy,x,uare now of shapesize(y) == (sys.ny, T). - New functions
observer_controller, observer_predictor, placePI. - Breaking: The type
LQGhas been removed, see RobustAndOptimalControl.jl for its replacement. - Breaking:
balrealandbaltruncreturn an additional value, the applied similarity transform. - A large set of bug fixes
- For a full list of changes, see here.
Documentation
All functions have docstrings, which can be viewed from the REPL, using for example ?tf .
A documentation website is available at http://juliacontrol.github.io/ControlSystems.jl/latest/.
Some of the available commands are:
Constructing systems
ss, tf, zpk
Analysis
poles, tzeros, norm, hinfnorm, linfnorm, ctrb, obsv, gangoffour, margin, markovparam, damp, dampreport, zpkdata, dcgain, covar, gram, sigma, sisomargin
Synthesis
care, dare, dlyap, lqr, dlqr, place, leadlink, laglink, leadlinkat, rstd, rstc, dab, balreal, baltrunc
PID design
pid, stabregionPID, loopshapingPI, pidplots
Time and Frequency response
step, impulse, lsim, freqresp, evalfr, bode, nyquist
Plotting
lsimplot, stepplot, impulseplot, bodeplot, nyquistplot, sigmaplot, marginplot, gangoffourplot, pidplots, pzmap, nicholsplot, pidplots, rlocus, leadlinkcurve
Other
minreal, sminreal, c2d
Usage
This toolbox works similar to that of other major computer-aided control systems design (CACSD) toolboxes. Systems can be created in either a transfer function or a state space representation. These systems can then be combined into larger architectures, simulated in both time and frequency domain, and analyzed for stability/performance properties.
Example
Here we create a simple position controller for an electric motor with an inertial load.
using ControlSystems
# Motor parameters
J = 2.0
b = 0.04
K = 1.0
R = 0.08
L = 1e-4
# Create the model transfer function
s = tf("s")
P = K/(s*((J*s + b)*(L*s + R) + K^2))
# This generates the system
# TransferFunction:
# 1.0
# ---------------------------------
# 0.0002s^3 + 0.160004s^2 + 1.0032s
#
#Continuous-time transfer function model
# Create an array of closed loop systems for different values of Kp
CLs = TransferFunction[kp*P/(1 + kp*P) for kp = [1, 5, 15]];
# Plot the step response of the controllers
# Any keyword arguments supported in Plots.jl can be supplied
using Plots
plot(step.(CLs, 5), label=["Kp = 1" "Kp = 5" "Kp = 15"])Additional examples
See the examples folder and ControlExamples.jl


