Troubleshooting#
Device or Port Missing#
handumi-setup-ports
lsusb
ls /dev/ttyACM* /dev/ttyUSB*
Reconnect one device at a time. Log out and back in after serial-group changes.
Adapter visible in lsusb but no serial port exists
Common Feetech adapters use the CH341 driver. Check the running kernel and installed module tree:
uname -r
modinfo ch341
ls /usr/lib/modules/$(uname -r)
If the module tree does not match the running kernel, reboot after the system
update, reconnect the adapter, and rerun handumi-setup-ports.
Quest Does Not Stream#
Keep HandUMI Quest App in the foreground, confirm both devices share a network, update quest_ip in configs/rig.yaml, and wake both controllers.
PICO Does Not Stream#
Confirm the PC service and headset stream are running. For USB, check:
adb devices
adb reverse --list
Gripper Width Is Wrong#
Confirm side/port mappings, home at mid-travel, then recalibrate:
handumi-home-servos
handumi-calibrate-grippers calibrate
If left/right motion is swapped, correct the mapping in configs/rig.yaml;
do not compensate by reversing calibration values. If a camera appears twice,
test the first /dev/video* node associated with that physical device.
Recording Is Rejected#
Inspect meta/handumi_quality.json. The common causes are tracking loss, stale cameras, synchronization errors, frozen poses, large motion jumps, or an episode that is too short.
Replay Prints a CUPTI Traceback#
If JAX reports Unable to load cuPTI but replay continues, force the supported
CPU path for the command:
JAX_PLATFORMS=cpu uv run handumi-replay-in-sim \
--dataset-root outputs/20260714_224135 \
--robot openarmv1 \
--episode 0
This warning concerns optional CUDA profiling libraries, not the dataset or robot IK.
Viser Shows Trajectories but No Robot#
Messages such as Can't find meshes/visual/base_link.glb mean the URDF loaded
but its visual asset paths did not resolve. Restart replay after updating the
checkout. TRLC-DK1 meshes must exist under:
assets/trlc-dk1/meshes/visual/
assets/trlc-dk1/meshes/collision/
Run this check from the repository root:
JAX_PLATFORMS=cpu uv run python -c \
"from handumi.robots.registry import load_embodiment; u=load_embodiment('trlc_dk1').load_urdf(load_meshes=True); print(len(u.scene.geometry))"
The current GLB assets expand to hundreds of internal submeshes; a nonzero
count without Can't find messages confirms that the visuals loaded.
Piper CAN Is Down or BUS-OFF#
This applies only to physical Piper teleoperation. Check robot power and wiring, then follow the CAN checks in Piper Hardware Setup.
Piper Real Arms Do Not Start#
Test simulation first, verify both controllers are tracked, confirm CAN is up,
and use --side right for the first hardware check. See
First real teleoperation
for the complete startup sequence.