How to expand CartesIO

CartesIO supports only a limited set of tasks and constraints. These are usually enough for setting up most control problems; however, special tasks might be needed for implementing more “exotic” behaviors. For this reason, CastesIO is designed to be highly customizable at almost all its architectural layers; the user can implement:

  • a new controller, which replaces the OpenSot-based velocity level inverse kinematics. For instance, a custom solver can be implemented from scratch, but remaining compatible with all the CartesIO interfaces and utilities. New controllers can then dynamically loaded with the load_controller ROS service.

  • A new task/constraint, which is added to the library of supported CartesIO APIs. This way, we can a programmatic API, and a ROS interface to a new kind of task.

  • When a new task/constraint is developed, the OpenSot support can be quickly implemented as well, in order to have it inside the default OpenSot-based velocity level inverse kinematics controller.

The header files in <cartesian_interface/sdk/...> can be conveniently employed to re-use existing componens of the CartesIO framework. For instance, a specialization of a Cartesian task (such as a center-of-mass stabilizer) does not need to re-implement the whole Cartesian task API. All it needs to do is to properly inherit from the proper classes.