Skip to content

Yam - #184

Open
scilwb wants to merge 8 commits into
RLinf:mainfrom
scilwb:yam
Open

Yam#184
scilwb wants to merge 8 commits into
RLinf:mainfrom
scilwb:yam

Conversation

@scilwb

@scilwb scilwb commented Sep 14, 2026

Copy link
Copy Markdown

Adds YAM dual-arm support aligned with RoboTwin primitive names and interfaces, reusing RPent’s shared exploration lifecycle, MemoryManager, RPC, and Dashboard. Includes Pi0.5 integration and diagnostic tasks.

Validation:

  • unit tests passed;
  • Wheel installation tests and pre-commit checks passed.
  • Actual-model offline collision checks passed.
  • Onsite validation covered dual-arm primitives and Dashboard control handoff.

Full autonomous task success remains unverified.

Copilot AI lite review requested due to automatic review settings September 14, 2026 14:30
@read-the-docs-community

read-the-docs-community Bot commented Sep 14, 2026

Copy link
Copy Markdown

Documentation build overview

📚 RPent-cn | 🛠️ Build #34563145 | 📁 Comparing 3e4a888 against latest (28bff49)

  🔍 Preview build  

4 files changed
+ rst_source/usage/yam.html
± rst_source/usage/configure_planner.html
± rst_source/usage/franka.html
± rst_source/usage/robotwin.html

@read-the-docs-community

read-the-docs-community Bot commented Sep 14, 2026

Copy link
Copy Markdown

Documentation build overview

📚 RPent | 🛠️ Build #34563144 | 📁 Comparing 3e4a888 against latest (28bff49)

  🔍 Preview build  

4 files changed
+ rst_source/usage/yam.html
± rst_source/usage/configure_planner.html
± rst_source/usage/franka.html
± rst_source/usage/robotwin.html

Resolve CLI and Dashboard exploration conflicts against 28bff49.
Reuse upstream exploration capabilities and physical-scene handoff rules;
retain external-ENV operator receipts and YAM diagnostic dispatch.

Validate real-robot terminal restrictions and YAM external Dashboard entry.
Full unit suite: 582 passed, 3 skipped. Wheel checks: 2 passed.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Unresolved critical and moderate findings remain in YAM runtime lifecycle, toolkit status handling, geometry, and primitive-validation paths.

Get a fresh assessment by requesting another Copilot review.

Pull request overview

Adds dual-arm YAM support to RPent, including shared exploration, Dashboard, memory, RPC, and Pi0.5 workflows. Validation passed, but full autonomous task success remains unverified.

Changes:

  • Adds YAM runtime, primitives, projection, safety, diagnostics, recovery, and operator controls.
  • Integrates Pi0.5 VLA execution with shared RPent components.
  • Adds contract/install tests and English and Chinese documentation.

Final findings include two moderate geometry issues, two moderate primitive-validation issues, one critical and one moderate runtime issue, one critical toolkit issue, and one operator-control nit.

