Giter Club home page Giter Club logo

controlsystems.jl's Introduction

ControlSystems.jl

Build Status PkgEval Gitter

A control systems design toolbox for Julia.

Installation

To install, in the Julia REPL:

Pkg.add("ControlSystems")

News

2019-11-03

  • Poles and zeros are "not sorted" as in Julia versions < 1.2, even on newer versions of Julia. This should imply that complex conjugates are kept together.

2019-05-28

Delay systems

  • We now support systems with time delays. Example:
sys = tf(1, [1,1])*delay(1)
stepplot(sys, 5) # Compilation time might be long for first simulation
nyquistplot(sys)

New examples

2019-05-22

New state-space type HeteroStateSpace that accepts matrices of heterogeneous types: example using StaticArrays.

2019-01-31

System identification using ControlSystemIdentification.jl is now available. The readme together with a series of notebooks serve as documentation.

2018-09-30

Support for Julia 0.7/1.0 added.

2018-09-01

  • LTISystem types are now more generic and can hold matrices/vectors of arbitrary type. Examples (partly pseudo-code):
ss(1)
ss(1.)
ss(1im)
ss(ForwardDiff.Dual(1.))
ss(GPUArray([1]))
ss(SparseMatrix([1]))

Similar for tf,zpk etc.

  • Continuous time systems are simulated with continuous time solvers from OrdinaryDiffEq.jl
  • Freqresp now returns frequencies in the first dimension.
  • Breaking: lsim(sys, u::Function) syntax has changed from u(t,x) to u(x,t) to be consistent with OrdinaryDiffEq
  • Breaking: feedback(P,C) no longer returns feedback(P*C). The behavior is changed to feedback(P1, P2) = P1/(1+P1*P2).
  • Type Simulator provides lower level interface to continuous time simulation.
  • Example autodiff.jl provides an illustration of how the new generic types can be used for automatic differentiation of a cost function through the continuous-time solver, which allows for optimization of the cost function w.r.t. PID parameters.

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

pole, tzero, 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
stepplot(CLs, label=["Kp = 1", "Kp = 5", "Kp = 15"])

StepResponse

Additional examples

See the examples folder

controlsystems.jl's People

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.