Baike.dev
All toolsOnline toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
C

control-toolbox

> 编程语言
Open source

The Control Toolbox - An Open-Source C++ Library for Robotics, Optimal and Model Predictive Control

1.7K stars0 likes0 views
WebsiteGitHub

About

The Control Toolbox - An Open-Source C++ Library for Robotics, Optimal and Model Predictive Control

Control Toolbox

diff
- Important note (July 2021): this library is currently only scarcely maintained,
- it may take a while until we respond to bugs or feature requests.

This is the Control Toolbox, an efficient C++ library for control, estimation, optimization and motion planning in robotics.

Link to the wiki, quickstart!
Find the detailed documentation here.

Overview

This is the ADRL Control Toolbox ('CT'), an open-source C++ library for efficient modelling, control, estimation, trajectory optimization and model predictive control. The CT is applicable to a broad class of dynamic systems, but features additional modelling tools specially designed for robotics. This page outlines its general concept, its major building blocks and highlights selected application examples.

The library contains several tools to design and evaluate controllers, model dynamical systems and solve optimal control problems. The CT was designed with the following features in mind:

  • Systems and dynamics:

    • intuitive modelling of systems governed by ordinary differential or difference equations.
  • Trajectory optimization, optimal control and (nonlinear) model predictive control:

    • intuitive modelling of cost functions and constraints
    • common interfaces for optimal control solvers and nonlinear model predictive control
    • currently supported algorithms:
      • Classical Single Shooting
      • iLQR / iLQG (iterative Linear Quadratic Optimal Control)
      • Multiple-shooting iLQR
      • Gauss-Newton-Multiple-Shooting (GNMS)
      • Classical Direct Multiple Shooting (DMS)
    • standardized interfaces for the solvers
      • IPOPT (first and second order)
      • SNOPT
      • HPIPM
      • custom Riccati-solver
  • Performance:

    • solve large scale optimal control problems in MPC fashion.
  • Robot Modelling, Rigid Body Kinematics and Dynamics:

    • straight-forward interface to the state-of the art rigid body dynamics modelling tool [RobCoGen][robcogen-url].
    • implementation of a basic nonlinear-programming inverse kinematics solver for fix-base robots.
  • Automatic Differentiation:

    • first and second order automatic differentiation of arbitrary vector-valued functions including cost functions and constraints
    • automatic differentiation and code generation of rigid body dynamics
    • derivative code generation for maximum efficiency

Robot Application Examples

The Control Toolbox has been used for Hardware and Simulation control tasks on flying, walking and ground robots.

Slightly more complex optimization examples, including gait optimization for a quadruped, are availabe in ct_ros.

What is the CT?

A common tasks for researchers and practitioners in both the control and the robotics communities is to model systems, implement equations of motion and design model-based controllers, estimators, planning algorithms, etc. Sooner or later, one is confronted with questions of efficient implementation, computing derivative information, formulating cost functions and constraints or running controllers in model-predictive control fashion.

The Control Toolbox is specifically designed for these tasks. It is written entirely in C++ and has a strong focus on highly efficient code that can be run online (in the loop) on robots or other actuated hardware. A major contribution of the CT is its implementations of optimal control algorithms, spanning a range from simple LQR reference implementations to constrained model predictive control. The CT supports Automatic Differentiation (Auto-Diff) and allows to generate derivative code for arbitrary scalar and vector-valued functions. We designed the toolbox with usability in mind, allowing users to apply advanced concepts such as nonlinear model predictive control (NMPC) or numerical optimal control easily and with minimal effort. While we provide an interface to a state-of-the art Auto-Diff compatible robot modelling software, all other modules are independent of the a particular modelling framework, allowing the code to be interfaced with existing C/C++ code or libraries.

The CT has been successfully used in a variety of different projects, including a large number of hardware experiments, demonstrations and academic publications. Example hardware applications are online trajectory optimization with collision avoidance \cite giftthaler2017autodiff, trajectory optimization for Quadrupeds \cite neunert:2017:ral and mobile manipulators \cite giftthaler2017efficient as well as NMPC on ground robots \cite neunert2017mpc and UAVs \cite neunert16hexrotor. The project originated from research conducted at the Agile & Dexterous Robotics Lab at ETH Zurich, but is continuously extended to cover more fields of applications and algorithms.

Scope of the CT

Software is one of the key building blocks for robotic systems and there is a great effort in creating software tools and libraries for robotics. However, when it comes to control and especially Numerical Optimal Control, there are not many open source tools available that are both easy to use for fast development as well as efficient enough for online usage. While there exist mature toolboxes for Numerical Optimal Control and Trajectory Optimization, they are highly specialized, standalone tools that due not provide sufficient flexibility for other applications. Here is where the CT steps in. The CT has been designed from ground up to provide the tools needed for fast development and evaluation of control methods while being optimized for efficiency allowing for online operation. While the emphasis lies on control, the tools provided can also be used for simulation, estimation or optimization applications.