File summaries
File Reviewed changes
tests/unit_tests/rpent/utils/rpc/test_transport_loopback.py RPC loopback and NumPy payload tests
tests/unit_tests/rpent/robots/test_registry_contracts.py Registry and exploration contracts
tests/unit_tests/rpent/planner/test_codex_contracts.py Planner finish and retry contracts
tests/unit_tests/rpent/dashboard/test_state_contracts.py Dashboard handoff and continuation contracts
tests/unit_tests/rpent/dashboard/test_session_contracts.py Dashboard session lifecycle fixtures
tests/unit_tests/rpent/cli/test_main_contracts.py CLI finalization contracts
tests/unit_tests/robots/yam/test_yam_toolkit_contracts.py YAM toolkit, episode, and recipe contracts
tests/unit_tests/robots/yam/test_yam_tool_schema_contracts.py YAM tool schema validation
tests/unit_tests/robots/yam/test_yam_runtime_contracts.py YAM runtime safety and lifecycle contracts
tests/unit_tests/robots/yam/test_yam_dashboard_contracts.py YAM Dashboard integration
tests/unit_tests/robots/yam/conftest.py YAM test fixtures
tests/integration_tests/robots/yam/test_installation.py YAM installation behavior
rpent/utils/rpc/socket_rpc.py NumPy-compatible RPC framing
rpent/tools/toolkit.py Shared toolkit integration
rpent/robots/robot_spec.py Robot exploration capability contracts
rpent/robots/components/env_client_base.py Environment-client base integration
rpent/planner/codex.py Finish-result and retry handling
rpent/dashboard/state.py Manual primitive handoff and continuation
rpent/dashboard/spec.py Dashboard specification
rpent/dashboard/planner_control.py Dashboard planner control
rpent/cli/main.py Exploration execution and finalization
rpent/cli/dashboard.py Dashboard lifecycle integration
robots/yam/vla_test.py VLA validation
robots/yam/vla_server.py Pi0.5 inference support
robots/yam/toolkit.py YAM tools, recipes, continuation, and memory
robots/yam/tasks.py Episode classification and task rules
robots/yam/servo.py Servo control helpers
robots/yam/robot_spec.py YAM robot configuration
robots/yam/recovery.py Recovery operations
robots/yam/prompts/user.py YAM user prompts
robots/yam/prompts/system.py YAM system prompts
robots/yam/prompts/__init__.py Prompt package initialization
robots/yam/prompt_bundle.py Prompt configuration
robots/yam/projection.py Camera projection support
robots/yam/operator_control.py Operator receipt controls
robots/yam/manual.py Manual control helpers
robots/yam/hardware_ownership.py External hardware ownership
robots/yam/guides/GUIDE_RPENT.md YAM integration guidance
robots/yam/evaluation.py Evaluation handling
robots/yam/env_server.py YAM environment RPC serving
robots/yam/env_client.py YAM environment client
robots/yam/diagnostics.py Diagnostic task execution
robots/yam/contracts.py YAM runtime contracts
robots/yam/config.example.json YAM configuration example
robots/yam/cameras.py RGB-D capture and freshness validation
robots/yam/__init__.py YAM package initialization
robots/libero/robot_spec.py Robot specification compatibility
pyproject.toml Packaging and project configuration
docs/source-zh/rst_source/usage/yam.rst Chinese YAM usage documentation
docs/source-zh/index.rst Chinese documentation index
docs/source-en/rst_source/usage/yam.rst English YAM usage documentation
docs/source-en/index.rst English documentation index
Review details

Suppressed comments (4)

robots/yam/geometry.py:142

  • This accepts finite affine matrices with scale, shear, or a reflection because only the bottom row is checked. These values are used as camera and arm extrinsics for world-point and collision calculations, so malformed calibration produces invalid geometry instead of failing closed; validate the upper-left block as a proper rotation.
    if matrix.shape != (4, 4) or not np.isfinite(matrix).all():
        raise ValueError(f"{name} must be a finite 4x4 matrix")
    if not np.allclose(matrix[3], [0.0, 0.0, 0.0, 1.0]):
        raise ValueError(f"{name} bottom row must be [0,0,0,1]")
    return matrix.copy()

robots/yam/geometry.py:514

  • When only table_z is configured, guard_table is still added as a plane above, but this condition leaves table_id as None. The plane then enters _pairs as a normal pair with the world body; check() later splits both body names as <arm>_<body>, so collision-guarded transitions raise on world instead of returning a table-guard result. Treat the plane-backed table as a table pair too and add a regression test for table_z with collision guarding enabled.
        table_id = (
            self.model.geom("guard_table").id if self.table_mesh_configured else None
        )

robots/yam/primitives.py:517

  • int(steps) silently truncates non-integral values such as 1.5, so this handler executes one gripper increment even though the public parameter is an integer step count. Validate integrality before conversion, as move_to already does for substeps.
        if int(steps) < 1:
            raise ValueError("steps must be at least 1")

robots/yam/rlinf_env.py:628

  • This operator motion only takes the environment lock; it does not require a stopped/nonterminal episode or set _stop_requested. If reset_pose is invoked while Dashboard/Agent control is active, it can move both arms after the current chunk and leave the same episode ready, so the next policy command continues from an externally changed pose. Gate this command on a stopped operator state, or stop/invalidate the episode before moving.
    def reset_to_configured_qpos(self) -> dict[str, Any]:
        """Explicit operator motion, separate from episode bookkeeping reset."""
        with self._lock:
            self._ensure_started()
            self._move_to_configured_qpos("reset")
            return {"reset_pose_reached": True}
  • Files reviewed: 55/55 changed files
  • Comments generated: 4
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread robots/yam/rlinf_env.py Outdated
Comment thread robots/yam/toolkit.py
Comment thread robots/yam/primitives.py Outdated
Comment thread robots/yam/operator_control.py Outdated
李文博 and others added 2 commits September 14, 2026 11:29
Serialize episode reset with stop generation, latch, and deferred-worker
publication using the existing short lock. Keep runtime holds outside it.
Normalize finish status before waiting for operator authority, reject
fractional or boolean chunk counts, and list all valid receipt events.

Reproduce the stop/reset race, premature uppercase finish, and fractional
chunk execution before the fix. Full unit suite: 589 passed, 3 skipped.
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.

2 participants