Skip to content

Add robot profile: boston_dynamics/spot/boston_dynamics.spot.mujoco-pybullet-sim.v1 - #86

Open
EslaM-X wants to merge 6 commits into
fabricfoundation:mainfrom
EslaM-X:feature/spot-tier1-sim
Open

Add robot profile: boston_dynamics/spot/boston_dynamics.spot.mujoco-pybullet-sim.v1#86
EslaM-X wants to merge 6 commits into
fabricfoundation:mainfrom
EslaM-X:feature/spot-tier1-sim

Conversation

@EslaM-X

@EslaM-X EslaM-X commented Aug 11, 2026

Copy link
Copy Markdown

🦾 Boston Dynamics Spot · Tier 1 Simulator Submission

Profile: boston_dynamics/spot/boston_dynamics.spot.mujoco-pybullet-sim.v1
Scope: Simulator-only · 8 paid skills · MuJoCo + PyBullet

A paid RoboPay action arriving on the Zenoh topic robot/tunnel/action
drives the official MuJoCo Spot model (mujoco_menagerie) through real,
policy-triggered skill episodes — joint-space control with body-weight
compensation, never a replayed animation or a built-in demo motion.


What's in the box

Path Purpose
registry/vendors/boston_dynamics/spot/boston_dynamics.spot.mujoco-pybullet-sim.v1/ Full robot action profile (robot · skills · functions · payment policy · execution mapping · example envelope · skill-contract tests · validation report)
simulation/spot/ Skill controller, x402 payment gate, Zenoh action link, 4 test suites
simulation/pybullet/ Sim-to-sim validation against the kinematic URDF + machine-readable report
simulation/setup.sh Pinned, reproducible fetch of the official Spot model assets

The 8 skills (all priced, all measurable)

wave · sit · stand · stop (safe stop) · bow · nod · turn_to_face · hold

Every skill is executed by a joint-space trajectory controller and reports
real simulator metrics — paw lift height, sit depth, torso pitch/yaw,
body height, achieved heading — then returns to the home stance
(|bodyZ − 0.434| < 0.02) so paid actions run back to back. stop is the
fail-safe skill: it halts motion and returns the robot to its stable home
pose (the wiki review checklist requires safe-stop behavior to be described).

Success criteria — cleared

  • End-to-end paid flow — paid action → Zenoh → skill episode → correlated result on robot/tunnel/result
  • Zenoh bridge — subscribes on robot/tunnel/action, republishes with actionId, responds on the documented result topic
  • Real action requirement — 8 non-trivial embodied skills, visually demonstrable (screen recording: simulation/docs/spot.gif)
  • Payment gate — unpaid ⇒ 402 + PAYMENT-REQUIRED; forged/expired receipts ⇒ 402; replayed idempotencyKey/txHash ⇒ 409; only status: success may settle
  • Success & failure semantics — success + 6 deliberately testable failure paths (UNPAID, INVALID_PARAMS, UNKNOWN_SKILL, WRONG_ROBOT, DUPLICATE, tampered paramsHash)
  • Reproducible — clean checkout + 4 commands, under 30 minutes, on Windows or ubuntu-latest (CI)
  • Safe stopstop skill halts motion and returns to the stable home stance (wiki review checklist)
  • Code quality — no secrets, configurable topics/robotId/model path, JSON logs, 4 test suites
  • Sim-to-sim — same joint configurations recomputed in MuJoCo and PyBullet agree to 0.06 cm across all salient poses (simulation/pybullet/sim2sim_report.json)

End-to-end flow

paid action (x402) → tunnel → Zenoh robot/tunnel/action
    → robopay_link.py → validate envelope + payment gate
    → joint-space Spot controller on mujoco_menagerie
    → metrics → result on robot/tunnel/result (correlated by actionId)

Evidence

Reproduce in < 30 minutes

git clone https://github.com/fabricfoundation/RoboPay.git
cd RoboPay/simulation
./setup.sh                      # pinned official Spot model assets
cd spot
python3 test_spot_control.py    # every skill's physics actually happen
python3 test_payment_gate.py    # 402/409, no-settle-on-failure
python3 test_result_semantics.py# success/error semantics, replay, tampering
python3 test_link.py            # paid action → Zenoh → episode → result
cd ../pybullet
python3 test_sim2sim.py         # MuJoCo ⇄ PyBullet kinematics agreement

Known limitations (honest scope)

  • Simulator-only submission — settlement is exercised end to end against the
    same local facilitator the robot link trusts; no on-chain settlement.
  • The Go tunnel binary is not run on Windows; the Python payment gate
    reimplements the exact x402 decisions the tunnel's middleware makes before
    actuation, and the wire contract is exercised through peer-mode Zenoh exactly
    as the tunnel would publish it.

Built with care by EslaM-X 🇪🇬 — open to review feedback and happy to
iterate on any criterion.

…im-to-sim 🇪🇬

Adds a simulator-only Tier-1 robot profile for the Boston Dynamics Spot
(google-deepmind/mujoco_menagerie) with seven paid skills — wave, sit,
stand, bow, nod, turn_to_face, hold — driven by a joint-space controller,
plus a sim-to-sim check (MuJoCo vs PyBullet, 0.06 cm agreement).

