Piper Hardware Setup#
This procedure prepares two physical AgileX Piper arms for HandUMI real teleoperation. Complete the robot-independent HandUMI Setup and Calibration first.
Safety and prerequisites#
Before connecting or commanding the arms:
Clear the complete arm workspace and keep the emergency stop reachable.
Power both arms, but stop every other process that may use their CAN buses.
Install the Piper backend with
uv sync --extra piper.Connect one USB-to-CAN adapter per arm.
Verify tracking and motion mapping in simulation before enabling hardware.
Install and map the CAN adapters#
Run the guided hardware setup:
uv sync --extra piper
handumi setup --robot piper --device meta \
--skip-feetech-map --skip-feetech-calibration
The wizard maps the right Piper adapter first and the left adapter second. It
stores the machine-local result under robots.piper.can in
configs/rig.yaml. Follow the prompts to disconnect and reconnect adapters so
that each physical side is identified correctly.
Use --skip-can-map only after verifying an existing mapping. Rerun the wizard
whenever adapters, USB ports, or arm assignments change.
Verify CAN and troubleshoot the mapping#
Check that both arms are powered, both adapters are present, and no other process owns the CAN interfaces. If an interface is down or bus-off, stop teleoperation, inspect power and wiring, and rerun the guided setup from the previous section.
Do not continue to real motion until the wizard identifies both physical sides and communication is stable.
Calibrate the Piper gripper closed positions#
Calibrate each Piper gripper before the first real teleoperation, after replacing a gripper, or whenever a physically closed gripper reports a non-zero or negative position. From the repository, run:
uv run handumi calibrate piper-grippers
The command connects both Piper controllers but does not send arm-joint
targets. For each side, it disables only that gripper motor and continuously
prints its raw feedback. Close the gripper gently and consistently against its
physical stop, then press Enter. The value visible at that instant becomes the
logical opening=0.0 for that side; it is measured during the procedure and is
not hardcoded.
To calibrate only one side:
uv run handumi calibrate piper-grippers --side left
uv run handumi calibrate piper-grippers --side right
The per-machine result is stored outside the repository at
~/.cache/handumi/piper_grippers.yaml (or under $XDG_CACHE_HOME when set).
Teleoperation uses the captured value both to normalize physical feedback and
as the closed command target. For example, if the captured raw value is
-3000 um, subsequent diagnostics report it as calibrated 0.000 mm and a
normalized opening of 0.000000, while retaining -3000 um as the raw value.
You can verify both grippers without running arm teleoperation:
uv run python tests/real/test_piper_gripper_diagnostic.py
With each gripper physically closed, expect estado=CERRADO,
Piper=0.000000, and calibrado=0.000 mm. Press Ctrl+C to stop the monitor.
First real teleoperation#
Start with simulation and the same robot profile:
handumi teleop --device meta --robot piper
After tracking, calibration, and simulated motion behave correctly, validate one physical arm first:
handumi teleop-real --device meta --robot piper --side right
Keep the emergency stop reachable and confirm that the right controller moves only the right arm. Stop and correct the CAN mapping if the wrong side moves. Validate the left side separately before enabling both arms:
handumi teleop-real --device meta --robot piper --side left
handumi teleop-real --device meta --robot piper --side both
For shared controls, safety behavior, and tracking semantics, continue with Physical Robot Teleoperation. For common failures, see Troubleshooting.