Part II: Teleoperation and data collection · §27 of 43
| Symptom | Cause / fix |
|---|---|
lerobot-…: command not found | conda 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 down | The PCAN adapter was replugged; the interfaces came back unconfigured. Re-run setup_openarm_lerobot.sh. |
| Motors “No response” / packet drops on all motors | Motor 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 equal | lerobot-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 inverted | Mini 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 move | max_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 jerks | Rerun 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 nothing | pynput needs an X session; on Wayland, run from an X11 session or use the terminal prompts. |
torch.cuda.is_available() false | Run from the lerobot env; driver ≥ 580 for CUDA 13 wheels (zeus has 595). |