Skip to content
Discussion options

You must be logged in to vote

Yes, LD storage needs clarification. It is the lower triangle of the LDL factorisation with D replacing the unit diagonal.
Using Python notation, if

M = np.zeros((nv, nv))
LD = np.zeros((nv, nv))
mujoco.mj_fullM(model, M, data.qM)
mujoco.mj_fullM(model, LD, data.qLD)

Then for

L = np.tril(LD, -1) + np.eye(nv)
D = np.diag(np.diag(LD))

we get

L.T @ D @ L == M

to numerical precision. The qLDiagInv and qLDiagSqrtInv are there just to avoid taking roots and inverses during the solve, which is an important operation.

NB we have the upper triangle on the left and the lower triangle on the right, since this is zero-fill-in reverse Cholesky, what Featherstone calls "LTL", rather than the LDL you'll…

Replies: 4 comments 1 reply

Comment options

You must be logged in to vote
0 replies
Comment options

You must be logged in to vote
0 replies
Comment options

You must be logged in to vote
1 reply
@JeanElsner
Comment options

Answer selected by yuvaltassa
Comment options

You must be logged in to vote
0 replies
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
3 participants