# Software

A wealth of software is available for analysis, design and implementation of feedback systems.
This page contains information on some of the software that is being developed to support the analysis and design techniques described in *Feedback Systems*.

### MATLAB/LabView tools

Some specialized scripts have been developed to produce plots that match the style in *Feedback Systems*. These scripts can be used in MATLAB, LabView or compatible tools.

- amaxis.m: alternative version of
`axis`command - ambode.m: alternative version of
`bode`command (gain in powers of 10) - amnyquist.m: alternative version of the
`nyquist`command with better labeling and treatment of imaginary poles - amphaseplot.m: function to generate phase plots. This command uses several helper functions:
- arrow.m - function to generate customized arrowheads (from MATLAB Central)
- amquiver.m - modified version of MATLAB
`quiver`command (uses`arrow.m`) - boxgrid.m (optional) - function to generate a grid of initial conditions

- aminit.m - some of the simulations and examples require a few extra definitions that are included in this file
- arcarrow.m - generate an arc shaped arrow for annotating plots

You can use these functions by simply copying them into a directory that is in your MATLAB or LabView path. For your convenience, these files are also available as a single zip file or tar file.

MATLAB code for many of the examples used in the text can be found on the Additional Examples page. Some of these examples make use of the additional scripts below, which you should install in the working directory or MATLAB path:

- amsetup.m - defines a bunch of variables that are used to set the style guidelines for the text.
- amprint.m - this function is used to generate PostScript plots for the book in the proper format. If the AMPRINT_FLAG flag is zero (the default value), no file will be generated.

### Python Control Systems Library

A library of functions for analysis and design of control systems is being developed for use in the Python programming language. The python-control package is an open source project that is intended to implement the standard control system functions. More information is available at:

- http://python-control.sourceforge.net - python-control wiki page (includes download instructions and examples)
- http://sourceforge.net/projects/python-control - SourceForge project page

The current release of this software includes the ability to plot Bode plots and Nyquist diagrams, as well as LQR design.

### Sparrow Real-Time Control Libraries

The Sparrow project at Caltech is developing a collection of open source C/C++ libraries for implementing real-time controllers on Linux-based data acquisition & control systems. Two low-level libraries that allow implementation of the controllers described in *Feedback Systems* are available:

- Sparrow - a real-time library that supports control loops, device interfaces, real-time displays
- Falcon - a library for implementing standard control techniques such as state space compensators and Kalman filters. (The linux version of the falcon library will be released in the near future.)

In addition, some more advanced libraries are being developed for use in networked control environments:

- Skynet - a messaging library for communication between processing using the Spread communications protocol
- NTG - nonlinear trajectory generation library, including receding horizon control (RHC)

### Other Software Packages

#### General Purpose Modeling and Analysis Tools

- Modelica - non-proprietary, object-oriented, equation based language to model complex physical systems
- JModelica - extensible Modelica-based open source platform for optimization, simulation and analysis
- SIMULINK (MathWorks) - block diagram-based simulation package
- Sage - open-source mathematics software system that combines existing open-source packages into a common Python-based interface

#### Control Analysis and Design

- LabView (National Instruments): Control Design and Simulation Module
- Julia - Control Systems Design in Julia
- Mathematica (Wolfram Research): Control System Professional
- MATLAB (MathWorks): Control systems toolbox
- Interactive Learning Modules Project - interactive tools for PID control
- Octave (GNU) - open source MATLAB replacement
- Scilab (INRIA) - open source MATLAB replacement
- SLICOT - Fortran 77 implementations of numerical algorithms for computations in systems and control theory

#### Control Implementation Libraries

- Comedi - Linux control and measurement interface; device drivers for data acquisition cards
- Linux in Control - a collection of software and MATLAB files used in Lund for implementing controllers in Linux, using MATLAB
- Real-Time Control Systems Library (NIST)
- ROS - open-source, meta-operating system for robotics applications