Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

License: Apache 2.0


Getting Started

Installation

Stable

To grab the latest stable release simply run

pip install openscvx

to install OpenSCVx in your python environment.

Or using uv:

uv pip install openscvx

For optional dependencies:

pip install openscvx[gui,cvxpygen]
# or with uv
uv pip install openscvx[gui,cvxpygen]
Nightly

To install the latest development version (nightly):

pip install --pre openscvx

With optional dependencies:

pip install --pre openscvx[gui,cvxpygen]

Or using uv:

uv pip install --pre openscvx
# With optional dependencies
uv pip install --pre openscvx[gui,cvxpygen]

Note: The --pre flag tells pip/uv to install pre-release versions (e.g., 1.2.4.dev3) from PyPI.

Alternatively, for local development with the latest source:

# Clone the repo
git clone https://github.com/OpenSCvx/OpenSCvx.git
cd OpenSCvx

# Install in editable/development mode
pip install -e .
# or with uv
uv pip install -e .

Dependencies

The main packages are:

  • cvxpy - is used to formulate and solve the convex subproblems
  • jax - is used for determining the Jacobians using automatic differentiation, vectorization, and ahead-of-time (AOT) compilation of the dynamics and their Jacobians
  • numpy - is used for numerical operations
  • diffrax - is used for the numerical integration of the dynamics
  • termcolor - is used for pretty command line output
  • plotly - is used for all visualizations

These will be installed automatically, but can be installed via conda or pip if you are building from source.

GUI Dependencies (Optional)

For interactive 3D plotting and real-time visualization, additional packages are required:

  • pyqtgraph - is used for interactive 3D plotting and real-time visualization
  • PyQt5 - provides the Qt5 GUI framework for pyqtgraph
  • scipy - is used for spatial transformations in plotting functions
  • PyOpenGL - provides OpenGL bindings for Python, required for 3D plotting
  • PyOpenGL_accelerate - (optional) speeds up PyOpenGL

For local development:

pip install -e ".[gui]"

CVXPYGen Dependencies (Optional)

For code generation and faster solver performance, CVXPYGen can be installed:

  • cvxpygen - enables code generation for faster solver performance
  • qocogen - custom solver backend for CVXPYGen (included with cvxpygen extras)

To install with CVXPYGen support:

pip install openscvx[cvxpygen]

Or for both GUI and CVXPYGen:

pip install openscvx[gui,cvxpygen]

CVXPYGen features include:

  • Automatic C++ code generation for optimization problems
  • Faster solver performance through compiled code
  • Support for custom solver backends like QOCOGen

Local Development

This git repository can be installed using https

git clone https://github.com/OpenSCvx/OpenSCvx.git

or ssh

git clone git@github.com:haynec/OpenSCvx.git

Dependencies can then be installed using Conda or Pip

Via Conda
  1. Clone the repo using https or ssh

  2. Create a conda environment with Python:

    conda create -n openscvx python>=3.9
    
  3. Activate the environment:

    conda activate openscvx
    
  4. Install the package with dependencies:

    pip install -e .
    

    Or install with optional dependencies:

    pip install -e ".[gui,cvxpygen]"
    
Via uv
  1. Prerequisites

    • Install uv
  2. Clone the repo using https or ssh

  3. Create virtual environment and install the package:

    uv venv
    source .venv/bin/activate  # On Windows: .venv\Scripts\activate
    uv pip install -e .
    

    Or install with optional dependencies:

    uv pip install -e ".[gui,cvxpygen]"
    
Via pip
  1. Prerequisites Python >= 3.9

  2. Clone the repo using https or ssh

  3. Create virtual environment (called venv here) and source it

    python3 -m venv venv
    source venv/bin/activate
    
  4. Install the package with dependencies:

    pip install -e .
    

    Or install with optional dependencies:

    pip install -e ".[gui,cvxpygen]"
    

Running Trajectory Optimization

See examples/ folder for several example trajectory optimization problems grouped by application. To run a problem simply run any of the examples directly, for example:

python3 examples/abstract/brachistochrone.py

Note: To run the examples, you'll need to clone this repository and install OpenSCvx in editable mode (pip install -e .). See the Local Development section above for detailed installation instructions.

and adjust the plotting as needed.

Check out the problem definitions inside examples/ to see how to define your own problems.

