Joint Calibration in Humanoid Robots: How a Joint Finds Zero, and What an Offset Costs
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.
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
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
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
| Architecture | Example | Known at power-up | Start-up motion | Cost of the approach |
|---|---|---|---|---|
| Incremental motor encoder + index | ODRI Solo (9:1) | Nothing until an index is found; then one of N positions | Yes, plus pose near zero by hand | Cheapest; operator or homing routine needed |
| Single-turn absolute on motor only | Single-encoder actuator modules | Motor angle; joint angle ambiguous by N | Homing or known start pose | One sensor; start-up procedure |
| Battery-backed multi-turn absolute | Harmonic Drive ABS option | Full joint angle | None | Battery to maintain |
| Dual single-turn absolute (motor + output) | Harmonic Drive FHA-Mini dual ABS; Unitree G1 knee (teardown) | Full joint angle within one output turn | None | Second encoder and bore space |
| Nonius / vernier dual track | Hutchinson nonius rings with iC-MU | Absolute angle from the phase difference of two tracks | None | Special 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
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)
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.
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 reportsKeep reading · Joints & actuators
Related articles
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
- ODRI forum, Calibration and homing (Solo 9:1, motor-side incremental encoders, nine index pulses per joint turn, hand-placed start pose)
- Harmonic Drive, FHA-Mini dual absolute encoder actuator (14-bit motor and output encoders, output counts by ratio, no battery within 360°, ABS multi-turn needs battery)
- Humanoid Robot Whole-body Geometric Calibration with Embedded Sensors and a Single Plane, arXiv 2507.16369, 2025 (TALOS, 31 postures, 9.19 → 2.88 mm, ±1.5° parameters)
- Lu et al., Contact-Constrained Lower-Limb Joint-Offset Calibration for Humanoid Robots, arXiv 2609.02306, 2026 (encoder and IMU only, 4.26 → 2.20 mm and 8.03 → 1.43 mm)
- K. Yamane, Practical Kinematic and Dynamic Calibration Methods for Force-Controlled Humanoid Robots, Humanoids 2011 (feet-flat constraint for joint offsets)
- ODrive forum, mechanism of the offset calibration (align, bidirectional open-loop scan, averaged offset)
- ODrive forum, Avoiding calibration at startup (pre-calibrated flags, index search, absolute encoders, battery backup)
- Hutchinson, Nonius magnet rings (two tracks, one pole pair difference, iC-MU sensors)
- China-Amass, Unitree G1 knee joint actuator teardown (dual encoders)
- MyBotShop forum, Unitree G1 new wrist calibration (replacement wrist reading about 90° off)
