Skip to content

feat(agibot-x2): Tier 1 obstacle-avoidance nav — MuJoCo + Webots Sim-to-Sim - #63

Open
Wanbogang wants to merge 1 commit into
fabricfoundation:agibot-x2-tier-1from
Wanbogang:agibot-x2-tier1-mujoco-webots-simtosim
Open

feat(agibot-x2): Tier 1 obstacle-avoidance nav — MuJoCo + Webots Sim-to-Sim#63
Wanbogang wants to merge 1 commit into
fabricfoundation:agibot-x2-tier-1from
Wanbogang:agibot-x2-tier1-mujoco-webots-simtosim

Conversation

@Wanbogang

Copy link
Copy Markdown

Summary

Adds an AgiBot X2 Tier 1 RoboPay bridge for obstacle-avoidance navigation, validated independently in two simulators (MuJoCo + Webots) per the Tier 1 Sim-to-Sim requirement.

Design

  • Settlement is execution-gated: settlementEligible=true only when both MuJoCo and Webots independently report reached_target=true, collided=false. A single-simulator success, disagreement, collision, or timeout is always error/not settlement-eligible.
  • A single simulator-agnostic potential-field policy (bridge/policy/obstacle_avoid_policy.py) drives both simulators identically, so a Sim-to-Sim disagreement reflects a genuine physics discrepancy rather than two different controllers.
  • Persistent SQLite replay store; duplicate actionId/idempotencyKey/payment authorization is rejected without re-executing (verified live: 0.108s vs full simulator run).
  • Full envelope/payment contract validation before actuation (wrong robot, unknown skill, invalid params, tampered paramsHash, unverified/settled/expired/mismatched payment).

Mesh assets

Vendor mesh assets were not fetchable at submission time from either upstream source (ioai-tech/robot_description LFS returns 404; AgiBotTech/genie_sim LFS budget exceeded — both reproducible, not local issues). x2_primitives.xml preserves the vendor kinematic chain (link/joint names and offsets from robot_description/mjcf/agibot/x2.xml) with primitive collision geometry instead of mesh. Full rationale and locomotion-abstraction notes in docs/README.md.

Validation

  • 23/23 automated tests pass (tests/test_bridge.py): reject-before-actuation, Sim-to-Sim disagreement (both directions), replay across bridge restart, audit-log privacy.
  • Manual, real-simulator verification (not mocked): successful episode (MuJoCo 7.85s / Webots 12.92s simulated time, both agree), collision-safety (policy never collides — refuses to enter obstacle radius, times out instead on an unreachable target), live duplicate-rejection timing.

Reviewer evidence

Full run logs, safety-property notes, and reproduction steps in docs/README.md under "Verified evidence" and "Run and test".

@Wanbogang
Wanbogang requested a review from a team August 1, 2026 07:31
@Wanbogang
Wanbogang changed the base branch from main to agibot-x2-tier-1 August 3, 2026 07:18
- Result-gated settlement: success only when both simulators
  independently confirm target reached without collision
- Shared potential-field policy drives both simulators identically
- Persistent replay store, reject-before-actuation contract validation
- Collision-primitive MJCF model (vendor mesh assets unavailable at
  submission time; see docs/README.md)
- 23 automated tests, plus manual verification with real simulators
  (collision-safety, replay/duplicate protection)
@Wanbogang
Wanbogang force-pushed the agibot-x2-tier1-mujoco-webots-simtosim branch from 38a594b to 3c8db07 Compare August 3, 2026 07:26
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