An efficient C++ library for robotics, optimal control, and model predictive control with a focus on online performance.
The Control Toolbox (CT) is an open-source C++ library for robotics, optimal control, and model predictive control. It provides tools for modeling dynamic systems, solving trajectory optimization problems, and implementing controllers that can run online on robotic hardware. The library addresses the need for efficient, flexible software in numerical optimal control and robotics applications.
Researchers and practitioners in robotics and control communities who need to implement model-based controllers, estimators, or planning algorithms with a focus on efficiency and real-time performance.
Developers choose the Control Toolbox for its combination of high-performance C++ implementation, support for automatic differentiation, and modular design that allows seamless integration with existing code. It simplifies the application of advanced concepts like nonlinear MPC while enabling online operation on actual hardware.
The Control Toolbox - An Open-Source C++ Library for Robotics, Optimal and Model Predictive Control
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Optimized for real-time operation on hardware, with efficient code generation for automatic differentiation, enabling online MPC as highlighted in the README.
Includes multiple shooting methods, MPC wrappers, and interfaces to solvers like IPOPT and SNOPT, covering a broad range of algorithms from iLQR to direct multiple shooting.
Organized into core, optcon, and rbd modules, allowing selective use without forcing a full framework, as described in the structure section.
Integrates with RobCoGen for rigid body dynamics and provides inverse kinematics solvers, specifically tailored for robotic applications like quadrupeds and UAVs.
The README notes it's only scarcely maintained since 2021, leading to slow bug fixes and potential compatibility issues with newer systems.
Requires in-depth knowledge of control theory and C++ programming, making it inaccessible for beginners or those without a robotics background.
Relies on Eigen, Kindr, and external solvers, which can make installation and integration cumbersome, especially for users new to C++ build systems.