Systems Theory and Automatic Control

μAO-MPC: microcontroller Applications Online Model Predictive Control


muampc
μAO-MPC is a code generation software package for linear model predictive control. μAO-MPC generates highly portable C code tailored for embedded applications. The underlying optimization algorithm and its implementation explicitly consider many of the limitations and requirements of real-time embedded applications, and in particular of microcontroller applications: low memory footprint, deterministic execution time, only additions and multiplications are performed (no divisions, square roots, etc.), and support for fixed-point and floating- point arithmetic. μAO-MPC is developed at the Laboratory for Systems Theory and Automatic Control, is written in Python, and provides MATLAB/Simulink interfaces to the generated C code.

The MPC optimization algorithm is a quadratic program (QP) solver based on an augmented Lagrangian method (also called method of multipliers) combined with Nesterov’s fast gradient method. Other QP solvers can also be easily used.

The generated code has been tested in several platforms, including x86/AMD64 PCs, ARM Cortex-M microcontrollers, Lego Mindstorms NXT, and Arduino microcontrollers.

This version is a complete reimplementation of the μAO-MPC core. This new version is backwards incompatible with, yet very similar to, the currently available μAO-MPC 0.4.x and older. Version 1.x includes a new type of optimization algorithm, offers more flexibility, and deals with many more types of MPC setups.

If your MPC problem fits into a setpoint stabilization or trajectory tracking problem and want a stable well tested code generation tool, use μAO-MPC 0.4.x. If you have a problem that does not fit those two MPC problems, or you are in for an adventure, try version 1.x.

Before you continue, please read the documentation.

The source code can be downloaded here

If you find this software useful, interesting, etc. please consider using citation [1]. Here is a corresponding BibTeX entry:

@INPROCEEDINGS{ifat:Zometa_12b,
author = {Zometa, P. and K\"ogel, M. and Findeisen, R.},
title = {{muAO-MPC}: A Free Code Generation Tool for Embedded Real-Time Linear Model Predictive Control},
booktitle = {Proc. American Control Conference ({ACC}), 2013},
year = {2013},
pages = {5340-5345},
address = {Washington D.C., USA},
pubtype = {proceedings}
}

If you have any questions or comments please feel free to contact me at the following address:
muao-mpc@ovgu.de

[1] P. Zometa, M. Kögel, and R. Findeisen. muAO-MPC: A Free Code Generation Tool for Embedded Real-Time Linear Model Predictive Control. In Proc. American Control Conference ACC13, pages 5340-5345, Washington D.C., USA, 2013.

[2] M. Kögel, P. Zometa, and R. Findeisen. On Tailored Model Predictive Control for Low Cost Embedded Systems with Memory and Computational Power Constraints. Technical Report IFAT-SYS 1/2012, 2012. [ .pdf ]

[3] P. Zometa, M. Kögel, T. Faulwasser, and R. Findeisen. Implementation aspects of model predictive control for embedded systems. In Proc. American Control Conference ACC12, pages 1205-1210, Montreal, Canada, 2012.

[4] M. Kögel and R. Findeisen. Fast predictive control of linear, time-invariant systems using an algorithm based on the fast gradient method and augmented Lagrange multipliers. In Proc. 2011 IEEE Multi-conference on Systems and Control, pages 780-785, Denver, USA, 2011.

[5] M. Kögel and R. Findeisen. Fast predictive control of linear systems combining Nesterov’s gradient method and the method of multipliers. In Proc. IEEE Conference on Decision and Control and European Control Conference, pages 501-506, Orlando , USA, 2011.

[6] M. Kögel and R. Findeisen. A fast gradient method for embedded linear predictive control. In Proc. 18th IFAC World Congress, pages 1362-1367, Milan, Italy, 2011.

  • Python: official website of the Python programming language.
  • Numpy: the fundamental package for scientific computing with Python.
  • Scipy: scientific Python open-source software for mathematics, science, and engineering.