Bench reference
It holds technical procedures and measurements used while repairing the robots, so it is written in shorthand rather than plain language. Nothing here needs your attention.
Reference · the part that wastes afternoons
Three ways of describing where a joint is, in three units, in two windows. Confusing them turns a twenty-minute repair into a day. This is the conversion table and the traps.
First principle
| Position | Deviation | |
|---|---|---|
| Range | 0 – 1000 | −100 – +100 |
| Means | Where you are telling the joint to go right now | A permanent correction so that 500 lands truly straight |
| Saved? | No — gone on power off | Yes — via Download |
| Centre | 500, not 0 | 0 |
Adjusting the position slider, pressing Download, and finding the robot back where it started. Download saves deviations. A position is never stored, so nothing was lost — the wrong field was being changed all along.
Tell them apart by the number. Deviation values live near zero: -12, +8, -40. Anything in the hundreds — 365, 620 — is a position.
0 is one extreme of travel. A joint that only looks straight at position 0 sits at the very end of its range, with no movement left in one direction — so the robot cannot walk on it however good it looks standing still. Straight should happen at 500.
The conversion
The servo sweeps 240° across positions 0–1000. The output shaft is splined, so a bracket can only be refitted in whole-tooth steps. Everything follows from those two facts.
The number worth memorising is 60. One tooth of bracket rotation equals 60 position units. That turns "how far out is this joint" into "how many teeth do I move it".
| Off by (units) | In degrees | Fix |
|---|---|---|
| 0 – 55 | up to ~13° | Deviation slider. Leave the hardware alone. |
| ~60 | ~14° | 1 tooth |
| ~120 | ~29° | 2 teeth |
| ~180 | ~43° | 3 teeth |
| ~500 | ~120° | 8 teeth — or the part was assembled badly wrong |
Drive the joint until it looks straight and read the position. The difference from 500 is your error. Robot #3's right ankle looked level at 365 — 135 units, about 32°, roughly two teeth. Deviation was never going to reach it.
Hiwonder puts the deviation limit at about 13°, while the slider runs to ±100 units, which by the arithmetic above would be 24°. Treat 13° as the working limit and find out where your sliders actually run out. The 14.4° per tooth assumes a 25-tooth spline — count the teeth on a servo you have open.
When the error is bigger than deviation can reach, the bracket goes back on the spline at a different tooth. Non-destructive and repeatable — always the right move before touching glue or ordering parts.
A large stored deviation eats the servo's travel at one end, which matters for leg joints inside a walking gait. Get the mechanics close so deviation only has a few degrees of work.
Reassembling a servo re-clocks its output relative to its internal position sensor, so its idea of centre no longer matches the joint. Expect to redo this every time one comes apart.
Re-clocking moves the joint's whole range, and one end can land inside a mechanical stop. Slowly command 200, then 800. If it jams, buzzes or stalls, power off immediately. Rotate one tooth back and retest.
Watch whether the joint drifts out again over a few walking sessions. Drifting by a different amount each power cycle means the gear is slipping, not that the calibration is wrong.
Deviation has one job: make position 500 mean geometrically straight. Set it by the robot's shape, never by how the walk looks. Tuning deviation until a gait looks right corrupts the reference every other action depends on.
The test. Command every servo to 500, stand the robot on a flat surface, and look at it from the side:
Calibration genuinely is off, in the forward/back chain — ankles 2 · 10, knees 3 · 11, hips 4 · 12. Those six are the only servos that can tilt the robot. Correct them keeping the sides matched.
Calibration is fine. The lean is in the recorded gait or in weight distribution. Deviation will not fix it and should not be used to try.
Traps
| What you see | What it is |
|---|---|
| Value reverts on every power cycle | You changed position, not deviation. |
| Deviations vanished after a button press | Reset / Clear wipes the software's copy; Download afterwards writes those blanks over your work. Read first, always. |
| Read fails on IDs 17 and above | Normal. Only failures in 1–16 are real. |
| Joint moves but never answers Read | Communication, not a dead servo. Marginal cable — swap with the mirror twin's. |
| "Read success" but nothing looks different | That is only the confirmation. The values are in the deviation column. |
| Holds, then drifts after walking | Mechanical slip under load, not calibration. |
| Sags, jitters, or gives way generally | Check the battery first. |
Two tools, one robot
| Android app | PC software | |
|---|---|---|
| Connects by | Wireless | USB Type-C, Windows only |
| Can do | Play pre-recorded actions | Read servos, set deviations, drive joints, manage action groups |
| Shows numbers | No | Yes |
If the app offers its own calibrate function it can write values that conflict with the PC software. Pick one — the PC software, since it is the only one that shows numbers to check.