Code Structure

ToDos

  • Standardized Vehicle and Constraint classes
  • Implement QOCOGen with CVPYGEN
  • Non-Dilated Time Propagation
  • Save and reload the compiled JAX code
  • Unified Mathematical Interface
  • Auto-SCvx Weight Tuning
  • Compiled at the subproblem level with JAX
  • Single Shot propagation

What is implemented

This repo has the following features:

  1. Free Final Time
  2. Fully adaptive time dilation (s is appended to the control vector)
  3. Continuous-Time Constraint Satisfaction
  4. FOH and ZOH exact discretization (t is a state so you can bring your own scheme)
  5. Vectorized and Ahead-of-Time (AOT) Compiled Multishooting Discretization
  6. JAX Autodiff for Jacobians

(back to top)

Acknowledgements

This work was supported by a NASA Space Technology Graduate Research Opportunity and the Office of Naval Research under grant N00014-17-1-2433. The authors would like to acknowledge Natalia Pavlasek, Samuel Buckner, Abhi Kamath, Govind Chari, and Purnanand Elango as well as the other Autonomous Controls Laboratory members, for their many helpful discussions and support throughout this work.

Citation

Please cite the following works if you use the repository,

@ARTICLE{hayner2025los,
        author={Hayner, Christopher R. and Carson III, John M. and Açıkmeşe, Behçet and Leung, Karen},
        journal={IEEE Robotics and Automation Letters}, 
        title={Continuous-Time Line-of-Sight Constrained Trajectory Planning for 6-Degree of Freedom Systems}, 
        year={2025},
        volume={},
        number={},
        pages={1-8},
        keywords={Robot sensing systems;Vectors;Vehicle dynamics;Line-of-sight propagation;Trajectory planning;Trajectory optimization;Quadrotors;Nonlinear dynamical systems;Heuristic algorithms;Convergence;Constrained Motion Planning;Optimization and Optimal Control;Aerial Systems: Perception and Autonomy},
        doi={10.1109/LRA.2025.3545299}}
@misc{elango2024ctscvx,
      title={Successive Convexification for Trajectory Optimization with Continuous-Time Constraint Satisfaction}, 
      author={Purnanand Elango and Dayou Luo and Abhinav G. Kamath and Samet Uzun and Taewan Kim and Behçet Açıkmeşe},
      year={2024},
      eprint={2404.16826},
      archivePrefix={arXiv},
      primaryClass={math.OC},
      url={https://arxiv.org/abs/2404.16826}, 
}
@misc{chari2025qoco,
  title = {QOCO: A Quadratic Objective Conic Optimizer with Custom Solver Generation},
  author = {Chari, Govind M and A{\c{c}}{\i}kme{\c{s}}e, Beh{\c{c}}et},
  year = {2025},
  eprint = {2503.12658},
  archiveprefix = {arXiv},
  primaryclass = {math.OC},
}

Metadata

Release files for openscvx 0.3.2.dev274

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for openscvx 0.3.2.dev274
File Size Uploaded
openscvx-0.3.2.dev274.tar.gz 32.9 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for openscvx 0.3.2.dev274
File Interpreter ABI Platform
openscvx-0.3.2.dev274-py3-none-any.whl Python 3 none any Details

Total release size: 33.2 MB

Release files / openscvx-0.3.2.dev274.tar.gz

Download URL openscvx-0.3.2.dev274.tar.gz
Size 32.9 MB
Tags Source
SHA-256 checksum
How to use checksums
f84acae0717f309646ed665abe21e2fcf218b3fcaf640eee4c47b101f38d6b9c
BLAKE2b-256 checksum
How to use checksums
c7e1bfe35f7796c5003a34ad8c30ed845c521c76d7642f676e3a753f44670c5c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / openscvx-0.3.2.dev274-py3-none-any.whl

Download URL openscvx-0.3.2.dev274-py3-none-any.whl
Size 247.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
16638ddcb96f4313bf6f313c142a22ac673efe590b568d98f45381113e61a5b0
BLAKE2b-256 checksum
How to use checksums
2d6bb9a6773651d11cf3d584241e47285fd4558c017fda1b567dafb779de17ba
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.0

2 release files

This release

0.3.2.dev274 This release

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.2

1 release file

0.2.1

1 release file

0.1.3

1 release file

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page