Extensible Optimization Framework
C++ C TeX Other
Latest commit b320826 Jan 17, 2017 @wxmerkt wxmerkt committed on GitHub Fixed typos in README
Failed to load latest commit information.


EXOTica Build Status Analytics

The EXOTica library is a generic Optimisation Toolset for Robotics platforms, written in C++. Its motivation is to provide a more streamlined process for developing algorithms for such tasks as Inverse-Kinematics and Trajectory Optimisation. Its design advocates:

  • Modularity: The library is developed in a modular manner making use of C++’s object-oriented features (such as polymorphism). This allows users to define their own components and ’plug them into’ the existing framework. The end-effect is that an engineer need not implement a whole system whenever he needs to change a component, but rather can re-implement the specific functionality and as long as he follows certain guidelines, retain the use of the other modules.
  • Extensibility: The library is also heavily extensible, mainly thanks to the modular design. In addition, the library makes very minimal prior assumptions about the form of the problem so that it can be as generic as possible.
  • Integration with ROS: The library is designed to be fully integrated with ROS allowing to set up, configuration, consuming data from ros topics, and publishing debug display using ros tools.

The library itself consists of two major specifications, both of which are abstract classes. The first is the Problem Solver which defines the way optimisation should proceed: current implementation include iLQG, AICO, Jacobian pseudo-inverse IK, and a range of sampling based solvers from the OMPL library. The other is the Task Definition which describes the task itself by providing two necessary functions to compute the forward map from Configuration space (say joint angles in IK) to Task space (say end-effector positions in IK). The tasks themselves can describe a complete trajectory. Using the library then involves passing in an initial state and requesting a solution to the problem, which may consist of a single configuration or complete trajectory.


  • Ubuntu 14.04
  • catkin_tools
  • rosdep
  • ROS Indigo(ros-indigo-desktop-full is recommended but more minimal versions may be sufficient in conjunction with rosdep)


  1. Create a catkin workspace or use an existing workspace. catkin_tools is the preferred build system.
  2. Clone this repository into the src/ subdirectory of the workspace (any subdirectory below src/ will do).
  3. cd into the the cloned directory.
  4. Install dependencies

    1. If running the rosdep for the first time start by running: sudo rosdep init
    2. rosdep update
      rosdep check --from-paths ./ -s -i
  5. Compile the code catkin build -s.
  6. Source the config file (ideally inside ~/.bashrc): source path_to_workspace/devel/setup.bash. You may have to source the config file from your installspace if your workspace is configured for installation.


Have a look at examples/exotica_examples. If you have sourced the workspace correctly you should be able to run any of the demos:

roslaunch exotica_examples Core.launch
roslaunch exotica_examples AICOplanner.launch
roslaunch exotica_examples GenericInitialization.launch
roslaunch exotica_examples ManualInitialization.launch
roslaunch exotica_examples OMPLplanner.launch
roslaunch exotica_examples XMLInitialization.launch