- registry/vendors/boston_dynamics/spot/boston_dynamics.spot.mujoco-pybullet-sim.v1/
  robot profile, skills, payment policy (x402, settle-on-success only),
  execution mapping, example envelope, skill-contract tests, validation report
- simulation/spot/: SpotController (MuJoCo), payment_gate.py (x402 402/409,
  settle-only-on-success), robopay_link.py (Zenoh action->skill->result),
  skills.json, simulate_paid_action.py, 4 tests
- simulation/pybullet/: kin URDF + test_sim2sim.py + sim2sim_report.json
- simulation/setup.sh fetches the pinned menagerie Spot model
- .github/workflows/spot-simulation-tests.yml runs the MuJoCo/PyBullet
  suite on ubuntu-latest
@EslaM-X
EslaM-X requested a review from a team August 11, 2026 13:07
@EslaM-X EslaM-X changed the title feat: Spot-price Tier-1 app (near-real-time prices) Add robot profile: boston_dynamics/spot/boston_dynamics.spot.mujoco-pybullet-sim.v1 Aug 11, 2026
@EslaM-X

EslaM-X commented Aug 11, 2026

Copy link
Copy Markdown
Author

👋 Maintainers — ready for review

The full simulation suite is green on my fork:
spot-simulation-testssuccess (Ubuntu, Python 3.12, 7 skills + payment
gate + result semantics + sim-to-sim, all passing).

The workflows on this PR are queued behind the first-time-contributor gate —
could you hit Approve and run? All three jobs are expected to pass:
Run Go Unit Tests, Run Go Lint, and spot-simulation-tests.

Review snapshot

  • Scope: simulator-only, declared clearly in the profile and README.
  • Payment safety: settle only on status: success; unpaid ⇒ 402, forged
    receipts ⇒ 402, replay ⇒ 409, tampered paramsHashINVALID_PARAMS — all
    covered by test_payment_gate.py and test_result_semantics.py.
  • Real action, not a demo: every skill is a joint-space trajectory driven
    by the controller on the official mujoco_menagerie model; metrics are
    measured, never scripted (screen recording: simulation/docs/spot.gif).
  • Sim-to-sim: MuJoCo ⇄ PyBullet agree to 0.06 cm across all salient
    poses (simulation/pybullet/sim2sim_report.json).

Happy to address any review feedback.

— EslaM-X 🇪🇬

Covers the wiki review-checklist item 'Emergency stop or safe stop behavior
is described': stop halts motion and returns the robot to the stable home
stance. Wired through the controller, skill catalog (JSON + YAML), execution
mapping, payment policy, validation report and the skill-acceptance test.
Adds captured CI terminal logs as demo evidence for the simulator-only
submission.
@EslaM-X

EslaM-X commented Aug 11, 2026

Copy link
Copy Markdown
Author

✅ Update — 8th skill (safe stop) + terminal-log evidence

Quick follow-up before review:

  • stop (safe stop) added as a priced skill — halts motion and returns
    the robot to the stable home stance on a short timeline. This covers the
    wiki review-checklist item "Emergency stop or safe stop behavior is
    described"
    . Wired through the controller, skill catalog (JSON + YAML),
    execution mapping, payment policy and the acceptance test.
  • Captured CI terminal logs added under simulation/docs/ci-logs.txt
    (paid action → Zenoh → episode → result), as required for simulator-only
    submissions.
  • CI re-run green on the fork (run 31497754516) with the new skill.

Still needs Approve and run on this PR's workflows from a maintainer.

— EslaM-X 🇪🇬

@EslaM-X

EslaM-X commented Aug 12, 2026

Copy link
Copy Markdown
Author

Hi @fabricfoundation — a quick update from my side 🙌

I've just added per-skill simulator screenshots (wave peak · sit crouch · bow · nod · turn · stance) next to the existing screen recording and the full terminal logs, so the paid skills are easy to eyeball without downloading anything.

Quick recap of where this submission stands:

  • ✅ Full paid flow: action → Zenoh
    obot/tunnel/action\ → joint-space controller on the official MuJoCo Spot → correlated result on
    obot/tunnel/result\
  • ✅ 8 priced skills, all measuring real simulator state (paw lift, sit depth, torso pitch/yaw, body height, achieved heading)
  • ✅ Payment gate: \402\ unpaid · \409\ replay · forged/expired receipts rejected · no settle on failure
  • ✅ 6 intentionally-testable failure paths, none of which actuate or settle
  • ✅ Sim-to-sim MuJoCo ⇄ PyBullet agrees to 0.06 cm
  • ✅ Reproducible from a clean checkout in < 30 min (Windows + ubuntu-latest CI, both green)

The honest scope is stated in the body: simulator-only, settlement exercised against the local facilitator — no on-chain settlement, no implied physical validation.

Open to any feedback — happy to iterate on whatever the reviewers want. 🦾

— EslaM-X 🇪🇬

- Run test_result_semantics.py and test_link.py headless on ubuntu-latest
  (eclipse-zenoh added), so the full paid-action wire contract is covered
  by CI like the Go2 suite.
- Rename the sim-to-sim artifact to spot_sim2sim_report.json and point the
  test, README and validation report at it.
- Unify simulation/setup.sh and simulation/README.md with the go2 branch
  (both robots share one pinned menagerie clone, idempotent).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant