Back to packages

robonix.skill.dual_piper_transfer

Execute a validated dual-Piper left-to-center-to-right transfer plan.

README

Dual Piper Transfer Skill

Robonix skill that executes a validated, operator-recorded transfer with two AgileX Piper arms. The fixed sequence moves one pre-positioned object from the left pickup area to a center handoff and then to the right placement area.

This package contains the workflow and plan validator. It deliberately does not contain calibrated joint angles: every deployment must provide its own workcell plan.

The run request requires both both_workspaces_clear_confirmed=true and object_at_left_pickup_confirmed=true. The workflow rejects a missing confirmation before reading arm status or commanding hardware.

Required Arm Capabilities

Each configured primitive provider must expose these MCP contracts:

  • robonix/primitive/arm/status
  • robonix/primitive/arm/execute_joint_trajectory
  • robonix/primitive/arm/set_gripper

Prefer the official ROS-oriented syswonder/primitive-agilex-piper-arm-rbnx when it exposes all of these contracts for the target deployment. If the official primitive is unavailable or does not yet provide the required status, absolute-trajectory, and gripper capabilities, use the direct-SDK community implementation at SJTU-DDST/primitive-agilex-piper-arm-sdk-rbnx. The skill binds to capability contracts, so either backend is suitable when its provider exposes the complete interface above.

Deployment

Store the workcell plan next to the robot deployment manifest. Relative plan_path values are resolved from that manifest directory:

skill:
  - name: dual_piper_transfer
    url: https://github.com/syswonder/skill-dual-piper-transfer-rbnx
    branch: main
    config:
      left_provider_id: left_piper
      right_provider_id: right_piper
      plan_path: config/dual_piper_transfer.yaml

The plan must contain parameters plus twelve absolute J1-J6 waypoints named L0 through L5 and R0 through R5. Start from examples/dual_piper_transfer.example.yaml. Its null joint values are intentionally invalid so the template cannot be run accidentally. Replace every placeholder with a supervised, operator-recorded angle within the nominal Piper joint limits before validation.

Validate the completed plan without commanding hardware:

PYTHONPATH=. rbnx-build/venv/bin/python \
  scripts/validate_plan.py /path/to/dual_piper_transfer.yaml

The provider also validates the complete plan during initialization and refuses activation if it is missing, malformed, or contains an out-of-range joint target.

Safety

This skill has no camera, perception, Cartesian planner, or collision checker. Run it only when the physical workcell matches the recorded plan, both workspaces are clear, and the object is at the recorded left pickup point.

The preflight and every trajectory or gripper stage recheck locked motion, invalid telemetry, communication faults, hardware faults, unhomed grippers, and excessive motor temperature. The configured motor-temperature threshold cannot exceed 75 C, and reaching it at any check is a failure. Every stage is serialized and the sequence stops on the first failure. It does not guess a recovery path, release a potentially held object, disable an arm, or issue an emergency stop.

See CAPABILITY.md for the agent-facing invocation contract.

Validate and Test

rbnx validate .
rbnx build
PYTHONPATH=. rbnx-build/venv/bin/python -m unittest discover -s tests

Hardware tests require direct operator supervision.

License

MIT