FTH 0 · The humanoid's body|INEMA.CLUB-PRO

Lesson 7 · 15 min

Brain and battery: what runs where

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.

Start the lesson
Open torso of a humanoid robot on a workbench, with a computer board, a battery pack and a multimeter next to it.

In this lesson you will

  1. 1The layers: motor, PD, policy and VLA, each at its own rate
  2. 2Manufacturer CPU, optional Orin and Thor: what comes in each robot
  3. 3Loop budget: 1 kHz gives 1 ms per cycle
  4. 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.

01Four 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.

02Compute 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).

03The 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.

04Practice

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.

05Lesson 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

06In three sentences

LayersVLA 5–10 Hz, policy ~50 Hz, PD 500 Hz–1 kHz, motor even faster.
OnboardG1 with an 8-core CPU and optional Orin on the EDU; Thor only on the T2 (reported).
BatteryWh = V × Ah; a derived calculation says it's derived; real runtime is lower.

To go further

Previous lessonNext lesson