# ControlSystems.jl Manual

ControlSystems.jl and the rest of the packages in the JuliaControl organization implement solutions for analysis and design of (primarily linear) control systems. If you are new to the Julia programming language, learn more here. If you are familiar with Julia but unfamiliar with the ecosystem for control, learn more under Ecosystem.

This documentation is structured into an introductory section labeled Introductory guide, a section with Examples and a reference section sorted into topics, labeled Functions.

## Introductory guide

## Examples

## Functions

- Constructing systems
- Analysis
- Synthesis
- Time and Frequency response analysis
- Plotting functions
- Nonlinear functionality

## Ecosystem

### JuliaControl

The JuliaControl and surrounding ecosystem contains a few additional packages that may be of interest

- RobustAndOptimalControl.jl contains more advanced features for LQG design, robust analysis and synthesis, uncertainty modeling, named systems and an interface to DescriptorSystems.jl.
- SymbolicControlSystems.jl contains basic C-code generation for linear systems.
- ControlSystemIdentification.jl is a system-identification toolbox for identification of LTI systems using either time or frequency-domain data. This package can use data to estimate statespace models, transfer-function models and Kalman filters that can be used for control design.
- ControlSystemsMTK.jl is an interface between ControlSystems.jl and ModelingToolkit.jl.
- DiscretePIDs.jl contains a reference implementation in Julia of a discrete-time PID controller including set-point weighting, integrator anti-windup, derivative filtering and bumpless transfer.

See also the paper describing the toolbox

Bagge Carlson, F., Fält, M., Heimerson, A., & Troeng, O. (2021). ControlSystems.jl: A Control Toolbox in Julia. In 2021 60th IEEE Conference on Decision and Control (CDC) IEEE Press. https://doi.org/10.1109/CDC45484.2021.9683403

and the introductory Youtube video below, as well as the following Youtube playlist with videos about using Julia for control.

### The wider Julia ecosystem for control

The following is a list of packages from the wider Julia ecosystem that may be of interest.

- DescriptorSystems.jl contains types that represent statespace systems on descriptor form, i.e., with a mass matrix. These systems can represent linear DAE systems and non-proper systems.
- TrajectoryOptimization.jl is one of the more developed packages for open-loop
**optimal control**and trajectory optimization in Julia. - LowLevelParticleFilters.jl is a library for state estimation using particle filters and Kalman filters of different flavors.
- ModelingToolkit.jl is an acausal modeling tool, similar in spirit to Modelica. A video showing ControlSystems and ModelingToolkit together is available here. ControlSystemsMTK.jl exists to ease the use of these two packages together.
- JuliaSimControl.jl is a product that builds upon the JuliaControl ecosystem and ModelingToolkit, providing additional nonlinear and robust control methods.
- FaultDetectionTools.jl contains utilities and observers for online fault detection.
- ReachabilityAnalysis.jl is a package for reachability analysis. This can be used to verify stability and safety properties of linear and nonlinear systems.
- MatrixEquations.jl contains solvers for many different matrix equations common in control. ControlSystems.jl makes use of this package for solving Riccati and Lyapunov equations.
- JuMP.jl is a modeling language for optimization, similar to YALMIP. JuMP is suitable for solving LMI/SDP problems as well as advanced linear MPC problems.
- SumOfSquares.jl is a package for sum-of-squares programming that builds on top of JuMP. Their documentation contains examples of Lyapunov-function search and nonlinear synthesis.
- MonteCarloMeasurements.jl is a library for working with parametric uncertainty. An example using ControlSystems is available here.
- DifferentialEquations.jl is the home of the SciML ecosystem that provides solvers for scientific problems. ControlSystems.jl uses these solvers for continuous-time simulations.
- Dojo.jl is a differentiable robot simulator.
- StaticCompiler.jl contains tools for compiling small binaries of Julia programs.
- JuliaPOMDP is a Julia ecosystem for reinforcement learning.
- JuliaReinforcementLearning is another Julia ecosystem for reinforcement learning.