Two ready made subclasses, one per machine. Pass your LeRobot robot or teleoperator to the matching one and you are done: there is no descriptor(), read_joints() or write_joints() to write.

SO101FollowerAdapter

Robot
required
An already constructed LeRobot Robot, with its cameras configured on it.
str
default:"norm"
What the arm’s numbers mean: norm, deg, rad or m. Match what your LeRobot object reports.
int
default:"50"
The loop rate, and the rate announced to the leader.
int
default:"30"
The frame rate declared for the cameras. LeRobot does the capturing.
any
Everything from Follower: token, safety, record, observation_hz and the rest.
limits() returns {} on these adapters, so there is no position clamping. slew is the only thing holding the arm back, so set it on real hardware.

SO101LeaderAdapter

Teleoperator
An already constructed LeRobot Teleoperator, the arm a person moves.
tuple[str, ...]
default:"()"
Joint names, for when there is no local arm to read them from. See Recording without an arm.
str
default:"norm"
Must match the follower’s.
int
default:"50"
The rate commands are sent at, and the rate announced to the follower.
any
Everything from Leader: sync_buffer_ms, max_misalignment and the rest.

Recording without an arm

Pass motors and no teleop to get a leader that watches a session and records it, without being able to move anything.
It never claims control and never sends, since there is no local arm to read.

Calibration

Calibrate each arm with lerobot-calibrate first. load_for then reads that file back by the same id you gave it, and leader=True looks under the teleoperator folder instead of the robot one.
Check the file against the arm before you run. Both arms have the same joint names, so loading the leader’s calibration on the follower gives numbers that look fine and an arm that moves wrongly, and nothing else catches it.

Where you use it

Confirm the file matches the arm in front of you, before anything moves:
Or turn it into real joint limits, if you are writing your own subclass rather than using the adapters above:

Follower

The base class these subclass, and everything they inherit.

SO-101

Calibrating the arms, and setting slew for degrees and gripper units.