TrajectoryOptimization.jl

A fast trajectory optimization library written in Julia
Popularity
329 Stars
Updated Last
3 Months Ago
Started In
June 2018

TrajectoryOptimization

Build Status Documentation
Build Status CI codecov

This package is built for the express purpose of defining and evaluating trajectory optimization problems. Although early versions (pre v0.3) also included methods to solve these problems, this is now left to separate packages that implement the interface defined in TrajectoryOptimization.jl. For example, Altro.jl implements the ALTRO solver that used to be included in TrajectoryOptimization.jl. This change was done to make this package lighter and allow more abstraction in how solvers set up and solve the problems defined by this package.

TrajectoryOptimization.jl aims to provide both a convenient API for setting up and defining trajectory optimization problem and extremely efficient methods for evaluating them. Nearly all of the methods implemented have zero memory allocations and have been highly optimized for speed. Since trajectory optimization problem have a unique structure that set them apart from generic NLPs (nonlinear programs), use of the specialized methods in TrajectoryOptimization.jl can provide dramatic improvements in the computational efficiency of the solvers that implement the API.

All methods utilize Julia's extensive autodifferentiation capabilities via ForwardDiff.jl so that the user does not need to specify derivatives of dynamics, cost, or constraint functions.

Installation

To install TrajectoryOptimization.jl, run the following from the Julia REPL:

Pkg.add("TrajectoryOptimization")

What's New

TrajectoryOptimization.jl underwent significant changes between versions v0.1 and v0.2. The new code is significantly faster (up to 100x faster). The core part of the ALTRO solver (everything except the projected newton phase) is completely allocation-free once the solver has been initialized. Most of the API has changed significantly. See the documentation for more information on the new API.

In v0.3 the package was split into several different packages for increased modularity. These include RobotDynamics.jl, Altro.jl, RobotZoo.jl, and TrajOptPlots.jl.

Quick Start

To run a simple example of a constrained 1D block move see script in /examples/quickstart.jl.

Examples

Notebooks with more detailed examples can be found here

Related Papers