Part II: Teleoperation and data collection · §26 of 43
Everything in §13 still applies. Specific to LeRobot, most of it learned the hard way on zeus:
- Clamp the base. An arm snap tipped the whole robot over once.
- Start-up snap: stock teleop enables at full stiffness and goes straight to the Mini’s reading. Use
safe_teleop.py(§23.3); with stock tools, align first withcompare_mini_follower.py. - Mini zero = the pose at Enter. Calibrate hanging, gripper closed, wrists matching the follower, joint 5 mid-travel (§23.2).
- Swapped Minis or buses: wrong arm and inverted joints 2/7 (§18, §22). Use the by-id paths and the zeus mapping; never
/dev/ttyACM*. - Mismatched Mini calibration files are written into the Minis on connect.
check_mini_calibration.py(run by the setup script and bysafe_teleop.py) catches this. - Silent zeros: a follower motor that doesn’t answer reads as 0° in LeRobot.
safe_teleop.pychecks replies; stock tools don’t. sidemissing → ±5° limits (arm seems stuck);sidewrong → mirroredjoint_2limits allow motion into the torso.- Unintended re-zeroing of the followers: a new
--robot.id, a deleted cache directory, orcat the follower calibration prompt (§21). - Torque off = arms fall: stock Ctrl+C,
openarm-can-cli disable, anddiagnose(enables, then disables at the end).safe_teleop.pyholds until you press Enter. - Ctrl+Z is not stop. It suspends the process with the buses still open; it resumes commanding on
fg. Use Ctrl+C; clean up withkill -9 <pid>. - Rerun can stall the loop (12.8 s freeze, then a catch-up jerk on zeus). Use
--display_data=falsefor teleop/recording, andpkill -f "rerun --port=9876"for leftover viewers. - Stiff gains (kp 240), no force feedback: the operator can’t feel contacts. Start with light, open-space tasks.
- Two stacks on one bus (§25).
- Policies (
lerobot-rollout) start unramped: start every run from the training start pose, keepmax_relative_target, press Ctrl+C once (the arms return to the start pose, then torque off). See §33–§35 and §42.