Skip to main content

Tools for generating MuJoCo models and Gym-style environments for isoperimetric truss robots.

Project description

mujoco-truss-gen

mujoco-truss-gen is a Python package for generating MuJoCo models and Gymnasium-style environments for triangle-based isoperimetric truss robots.

The package is intended for members of the isoperimetric robot research workflow who need a shared, installable source of MuJoCo robot models instead of copying model-generation code between reinforcement learning, planning, simulation, and optimization projects.

Status

This repository is an internal lab prototype. It has a working installable package, built-in structure presets, a small public API, and tests that verify basic model generation and environment stepping. The API may still change before the package is treated as stable research infrastructure.

Supported workflows include:

  • Generate MuJoCo MjSpec models for triangle-based truss structures.
  • Use built-in "octahedron", "icosahedron", "solar_array", "tetrahedron", Usevitch et al. triangle-decomposable graph presets, and Henneberg routed continuous-tendon graph presets.
  • Build abstract slide-joint models or realistic triangle-body models.
  • Save generated MuJoCo XML.
  • Wrap generated models in Gymnasium-compatible environments.
  • Convert STL meshes into experimental routed-tube shape dictionaries.

Installation

After a release has been published to PyPI:

python -m pip install mujoco-truss-gen

For local development from a clone:

git clone https://github.com/isaa-sudweeks/mujoco-truss-gen.git
cd mujoco-truss-gen
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e ".[dev]"

The package requires Python 3.10 or newer and installs these runtime dependencies:

  • gymnasium
  • mujoco
  • networkx
  • numpy
  • scipy

Quick Start

Generate the built-in octahedron model:

from mujoco_truss_gen import get_mujoco_spec

spec = get_mujoco_spec("octahedron", realistic=False)
model = spec.compile()

Save generated XML:

from mujoco_truss_gen import get_mujoco_spec, save_xml

spec = get_mujoco_spec("octahedron", realistic=False)
xml_path = save_xml(spec, "octahedron.xml")

Run one Gymnasium step:

import numpy as np

from mujoco_truss_gen import MujocoRelativeObsEnv, TrussEnvConfig, get_mujoco_spec

spec = get_mujoco_spec("octahedron", realistic=False)
env = MujocoRelativeObsEnv(
    TrussEnvConfig(
        model_source=spec,
        max_steps=1_000,
        nsubsteps=4,
        speed=0.01,
    )
)

obs, info = env.reset(seed=0)
action = np.zeros(env.action_space.shape, dtype=np.float32)
obs, reward, terminated, truncated, info = env.step(action)
env.close()

Open the built-in octahedron model from the command line:

python -m mujoco_truss_gen.generate_mujoco_model

On macOS, MuJoCo's passive viewer may require running viewer scripts with mjpython instead of the standard python executable.

Routed continuous-tube presets such as tetrahedron are unconstrained all-edge-actuated models. They also support realistic=True, which clones shared routed node occurrences and connects them through in-plane bisector rods. Use MujocoNodeVelocityCommandEnv for node-level scalar velocity commands that are mapped through the route incidence matrix to edge actuator commands. For manual testing, view_node_velocity_terminal(spec) opens the MuJoCo viewer and accepts terminal commands such as set node_2 0.01, show, zero, and quit. Henneberg routed graph presets such as henneberg_n8_2tube are generated from H1/H2 minimally rigid graph candidates, decomposed into continuous routed tendons, and accepted only after a deterministic 3D embedding passes an infinitesimal-rigidity check.

Documentation

  • Model generation: custom trusses, routed shape dictionaries, model modes, and generation helper contracts.
  • Environments: environment constructors, actions, observations, rewards, rendering, and TrussEnvConfig.
  • STL import: optional STL-to-routed-tube conversion and preview behavior.
  • GNN utilities: extracting graph features and edge indices for PyTorch Geometric workflows.
  • Development: local setup, tests, linting, formatting, and package builds.
  • Releasing: automated and manual PyPI release steps.
  • Roadmap: known limitations and planned work.

Example

Start from the included custom-truss example:

python examples/custom_truss.py

Citation

There is no formal citation for this package yet.

The Usevitch graph presets are based on:

Nathan Usevitch, Isaac Weaver, and James Usevitch. "Triangle-Decomposable Graphs for Isoperimetric Robots." arXiv:2505.01624, 2025. https://arxiv.org/abs/2505.01624

License

This project is distributed under the BSD-3-Clause license. See LICENSE for the full license text.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mujoco_truss_gen-0.10.0.tar.gz (82.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mujoco_truss_gen-0.10.0-py3-none-any.whl (73.4 kB view details)

Uploaded Python 3

File details

Details for the file mujoco_truss_gen-0.10.0.tar.gz.

File metadata

  • Download URL: mujoco_truss_gen-0.10.0.tar.gz
  • Upload date:
  • Size: 82.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mujoco_truss_gen-0.10.0.tar.gz
Algorithm Hash digest
SHA256 bdcd7a13b91a0369d0c7e0ffa26e6da14f7a7adcdc6a3ca2ba2aedd4288d84ec
MD5 a96edf40a7989a7f5302f636ce54fc16
BLAKE2b-256 000787d3a60fc070c1b3cc249d8d81c0b18086f42818a3175ec619910b27c17d

See more details on using hashes here.

Provenance

The following attestation bundles were made for mujoco_truss_gen-0.10.0.tar.gz:

Publisher: publish.yml on isaa-sudweeks/mujoco-truss-gen

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mujoco_truss_gen-0.10.0-py3-none-any.whl.

File metadata

File hashes

Hashes for mujoco_truss_gen-0.10.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4a4d4983f2c3510db7ed7df9a1fecf5b0c19805b4961cb034ba3829a7819737b
MD5 b7c719bad31b51b9844f52ace73b9615
BLAKE2b-256 d494bfe20afe31adc1e7d34ddba4faedf7820b0fe694416afcc6bbccf64a1da8

See more details on using hashes here.

Provenance

The following attestation bundles were made for mujoco_truss_gen-0.10.0-py3-none-any.whl:

Publisher: publish.yml on isaa-sudweeks/mujoco-truss-gen

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page