Hybrid Direct Collocation Library (HDC)

Overview

This library is a collection of C++ packages for solving Trajectory Optimization (TO) problems via direct transcription (including collocation) and multiple shooting methods.

Using this library you can solve optimal control problems for different type of robots (fixed-base, mobile, legged, aerial).

Given the equation of motion of a robot, \mathbf{\dot{x} = f(x,u)}, and a compatible set of contraints, this package solves a problem given by

\mathbf{\min _{x,u} J(x,u)}\\
s.t. \\
\mathbf{\dot{x} = f(x,u)} \\
\mathbf{g_l \leq g(x_{t_f},u_{t_f}) \leq g_u} \\
\mathbf{\phi_l \leq \phi(x_t,u_t) \leq \phi_u}\\

Interfaces for multi-phase and hybrid direct collocation are also available, allowing to control Legged Robots.

Videos of results:

  • Here you can see a video of a ballbot controlled using this package.
  • This video shows an 80Kg legged robot executing very dynamic tasks.

Source Code

The source code is available at https://bitbucket.org/adrlab/hdc

Credits

This project is led by Diego Pardo (core developer) and contains knowledge and expertise from the Agile and Dexterous Robotics Lab at ETH Zürich .

Collaborators:

  • Ruben Grandia
  • Harsoveet Singh
  • Lukas Möller
  • Bob Hoffmann
  • Michael Neunert
  • Alexander Winkler

This library provides a catkin package wrapping John Burkardt’s library SPLINE: A C++ library wich interpolates or approximates data by piecewise polynomial functions (http://people.sc.fsu.edu/~jburkardt/cpp_src/spline/spline.html).

References

The theory implemented in this package is described in these two papers:

License

The HDC Library is released under the Apache Licence, Version 2.0. This software is subject to the terms and conditions defined in the licence and notice files which are part of this source code package.

How to cite HDC Library

@misc{adrlHDCL,
author = "Diego Pardo",
title = "The "Hybrid Direct Collocation Library", An Open Source Library for Optimal Control of Hybrid Dynamical Systems",
howpublished = "\url{https://dpardo.bitbucket.io}",
year = "2017",
note = "[Online; accessed 10-December-2017]"
}