9.7 KiB
| id | title | status | source_sections | related_topics | key_equations | key_terms | images | examples | open_questions |
|---|---|---|---|---|---|---|---|---|---|
| equations-and-bounds | Equations, Constants, and Validation Bounds | established | reference/sources/official-product-page.md, reference/sources/official-developer-guide.md | [hardware-specs joint-configuration locomotion-control safety-limits push-recovery-balance whole-body-control motion-retargeting] | [forward_kinematics inverse_dynamics com zmp battery_runtime] | [dof actuator joint torque] | [] | [] | [Per-joint velocity limits (dq_max) — not published Exact link masses and inertia tensors (available in URDF) Ankle joint range of motion] |
Equations, Constants, and Validation Bounds
Reference for all formulas, physical constants, and validation ranges used across the knowledge base. Always check values here before using a number in a calculation.
1. Physical Constants
| Constant | Symbol | Value | Unit |
|---|---|---|---|
| Gravity | g | 9.81 | m/s^2 |
| Pi | pi | 3.14159... | — |
2. Robot Parameters
| Parameter | Symbol | Value | Unit | Source | Tier |
|---|---|---|---|---|---|
| Total mass | m_total | ~35 | kg | Official product page | T0 |
| Standing height | h_stand | 1.32 | m | Official product page | T0 |
| Folded height | h_fold | 0.69 | m | Official product page | T0 |
| Width | w | 0.45 | m | Official product page | T0 |
| Depth | d | 0.20 | m | Official product page | T0 |
| Leg length (combined) | l_leg | 0.60 | m | Official product page | T0 |
| Total DOF (base variant) | n_dof | 23 | count | Official spec sheet | T0 |
| Total DOF (mid variant) | n_dof | 29 | count | Official spec sheet | T0 |
| Total DOF (full variant) | n_dof | 43 | count | Official spec sheet | T0 |
| Battery voltage (charger) | V_charge | 54 | V | Official spec sheet | T0 |
| Battery voltage (nominal) | V_batt | ~48.1 | V | 13-cell × 3.7V/cell | T3 |
| Battery capacity | Q_batt | 9,000 | mAh | Official spec sheet | T0 |
| Battery energy (estimated) | E_batt | ~432 | Wh | 9Ah × 48.1V | T3 |
| Max walking speed | v_max | 2.0 | m/s | Official spec sheet | T0 |
| Max payload per arm (base) | m_pay | 2 | kg | Official spec sheet | T0 |
| Max payload per arm (EDU) | m_pay | 3 | kg | Official spec sheet | T0 |
| Max knee torque (base) | tau_knee | 90 | Nm | Official spec sheet | T0 |
| Max knee torque (EDU) | tau_knee | 120 | Nm | Official spec sheet | T0 |
| Control loop rate | f_ctrl | 500 | Hz | Developer guide | T0 |
| DDS latency | t_dds | 2 | ms | Developer guide | T0 |
| Runtime (continuous) | t_run | ~2 | hr | Official spec sheet | T0 |
3. Joint Limits
Leg Joints (per leg)
| Joint Name | q_min (deg) | q_max (deg) | q_min (rad) | q_max (rad) | tau_max (Nm) | Source | Tier |
|---|---|---|---|---|---|---|---|
| hip_yaw | -158 | +158 | -2.758 | +2.758 | — | Official specs | T0 |
| hip_roll | -30 | +170 | -0.524 | +2.967 | — | Official specs | T0 |
| hip_pitch | -154 | +154 | -2.688 | +2.688 | — | Official specs | T0 |
| knee | 0 | +165 | 0 | +2.880 | 90/120 | Official specs | T0 |
| ankle_pitch | — | — | — | — | — | Not documented | — |
| ankle_roll | — | — | — | — | — | Not documented | — |
Waist Joints
| Joint Name | q_min (deg) | q_max (deg) | q_min (rad) | q_max (rad) | Source | Tier |
|---|---|---|---|---|---|---|
| waist_yaw | -155 | +155 | -2.705 | +2.705 | Official specs | T0 |
| waist_pitch | — | — | — | — | 29/43-DOF only | — |
| waist_roll | — | — | — | — | 29/43-DOF only | — |
Arm/Hand Limits
Arm and hand joint limits not yet published in official documentation. Available in URDF files at unitree_ros/robots/g1_description/.
4. Key Equations
4a. Forward Kinematics
T_ee = T_base * T_1(q_1) * T_2(q_2) * ... * T_n(q_n)
Where T_i(q_i) is the homogeneous transformation for joint i at angle q_i. DH parameters available in URDF model.
4b. Inverse Dynamics (Recursive Newton-Euler)
tau = M(q) * ddq + C(q, dq) * dq + G(q)
- M(q): mass/inertia matrix (29×29 for 29-DOF config)
- C(q, dq): Coriolis and centrifugal terms
- G(q): gravity vector (dominated by 35 kg total mass at g=9.81)
4c. Center of Mass
CoM = (1/m_total) * sum(m_i * p_i)
Where m_i and p_i are the mass and position of each link. Link masses available in URDF.
4d. Zero Moment Point (ZMP)
ZMP_x = (sum(m_i * (g * x_i - z_i * ddx_i + x_i * ddz_i))) / (sum(m_i * (g + ddz_i)))
Critical for bipedal balance — ZMP must remain within the support polygon. Note: The G1's RL-based controller learns ZMP-like constraints implicitly rather than using explicit ZMP computation. [T1]
4e. Battery Runtime Estimate
t_runtime = E_batt / P_avg
- E_batt ≈ 432 Wh [T3]
- P_avg varies: ~216 W for 2hr runtime (walking), lower for standing [T3]
- P_avg = E_batt / t_runtime = 432 / 2 ≈ 216 W average during continuous operation [T3]
4f. Control Loop Timing
dt_control = 1 / f_ctrl = 1 / 500 = 0.002 s = 2 ms
Motor commands should be published at this rate for smooth control. [T0]
4g. Support Polygon (Balance)
For double support (both feet on ground):
Support polygon = convex hull of all foot contact points
For single support (one foot):
Support polygon = convex hull of stance foot contact points
Balance condition (static):
ZMP ∈ support polygon
The CoM projection onto the ground plane must remain within the support polygon for static stability. Dynamic stability (walking) allows temporary excursions. See push-recovery-balance. [T1]
4h. Control Barrier Function (CBF)
Safety function: h(x) ≥ 0 (safe region)
CBF condition: ḣ(x,u) + α·h(x) ≥ 0 (forward invariance)
- α > 0: convergence rate parameter
- For balance: h(x) = distance from CoM projection to nearest support polygon edge
- For joint limits: h(x) = min(q - q_min, q_max - q) See push-recovery-balance §3c and safety-limits §8. [T1]
4i. Kinematic Scaling (Motion Retargeting)
q_robot = retarget(p_human)
Simple scaling:
p_robot_i = p_human_i * (l_robot_i / l_human_i)
Where:
l_robot_i = robot limb segment length
l_human_i = human limb segment length
After scaling, solve IK to get joint angles. Must clamp to robot joint limits. See motion-retargeting. [T1]
4j. Residual Policy Action
a_final = a_base + α * a_residual
Where:
a_base = base controller output (stock or trained policy)
a_residual = correction from residual policy
α ∈ [0, 1] = safety scaling factor
Smaller α = more conservative (stay closer to base). See push-recovery-balance §3b. [T1]
5. Validation Bounds
Use these to sanity-check calculations:
| Quantity | Valid Range | Notes | Tier |
|---|---|---|---|
| Joint position (hip) | [-2.97, +2.97] rad | Most permissive hip range (roll) | T0 |
| Joint position (knee) | [0, 2.88] rad | Extension only | T0 |
| Joint torque (knee) | [-120, +120] Nm | EDU variant max | T0 |
| Walking speed | [0, 2.0] m/s | Official max | T0 |
| Battery voltage | ~42-54 V | Depleted to fully charged estimate | T3 |
| Control loop rate | 500 Hz | Fixed by locomotion computer | T0 |
| DDS latency | ~2 ms | Internal network | T0 |
| Robot mass | ~35 kg | Without external payload | T0 |
| Payload per arm | 0-3 kg | EDU max | T0 |
| Standing height | 1.32 m | — | T0 |
| Push recovery (standing) | ~30-60 N·s | Impulse, estimated from papers | T3 |
| CoM height (standing) | ~0.7-0.9 m | Estimated from proportions | T3 |
| Support polygon width | ~0.15-0.25 m | Foot width, stance dependent | T3 |
6. Unit Conversion Reference
| From | To | Multiply by |
|---|---|---|
| degrees | radians | pi / 180 |
| radians | degrees | 180 / pi |
| rpm | rad/s | 2*pi / 60 |
| Wh | J | 3600 |
| mAh | Ah | 1/1000 |
| kg*m/s^2 | N | 1 |