| name | robot-dynamics |
| description | Robot dynamics — Euler-Lagrange equations of motion, Newton-Euler recursive algorithm, inertia matrix, Coriolis and centrifugal matrix, gravity vector, joint torque/force calculation, dynamic model identification (IDIM, least-squares), friction models (Coulomb, viscous, Stribeck), payload estimation, joint torque limits, computed torque control, inverse dynamics feed-forward, trajectory dynamics (joint-space and Cartesian), and KUKA/ABB dynamic model validation. |
| metadata | {"priority":7,"promptSignals":{"phrases":["robot dynamics","robot equations of motion","Euler-Lagrange robot","Newton-Euler robot","robot torque","inverse dynamics robot"],"minScore":3}} |
Robot Dynamics — Complete Skill
Equations of Motion
Lagrangian Formulation
Generalized equations of motion:
M(q) × q̈ + C(q,q̇) × q̇ + G(q) = τ [standard robot dynamics; vector equation; n joints]
Variables:
q = [q₁, q₂, ..., qₙ]ᵀ: joint positions (rad or m)
q̇ = dq/dt: joint velocities; q̈ = d²q/dt²: joint accelerations
M(q): n×n inertia matrix (positive definite symmetric)
C(q,q̇): n×n Coriolis and centrifugal matrix (Christoffel symbols)
G(q): n×1 gravity vector (gradient of potential energy)
τ: n×1 joint torque/force vector (control input)
Kinetic energy:
T = (1/2) × q̇ᵀ × M(q) × q̇ [scalar; sum over all links]
T = (1/2) × Σᵢ [mᵢ × vᵢ_cᵀ × vᵢ_c + ωᵢᵀ × Iᵢ × ωᵢ] [link i: mass mᵢ; CoM velocity vᵢ_c; angular velocity ωᵢ; inertia Iᵢ]
Potential energy:
V = Σᵢ mᵢ × g × zᵢ_c [zᵢ_c = height of CoM of link i; g = 9.81 m/s²]
Euler-Lagrange equations:
d/dt(∂T/∂q̇) - ∂T/∂q + ∂V/∂q = τ
→ M(q) × q̈ + C(q,q̇) × q̇ + G(q) = τ
Properties of the Dynamic Model
M(q) properties:
Symmetric positive definite; M = M^T; eigenvalues > 0
M(q) varies with configuration; diagonal for some simple structures; off-diagonal = coupling between joints
Ṁ - 2C skew-symmetry:
ẋᵀ × (Ṁ - 2C) × x = 0 for all x [key property; used in passivity-based control proof]
Coriolis matrix (Christoffel symbols):
C_{ij} = Σₖ c_{kij} × q̇ₖ [c_{kij} = 1/2 × (∂M_{ij}/∂qₖ + ∂M_{kj}/∂qᵢ - ∂M_{ik}/∂qⱼ)]
Gravity vector:
G_j = ∂V/∂q_j = Σᵢ mᵢ × g^T × ∂r_ic/∂q_j [r_ic = position of CoM of link i]
Newton-Euler Recursive Algorithm
Forward-Backward Recursion
Outward recursion (base to tool; propagate kinematics):
Angular velocity: ω_i = R_{i-1}^i × ω_{i-1} + q̇_i × ẑ_i [ẑ_i = unit vector of joint i axis]
Angular acceleration: ω̇_i = R_{i-1}^i × ω̇_{i-1} + q̈_i × ẑ_i + q̇_i × ω_i × ẑ_i
Linear acceleration of origin: v̇_i = R_{i-1}^i × v̇_{i-1} + ω̇_i × r_i + ωᵢ × (ωᵢ × r_i) [r_i = position of frame i origin]
Linear acceleration of CoM: v̇_ci = v̇_i + ω̇_i × d_ci + ωᵢ × (ωᵢ × d_ci) [d_ci = CoM position from frame i origin]
Inward recursion (tool to base; compute forces/torques):
Forces: fᵢ = mᵢ × v̇_ci - mᵢ × g + Rᵢ^{i+1} × f_{i+1} [Newton's 2nd law for link i]
Torques: nᵢ = Iᵢ × ω̇ᵢ + ωᵢ × (Iᵢ × ωᵢ) + d_ci × (mᵢ × v̇_ci) + r_{i+1} × (Rᵢ^{i+1} × f_{i+1}) + Rᵢ^{i+1} × n_{i+1}
Joint torque (revolute):
τᵢ = nᵢ · ẑᵢ + d_i × fᵢ · ẑᵢ [projection onto joint axis; d_i = motor damping]
Computational complexity: O(n) for n joints; Newton-Euler is more efficient than Lagrange for numerical simulation
Inertia Matrix Calculation
For 2-DOF Planar Robot (Example)
Links: L₁ = 0.5 m, m₁ = 5 kg; L₂ = 0.4 m, m₂ = 3 kg (uniform rods; Ic = mL²/12)
M₁₁(q) = m₁(L₁/2)² + I_c1 + m₂[L₁² + 2L₁(L₂/2)cos(q₂) + (L₂/2)²] + I_c2
M₁₂ = M₂₁(q) = m₂[L₁(L₂/2)cos(q₂) + (L₂/2)²] + I_c2
M₂₂ = m₂(L₂/2)² + I_c2
Coriolis:
C₁₁ = 0; C₁₂ = -m₂ × L₁ × (L₂/2) × sin(q₂) × q̇₂; C₂₁ = m₂ × L₁ × (L₂/2) × sin(q₂) × q̇₁; C₂₂ = 0
Gravity:
G₁ = (m₁×(L₁/2) + m₂×L₁) × g × cos(q₁) + m₂ × (L₂/2) × g × cos(q₁+q₂)
G₂ = m₂ × (L₂/2) × g × cos(q₁+q₂)
Friction Models
Coulomb + Viscous + Stribeck
Coulomb friction:
τ_friction = F_c × sgn(q̇) [constant magnitude; reverses with velocity sign]
F_c = static friction torque (at breakaway); values 1–20 Nm for industrial robot joints
Viscous friction:
τ_viscous = B × q̇ [B = viscous damping coefficient Nm·s/rad; linear with velocity]
B: 0.5–5 Nm·s/rad for industrial joints with lubricated gearboxes
Stribeck effect (combined):
τ_friction = [F_c + (F_s - F_c) × exp(-(q̇/v_s)²)] × sgn(q̇) + B × q̇
v_s = Stribeck velocity (velocity at friction minimum); typically 0.01–0.05 rad/s
At low velocities: stick-slip; friction drops from F_s (static) to F_c (kinetic) above v_s
Friction identification:
Run constant-velocity experiments at multiple velocities; measure steady-state τ
Fit F_c, F_s, B, v_s from τ = f(q̇) curve using least-squares
Dynamic Model Identification
IDIM (Inverse Dynamics Identification Method)
Regressor form:
τ = Y(q, q̇, q̈) × π [linear in parameters; Y = regressor matrix n×p; π = parameter vector p×1]
π = [m₁, m₁ × d_c1_x, m₁ × I_c1_xx, ..., F_c1, B₁, ...] [inertial + friction parameters per link]
Standard form:
Measure: τ_measured (from motor current × torque constant)
Compute: Y from measured q, q̇, q̈ (filtered numerically)
Estimate: π̂ = (Y^T Y)^{-1} Y^T × τ_measured [ordinary least squares; 30–60 excitation trajectories needed]
DIDIM (Dynamic IDentification through Inverse Model):
More numerically robust; integrates measured velocities to reduce differentiation noise
Validation: simulate dynamics with identified π → compare τ_simulated vs. τ_measured; target: RMSE < 10% rated torque
Exciting trajectories:
Periodic trajectories designed to excite all joint frequencies
Optimal design: maximize condition number of Y^T Y (minimize correlation between parameters)
Fourier series: q_j(t) = q₀_j + Σₖ (a_jk sin(kω_f t) + b_jk cos(kω_f t))
Computed Torque Control (CTC)
Feed-Forward + PD Controller
Inverse dynamics control law:
τ = M(q) × (q̈_d + K_d × ė + K_p × e) + C(q,q̇) × q̇ + G(q) + τ_friction
[q̈_d = desired acceleration; e = q_d - q = position error; ė = velocity error; K_p, K_d = PD gains]
Linearization: with perfect model, closed-loop error dynamics become:
ë + K_d × ė + K_p × e = 0 [linear decoupled double integrator per joint]
Critically damped: K_d = 2ωₙ, K_p = ωₙ² → ωₙ = desired bandwidth [rad/s]
Robustness: model errors, friction, payload → disturbance force δτ
Integral term added: K_i × ∫e dt → steady-state error eliminated
Practical implementation:
Sample at ≥ 1 kHz; compute M, C, G online at each sample; ~10⁶ flops per sample for 6-DOF robot
Required: fast CPU (FPGA or multi-core real-time controller); pre-compiled Matlab/Simulink or C++ dynamics
Payload Estimation
Static payload identification:
With known robot configuration q → measure joint torques τ_static → solve for mass and CoM of payload
G(q, payload) = G(q, no_payload) + G_payload(q) [linear superposition]
G_payload_j = m_p × g × ∂z_t / ∂q_j [z_t = height of tool CoM; m_p = payload mass]
Estimate m_p and d_c_payload from τ_static at multiple q configurations
Standards and References
| Standard | Scope |
|---|
| ISO 9283 | Robot performance testing (includes dynamic performance) |
| Siciliano et al. "Robotics" (Springer 2009) | Comprehensive robot dynamics textbook |
| Khalil & Dombre "Modeling Identification and Control of Robots" | IDIM identification method |
| Slotine & Li "Applied Nonlinear Control" | Computed torque, adaptive control theory |
| Craig "Introduction to Robotics" | Newton-Euler algorithm derivation |
Output
Provide: robot configuration (n joints; DH parameters; link masses mᵢ [kg]; inertia tensors Iᵢ [kg·m²]), equations of motion (M, C, G expressions or numerical values at a specific q), inverse dynamics at a given trajectory (q, q̇, q̈) → joint torques τ [Nm] computed by Newton-Euler, peak torque per joint [Nm] vs. motor rated torque [Nm] (utilization %), friction model (F_c [Nm]; B [Nm·s/rad]; Stribeck v_s [rad/s]; total friction at operating speed), computed torque controller gains (K_p, K_d per joint; expected bandwidth ωₙ [rad/s]; tracking error e_max [mm]), dynamic model identification (regressor Y; parameter vector π̂; RMSE [Nm]; validation RMSE vs. 10% rated), payload (m_p [kg]; CoM offset d_c [mm]; additional gravity torque per joint [Nm]), and applicable reference (Siciliano Robotics, Khalil IDIM, ISO 9283).