A humanoid runs several control layers at the same time, each at its own rate, and carries its own energy. In this lesson you see what comes from the factory on the G1, the H2 and the K1, the time each layer has per cycle, and you work out the endurance from the spec sheet, separating what is manufacturer data from what is a derived calculation.
1The layers: motor, PD, policy and VLA, each at its own rate
2Manufacturer CPU, optional Orin and Thor: what comes in each robot
3Loop budget: 1 kHz gives 1 ms per cycle
4Wh = V × Ah and the endurance without reserve
Goal: calculate the endurance and the time budget of each control layer of a humanoid from the manufacturer's spec sheet.
01 · Four rates in one body
From top (slow, thinks) to bottom (fast, holds the body up). Click each layer.
Click each block in the diagram to see what it does.
The lower the layer, the faster and the closer to the motor. A slow layer can never hold the body on its own.
02 · Compute and battery, with source
Tap each item.
1. What comes from the factory
The G1 comes with an 8-core CPU; the high-compute module (Orin and the like) is optional and EDU only. The H2 has an Intel i5 and, in the EDU, a second PC with an i7. The Booster K1 advertises 117 TOPS (unitree.com, booster.tech, read on 10/19/2026).
A catalog Jetson Thor, for now, only on the Booster T2 (reported, 07/2026).
2. Board price
The Jetson AGX Thor developer kit (Blackwell GPU, 128 GB) launched at US$ 3,499 in 08/2025 and rose to US$ 5,499 in 07/2026; the Orin Nano Super went from US$ 249 to US$ 399 (reported).
Board prices change: always cite them with the month and source.
3. Wh = V × Ah
Unitree gives the G1 9,000 mAh, a 13S pack, and about 2 h. It doesn't give the Wh. With 3.7 V nominal per lithium cell: 13 × 3.7 V = 48.1 V; 48.1 V × 9 Ah ≈ 433 Wh. This is a derived calculation: write it that way.
For the H2, Unitree already gives 0.972 kWh (15 Ah, 75.6 V maximum).
4. Runtime
Runtime = Wh ÷ W × 60. Working backward: 433 Wh in 2 h implies about 216 W average on the G1; 0.972 kWh in ~3 h (reported) implies 324 W on the H2.
Nobody drains the battery to zero, and walking fast uses more than standing still: usable runtime is shorter than the calculation.
Lesson answer keyG1: 433 Wh ÷ 216 W × 60 ≈ 120 min · H2: 972 Wh ÷ 324 W × 60 = 180 min
03 · The calculations in the terminal
autonomia.py does the pack calculation (when the spec sheet doesn't give Wh), the runtime, and the budget for each frequency.
Terminal · G1, H2, and loop budget
F=${FTH:-$HOME/fth}; cd $F/anatomia && . $F/.venv/bin/activate
python3 kit/autonomia.py --pack-s 13 --ah 9 --w 216 # G1: 9.000 mAh, 13S, ~2 h (unitree.com/g1)
python3 kit/autonomia.py --wh 972 --w 324 # H2: 0,972 kWh (unitree.com/H2)
python3 kit/autonomia.py --hz 1000 500 200 50 10 # budget for each control layer
Example from the repository
pack 13S × 3.7 V = 48.1 V nominal · 48.1 V × 9 Ah = 433 Wh (conta derivada)
energia 433 Wh · potência média 216 W
autonomia: 120 min (2.0 h), sem reserva
energia 972 Wh · potência média 324 W
autonomia: 180 min (3.0 h), sem reserva
1000 Hz → 1.0 ms por ciclo
500 Hz → 2.0 ms por ciclo
200 Hz → 5.0 ms por ciclo
50 Hz → 20.0 ms por ciclo
10 Hz → 100.0 ms por ciclo
The policy at 50 Hz has 20 ms to read sensors, run the network, and send targets. The PD at 1 kHz has 1 ms: that's why it runs on the robot, close to the motor.
pack 13S × 3.7 V = 48.1 V nominal · 48.1 V × 9000 Ah = 432900 Wh (conta derivada)
energia 432900 Wh · potência média 216 W
autonomia: 120250 min (2004.2 h), sem reserva
9000 in place of 9 gives 433 thousand Wh and 2,004 hours. An absurd result is a sign of swapped units: 9,000 mAh = 9 Ah.
04 · Practice
Calculations with the spec sheet in hand.
E1 · The G1's runtime
3 min
Run the G1 calculation with the numbers from the spec sheet and check it against the "about 2 h" that Unitree publishes.
Done when:python3 kit/autonomia.py --pack-s 13 --ah 9 --w 216 → autonomia: 120 min (2.0 h), sem reserva.
E2 · The H2
3 min
Do the same calculation with the energy Unitree publishes for the H2.
Done when:python3 kit/autonomia.py --wh 972 --w 324 → autonomia: 180 min (3.0 h), sem reserva.
E3 · Your controller's budget
5 min
A policy of yours takes 12 ms to run on the CPU. At what frequency does it fit? Use --hz with 50, 100, and 200.
Done when:python3 kit/autonomia.py --hz 50 100 200 shows 20.0, 10.0, and 5.0 ms por ciclo, and you concluded that 12 ms only fits at 50 Hz.
05 · Lesson quiz
The explanation appears after you answer.
Question 1 of 3
Why does joint PD control run on the robot and not on a server on the network?skill
Correct
The layer that holds the body up can't wait. Slower layers (policy at 50 Hz, VLA at 5–10 Hz) tolerate more delay; PD does not.
Not that one
The layer that holds the body up can't wait. Slower layers (policy at 50 Hz, VLA at 5–10 Hz) tolerate more delay; PD does not.Review: Four rates in one body
Question 2 of 3
How should you write the G1's battery energy in a technical document?
Correct
The spec sheet gives mAh, pack, and runtime, not Wh. Doing the calculation is legitimate, as long as you say it's derived and which voltage per cell you assumed.
Not that one
The spec sheet gives mAh, pack, and runtime, not Wh. Doing the calculation is legitimate, as long as you say it's derived and which voltage per cell you assumed.Review: Compute and battery, with source
Question 3 of 3
Which statement about onboard computing is consistent with the spec sheets read on 10/19/2026?
Correct
G1: 8-core CPU, optional Orin on the EDU. H2: Intel i5 and i7. Catalog Thor only on the Booster T2 (reported).