In contrast to other robotic software, CT is not a rigid integrated application but can be seen quite literal as a toolbox: It offers a variety of tools which can be used and combined to solve a task at hand. While ease-of-use has been a major criteria during the design and application examples are provided, using CT still requires programming and control knowledge. However, it frees the users from implementing standard methods that require in-depth experience with linear algebra or numerical methods. Furthermore, by using common definitions and types, a seamless integration between different components such as systems, controllers or integrators is provided, enabling fast prototyping.

Design and Implementation

The main focus of CT is efficiency, which is why it is fully implemented in C++. Since CT is designed as a toolbox rather than an integrated application, we tried to provide maximum flexibility to the users. Therefore, it is not tied to a specific middleware such as ROS and dependencies are kept at a minimum. The two essential dependencies for CT are Eigen and Kindr (which is based on Eigen). This Eigen dependency is intentional since Eigen is a defacto standard for linear algebra in C++, as it provides highly efficient implementations of standard matrix operations as well as more advanced linear algebra methods. Kindr is a header only Kinematics library which builds on top of it and provides data types for different rotation representations such as Quaternions, Euler angles or rotation matrices.

Structure and Modules of the CT

The Control Toolbox consists of three main modules. The Core (ct_core) module, the Optimal Control (ct_optcon) module and the Rigid Body Dynamics (ct_rbd) module. There is a clear hierarchy between the modules. That means, the modules depend on each other in this order, e.g. you can use the core module without the optcon or rbd module.

  • The Core (ct_core) module provides general type definitions and mathematical tools. For example, it contains most data type definitions, definitions for systems and controllers, as well as basic functionality such as numerical integrators for differential equations.
  • The Optimal Control (ct_optcon) module builds on top of the Core module and adds infrastructure for defining and solving Optimal Control Problems. It contains the functionality for defining cost functions, constraints, solver backends and a general MPC wrapper.
  • The Rigid Body Dynamics (ct_rbd) module provides tools for modelling Rigid Body Dynamics systems and interfaces with ct_core and ct_optcon data types.

For testing as well as examples, we also provide the models module (ct_models) which contains various robot models including a quadruped, a robotic arm, a normal quadrotor and a quadrotor with slung load.

The four different main modules are detailed in the following.

ct_core (Core)

  • Definitions of fundamental types for control and simulation, such as dynamic systems (ct::core::System), states (ct::core::StateVector), controls (ct::core::Controller), or trajectories (ct::core::DiscreteTrajectoryBase).
  • Numeric integration (ct::core::Integrator) with various ODE solvers including fixed step (ct::core::IntegratorEuler, ct::core::IntegratorRK4) and variable step (ct::core::IntegratorRK5Variable, ct::core::ODE45) integrators, as well as symplectic (semi-implicit) integrators.
  • Numerical approximation of Trajectory Sensitivities (ct::core::Sensitivity , e.g. by forward-integrating variational differential equations)
  • Common feedback controllers (e.g. ct::core::PIDController)
  • Derivatives/Jacobians of general functions using Numerical Differentiation (ct::core::DerivativesNumDiff) or Automatic-Differentiation with code-generation (ct::core::DerivativesCppadCG) and just-in-time (JIT) compilation (ct::core::DerivativesCppadJIT)

ct_optcon (Optimal Control)

  • Definitions for Optimal Control Problems (ct::optcon::OptConProblem) and Optimal Control Solvers (ct::optcon::OptConSolver)
  • CostFunction toolbox allowing to construct cost functions from file and providing first-order and second-order approximations, see ct::optcon::CostFunction.
  • Constraint toolbox for formulating constraints of Optimal Control Problems, as well as automatically computing their Jacobians.
  • reference C++ implementations of the Linear Quadratic Regulator, infinite-horizon LQR and time-varying LQR (ct::optcon::LQR, ct::optcon::TVLQR)
  • Riccati-solver (ct::optcon::GNRiccatiSolver) for unconstrained linear-quadratic optimal control problems, interface to high-performance

third-party Riccati-solvers for constrained linear-quadratic optimal control problems

  • iterative non-linear Optimal Control solvers, i.e. Gauss-Newton solvers such as iLQR (ct::optcon::iLQR) and Gauss-Newton Multiple Shooting(ct::optcon::GNMS), constrained direct multiple-shooting (ct::optcon::DmsSolver)
  • Non-Linear Model Predictive Control (ct::optcon::MPC)
  • Definitions for Nonlinear Programming Problems (NLPs, ct::optcon::Nlp) and interfaces to third-party NLP Solvers (ct::optcon::SnoptSolver and ct::optcon::IpoptSolver)

ct_rbd (Rigid Body Dynamics)

  • Standard models for Rigid Body Dynamics
  • Definitions for the state of a Rigid Body System expressed as general coordinates (ct::rbd::RBDState)
  • Routines for different f

Issues· 0 open

View all issuesOpen on GitHub

No open issues yet, or sync has not completed.

> Tags

C++automatic-differentiationcontrol-systemscppdisturbance-observer

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 17, 2026
Category编程语言
PricingOpen source

> Related tools

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言