SO-ARM101 Leader/Follower Arm β Build & Pi 4 Migration Report
Part of the same project as the AIY Voice Kit final report and AIY Vision Kit final report β see the project roadmap for the overall plan.
Result: β Phase 2 complete β both arms assembled, calibrated, and confirmed running live teleoperation at a stable 60Hz, first on a Mac for validation, then successfully migrated to the Pi 4 (1GB). Camera integration validated ahead of schedule.
Assembly
Refreshingly uneventful compared to the AIY kits β the SO-ARM101's 3D-printed parts and clear motor-ID-then-assemble sequence (built into Hugging Face's official LeRobot documentation) meant no real snags worth documenting. Motor IDs were set one at a time before each motor was mechanically installed into its joint β necessary since IDs can't be addressed individually once several motors share a daisy-chained bus.
Mac β Pi 4 Migration
The arm was first calibrated and teleoperated on a Mac to validate the mechanical build independent of any Pi-specific issues. Moving to the Pi 4 surfaced a few small, well-understood issues β none related to the arm itself:
- "No space left on device" during install, despite plenty of free disk β caused by pip's temp directory defaulting to a small RAM-backed
tmpfson Raspberry Pi OS, too small for the torch wheel. Fixed by redirectingTMPDIRto the main disk during install. - Calibration transferred as files, not re-run β motor IDs live on the servos' own EEPROM, so only the host-side calibration JSON needed copying (via
scp) from Mac to Pi; no need to redo the calibration procedure itself. - Port names differ by OS β macOS's
/dev/tty.usbserial-XXXXvs. Linux's/dev/ttyUSB0/ttyUSB1, easily found withlerobot-find-porton either platform. - Camera discovery listed 6 devices, only 1 real β the Pi's internal CSI camera processing pipeline (
bcm2835-codec/isp/unicam) shows up as multiple phantom "camera" entries even with nothing connected to the CSI port. The actual USB webcam was identified separately viav4l2-ctl --list-devicesandlsusb. - First camera connection attempt timed out, second attempt succeeded β appears to be a one-off USB/driver settling quirk on first touch, not a reliability problem; simply retrying resolved it.
Result
- Teleop loop time: 16.67ms (60 Hz)
Confirmed stable on the Pi 4 with the leader and follower both connected, and separately confirmed the same 60Hz stability holds with a USB webcam streaming simultaneously β meaning the 1GB Pi 4 comfortably handles the combined workload Phase 3/4 will need.
What This Demonstrated
- Validating hardware/mechanical assembly independently of the target compute platform (Mac first, Pi second) β isolating "is the arm built correctly" from "does the Pi handle it," rather than debugging both at once
- Understanding why calibration data is portable across machines while motor configuration is not, rather than just following steps
- Correctly distinguishing real hardware (a USB webcam) from a host system's internal camera pipeline artifacts when several unfamiliar "camera" devices appear at once
For full setup details, see the session wrap-up and the complete Pi 4 migration log with all commands and troubleshooting.
Next: Phase 3 β recording leaderβfollower demonstrations for a first dataset. See the full pick-and-place project write-up for how this turned out.