Default installation can be done with pip:
$ pip install -e .
If you plan to contribute code, please additionally install linters.
$ pip install -e .[dev]
The default QP solver for this project is mpax. We additionally support jaxopt and moreau (via the cvxpylayers integration), which can be installed separately:
$ pip install jaxopt
$ pip install moreau[cuda13] cvxpylayers --extra-index-url https://pypi.fury.io/optimalintellect/
Moreau requires a license key and access token (i.e. username for pypi.fury.io). For more information, see the installation documentation
TODO
TODO
TODO
- Contact normal is +x, points from geom1 to geom2:
normals = mjx_data.contact.frame[:, 0, :]
- 4D pyramid approximation, see decodePyramid
efc_to_cframe (3x4) = [[1., 1., 1., 1.], [mu1, -mu1, 0., 0.], [0., 0., mu2, -mu2]]
force_cframe (3x1) = efc_to_cframe @ pyramid (4x1)
isotropic: mu1 == mu2
force_wframe (3x1) = mjx_data.contact.frame.T @ force_cframe
[mu1, mu2] = mjx_data.contact.friction[:, :2]phis = mjx_data.contact.distsliding_vels ([3*n_c]x1) = block_diag(efc_to_cframe) @ mjx_data.efc_J @ mjx_data.qvel