Part II: Teleoperation and data collection · §18 of 43
zeus uses the bimanual OpenArm Mini (bi_openarm_mini): two small 3D-printed 7-DoF + gripper leader arms
with Feetech STS3215 servos, each on its own USB serial board (CH343, 1a86:55d3). The rest of Part II is
written for that kit.
For reference, LeRobot v0.6.2 has two OpenArm teleoperator families:
OpenArm Mini (openarm_mini / bi_openarm_mini), used on zeus | OpenArm Leader (openarm_leader / bi_openarm_leader) | |
|---|---|---|
| What it is | Small leader arm, Feetech STS3215 servos | A full-size OpenArm with Damiao motors, used passively (torque off) |
| Connection | USB serial → /dev/serial/by-id/… | CAN-FD (two more CAN channels) |
| Mapping to follower | In code: per-side sign flips (SIDE_MOTORS_TO_FLIP), joint 6 ↔ joint 7 swapped (JOINT_REMAP), gripper 0–100 % → 0 … −65° | 1:1 |
| Force feedback | None | None in LeRobot |
How the Mini maps to the follower matters when debugging (§27). These are the joints LeRobot negates, per side:
| Mini servo | side=left | side=right | Drives follower joint |
|---|---|---|---|
| joint_1, 3, 4, 5 | flipped | flipped | same |
| joint_2 | — | flipped | joint_2 |
| joint_6 | flipped | — | joint_7 |
| joint_7 | flipped | flipped | joint_6 |
So a Mini read with the wrong side (or plugged into the other arm’s port) inverts follower joints 2 and 7.
That’s exactly what happened on zeus before the ports were sorted out.
Enactic’s C++ openarm_teleop (force feedback, needs Damiao leaders) is covered in §28.