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

Lesson 3 · 15 min

Degrees of freedom, joints, and limits

"23 to 43 degrees of freedom" is marketing; the joint tree in the file is the body your controller will command. In this lesson you list the G1's 29 joints with limits in degrees and maximum torque, understand why the leg has six, and check that the number matches the actuators.

Start the lesson
Leg of an industrial humanoid robot on a workbench, with the hip, knee, and ankle exposed and a metal protractor beside it.

In this lesson you will

  1. 1The body tree: pelvis, legs, waist, and arms
  2. 2Why the leg has 6 joints and in what order
  3. 3Limits are in radians in the file, in degrees in your head
  4. 4Degrees of freedom in the file × on the manufacturer's spec sheet

Goal: list the G1's joints with limits in degrees and maximum torque, and check that the number of articulated joints matches nu.

01The 29 joints of the G1 from Menagerie

Each block is a branch of the tree that starts at the pelvis. Click to see the joints.

Click each block in the diagram to see what it does.

12 in the legs + 3 in the waist + 14 in the arms = 29 = nu.

02How to read a line of the tree

Click each step.

1. Name

left_hip_roll_joint: left leg, hip, roll rotation (tilting sideways). Pitch bends forward and backward; yaw turns around the vertical axis.

The indentation in the output shows what hangs from what: the ankle depends on the knee, which depends on the hip.

03The G1 tree

juntas.py reads everything from the MJCF and prints one line per joint.

Terminal · list the joints
F=${FTH:-$HOME/fth}; cd $F/anatomia && . $F/.venv/bin/activate
python3 kit/juntas.py unitree_g1/scene.xml; echo "saída: $?"
Example from the repository
unitree_g1/scene.xml · 29 juntas articuladas
junta                                        mín°   máx°  torque máx (N·m)
  left_hip_pitch_joint                       -145    165                88
    left_hip_roll_joint                       -30    170               139
      left_hip_yaw_joint                     -158    158                88
        left_knee_joint                        -5    165               139
          left_ankle_pitch_joint              -50     30                50
            left_ankle_roll_joint             -15     15                50
  right_hip_pitch_joint                      -145    165                88
    right_hip_roll_joint                     -170     30               139
      right_hip_yaw_joint                    -158    158                88
        right_knee_joint                       -5    165               139
          right_ankle_pitch_joint             -50     30                50
            right_ankle_roll_joint            -15     15                50
  waist_yaw_joint                            -150    150                88
    waist_roll_joint                          -30     30                50
      waist_pitch_joint                       -30     30                50
        left_shoulder_pitch_joint            -177    153                25
          left_shoulder_roll_joint            -91    129                25
            left_shoulder_yaw_joint          -150    150                25
              left_elbow_joint                -60    120                25
                left_wrist_roll_joint        -113    113                25
                  left_wrist_pitch_joint      -93     93                 5
                    left_wrist_yaw_joint      -93     93                 5
        right_shoulder_pitch_joint           -177    153                25
          right_shoulder_roll_joint          -129     91                25
            right_shoulder_yaw_joint         -150    150                25
              right_elbow_joint               -60    120                25
                right_wrist_roll_joint       -113    113                25
                  right_wrist_pitch_joint     -93     93                 5
                    right_wrist_yaw_joint     -93     93                 5
RESUMO: 29 juntas articuladas + 1 base flutuante · nu=29 · bate com nu: sim
saída: 0

04Practice

Read the tree and draw conclusions from it.

E1 · The G1 tree

5 min

Run the "list the joints" block and mark the 6 joints of one leg in the output.

Done when: the last line is RESUMO: 29 juntas articuladas + 1 base flutuante · nu=29 · bate com nu: sim and saída: 0.

E2 · The H1 tree

5 min

Run the same script on the H1 and compare: how many joints does its leg have, and what is the highest declared torque?

Done when: python3 kit/juntas.py unitree_h1/scene.xml | tail -1 → RESUMO: 19 juntas articuladas + 1 base flutuante · nu=19 · bate com nu: sim.

E3 · The tightest joint

5 min

Find the leg joint with the smallest range of motion on the G1 and explain why it is small.

Done when: python3 kit/juntas.py | grep ankle_roll shows -15 15 on both lines, and you wrote a sentence about why.

05Lesson quiz

The explanation appears after you answer.

Question 1 of 3

The Menagerie G1 has njnt=30 and nu=29. Where does the difference come from?skill

06In three sentences

TreeFree pelvis, 6 per leg, 3 at the waist, 7 per arm on the Menagerie G1.
LimitsRange in radians and torque in actuatorfrcrange, read from the file.
CheckArticulated joints = nu; the base doesn't count.

To go further

Previous lessonNext lesson