--- id: equations-and-bounds title: "Equations, Constants, and Validation Bounds" status: established source_sections: "reference/sources/official-product-page.md, reference/sources/official-developer-guide.md" related_topics: [hardware-specs, joint-configuration, locomotion-control, safety-limits, push-recovery-balance, whole-body-control, motion-retargeting] key_equations: [forward_kinematics, inverse_dynamics, com, zmp, battery_runtime] key_terms: [dof, actuator, joint, torque] images: [] examples: [] open_questions: - "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 |