ℹ️ The repository name has changed to
SCPToolbox.jl
in order to reflect the project's direction: to develop a general-purpose trajectory optimization toolkit using sequential convex programming algorithms.
The SCP Toolbox provides the tools necessary to define and solve nonconvex trajectory optimization problems. The user-facing part of the toolbox provides a trajectory problem parser that allows one to define the system dynamics, state and input constraints, and boundary conditions. Under the hood, the problem is solved using any one of several Sequential Convex Programming (SCP) algorithms. These algorithms have been successfully demonstrated on a number of difficult aerospace, autonomous driving, robotics, and other applications. A major goal of the SCP Toolbox is to provide working reference implementations of the SCP algorithms. By placing the algorithms behind a parser that transforms trajectory problems into their abstract mathematical definitions, the algorithms can be generically tested on a suite of examples without having to re-implement the underlying algorithms each time.
Click on the button to spin up a remote Jupyter environment. Follow the included notebooks to get a feel for the toolbox, and finish by solving a self-guided tutorial to land a rocket on the Moon! Check out the SCPToolbox_tutorial repository for more details.
The following algorithms are implemented, and can be found in the
src/solvers/
directory:
- Penalized trust region (PTR)
- Successive convexification (SCvx)
- Guaranteed Sequential Trajectory Optimization (GuSTO)
- Lossless convexification (LCvx)
Several example applications show how the algorithms can be used. These can all
be found in the test/examples/
directory, and include:
- Double integrator with friction
- Mars rocket landing
- SpaceX Starship landing "flip" maneuver
- Mass-spring-damper with an actuator deadband or "sticking"
- Quadrotor flight around obstacles
- Space station freeflyer robot
- Planar spacecraft rendezvous with discrete logic
- Apollo transposition and docking maneuver with discrete logic
If you use the SCP Toolbox, kindly cite the following associated publication.
@article{SCPToolboxCSM2022,
doi = {10.1109/mcs.2022.3187542},
url = {https://doi.org/10.1109/mcs.2022.3187542},
year = {2022},
month = oct,
publisher = {Institute of Electrical and Electronics Engineers ({IEEE})},
volume = {42},
number = {5},
pages = {40--113},
author = {Danylo Malyuta and Taylor P. Reynolds and Michael Szmuk and Thomas Lew
and Riccardo Bonalli and Marco Pavone and Behçet Açıkmeşe},
title = {Convex Optimization for Trajectory Generation: A Tutorial on Generating
Dynamically Feasible Trajectories Reliably and Efficiently},
journal = {{IEEE} Control Systems},
note = {Free preprint available at https://arxiv.org/abs/2106.09125}
}