shih-hao-tseng / SLSpy

SLSpy provides a Python-based framework to design and simulate model-based control systems, especially for system level synthesis (SLS) methods.
Other
18 stars 1 forks source link

SLSpy: Python-based System-Level Controller Synthesis Framework

Synopsis

SLSpy provides a Python-based framework to design and simulate model-based control systems, especially for system level synthesis (SLS) methods. The details of the framework are described in the paper

Shih-Hao Tseng and Jing Shuang (Lisa) Li, ``SLSpy: Python-Based System-Level Controller Synthesis Framework,'' 2020.

The synthesis workflow follows the structure in the paper

Shih-Hao Tseng and James Anderson, ``Deployment Architectures for Cyber-Physical Control Systems,'' 2019. (also in Proc. IEEE ACC, 2020)

System Requirement

A system with both Python 3 and Python 2.7 may encounter installation error. In that case, please make Python 3 your default choice by appropriate aliasing.

SLSpy might still work for Python 2.7 (or higher Python 2 versions), but one should ensure CVXPY is version 1.1 or higher.

Install

First install the necessary packages by

sudo make setup

then install SLSpy by typing

sudo make install

which has been tested under Fedora 30 and Ubuntu 18.04.

For Windows Subsystem for Linux and macOS, the user might need to install without sudo after the setup by

make install

Get Started

To get started, please refer to the examples in the folder ``examples.''

For more detailed explanations about the basic framework structure, please refer to

Shih-Hao Tseng and Jing Shuang (Lisa) Li, ``SLSpy: Python-Based System-Level Controller Synthesis Framework,'' 2020.

Built-in Synthesis Algorithms

Applicable Scenario

Currently, SLSpy can handle a linear time-invariant (LTI) system by synthesizing finite impulse response (FIR) controller using SLS/IOP. It is possible to deal with linear time-variant (LTV) system under SLSpy framework by introducing customized system model, controller model, and synthesizer.

The way SLSpy works is to express transfer matrices as a list. For example, an FIR transfer matrix Φ with the z-transform

Φ = Σ_{t=0}^T Φ[t] z^{-t}

is expressed by

[ Φ[0], Φ[1], ..., Φ[T] ]

in the codes.