Joint Calibration in Humanoid Robots: How a Joint Finds Zero, and What an Offset Costs

Joints & actuators · Explainer

Joint calibration in humanoid robots: how a joint finds zero, and what an offset costs

A humanoid joint reports an angle, but that number is only as good as the zero it is measured from. Three separate calibrations sit behind every joint reading: the motor’s electrical offset, the joint’s mechanical zero and the geometry of the whole limb. Get one wrong and a robot can stand, walk and still miss the table by a centimetre.

9
Motor index pulses per joint turn in the 9:1 ODRI Solo actuator, so the index alone cannot tell the robot where the joint is
16,384
Counts per turn from each 14-bit encoder in Harmonic Drive’s dual-absolute FHA-Mini actuator
10.5 mm
Hand position error from a 1° zero offset at the shoulder of a 0.6 m arm (arc length, L·θ)
8.0→1.4
Foot-height error in mm before and after joint-offset calibration on humanoid A2 (arXiv 2609.02306)

Sources: ODRI forum; Harmonic Drive FHA-Mini product data; humanoid.guide arithmetic; Lu et al. 2026.

Three calibrations, not one

“Calibrating a joint” covers three different jobs, done at different times with different tools. Mixing them up is the most common source of confusion when a robot comes back from repair and walks badly.

  • Commutation offset. A brushless joint motor is driven by field-oriented control, which needs to know where the rotor magnets sit relative to the stator windings. The drive learns the angle between the motor encoder’s zero and the rotor’s electrical zero. Wrong offset: less torque per amp, more heat, or a motor that will not turn at all.
  • Joint zero. The controller needs to know which encoder reading corresponds to, say, a straight knee. This is the offset between the sensor and the mechanical reference of the link. Wrong offset: every posture the policy commands is shifted by that angle.
  • Kinematic (geometric) calibration. Even with perfect joint zeros, link lengths and axis directions differ slightly from the CAD model. Whole-body calibration fits those parameters, plus residual joint offsets, from measured poses. Wrong model: the hand or foot ends up somewhere other than where the robot believes it is.

Figure 1 · Where each calibration sits in the joint chain

COMMUTATION OFFSET JOINT ZERO Learned by the drive: encoder zero vs rotor electrical zero Output reading vs mechanical reference of the link Servo drive FOC, 48 V Motor motor encoder Reducer N : 1 Output flange output encoder Limb KINEMATIC CALIBRATION Whole limb: link lengths, axis directions and residual joint offsets, fitted from measured poses Schematic. Not every joint has an output encoder; some rely on the motor encoder plus a homing routine.

Illustration: humanoid.guide. Schematic, not a specific product.

The commutation offset: the drive’s first job

The servo drive cannot know how the encoder magnet was glued to the rotor. Open-source drives make the measurement explicit. On the ODrive, the offset calibration first energises one phase to pull the rotor to a known electrical angle, then turns the motor open-loop forwards and backwards while summing encoder positions, and stores the average as the offset. Scanning in both directions averages out friction. The motor has to turn during this step, which is why a robot that runs it at power-up twitches every joint.

Because the offset is a property of how the parts were assembled, it only has to be measured once if the drive can trust its encoder after a power cycle. With an absolute motor encoder the saved offset applies immediately. With an incremental encoder and an index pin, the drive must turn the motor until it finds the index before it can apply the stored value. Production humanoid actuators generally do this step at the factory and store the result in the joint.

Joint zero and the gear-ratio ambiguity

The harder problem is the joint’s own zero, and the reducer is what makes it hard. A motor-side encoder turns N times for every turn of the joint. A single-turn reading, or an index pulse, therefore matches N different joint angles. The Open Dynamic Robot Initiative’s Solo actuator shows the effect plainly: with a 9:1 reduction and an incremental motor encoder, “the encoder will see 9 index pulses per joint revolution”. Its calibration routine expects the operator to place the legs near the zero pose by hand; the software then snaps to the closest index.

