New Python OCP Module for Optimal Control and MPC

OpEn now comes with a Python OCP module that facilitates the design of optimal control problems in a direct and intuitive way.
With the new module, you can describe the key ingredients of an optimal control problem from Python, including:
- stage and terminal costs
- system dynamics
- state and input constraints
- problem parameters and defaults
This makes it much easier to formulate nonlinear optimal control problems and model predictive control (MPC) schemes before generating an embedded optimizer with OpEn.
Autonomous Racing of Scale Vehicles at SMC22

Our paper titled "A Nonlinear Model Predictive Control Strategy for Autonomous Racing of Scale Vehicles" (authors: V. Cataffo, G. Silano, L. Iannelli, V. Puig and G. Glielmo) has been accepted for publication in IEEE International Conference on Systems, Man, and Cybernetics (SMC), 2022.
A preprint is available here.
Faster UDP connection
After a recent update, the UDP interface if OpEn is now significantly faster. Make sure you use version 0.2.2 or later.

Coming up: TCP interface
Rust for robots
Is the Rust programming language the future of robotics? Some claim that its memory and thread safety model and the fact that it can run on embedded and bare metal devices makes it the perfect candidate for robotics.

Despite its young age, Rust has all but failed to go unnoticed: a stackoverflow survey revealed that Rust is the top most loved programming language and nowhere around the 25 most dreaded ones.
Rust comes with all the perks of high-level languages (such as C++ and Java) related to code structure and organisation, the capabilities and efficiency of low-level languages (such as C), plus it is tRustworthy.
This is why we decided to write OpEn in Rust.
OpEn: a pure Rust optimizer
The majority of optimization packages in Rust, such as IPOPT, OSQP, NLOPT, are essentially bindings (interfaces) to other software. There are a few pure-Rust packages, such as rustimization, argmin, they implement algorithms which are not suitable for embedded nonconvex optimization.

OpEn is the first pure-Rust package
Let's talk
OpEn on Raspberry Pi
Here we give an example of building a parametric optimizer in MATLAB, which will run on a Raspberry Pi. The parametric optimizer will listen for requests on a UDP socket. We will then establish a connection to the optimizer, remotely, and consume the service.

OpEn UDP socket interface
You may now auto-generate an Optimization Engine module, which solves parametric optimization problems (such as model predictive control problems) and can be consumed over UDP sockets! Read more here. This way, the parametric optimizer can be easily called from any programming language. More importantly, the code generation can be carried out in one line of code, while, if necessary, it can be fully configured.

Risk-averse optimal control
Our paper titled "Risk-averse risk-constrained optimal control," (authors: P. Sopasakis, M. Schuurmans, P. Patrinos) has been accepted for publication in European Control Conference 2019.
This work is accompanied by the MATLAB toolbox marietta which is distributed under the MIT open source license.

