This repository contains MATLAB and Python scripts to reproduce the data and figures from Synthesizing Control Laws from Data using Sum-of-Squares Optimization by Jason J. Bramburger, Steven Dahdah, and James R. Forbes (2023).
The control Lyapunov function (CLF) approach to nonlinear control design is well established. Moreover, when the plant is control affine and polynomial, sum-of-squares (SOS) optimization can be used to find a polynomial controller as a solution to a semidefinite program. This letter considers the use of data-driven methods to design a polynomial controller by leveraging Koopman operator theory, CLFs, and SOS optimization. First, Extended Dynamic Mode Decomposition (EDMD) is used to approximate the Lie derivative of a given CLF candidate with polynomial lifting functions. Then, the polynomial Koopman model of the Lie derivative is used to synthesize a polynomial controller via SOS optimization. The result is a flexible data-driven method that skips the intermediary process of system identification and can be applied widely to control problems. The proposed approach is used to successfully synthesize a controller to stabilize an inverted pendulum on a cart.
pend_control.m
requires YALMIP and MOSEK to run. Both packages can be
download for free at:
To use pend_control.py
, install the requirements in a virtual environment
using:
(venv) $ pip install -r ./python/requirements.txt
The MOSEK solver is required for both the MATLAB and Python scripts. Personal
academic licenses are available
here. The license file
must be placed in ~/mosek/mosek.lic
on Linux/Mac or
C:\Users\<USER>\mosek\mosek.lic
on Windows.