Skip to content

Mass budget and proportions

Stage 2 · Mechanics · ~35 min · Before this: 04 Actuators, 05 Leg loads and stairs · numbers from the repository as of 2026-11-02

Every kilogram a humanoid carries has to be held up by its knees, cooled out of its motors, stopped when it falls and paid for in battery. This page shows where Marvin Bot’s 40 kg goes, what would take it back towards the 35 kg target, why making a robot bigger is harder than it looks, and how its body compares with a person of the same height.

Think of climbing stairs with a heavy rucksack: every step costs your thighs more, you tire sooner and you fall harder. A robot is the same, except that its “thighs” are electric motors with a fixed strength, and its “tiredness” is motor heat. A mass budget is simply a list of every part and what it weighs, kept as carefully as a money budget, so the designers know where each kilogram went and which ones they can still win back.

A humanoid standing on one bent leg is a weight on the end of a lever. The knee motor must hold the robot’s weight, m·g, times the horizontal distance from the knee to the line of that weight. So the knee torque grows in direct proportion to the mass: in Marvin Bot’s slow 18 cm stair-step check, the stance knee holds 47 N·m at 41.3 kg, about 1.1 N·m for every kilogram (docs/design/stairs.md). That is already 118% of the knee motor’s continuous (rated) torque: the torque it can hold indefinitely without overheating. Anything over 100% can only be held for a short time. Mass therefore is not a cosmetic number: it is the lever on the robot’s hottest joint.

The same mass shows up everywhere else too:

  • Heat. A motor’s copper loss (the heat made by current flowing through its windings) goes with current squared, and current goes with torque, so heat goes with mass squared. 10% more mass means about 21% more heat at the knee.
  • Falls. The energy to absorb in a fall is m·g·h (h = how far the centre of mass drops). Twice the mass, twice the energy the structure and shells must take.
  • Battery. Walking power grows roughly with weight, so a heavier robot drains the same battery faster; and the battery is itself one of the heaviest items.
  • Structure. Landing loads are a multiple of body weight (Marvin Bot designs for 3 × body weight), so every structural part must grow with the mass it carries, which adds mass again.

That last point is the trap: mass begets mass. The playground below is the robot’s real mass budget, so you can see which items are worth chasing. This page builds on the knee and stair loads of 05 Leg loads and stairs; the next page, 08 Structure and code-CAD, shows how the structural parts in this budget are designed and weighed.

Each block is one item of description/mass_budget.yaml, plus the motors (counted from description/robot.yaml and description/actuators.yaml) and the add-on body shells (description/cad_model.yaml), exactly as tools/check_description.py sums them. Block area is proportional to mass (the full panel = 44 kg, so the treemap shrinks as you save). Tick a reduction idea to apply it.

Start here: click the preset buttons one at a time and watch the five readouts under the picture. Names like RS04, RS03, RS10P and RS00 are RobStride motor models, from the largest (RS04, at the hips and knees) to the smallest (RS00, at the wrists); see 04 Actuators.

Presets

Reduction ideas

Stair consequence

The repo's static 18 cm step check: 47 N·m on the stance knee. Scaled in proportion to mass below.
Bare robot (target 35 kg)
–
With shells (limit 42 kg)
–
Stair knee, % of rated
–
Stair hip roll, % of rated
–
Knee heat vs today
–

