A light-weight, Eigen-based C++ library for trajectory optimization for legged robots.
A light-weight, Eigen-based C++ library for trajectory optimization for legged robots.
A light-weight and extensible C++ library for trajectory optimization for legged robots.
A base-set of variables, costs and constraints that can be combined and extended to formulate trajectory optimization problems for legged systems. These implementations have been used to generate a variety of motions such as monoped hopping, biped walking, or a complete quadruped trotting cycle, while optimizing over the gait and step durations in less than 100ms (paper).
Features:
:heavy_check_mark: Intuitive and efficient formulation of variables, cost and constraints using Eigen.
:heavy_check_mark: ifopt enables using the high-performance solvers Ipopt and Snopt.
:heavy_check_mark: Elegant rviz visualization of motion plans using xpp.
:heavy_check_mark: ROS/catkin integration (optional).
:heavy_check_mark: Light-weight (~6k lines of code) makes it easy to use and extend.
Install • Run • Develop • Contribute • Publications • Authors
The easiest way to install is through the ROS binaries:
sudo apt-get install ros--towr-rosIn case these don't yet exist for your distro, there are two ways to build this code from source:
Install dependencies CMake, Eigen, Ipopt:
sudo apt-get install cmake libeigen3-dev coinor-libipopt-devInstall ifopt, by cloning the repo and then: cmake .. && make install on your system.
Build towr:
git clone https://github.com/ethz-adrl/towr.git && cd towr/towr
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
sudo make install # copies files in this folder to /usr/local/*
# sudo xargs rm -desktop-full ros--xppBuild workspace:
cd catkin_workspace/src
git clone https://github.com/ethz-adrl/ifopt.git
git clone https://github.com/ethz-adrl/towr.git
cd ..
catkin_make_isolated -DCMAKE_BUILD_TYPE=Release # or `catkin build`
source ./devel_isolated/setup.bashUse: Include in your catkin project by adding to your CMakeLists.txt
add_compile_options(-std=c++11)
find_package(catkin COMPONENTS towr)
include_directories(${catkin_INCLUDE_DIRS})
target_link_libraries(foo ${catkin_LIBRARIES})Add the following to your package.xml:
towr
Launch the program using
roslaunch towr_ros towr_ros.launch # debug:=true (to debug with gdb)Click in the xterm terminal and hit 'o'.
Information about how to tune the paramters can be found here.
nlp.AddConstraintSet(your_custom_constraints); as shown here.We love pull request, whether its new constraint formulations, additional robot models, bug fixes, unit tests or updating the documentation. Please have a look at CONTRIBUTING.md for more information.
See here the list of contributors who participated in this project.
All publications underlying this code can be found here. The core paper is:
@article{winkler18,
author = {Winkler, Alexander W and Bellicoso, Dario C and
Hutter, Marco and Buchli, Jonas},
title = {Gait and Trajectory Optimization for Legged Systems
through Phase-based End-Effector Parameterization},
journal = {IEEE Robotics and Automation Letters (RA-L)},
year = {2018},
month = {July},
pages = {1560-1567},
volume = {3},
doi = {10.1109/LRA.2018.2798285},
}A broader overview of the topic of Trajectory optimization and derivation of the Single-Rigid-Body Dynamics model used in this work: DOI 10.3929/ethz-b-000272432
Alexander W. Winkler - Initial Work/Maintainer
The work was carried out at the following institutions:
No open issues yet, or sync has not completed.