Figure 2 · Animated · With a 3:1 reduction, one motor index matches three joint angles

index sensor 3 : 1 123 MOTOR ROTORJOINT OUTPUT 1 turn / 2 s 1 turn / 6 s · ticks 1–3: candidate zeros

Illustration: humanoid.guide. A 3:1 ratio keeps the motion visible; the ODRI Solo’s 9:1 gives nine candidates 40° apart. Output turns the same way as the motor, as in a planetary stage. CSS animation; stops when reduced motion is requested.

There are three ways out. The first is to move the joint to something known at every start: a hard stop, a limit switch or a hand-placed pose. Industrial arms and many research robots do this, but a humanoid lying on a pallet or hanging from a gantry cannot always sweep its joints safely. The second is a battery-backed multi-turn encoder that keeps counting while the robot is off. Harmonic Drive’s multi-turn ABS option works this way and needs a battery for it.

The third, now common in humanoid actuators, is a second absolute encoder on the output. Harmonic Drive’s dual-absolute FHA-Mini carries a 14-bit single-turn encoder on each side of the gear. At 100:1 the motor encoder resolves 1,638,400 counts per output turn while the output encoder’s 16,384 counts settle which turn the motor is on, and the company says no battery is needed within 360° of output rotation. A teardown of the Unitree G1 knee actuator also reports dual encoders. A related trick, the nonius or vernier track, puts two magnetic tracks with one pole pair difference on one ring; the phase difference between them gives absolute position, and Hutchinson pairs such rings with iC-Haus iC-MU sensors.

Table 1 · What a joint knows at power-up, by sensor architecture

ArchitectureExampleKnown at power-upStart-up motionCost of the approach
Incremental motor encoder + indexODRI Solo (9:1)Nothing until an index is found; then one of N positionsYes, plus pose near zero by handCheapest; operator or homing routine needed
Single-turn absolute on motor onlySingle-encoder actuator modulesMotor angle; joint angle ambiguous by NHoming or known start poseOne sensor; start-up procedure
Battery-backed multi-turn absoluteHarmonic Drive ABS optionFull joint angleNoneBattery to maintain
Dual single-turn absolute (motor + output)Harmonic Drive FHA-Mini dual ABS; Unitree G1 knee (teardown)Full joint angle within one output turnNoneSecond encoder and bore space
Nonius / vernier dual trackHutchinson nonius rings with iC-MUAbsolute angle from the phase difference of two tracksNoneSpecial magnet ring; tighter mounting

Sources: ODRI forum; Harmonic Drive FHA-Mini dual absolute product data; China-Amass G1 knee teardown; Hutchinson nonius magnet rings. Robot makers rarely publish their encoder layout; rows describe architectures, not every product that uses them.

An absolute sensor removes homing, but not the zero itself. Someone still has to tell the joint which reading means “straight”, and that offset has to follow the joint through every repair. One Unitree G1 owner who fitted a replacement wrist reported joint angles about 90° off the expected range: the new part was apparently built for the other side of the robot. Swapping an actuator without updating its zero is a quick way to give a robot a new and wrong posture.

What a small offset costs at the hand and foot

A zero error of θ at a joint moves anything a distance L from its axis by about L·θ, with θ in radians. That makes small angles expensive. A 0.1° offset at the shoulder of a 0.6 m arm puts the hand about 1 mm off; 1° puts it 10.5 mm off. Errors in several joints of a chain add or cancel depending on posture, which is why the result often looks like a robot that is accurate in one pose and sloppy in another.

Chart 1 · Endpoint error from a single joint-zero offset, by distance from the joint axis

0°0.25°0.5°0.75°1° 0481216 JOINT ZERO OFFSET (DEGREES) ENDPOINT ERROR (MM) 0.9 m · 15.7 mm 0.6 m · 10.5 mm 0.3 m · 5.2 mm

Calculation: humanoid.guide, error = L × θ (radians). Distances are illustrative: roughly forearm, full arm and hip-to-foot reach. Single offset only; real chains combine several.