How to read this picture: each coloured block is one item, its area proportional to its mass; colours are groups (legend above). The bar underneath stacks the groups into the total, with the 35 kg target (green dashes, bare robot) and the 42 kg hard limit (red dashes, with shells). Readout colours: green = within target or rating, amber = over target or slightly over rating, red = over the limit or well over rating.

    Torque is force times the perpendicular distance from the joint to the force’s line of action: τ = F · d (τ in N·m, F in newtons, d in metres). For a joint holding up part of the body, F is that part’s weight, m·g (g = 9.81 m/s²), and d is some fraction of a limb length L. So the torque a joint needs to hold a pose is

    τ ≈ k · m · g · L

    where k is a number between 0 and 1 set by the pose (how bent the leg is). Double the mass and you double the torque; double the limb length at the same pose and you double it again.[7]

    In everyday words: if you make a robot taller, its weight grows much faster than its height, and the turning force its joints need grows faster still. The motors you can buy do not keep up. That is why a bigger humanoid is not simply a scaled-up smaller one.

    Suppose you scale a whole robot up by a factor s in every direction (s = 1.1 means 10% taller, 10% wider, 10% deeper) and keep the same materials. Then:

    Quantity Scales as Why s = 1.1
    Lengths (limbs, lever arms) s by definition 1.10
    Cross-section areas (strength of a strut) s² width × depth 1.21
    Volume, so mass at constant density s³ width × depth × height 1.33
    Joint torque needed, τ ∝ m·L s⁴ s³ · s 1.46
    Torque a scaled-up motor gives about s³ gap shear stress × gap area × gap radius 1.33

    This is Galileo’s and Haldane’s old observation that big animals cannot simply be enlarged small ones: weight grows with volume, strength with area.[3] The bottom two rows are the ones that matter: the torque needed grows as s⁴ but the torque available only as s³, so the motor’s torque margin shrinks as 1/s. A robot twice the size has half the relative margin.

    Go deeper: where the s³ for motors and animals comes from

    Biologists measure the same effect across animals from mice to horses, which compensate with straighter limbs that shorten the lever arms.[4] For electric motors, the torque a motor can make is limited by the magnetic shear stress in its air gap (roughly constant for a given technology) acting over the gap’s area at the gap’s radius, so torque goes as radius² × length, about s³ for a geometrically similar motor.[5][6] Divide the two and you get the 1/s margin above.

    When mass grows less than s³. Real robots are not uniformly scaled. Bought parts keep their size: the computer, the camera, the electronics and often the battery weigh the same whether the robot is 1.2 m or 1.7 m. So the mass grows more slowly than s³ at first, which helps a taller robot. But motors come in steps (RobStride has nothing bigger than the RS04 [9]), so once the biggest motor runs out of margin a taller robot cannot simply buy a bigger one. Playground 2 below uses exactly this split: fixed parts plus a part that scales with s³.

    Holding a pose is about weight; swinging a leg is about moment of inertia. For a leg rotating about the hip, each piece of mass mi at distance ri from the hip axis contributes mi ri²:[7]

    I = Σ mi ri² (kg·m²), τ = I · α

    where α is the angular acceleration (rad/s²). The square means a kilogram at the ankle (0.64 m from the hip) costs about 14 times as much as a kilogram near the hip pitch motor (0.17 m). You feel this yourself: swinging your leg forward in heavy boots is far more tiring than carrying the same weight in a belt pouch. That is why designers move motors up the leg and drive the lower joints through linkages or belts. Marvin Bot’s ankles are an example: their two motors sit on the shin and push the foot through rods (06 The parallel-linkage ankle). Its knee motor, though, sits at the knee; docs/design/concept.md lists “knee motor at the joint or near the hip with a linkage” as an open question. The small playground below lets you test it: drag the sliders and watch the “Hip torque” readout, the torque the hip needs just to swing this leg at the chosen acceleration (lower is better).

    Presets

    Controls

    0.325 m = at the knee (today). Less = moved up the thigh, with a 0.2 kg linkage added.
    Today one ankle RS03 sits high under the knee and one low behind the ankle.
    Foot plate, ribs and TPU sole: 1.108 kg for two feet (mass_budget.yaml).
    How hard the hip swings the leg forward, in radians per second squared (1 rad ≈ 57°); a brisk step is tens of rad/s².
    Leg inertia about hip
    –
    Hip torque for α
    –
    Share below the knee
    –
    Swinging mass
    –

    Point-mass estimate of one straight leg below the hip pitch axis (masses from mass_budget.yaml and actuators.yaml, split along the leg by hand). Gravity is ignored here: it adds m·g·rCoM·sin(angle) on top.

    Human body proportions are well measured. The classic table, by Drillis and Contini and reproduced in Winter’s textbook, gives each segment as a fraction of standing height H: shoulder 0.818 H, elbow 0.630 H, wrist 0.485 H, fingertip 0.377 H, hip (greater trochanter) 0.530 H, knee 0.285 H, ankle 0.039 H, shoulder width 0.259 H.[1][2] They are averages for adults, good to a few per cent; they are a guide for how a humanoid will look and reach, not a law.

    Why care? A humanoid works in rooms built for people: door handles, tables, shelves and stairs. If its hands hang too low or its hips sit too high, it reaches and steps unlike a person, and motions recorded from people (see 17 Motion tracking) fit it badly.

    How to read this picture: on the left, Marvin Bot’s front view from description/robot.yaml; on the right, a person of the same height from those fractions. Grey dashed boxes are parts whose size does not change with the robot. Change the height with the slider and compare the readouts: robot / person heights in metres (green = within a few centimetres of a person).

    Presets

    Controls

    Scales every segment of the chosen design by s = H / design height. Fixed parts stay the same size.
    RobStride's largest motor is the RS04, so in practice a taller robot keeps it.
    Fingertips: robot / person
    –
    Elbow: robot / person
    –
    Hip axis / height
    –
    Mass (with shells)
    –
    Stair knee, % of rated
    –
    Knee motor Ø / thigh
    –
    Marvin Bot (robot.yaml)Person, Winter / Drillis & ContiniFixed-size parts

    The playground’s knee model: knee % = 118% × (mass / 41.30 kg) × (thigh / 0.325 m). It reproduces the repo’s static stair check for all three designs (109% at 1.29 m, 118% at 1.44 m, 127% with legs +90 mm) to within about 2 points. Mass when scaling: 7.08 kg of fixed parts (computer 0.877, battery 3.4, keep-alive pack 0.4, electronics 1.47, hands 0.8, camera 0.133) plus the rest × s³. Robot landmark heights come from the straight chain of robot.yaml lengths; the repo’s full model puts the fingertips 15 mm lower (0.556 m) and the elbow 6 mm lower (0.934 m) because of mounting offsets this sketch leaves out.

    At 1.29 m the robot’s heights were already close to human fractions at the shoulders and chin (2026-10-26 entry), but the bought hands are long for that size, and with the upper arm hanging 50 mm below the shoulder pitch joint the fingertips reached 0.38 m above the floor against a person’s 0.49 m: the hands hung almost to the knees. The fix (docs/decisions.md, 2026-10-29):

    • torso 100 mm longer (shoulders, neck and head rise with it), shoulder roll joint 25 mm below shoulder pitch (was 50);
    • legs 50 mm longer: thigh 0.300 → 0.325 m (the extra 25 mm above the hip yaw motor, so the thigh plate still fits the desktop mill), shin 0.290 → 0.315 m;
    • result: 1.438 m, fingertips 0.556 m (person 0.542), elbows 0.934 m (person 0.906), hip axis at 0.487 of the height (0.700 / 1.438; the log rounds it to 0.48).

    The costs, all from the decision log: +0.64 kg; the static stair knee from 109% to 118% of rated and hip roll from 103% to 105%; the centre of mass 78 mm higher (a taller inverted pendulum, like a broom balanced on a hand, falls more slowly but needs bigger corrections, see 02 Balance); and the policies trained on the old body need retraining. The flat-ground policy has since been retrained twice, on the 1.44 m model (flat v8) and on today’s 1.41 m model with the RS10P arms and the rounded head (flat v9), both with their knees bent more than intended through the stride; the stair policy is still the one trained on the 1.29 m body, which passes all 25 stair runs on today’s model (sim/isaaclab/README.md).

    Option Mass Trade-off Status (repo)
    Orin module on a compact carrier board instead of the developer kit −0.4 kg needs its own heatsink, fan and carrier; the developer kit’s I/O is convenient[8] listed in mass_budget.yaml (was −1.0 kg when the kit was estimated at 1.5 kg)
    Lighter leg cores once real loads are known −0.5 kg needs simulated and measured loads first listed in mass_budget.yaml
    13S2P battery instead of 13S3P (13 cells in series, 2 or 3 in parallel; see 09 Power) ≈ −1.1 kg runtime about 1 h instead of 1.5 h: exactly at the requirement not taken (2026-10-28)
    RS10P at shoulder roll and yaw and the elbow (in place of RS03 and RS06) −1.52 kg 13 rad/s top speed; holds 9.5 N·m still (1 kg held out sideways for about two minutes) done 2026-11-02
    RS10P at shoulder pitch and the waist too −1.32 kg shoulder pitch over its held rating with 1 kg at full reach; the waist’s bearing and hub are built round the RS03 checked and declined (2026-11-02)
    7075 leg plates thinned to the same stiffness −0.3 to −0.5 kg cost and sourcing (note: same stiffness needs the same thickness, since 7075 is barely stiffer than 6061; the saving comes from strength-limited parts only) option in stairs.md
    Carbon-fibre tube cores for thigh and shin ≈ −0.5 kg design work, bonded joints option in stairs.md
    Body shells off −0.98 kg looks unfinished, less fall protection; the policies already train on the bare robot shells are an add-on by design
    Waist roll and pitch joints (2-DOF waist) ≈ +2.5 kg more reach and bending; about +$630 to try in simulation first (2026-10-28)
    1.5:1 knee reduction stage ≈ +0.2 kg per knee 60 N·m continuous, some backlash, thigh redesign parked; decided after the bench test
    Legs +90 mm instead of +50 mm small hips at 0.50 of height (human-like) but knee at 127% of rated rejected 2026-10-29; would need the knee stage
    Shoulders raised 25-40 mm at 1.29 m, or torso +50 mm only ≈ 0 chin hits the shell’s collar looking down; not enough reach rejected 2026-10-29
    • Which savings to pursue first. The battery, the RS03 set and the leg structure are the biggest blocks. Trade: the 13S2P battery saves about 1.1 kg but cuts runtime from about 1.5 h to the 1 h minimum; RS10P at the shoulder pitch and waist would save 1.3 kg more, but the shoulder pitch could not hold 1 kg at full reach.
    • Whether 35 kg is still the right target, or whether the knee’s measured continuous rating (phase 2 bench test) should set the limit instead. Trade: chasing 35 kg costs runtime and margin elsewhere; a measured limit may allow today’s mass, or may demand more cuts.
    • Whether to add a 2-DOF waist. Trade: more reach and bending, but about +2.5 kg (over the 42 kg limit unless something else goes) and about +$630.
    • Where to put mass on the leg. Trade: the knee motor up the thigh cuts leg inertia by about 12% (an easier, quicker swing), but adds a linkage of about 0.2 kg and design work.
    • Whether to move the proportions further towards human (hips at 0.50 H). Trade: more human-like steps and reach, but the stair knee goes to about 127% of rated, so it needs the 1.5:1 knee stage (+0.2 kg per knee, some gear play).
    Your decision note

    Built from your settings above. Paste it into an issue, a design discussion or an AI assistant session.

    1. D. A. Winter, Biomechanics and Motor Control of Human Movement, 4th ed., Wiley, 2009 — used for: segment heights and lengths as fractions of height (Fig. 4.1, after Drillis and Contini)
    2. R. Drillis, R. Contini, M. Bluestein, Body segment parameters: a survey of measurement techniques, Artificial Limbs, 1964 — used for: origin of the segment-length fractions and their adult basis
    3. J. B. S. Haldane, On Being the Right Size, 1926 — used for: the square-cube argument
    4. A. A. Biewener, Biomechanical consequences of scaling, J. Exp. Biol. 208, 2005 — used for: how animals compensate for mass growing faster than strength
    5. S. Seok et al., Design principles for energy-efficient legged locomotion and implementation on the MIT Cheetah robot, IEEE/ASME Trans. Mechatronics, 2015 — used for: motor torque scaling with gap radius and size
    6. P. M. Wensing, A. Wang, S. Seok, D. Otten, J. Lang, S. Kim, Proprioceptive actuator design in the MIT Cheetah, IEEE T-RO, 2017 — used for: torque density, leg inertia and why distal mass matters
    7. K. M. Lynch, F. C. Park, Modern Robotics: Mechanics, Planning, and Control, Cambridge University Press, 2017 — used for: torque, moment of inertia and rigid-body dynamics
    8. NVIDIA, Jetson AGX Orin Developer Kit User Guide — used for: the developer kit as a module on a reference carrier board
    9. RobStride, Product_Information (manuals and specifications) — used for: RS04 Ø120 mm body, 40 N·m rated and 120 N·m peak; motor masses
    10. Orbbec, Gemini 335L product page — used for: camera size 124 × 29 × 27 mm and 133 g