Deterministic boot-time offset reconstruction for antagonistic tendon-driven joints

Technical note · Published · Alia – Humanoid Design · All technical notes →

The problem

An antagonistic tendon-driven joint is controlled through motor-side positions that must be referenced to the joint: each motor's angle maps to the joint angle through a calibrated joint↔motor map, anchored by per-motor offsets established during calibration. The motors' multi-turn counters reset on power loss. The common workaround — re-running a tensioning calibration at every boot — has two costs: boot time, and anchor variance: each recalibration settles on a slightly different equilibrium (tendon friction/stiction), so the joint's reference frame shifts by a small, uncontrolled amount at every power cycle. That variance contaminates any cross-boot comparison and slowly degrades map fidelity.

The observation

Two absolute references survive a power cycle:

  1. the motor's single-turn absolute (magnetic) encoder position — only the turn count is lost, not the within-turn angle;
  2. the joint-side absolute encoder, which never loses its reference.

Through the calibrated map, the joint angle predicts the expected motor angle. The saved calibration anchor therefore differs from a freshly measured naive offset by — ideally — an integer number of motor turns.

The method

  1. One-time anchor. A tensioned calibration establishes per-motor offsets; they are persisted. This anchor is never re-measured at boot again.
  2. Same-state read (the key step). At boot, before measuring anything, the controller re-applies the same tension state used when the anchor was captured, and lets the drivetrain settle briefly. This eliminates the slack take-up term between the anchor's physical state and the boot measurement — a term that is otherwise not modelable, because at zero tension the motor's rest position inside the tendon slack band depends on how the system was last shut down (clean stop, emergency stop, manual handling), not on any constant of the mechanism.
  3. Lattice snap. Compute, per motor, the difference between the freshly measured naive offset (measured motor angle minus map-expected motor angle at the current joint pose) and the saved anchor. Round that difference to the nearest whole motor turn: k = round(delta / turn), where turn = 360°/gear ratio at the output.
  4. Fail-closed acceptance. Accept only if the residual delta − k·turn is well inside the half-turn ambiguity window (a small fraction of ±turn/2), and the implied turn count is physically plausible. Otherwise reject and fall back to the full recalibration — the method never guesses.
  5. Deterministic re-anchor. On acceptance, the applied offset is saved anchor + k·turn — whole turns added to a bit-identical anchor. A verification re-read against the map closes the loop. The joint's reference frame is therefore identical across power cycles until the next explicit recalibration.

Properties

Evidence (bench, July 2026, single ankle joint, two antagonistic DOFs)

Why we are publishing this

We publish this method openly and deliberately so that it remains free for anyone to use — including us. This note is intended as prior art. Our firmware implementation of the method is currently part of our private development tree; the method itself, as described above, is sufficient for an independent implementation.