Whole-body calibration: measured results

Humanoids cannot easily be bolted into a metrology rig, so researchers use constraints the robot can create itself. Katsu Yamane at Disney Research proposed in 2011 estimating joint-sensor offsets from the constraint that both feet lie flat on the floor, using only joint angles and link orientation sensors. PAL Robotics’ TALOS, a 32-joint, 95 kg humanoid, was calibrated in 2025 by pressing its gripper onto a single table plane with force control: 31 recorded postures, about two minutes each, cut the mean vertical error from 9.19 mm to 2.88 mm and roll and pitch errors from about 1° to about 0.3°. On unseen postures the improvement was about 2.3 times. The identified rotational parameters fell within ±1.5°, the largest being joint offsets, mainly in the arms.

A September 2026 paper goes further and uses nothing but the robot’s joint encoders and pelvis IMU in static double-support stance, fitting a 12-value leg offset vector so that the transform between the feet stays constant across postures. On two humanoids it reduced held-out foot-height residuals from 4.26 to 2.20 mm and from 8.03 to 1.43 mm. The authors are frank about the limits: offsets along the chain of parallel pitch axes are weakly observable and depend on a prior.

Chart 2 · Published humanoid calibration results, error before and after (mm)

036912 POSITION ERROR (MM) TALOS, calibration poses TALOS, unseen poses Humanoid A3, foot height Humanoid A2, foot height 9.192.88 9.894.54 4.262.20 8.031.43 Before calibration After calibration

Sources: TALOS whole-body geometric calibration, arXiv 2507.16369 (mean absolute Z error); Lu et al., arXiv 2609.02306 (held-out foot-height RMS residual). Metrics differ between studies; compare before and after within a row, not across rows.

Calibration does not end at the factory. Any actuator swap, encoder replacement or hard fall that slips a component can move a joint zero. A useful question for any humanoid supplier: where is each joint’s zero stored, how is it restored after a repair, and can the robot check its own offsets in the field?

What to ask about calibration

  • Start-up motion. Does the robot need to move its joints, or be placed in a pose, before it knows where they are? That decides whether it can start safely on a stand, on the floor or in a crowded cell.
  • Encoder layout. Motor only, motor plus output, or multi-turn with battery. Dual absolute encoders also let the drive measure reducer wind-up, which links calibration to torsional stiffness.
  • Where offsets live. In the actuator, in the robot computer, or both. Offsets stored in the joint travel with it; offsets stored centrally must be updated when a joint is replaced.
  • Field self-check. Whether the robot can re-estimate offsets from its own sensors, as in the stance-based method above, or needs a technician and a fixture.

Go deeper: The Humanoid Actuation Report

249 pages on motors, reducers, screws, bearings, encoders and drives, the vendors behind every major platform, and the cost curves that decide adoption to 2036.

The Humanoid Actuation Report All joints & actuators articles All humanoid.guide reports

FAQ

Why do some robots move their joints when they switch on?

Either the drive is measuring the motor’s commutation offset, which needs the rotor to turn, or the joint has no absolute output sensor and must find an index pulse, a hard stop or a limit switch before it knows its angle.

Does an absolute encoder remove the need for calibration?

It removes homing at every start, not the zero. The offset between the encoder reading and the link’s mechanical reference still has to be measured once and stored, and re-measured after the joint is replaced or disturbed.

Why is a motor-side encoder not enough to know the joint angle?

Behind an N:1 reducer the motor turns N times per joint turn, so a single-turn motor reading matches N joint angles. A 9:1 joint sees nine motor index pulses per turn. An output encoder, a multi-turn counter or a homing move is needed to pick the right one.

How accurate is humanoid calibration today?

Published research results bring position errors down to a few millimetres: TALOS from 9.19 to 2.88 mm vertical error on its calibration postures, and stance-only methods to 1.4–2.2 mm foot-height residuals. Commercial makers rarely publish such figures.

Sources