Skip to content

docs: rewrite README, update AGENTS.md, add 8 examples#87

Open
cagataycali wants to merge 5 commits intostrands-labs:mainfrom
cagataycali:docs/readme-examples
Open

docs: rewrite README, update AGENTS.md, add 8 examples#87
cagataycali wants to merge 5 commits intostrands-labs:mainfrom
cagataycali:docs/readme-examples

Conversation

@cagataycali
Copy link
Copy Markdown
Member

TL;DR

Complete documentation rewrite and 8 new examples covering simulation, hardware, and policy execution.

⚠️ Depends on: PR #86 (Robot factory) — merge last

What changed

File What
README.md Complete rewrite: 5-line promise, mermaid architecture diagram, installation extras, sim quickstart, policy examples
AGENTS.md Updated project structure with simulation modules, conventions
examples/01_sim_quickstart.py 5-line sim quickstart
examples/02_sim_agent.py Agent + simulation integration
examples/03_sim_recording.py Dataset recording to LeRobot format
examples/04_real_hardware.py Real hardware robot setup
examples/05_real_groot_policy.py GR00T policy on real hardware
examples/06_list_robots.py Robot discovery and listing
examples/act_policy_simulation.py ACT policy in MuJoCo sim with video
examples/physics_agent.py Natural language → physics introspection

No code changes

Docs and examples only. All 357 tests still pass.


Part 6 of 6 — final PR in the MuJoCo simulation decomposition

Full PR chain:

  1. fix: auto-adapt LeRobot state dimension instead of raising ValueError #82 — 🐛 LeRobot state dim fix
  2. chore: modernize build system — uv lockfile, Python >=3.12 #83 — 🔧 Build system (uv, py3.12, [sim])
  3. feat: simulation foundation — models, ABC, factory, model registry, assets #84 — 📐 Simulation foundation (models, ABC, registry)
  4. feat: MuJoCo simulation backend — AgentTool with 35 actions #85 — 🎮 MuJoCo backend (AgentTool, 35 actions)
  5. feat: Robot() factory + top-level lazy imports #86 — 🏭 Robot() factory
  6. docs: rewrite README, update AGENTS.md, add 8 examples #87 — 📖 Docs & examples (this PR)

- Bump requires-python from >=3.10 to >=3.12
- Move opencv-python-headless and Pillow to [sim] extra
- Add [sim] extra: mujoco, robot_descriptions, opencv, Pillow
- Add .python-version (3.12)
- Add uv.lock for deterministic builds
- Switch CI from hatch to uv
- Add libosmesa6-dev to CI for MuJoCo headless rendering
- Remove hatch env scripts (use uv run directly)
- Remove --cov from pytest addopts (run coverage explicitly)
- Update ruff target-version and mypy python_version to 3.12
- Trim pyproject.toml comments for readability

Why Python 3.12+: match statements, type aliases, ExceptionGroup
patterns used in upcoming simulation code. MuJoCo 3.x works best
with 3.12+. No users have reported needing 3.10/3.11 support.

Why move opencv/Pillow to [sim]: core strands-robots (hardware
control only) shouldn't require heavy image processing deps.
…ssets

Add the lightweight simulation framework abstractions:

- simulation/models.py: Dataclasses (SimWorld, SimRobot, SimObject,
  SimCamera, TrajectoryStep, SimStatus) — pure data, no physics deps
- simulation/base.py: SimulationBackend ABC defining the contract
  all backends (MuJoCo, Isaac, Newton) must implement
- simulation/factory.py: create_simulation() + pluggable backend
  registration system
- simulation/model_registry.py: URDF/MJCF path resolution via
  robot_descriptions package + search paths + custom registration
- assets/: Asset manager for auto-downloading robot meshes from
  MuJoCo Menagerie on first use
- tools/download_assets.py: @tool for asset downloads
- tests/test_simulation_foundation.py: 22 tests covering dataclasses,
  ABC instantiation/contracts, factory registration, model registry

No MuJoCo import required — all abstractions are lightweight.
Complete MuJoCo simulation backend composed of focused mixins:

  Simulation(AgentTool)
    ├── PhysicsMixin         # raycasting, jacobians, energy, forces,
    │                        # mass matrix, checkpoints, inverse dynamics
    ├── PolicyRunnerMixin    # run_policy, eval_policy, replay_episode
    ├── RenderingMixin       # RGB/depth offscreen rendering, observations
    ├── RecordingMixin       # LeRobot dataset recording
    └── RandomizationMixin   # domain randomization (colors, lighting, physics)

Supporting modules:
- backend.py: lazy mujoco import + headless GL auto-config (EGL/OSMesa/GLFW)
- mjcf_builder.py: procedural MJCF XML generation from dataclasses
- scene_ops.py: XML round-trip for runtime object/camera injection
- simulation.py: orchestrator dispatching 35 actions via tool_spec.json
- dataset_recorder.py: LeRobot v3 format recorder (parquet + video)

Key design decisions:
- Simulation extends AgentTool directly: Agent(tools=[Simulation()]) works
- Lazy MuJoCo import via _ensure_mujoco() — only when first needed
- XML round-trip for scene modification (standard: dm_control, robosuite)
- Same Policy ABC for sim and real — zero code changes for transfer

Tests: 47 new tests (12 E2E + 35 physics unit tests)
All use self-contained inline XML robots (no external files needed).
Add unified Robot() factory function that auto-detects sim vs real:

  Robot('so100')              → auto-detect → MuJoCo sim (default)
  Robot('so100', mode='sim')  → Simulation AgentTool
  Robot('so100', mode='real') → HardwareRobot AgentTool

Auto-detect priority:
1. STRANDS_ROBOT_MODE env var (explicit override)
2. USB probe for servo controllers (Feetech/Dynamixel)
3. Default to sim (safest — never accidentally send to hardware)

Also adds list_robots(mode='all'|'sim'|'real'|'both') for discovery.

Updates __init__.py with lazy imports:
- Robot (→ factory), list_robots
- Simulation, SimWorld, SimRobot, SimObject, SimCamera
- Auto-configures MuJoCo GL backend for headless environments

Tests: 22 new factory tests covering name resolution, aliases,
list_robots filtering, auto-detect mode, Robot() factory, imports.
- README.md: Complete rewrite with 5-line promise, mermaid architecture
  diagram, installation extras table, simulation quickstart, policy
  execution examples
- AGENTS.md: Updated project structure to include simulation modules,
  test instructions, and conventions
- examples/01_sim_quickstart.py: 5-line sim quickstart
- examples/02_sim_agent.py: Agent + simulation integration
- examples/03_sim_recording.py: Dataset recording to LeRobot format
- examples/04_real_hardware.py: Real hardware robot setup
- examples/05_real_groot_policy.py: GR00T policy on real hardware
- examples/06_list_robots.py: Robot discovery and listing
- examples/act_policy_simulation.py: ACT policy in MuJoCo sim
- examples/physics_agent.py: Natural language physics introspection
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: In review

Development

Successfully merging this pull request may close these issues.

1 participant