Part II: Teleoperation and data collection · §27 of 43

SymptomCause / fix
lerobot-…: command not foundconda activate lerobot.
Permission denied: '/dev/ttyACM0'Session not in dialout yet: log out/in (the group is already added).
lerobot-find-port: “No difference was found”You didn’t unplug the Mini’s USB at the prompt (or unplugged the PCAN adapter instead, which takes the CAN interfaces down). Not needed on zeus: use the by-id paths (§22).
Failed to connect to CAN bus: … Network is downThe PCAN adapter was replugged; the interfaces came back unconfigured. Re-run setup_openarm_lerobot.sh.
Motors “No response” / packet drops on all motorsMotor power off, wrong bitrate/FD mode, cabling, or ROS still owns the bus. openarm-can-cli -i canX diagnose shows per-motor status and link stats.
Mini: “motor check failed … Missing motor IDs 1–8”The Mini’s USB board answers but its servos don’t: Mini servo power off/unplugged.
Invalid calibration for motor 'gripper': min and max are equallerobot-calibrate recorded the gripper open/closed instantly (buffered Enter). Run fix_mini_gripper_range.py; don’t type c at the teleop prompt afterwards.
Follower joints 2 and 7 invertedMini read with the other side’s flips: Mini ports or CAN buses swapped (§18, §22).
One joint inverted on one arm only (e.g. left joint 4)Not explained by a swap (both sides flip it). Check that Mini’s calibration first; if it persists, the servo is mounted mirrored compared with LeRobot’s flip table, so a per-joint flip is needed.
A Mini joint reads far from 0 while hanging (e.g. joint 5/7 by 10–90°)That Mini was zeroed in a different pose (wrist twisted / joint 5 against its stop). Recalibrate it (§23.2).
Constant “Relative goal position magnitude had to be clamped” on one joint, and it doesn’t movemax_relative_target + low stiffness: the joint stalls 5° short. Usually a Mini offset on that joint; fix the calibration. safe_teleop.py limits the command instead, so this doesn’t happen.
Teleop freezes for seconds, then the arm jerksRerun blocked the loop (Sender has been blocked …). --display_data=false; kill leftover rerun processes.
”Control loop is running slower than the target FPS”--fps=30, no Rerun, fewer/smaller cameras.
A teleop process exists but nothing happens (ps STAT T)Suspended with Ctrl+Z. kill -9 <pid>; don’t fg.
Arm barely moves (≈ 5°)side not set.
LeRobot asks to put the follower “hanging straight down”No follower calibration file for that --robot.id. Ctrl+C and create it with make_follower_calibration.py (§21) unless you really want to re-zero the follower motors. Rewriting existing placeholders changes nothing (they’re identical by design).
Record keyboard shortcuts do nothingpynput needs an X session; on Wayland, run from an X11 session or use the terminal prompts.
torch.cuda.is_available() falseRun from the lerobot env; driver ≥ 580 for CUDA 13 wheels (zeus has 595).