Multiphase Adaptive Trajectory Optimizer
Project description
MAPTOR: Multiphase Adaptive Trajectory Optimizer
Author: David Timothy
Contact: chendavidtimothy@gmail.com
A Python framework for trajectory optimization using optimal control. MAPTOR solves problems involving the motion of vehicles, robots, spacecraft, and other dynamic systems through space and time using the Legendre-Gauss-Radau pseudospectral method and phs-adaptive mesh refinement.
What is Trajectory Optimization?
Trajectory optimization finds the best path for a dynamic system to follow, considering:
- Physics: System dynamics and constraints
- Objectives: Minimize time, fuel, energy, or tracking error
- Constraints: Safety limits, obstacle avoidance, boundary conditions
Mathematical Foundation: MAPTOR applies optimal control theory to transform continuous trajectory optimization problems into solvable nonlinear programming problems through spectral collocation methods.
Core Methodology
MAPTOR implements the Legendre-Gauss-Radau pseudospectral method with:
- Spectral accuracy: Exponential convergence for smooth solutions
- Adaptive mesh refinement: Automatic error control through phs-adaptive mesh refinement method
- Multiphase capability: Complex missions with automatic phase linking
- Symbolic computation: Built on CasADi for exact differentiation and optimization
Quick Start
import maptor as mtor
# Minimum-time trajectory: reach target with bounded control
problem = mtor.Problem("Minimum Time to Target")
phase = problem.set_phase(1)
# Variables
t = phase.time(initial=0.0) # Free final time
position = phase.state("position", initial=0.0, final=1.0)
velocity = phase.state("velocity", initial=0.0, final=0.0)
force = phase.control("force", boundary=(-2.0, 2.0))
# Dynamics and objective
phase.dynamics({position: velocity, velocity: force})
problem.minimize(t.final)
# Solve
phase.mesh([8], [-1.0, 1.0])
solution = mtor.solve_adaptive(problem)
if solution.status["success"]:
print(f"Optimal time: {solution.status['objective']:.3f}")
solution.plot()
Problem Classes
Beyond Spatial Trajectories: MAPTOR also handles abstract optimal control problems where "trajectory" refers to the evolution of any system state over time (chemical processes, financial optimization, resource allocation).
Installation
pip install maptor
Requirements: Python 3.10+, NumPy, SciPy, CasADi, Matplotlib
Development Installation:
git clone https://github.com/maptor/maptor.git
cd maptor
pip install -e .
Documentation
| Resource | Description |
|---|---|
| Installation Guide | Setup and dependencies |
| Quick Start | Basic workflow and first example |
| Problem Definition Tutorial | Comprehensive problem construction guide |
| Solution Analysis Tutorial | Working with optimization results |
| Examples Gallery | Complete problems with mathematical formulations |
| API Reference | Detailed function documentation |
Example Trajectories
The examples gallery demonstrates trajectory optimization across multiple domains:
Advanced Aerospace Applications
- Low-Thrust Orbit Transfer: Orbital mechanics with J2/J3/J4 gravitational perturbations and modified equinoctial elements
- Multiphase Vehicle Launch: Realistic rocket trajectory with stage separations and orbital insertion
- Shuttle Reentry: Atmospheric entry with heat rate constraints and crossrange maximization
- Aero-Assisted Plane Change: Atmospheric maneuvers for orbital inclination change
Advanced Robotics and Control
- Quadcopter Flight: Quadcopter dynamics with obstacle avoidance
- Dynamic Obstacle Avoidance: Dynamic bicycle model moving obstacles
- Overtaking Maneuver: Complex street scenario with dual moving obstacles
- Container Crane Control: Advanced control with swing suppression
Atmospheric and Environmental Systems
- Hang Glider Flight: Thermal soaring optimization with atmospheric updrafts
Interdisciplinary Applications
- Two-Strain Tuberculosis Model: Epidemiological optimal control with drug resistance dynamics
Benchmark and Classical Problems
- Hypersensitive Problem: Challenging optimal control benchmark with sensitive dynamics
- Brachistochrone: Classical fastest descent problem
Architecture
MAPTOR provides a layered architecture separating trajectory design from numerical implementation:
User API (Problem, solve_adaptive, solve_fixed_mesh)
↓
Trajectory Definition (States, controls, dynamics, constraints)
↓
Mathematical Framework (Radau pseudospectral method)
↓
Symbolic Computation (CasADi expressions and differentiation)
↓
Optimization (IPOPT nonlinear programming solver)
Key Design Principles:
- Intuitive API: Define trajectories naturally without numerical details
- Automatic differentiation: CasADi handles complex derivative computations
- Adaptive precision: Mesh refinement ensures solution accuracy
- Multiphase support: Complex missions with automatic phase transitions
Contributing
We currently do not accept code submissions, but we welcome issues and feedback reports from the trajectory optimization and optimal control community. Please use GitHub Issues to:
- Report bugs or unexpected behavior
- Request new features or enhancements
- Ask questions about usage or implementation
- Suggest improvements to documentation or examples
- Share feedback on your experience with MAPTOR
Your input helps improve MAPTOR for the entire community.
License
MAPTOR is licensed under the GNU Lesser General Public License v3.0. This allows use in both open source and proprietary applications while ensuring improvements to the core library remain open.
Citation
If you use MAPTOR in academic research, please cite:
@software{maptor2025,
title={MAPTOR: Multiphase Adaptive Trajectory Optimizer},
author={Timothy, David},
year={2025},
url={https://github.com/maptor/maptor},
version={0.2.0}
}
References
MAPTOR builds upon established methods in computational optimal control:
Optimal Control Theory and Methods:
- Betts, J. T. (2020). Practical Methods for Optimal Control Using Nonlinear Programming, Third Edition. Society for Industrial and Applied Mathematics. https://doi.org/10.1137/1.9781611976199
Pseudospectral Methods:
- Agamawi, Y. M., & Rao, A. V. (2020). CGPOPS: A C++ Software for Solving Multiple-Phase Optimal Control Problems Using Adaptive Gaussian Quadrature Collocation and Sparse Nonlinear Programming. ACM Transactions on Mathematical Software, 46(3), Article 25. https://doi.org/10.1145/3390463
Adaptive Mesh Refinement:
- Haman III, G. V., & Rao, A. V. (2024). Adaptive Mesh Refinement and Error Estimation Method for Optimal Control Using Direct Collocation. arXiv preprint arXiv:2410.07488. https://arxiv.org/abs/2410.07488
Symbolic Computation Framework:
- Andersson, J. A. E., Gillis, J., Horn, G., Rawlings, J. B., & Diehl, M. (2019). CasADi -- A software framework for nonlinear optimization and optimal control. Mathematical Programming Computation, 11(1), 1-36. https://doi.org/10.1007/s12532-018-0139-4
Support
- Documentation: https://maptor.github.io/maptor
- Issues: GitHub Issues
Acknowledgments
MAPTOR implements methods from the computational optimal control literature, particularly pseudospectral collocation techniques and adaptive mesh refinement strategies. The framework leverages CasADi for symbolic computation and automatic differentiation.
Next Steps: Begin with the Quick Start Guide or explore the Examples Gallery to see MAPTOR applied to trajectory optimization problems in your domain.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file maptor-0.2.0.tar.gz.
File metadata
- Download URL: maptor-0.2.0.tar.gz
- Upload date:
- Size: 103.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f6569cd19e78a7cda019641c14f8a7212f8304c9d0f5bc5ee132e0229f4ff621
|
|
| MD5 |
a00e2a8d17a7dac22a3e63765039df58
|
|
| BLAKE2b-256 |
b2f9308d2fc6b5b3d3a1afde4fb84dab34ab6c8d03a97a51020697b2a8bd479d
|
Provenance
The following attestation bundles were made for maptor-0.2.0.tar.gz:
Publisher:
release.yml on maptor/maptor
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
maptor-0.2.0.tar.gz -
Subject digest:
f6569cd19e78a7cda019641c14f8a7212f8304c9d0f5bc5ee132e0229f4ff621 - Sigstore transparency entry: 249310904
- Sigstore integration time:
-
Permalink:
maptor/maptor@41e42f977c6d64b9030c6cd0511be0a8e9de609f -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/maptor
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@41e42f977c6d64b9030c6cd0511be0a8e9de609f -
Trigger Event:
push
-
Statement type:
File details
Details for the file maptor-0.2.0-py3-none-any.whl.
File metadata
- Download URL: maptor-0.2.0-py3-none-any.whl
- Upload date:
- Size: 95.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
871f81a26adc91fd652041ef8f954d7ef64f5ce7ce2bea028e9c88b66d11f72a
|
|
| MD5 |
f7a03664d7061a89a35b4e028e37ca17
|
|
| BLAKE2b-256 |
ba981fcfed31d8b9d5fe3aa98b8f89c64bd7b5c24beb4d4a52cee4bcdc8bb7cf
|
Provenance
The following attestation bundles were made for maptor-0.2.0-py3-none-any.whl:
Publisher:
release.yml on maptor/maptor
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
maptor-0.2.0-py3-none-any.whl -
Subject digest:
871f81a26adc91fd652041ef8f954d7ef64f5ce7ce2bea028e9c88b66d11f72a - Sigstore transparency entry: 249310908
- Sigstore integration time:
-
Permalink:
maptor/maptor@41e42f977c6d64b9030c6cd0511be0a8e9de609f -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/maptor
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@41e42f977c6d64b9030c6cd0511be0a8e9de609f -
Trigger Event:
push
-
Statement type: