📢 Note: SoRoMoX is the successor to the JSRM package. It introduces significant improvements including support for an extended set of systems (Spatial PCS, GVS, and articulated soft robots), replacement of symbolic derivations with numerical implementations for better scalability and faster JIT compilation, and migration from a functional to an object-oriented architecture using Equinox dataclasses for enhanced extendability.
SoRoMoX provides three core capabilities for soft robotics research:
- Soft Robot Models: Kinematic and dynamic models of continuum and articulated soft robots with JAX implementation
- Model-Based Control: Comprehensive suite of controllers including PID, gravity cancellation, potential shaping, impedance control, and computed torque
- Visualization: Multiple rendering backends (Matplotlib, Open3D, Viser, OpenCV) for 2D and 3D visualization
SoRoMoX includes strain-based continuum models for slender structures (Cosserat rods), planar benchmarks, and spatial articulated soft robot systems. The following systems are implemented:
| System Type | Variants |
|---|---|
| Articulated Systems | Pendulum, Tendon-Actuated Pendulum, Articulated Soft Robot |
| PCS (Piecewise Constant Strain) | Planar, Spatial, Threadlike-Actuated, I-SUPPORT |
| GVS (Geometric Variable Strain) | Spatial, Tendon-Actuated |
| HSA (Handed Shearing Auxetics) | Planar |
We are happy to receive contributions for other soft robot models. See the Contributing Guide for more details.
Citation
Please use the following citation if you use our software in your (scientific) work:
Software Citation
@software{soromox2026,
title = {SoRoMoX: Soft Robot Models in JAX},
author = {Stölzle, Maximilian and Gribonval, Solange and {Feliu-Talegon}, Daniel and Perfetta, Vito Daniele and Martini, Michele and Zhang, Chuhan and Wong, Kiwan and Rus, Daniela and {Della Santina}, Cosimo},
year = {2026},
url = {https://github.com/tud-phi/soromox},
version = {0.2.0},
abstract = {Kinematic and dynamic models of continuum and articulated soft robots implemented in JAX.}
}
Planar HSA Model Citation
The model of the kinematics and dynamics of the planar HSA robot are part of the publication "An Experimental Study of Model-based Control for Planar Handed Shearing Auxetics Robots" presented at the 18th International Symposium on Experimental Robotics.
@inproceedings{stolzle2023experimental,
title={An experimental study of model-based control for planar handed shearing auxetics robots},
author={St{\"o}lzle, Maximilian and Rus, Daniela and Della Santina, Cosimo},
booktitle={International Symposium on Experimental Robotics},
pages={153--167},
year={2023},
organization={Springer}
}
Model-Based Controllers Citation
If you found the implementation of the model-based controllers (e.g., PID, gravity cancellation, potential shaping regulators) useful, please consider also citing the following PhD thesis:
@phdthesis{stolzle2025phdthesis,
title = "Safe yet Precise Soft Robots: Incorporating Physics into Learned Models for Control",
keywords = "Soft Robotics, Nonlinear Control, Machine Learning, Artificial Intelligence",
author = "Maximilian St{\"o}lzle",
year = "2025",
month = "9",
day = "15",
language = "English",
type = "Dissertation (TU Delft)",
school = "Mechanical Engineering, Delft University of Technology",
doi = "10.4233/uuid:24c1f667-8fd6-431a-bb78-11d22f8cb3da",
isbn = "978-94-6384-836-7",
}
Installation
The package can be installed from PyPI using pip:
pip install soromox
or using uv (recommended for faster installation):
uv pip install soromox
Development Installation
For local development from the source code:
# Using pip
pip install -e .
# Using uv
uv pip install -e .
Optional Dependencies (extras)
The default install keeps the runtime dependency set small. Install one or more extras when you need development tools, examples, rendering backends, RL workflows, or the dependencies used to reproduce the paper results.
| Extra | Use this for | Main packages included |
|---|---|---|
dev |
Local development, linting, formatting, tests, coverage, release checks, and pre-commit hooks. | ruff, pytest, coverage, tox, pre-commit, bump2version, check-manifest, seaborn |
docs |
Building and serving the documentation site locally. | zensical, mkdocstrings, mkdocstrings-python |
examples |
Running the example scripts under examples/. |
matplotlib, seaborn, ipython, optax, optimistix, open3d, opencv-python, plotly, trimesh, viser, ffmpeg-python |
rendering |
Using optional rendering backends and exporting plots, videos, or interactive visualizations. | matplotlib, open3d, opencv-python, plotly, trimesh, viser, ffmpeg-python |
rl |
Training and evaluating reinforcement-learning controllers with SoRoMoX, including parallel RL workflows. | gymnasium, stable-baselines3, matplotlib |
paper_results |
Reproducing the paper results, including benchmarking scripts, RL experiments, visualization, and comparison baselines. | cbfpy, elastica, gymnasium, stable-baselines3, plus the example and rendering stack |
test |
Running the test suite without the full development stack. | pytest, pytest-cov, pytest-html, coverage, tox, codecov |
all |
Broad convenience install for users who want one environment with most optional tooling. For reproducible workflows, prefer the task-specific extras above. | See the all extra in pyproject.toml |
Quote extras in shell commands so shells such as zsh do not interpret the square brackets as glob patterns. Install from PyPI with:
pip install "soromox[rendering]"
pip install "soromox[rl]"
For a local editable source install, use pip or uv:
pip install -e ".[dev,docs,examples]"
uv pip install -e ".[rendering]"
To reproduce the paper results or run RL experiments from the source checkout:
uv pip install -e ".[paper_results]"
uv pip install -e ".[rl]"
Using uv for Project Management
You can also use uv to manage the project with a virtual environment:
# Create a virtual environment and install the package
uv venv
uv pip install -e ".[dev,examples]"
# Or use uv sync for reproducible installs (creates uv.lock)
uv sync --extra dev --extra examples
uv sync --extra paper_results
uv sync --extra rl
Running Tests with Coverage
Coverage.py is included in the dev, test, and all extras. To run the test suite with the project coverage settings:
uv run --extra test make coverage
or call Coverage.py directly:
uv run --extra test python -m coverage run -m pytest
uv run --extra test python -m coverage report
For CI uploads, generate an XML report with:
uv run --extra test make coverage_xml
Usage
Simply call one of the example scripts to simulate a system. For example, to simulate the N-link pendulum:
python examples/simulation/pendulum/simulate_pendulum.py
or to simulate the planar PCS robot:
python examples/simulation/pcs/simulate_planar_pcs.py
For model-based control examples:
python examples/control/configuration_space/setpoint_regulation_comparison.py
Documentation
The full documentation is available at: https://tud-phi.github.io/soromox
Building Documentation Locally
To build and serve the documentation locally:
# Install documentation dependencies
uv sync --extra docs
# Serve documentation with live reload
uv run --extra docs zensical serve
The documentation will be available at http://127.0.0.1:8000.
Building Documentation for Production
# Build static documentation
uv run --extra docs zensical build --clean
# Zensical does not currently support MkDocs-style strict mode.
# The CI workflow runs the same build command.
You can also use the Makefile targets:
# Serve locally
make docs-serve
# Build documentation
make docs-build
# Build with strict mode checking
make docs-build-strict
Version Management and Releases
This project includes automated version management and release creation tools. The version bump system updates version information across all relevant files and can automatically create GitHub releases.
Version Bumping
You can bump the version using the following Makefile targets:
# Increment patch version (0.1.0 -> 0.1.1) - for bug fixes
make bump-patch
# Increment minor version (0.1.0 -> 0.2.0) - for new features
make bump-minor
# Increment major version (0.1.0 -> 1.0.0) - for breaking changes
make bump-major
# Set a specific version
make bump-version VERSION=0.2.0
Automated Releases
To create a complete release with automatic GitHub release creation:
# Create a patch release with GitHub release
make release-patch
# Create a minor release with GitHub release
make release-minor
# Create a major release with GitHub release
make release-major
# Create a specific version release
make release VERSION=1.0.0
Preview Changes (Dry Run)
Before making any changes, you can preview what would be updated using the dry run mode:
# Preview a patch version bump without making changes
python bump_version.py --patch --dry-run
# Preview a minor version bump
python bump_version.py --minor --dry-run
# Preview a specific version
python bump_version.py 0.2.0 --dry-run
The dry run mode will show you:
- Current version
- New version that would be set
- List of files that would be modified
- No actual changes are made to any files
What Gets Updated
The version bump process automatically updates:
pyproject.toml- Main project versionCITATION.cff- Citation version and release dateREADME.mdanddocs/index.md- BibTeX version, year, and citation keydocs/development/changelog.md- Moves unreleased notes into a dated releaseuv.lock- Local package version
Generated *.egg-info metadata is not tracked or edited; package builds
regenerate it from pyproject.toml.
Automated Release Process
When you use the release-* commands, the following happens automatically:
- Version numbers are updated in all relevant files
- Changes are committed to git
- A version tag (e.g.,
v0.1.1) is created - Changes and tags are pushed to GitHub
- GitHub Actions verifies the tag, builds and validates the distributions once
- The validated artifacts are attached to a GitHub release
- The same artifacts are published to PyPI through trusted publishing
Only the release metadata files listed above are staged automatically. Other tracked or untracked worktree files are left untouched.
For more detailed information, see VERSION_BUMP_README.md.
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 soromox-0.2.0.tar.gz.
File metadata
- Download URL: soromox-0.2.0.tar.gz
- Upload date:
- Size: 351.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c3663399a8894591a315807fb14a4891cc625e76c056e6fa275b5902b690aa83
|
|
| MD5 |
6fbd726c2e421e0fa1ee2a4121092278
|
|
| BLAKE2b-256 |
64964078e92083db9a0b0b14a01a37f3e2bdce72afa982fb43564fc73aacea8f
|
Provenance
The following attestation bundles were made for soromox-0.2.0.tar.gz:
Publisher:
release.yml on tud-phi/soromox
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
soromox-0.2.0.tar.gz -
Subject digest:
c3663399a8894591a315807fb14a4891cc625e76c056e6fa275b5902b690aa83 - Sigstore transparency entry: 2283270242
- Sigstore integration time:
-
Permalink:
tud-phi/soromox@a7fa6faa903c584c6fad64ddc465ce01c3f1fe4e -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/tud-phi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a7fa6faa903c584c6fad64ddc465ce01c3f1fe4e -
Trigger Event:
push
-
Statement type:
File details
Details for the file soromox-0.2.0-py3-none-any.whl.
File metadata
- Download URL: soromox-0.2.0-py3-none-any.whl
- Upload date:
- Size: 409.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c991f5b4ad9ceda804aecfd4255cdb1c167aa24d47d8cb882a5945ceb4e24b25
|
|
| MD5 |
4e1e32cc0c5107de27acb7f6cb84cca3
|
|
| BLAKE2b-256 |
1f6aff7c85f27a0d07011963ceec3e88cf5225f8b50413aadce9e8b54ab92474
|
Provenance
The following attestation bundles were made for soromox-0.2.0-py3-none-any.whl:
Publisher:
release.yml on tud-phi/soromox
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
soromox-0.2.0-py3-none-any.whl -
Subject digest:
c991f5b4ad9ceda804aecfd4255cdb1c167aa24d47d8cb882a5945ceb4e24b25 - Sigstore transparency entry: 2283270288
- Sigstore integration time:
-
Permalink:
tud-phi/soromox@a7fa6faa903c584c6fad64ddc465ce01c3f1fe4e -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/tud-phi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a7fa6faa903c584c6fad64ddc465ce01c3f1fe4e -
Trigger Event:
push
-
Statement type: