Forward dynamics refers to the computation of motions from forces: given the
configuration q, generalized velocity q˙, joint torques
τ and contact forces f acting on our robot, forward
dynamics is the calculation of joint accelerations q¨ satisfying the
constrained equations of motion:
Note that this function implicitly depends on the underlying robot model, as
for instance different inertias yield different inertia matrices
M(q), thus different equations of motion that have different
solutions. There are two main algorithms to compute forward dynamics:
Let us dive into these two formulas.
Articulated body algorithm
The articulated body algorithm (ABA) computes the unconstrained forward dynamics:
q¨=ABA(q,q˙,τ,f)s.t. M(q)q¨+q˙⊤C(q)q˙=S⊤τ+τg(q)+τext+J⊤fIts output q¨ satisfies the unconstrained equation of motion, but it
doesn't take into account the holonomic contact constraint J(q)q¨+q˙⊤H(q)q˙=0.
Composite rigid body algorithm
The composite rigid body algorithm (CRBA) computes the joint inertia matrix
M(q) from the joint configuration q.
M(q)=CRBA(q)Once the inertia matrix is known, we can solve forward dynamics as:
q¨τ0=M(q)−1(τ−τ0)=RNEA(q,q˙,0,fext)where the zero-acceleration torque τ0 is computed using the
recursive Newton-Euler algorithm.
To go further
This article is a stub. Post your questions in the discussion below to keep it going.
Both the articulated body algorithm (ABA) and composite rigid body algorithm
(CRBA) are described in Featherstone's Rigid body dynamics algorithms, a seminal book that has been
implemented in rigid body dynamics libraries, such as Pinocchio or RBDL, as well as dynamic simulators, such as Bullet or Dart. ABA is the
main algorithm in both Bullet and Dart.