Short answer: the joints have encoders from AR3 onward, but the stock Annin HMI is not an industrial closed-loop servo. Encoders are there for position tracking and for catching a move that did not achieve the commanded steps, not for continuously correcting torque like a servo drive.
By model
- AR2: no encoders. Open-loop steppers.
- AR3: external CUI encoders on dual-shaft motors.
- AR4 MK1 and later: integrated motor encoders (the add-on CUI units went away).
The AR3 revision notes described CUI encoders as adding “closed loop operation.” That is the hardware history. It is not the same claim as “the stock controller runs classic closed-loop servo correction.”
What the stock firmware actually does
The encoders are incremental. During a commanded move, the Teensy sketch can watch counts and check that the commanded motor steps were achieved. If they were not (stall, crash, missed steps, or noisy false counts) you get a collision / motor-style error. That is error detection, not a servo current loop pushing the joint back onto the path.
Idle monitoring is not the same thing. If you e-stop, push the arm, then home, the stock stack does not behave like a system that kept an absolute closed-loop pose the whole time. The firmware is built to monitor during the move to catch crashes or missed steps, not to run a full-time industrial closed loop at idle.
The HMI also lets you run a joint in open loop, which is how we isolate encoder faults. That switch would not exist if the machine were a mandatory closed-loop servo.
What we are not claiming
- We are not claiming encoder-on-joint equals an industrial servo.
- We are not claiming the firmware rewrites the trajectory in real time to cancel backlash.
- Independent reviews that say encoders are present but classic closed-loop correction is not how the stock HMI runs are describing the same architecture we just did.
If you need true closed-loop servo behavior, that is a different controller project. For the kit as we ship it, use Test Encoders, keep noise under control, and treat the encoders as a watchdog plus position tracker, not as a magically stiff servo.
Related: Why do I get Collision or Motor Error when encoders are enabled? (https://anninrobotics.com/docs/why-do-i-get-collision-or-motor-error-when-encoders-are-enabled/) and AR2 vs AR3 vs AR4 marks (https://anninrobotics.com/docs/what-is-the-difference-between-ar2-ar3-ar4-mk2-mk3-mk4-and-mk5/).