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/statusrobonix/primitive/arm/execute_joint_trajectoryrobonix/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