The limits a follower applies to every command it receives. Pass one to the constructor and it is enforced from then on.

Fields

float
default:"0.5"
How long the follower waits before deciding something is wrong. It covers two cases: no commands arriving, and your own loop no longer calling tick().
float
default:"100.0"
Commands that arrive later than this are dropped instead of applied. Raise it on a slow link, lower it when a late command is worse than no command.
float | dict
default:"5.0"
How far a joint may move in one tick, in descriptor units. A slower loop therefore means a slower arm.Pass a mapping when joints use different units, such as an arm in degrees with a gripper on 0…100.
bool
default:"True"
Commands apply only while the operator holds the deadman.
FailsafeAction
default:"HOLD"
What the arm does when commands stop. HOLD keeps it where it is. TORQUE_OFF cuts power to the motors, so a loaded arm will fall, and it needs a torque_enable() method on your subclass.
bool
default:"False"
Stay held after a trip instead of resuming on the next command. Only arm() releases it.
Position limits are not set here. Return them from Follower.limits() instead.
The defaults are set low on purpose. Measure watchdog_timeout_s and max_staleness_ms on your own network, under load, and set them from what you see.

Values

The ones you will see in practice:
STARVATION means no commands are arriving from the leader. STALLED means the follower’s own loop stopped calling tick(). One points at the far machine, the other at this one.

Follower

Where this is passed, and the stop and resume methods that go with it.

Safety

The states a follower moves between, and what to check before running.