An automatic code generator and C/GMRES-based solvers for nonlinear model predictive control (NMPC) in Jupyter.
AutoGenU for Jupyter is an open-source tool that automatically generates code and provides solvers for nonlinear model predictive control (NMPC). It uses the continuation/GMRES (C/GMRES) method to efficiently solve NMPC problems, enabling rapid development and simulation of control systems for applications like robotics and dynamic systems.
Control engineers, researchers, and robotics developers who need to implement and simulate NMPC algorithms without manually writing low-level solver code.
It significantly reduces development time by automating code generation from symbolic problem definitions, offers high-performance C/GMRES solvers, and provides both Python and C++ interfaces for flexibility in deployment and integration.
An automatic code generator for nonlinear model predictive control (NMPC) and the continuation/GMRES method (C/GMRES) based numerical solvers for NMPC
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Generates C++ source files (ocp.hpp, main.cpp) and Python bindings from symbolic definitions in Jupyter notebooks, significantly reducing manual implementation time for NMPC.
Provides MultipleShootingCGMRESSolver and SingleShootingCGMRESSolver based on the continuation/GMRES method, optimized for fast computation of nonlinear receding horizon control.
Offers both Python interfaces via pybind11 for rapid testing and a header-only C++ library (cgmres) for high-performance integration into larger systems.
Includes demo notebooks with animations (e.g., cartpole, hexacopter) that allow users to simulate, plot, and visualize control systems easily, aiding in debugging and presentation.
Requires cloning with submodules, installing multiple dependencies (C++17, CMake, Python packages, ffmpeg), and configuring environment variables like PYTHONPATH, which can be cumbersome and error-prone.
Limited to C/GMRES-based methods, lacking built-in support for other common NMPC algorithms like sequential quadratic programming (SQP) or interior-point methods.
Python bindings documentation primarily references C++ API with tips for conversion, which may not be intuitive for Python-centric developers and adds a learning barrier.