Recursive Newton-Euler Algorithm
递归牛顿-欧拉算法RNEAAdvancedSweeps velocity and acceleration outward from the base, then sweeps force back inward from the tip, to compute inverse-dynamics joint torques.
The recursive Newton-Euler algorithm computes inverse dynamics: given joint positions q, velocities q̇, and accelerations q̈, it finds the required joint torques τ = M(q)q̈ + C(q,q̇)q̇ + g(q), where M is the mass matrix, the C term is the Coriolis and centrifugal forces, and g is the gravity term. It runs in two passes: a forward pass from the base to the tip computes each link's velocity and acceleration; a backward pass from the tip back to the base applies the Newton-Euler equations to each link to find the force and moment acting on it, and projecting that onto the joint axis gives τ. The computation grows only linearly with the number of joints, far more efficient than expanding the Lagrangian equations directly. Luh, Walker, and Paul's 1980 online computation scheme is the classic form, and Featherstone gave a unified treatment using 6-dimensional spatial vectors. Both Pinocchio's rnea() and MuJoCo's mj_rne implement it; setting acceleration to zero yields the bias forces from gravity and Coriolis effects, which are commonly used for gravity compensation, computed-torque control, and model-based collision detection.
ExampleWith Pinocchio, pinocchio.rnea(model, data, q, v, a) directly returns the joint torques; setting v and a to zero gives exactly the gravity-compensation torque needed to hold the arm still in its current pose.
- Also called
- RNEA, RNE, Newton-Euler Inverse Dynamics
- Related
- Inverse Dynamics · Newton-Euler Equations · Articulated Body Algorithm · Composite Rigid Body Algorithm · Computed Torque Control · Pinocchio
- Sources
- Modern Robotics (Lynch & Park), Sec. 8.3 Newton–Euler Inverse Dynamics
MuJoCo Documentation: Computation(bias force via RNE with acceleration set to 0)
Pinocchio documentation(Recursive Newton-Euler algorithm, pinocchio::rnea)