[MuJoCo] Jacobian API

Geometric/Analytical Jacobian

Geometric Jacobian

The relationship between the joint velocities and the corresponding (uniquely-defined) end-effector linear and angular velocities at given point on the end-effector.

Analytical Jacobian

The relationship between the joint velocities and the corresponding (not uniquely-defined) end-effector linear velocities and time derivatives of any representation of the orientation at given point on the end-effector.


Assume $\phib = (\gamma, \beta, \alpha)$ is the ZYX Euler angle. The velocity relation is given by


The jacobian relation is given correspondingly by


MuJoCo Jacobian API

The function for computing geometrical jacobian is:

void mj_jac(model, data, jacp, jacr, point, body_index)

The geometrical Jacobian has translational (jacp) and rotational (jacr) components. jacp and jacr point to 3-by-nv matrices you allocated that will hold the result. Each row of this matrix is the gradient of the corresponding 3D coordinate of the specified point with respect to the degrees of freedom. If either is NULL, that Jacobian is not computed. 1

The point is in 3D global (world) coordinates. body is the body index. 2

There are also helper functions mj_jacBody, mj_jacSite, etc that compute the Jacobian of the frame of the specified body, site etc.

Note that the position-dependent stages of the computation must have been executed for the current state in order for these functions to return correct results. So to be safe, do mj_forward and then mj_jac. If you do mj_step and then call mj_jac, the Jacobians will correspond to the state before the integration of positions and velocities took place.

1. MuJoCo API Document
2. MuJoCo Forum - Easiest way to compute Jacobian