jaxsim 0.3.1.dev56__tar.gz → 0.3.1.dev62__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- jaxsim-0.3.1.dev62/.gitattributes +2 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/PKG-INFO +1 -1
- jaxsim-0.3.1.dev62/pixi.lock +3 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/_version.py +2 -2
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/api/contact.py +9 -9
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim.egg-info/PKG-INFO +1 -1
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim.egg-info/SOURCES.txt +1 -0
- jaxsim-0.3.1.dev62/tests/test_api_contact.py +58 -0
- jaxsim-0.3.1.dev56/examples/.gitattributes +0 -2
- jaxsim-0.3.1.dev56/pixi.lock +0 -16568
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/.devcontainer/Dockerfile +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/.devcontainer/devcontainer.json +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/.github/CODEOWNERS +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/.github/workflows/ci_cd.yml +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/.github/workflows/read_the_docs.yml +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/.github/workflows/style.yml +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/.gitignore +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/.pre-commit-config.yaml +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/.readthedocs.yaml +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/CONTRIBUTING.md +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/LICENSE +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/README.md +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/docs/Makefile +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/docs/conf.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/docs/guide/install.rst +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/docs/index.rst +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/docs/make.bat +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/docs/modules/api.rst +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/docs/modules/index.rst +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/docs/modules/integrators.rst +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/docs/modules/math.rst +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/docs/modules/mujoco.rst +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/docs/modules/parsers.rst +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/docs/modules/rbda.rst +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/docs/modules/typing.rst +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/docs/modules/utils.rst +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/environment.yml +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62/examples}/.gitattributes +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/examples/.gitignore +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/examples/PD_controller.ipynb +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/examples/Parallel_computing.ipynb +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/examples/README.md +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/examples/assets/cartpole.urdf +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/pyproject.toml +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/setup.cfg +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/setup.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/__init__.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/api/__init__.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/api/com.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/api/common.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/api/data.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/api/frame.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/api/joint.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/api/kin_dyn_parameters.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/api/link.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/api/model.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/api/ode.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/api/ode_data.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/api/references.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/exceptions.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/integrators/__init__.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/integrators/common.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/integrators/fixed_step.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/integrators/variable_step.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/logging.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/math/__init__.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/math/adjoint.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/math/cross.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/math/inertia.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/math/joint_model.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/math/quaternion.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/math/rotation.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/math/skew.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/math/transform.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/mujoco/__init__.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/mujoco/__main__.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/mujoco/loaders.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/mujoco/model.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/mujoco/visualizer.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/parsers/__init__.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/parsers/descriptions/__init__.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/parsers/descriptions/collision.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/parsers/descriptions/joint.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/parsers/descriptions/link.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/parsers/descriptions/model.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/parsers/kinematic_graph.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/parsers/rod/__init__.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/parsers/rod/parser.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/parsers/rod/utils.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/rbda/__init__.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/rbda/aba.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/rbda/collidable_points.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/rbda/contacts/__init__.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/rbda/contacts/common.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/rbda/contacts/soft.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/rbda/crba.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/rbda/forward_kinematics.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/rbda/jacobian.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/rbda/rnea.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/rbda/utils.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/terrain/__init__.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/terrain/terrain.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/typing.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/utils/__init__.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/utils/jaxsim_dataclass.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/utils/tracing.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim/utils/wrappers.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim.egg-info/dependency_links.txt +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim.egg-info/not-zip-safe +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim.egg-info/requires.txt +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/src/jaxsim.egg-info/top_level.txt +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/tests/__init__.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/tests/conftest.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/tests/test_api_com.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/tests/test_api_data.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/tests/test_api_frame.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/tests/test_api_joint.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/tests/test_api_link.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/tests/test_api_model.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/tests/test_automatic_differentiation.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/tests/test_contact.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/tests/test_exceptions.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/tests/test_pytree.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/tests/test_simulations.py +0 -0
- {jaxsim-0.3.1.dev56 → jaxsim-0.3.1.dev62}/tests/utils_idyntree.py +0 -0
@@ -12,5 +12,5 @@ __version__: str
|
|
12
12
|
__version_tuple__: VERSION_TUPLE
|
13
13
|
version_tuple: VERSION_TUPLE
|
14
14
|
|
15
|
-
__version__ = version = '0.3.1.
|
16
|
-
__version_tuple__ = version_tuple = (0, 3, 1, '
|
15
|
+
__version__ = version = '0.3.1.dev62'
|
16
|
+
__version_tuple__ = version_tuple = (0, 3, 1, 'dev62')
|
@@ -351,17 +351,17 @@ def jacobian(
|
|
351
351
|
output_vel_repr if output_vel_repr is not None else data.velocity_representation
|
352
352
|
)
|
353
353
|
|
354
|
-
#
|
354
|
+
# Compute the Jacobians of all links.
|
355
|
+
W_J_WL = js.model.generalized_free_floating_jacobian(
|
356
|
+
model=model, data=data, output_vel_repr=VelRepr.Inertial
|
357
|
+
)
|
358
|
+
|
359
|
+
# Compute the contact Jacobian.
|
355
360
|
# In inertial-fixed output representation, the Jacobian of the parent link is also
|
356
361
|
# the Jacobian of the frame C implicitly associated with the collidable point.
|
357
|
-
W_J_WC =
|
358
|
-
|
359
|
-
|
360
|
-
data=data,
|
361
|
-
link_index=parent_link_idx,
|
362
|
-
output_vel_repr=VelRepr.Inertial,
|
363
|
-
)
|
364
|
-
)(jnp.array(model.kin_dyn_parameters.contact_parameters.body, dtype=int))
|
362
|
+
W_J_WC = jax.vmap(lambda parent_link_idx: W_J_WL[parent_link_idx])(
|
363
|
+
jnp.array(model.kin_dyn_parameters.contact_parameters.body, dtype=int)
|
364
|
+
)
|
365
365
|
|
366
366
|
# Adjust the output representation.
|
367
367
|
match output_vel_repr:
|
@@ -0,0 +1,58 @@
|
|
1
|
+
import jax
|
2
|
+
import jax.numpy as jnp
|
3
|
+
import pytest
|
4
|
+
|
5
|
+
import jaxsim.api as js
|
6
|
+
from jaxsim import VelRepr
|
7
|
+
|
8
|
+
|
9
|
+
def test_contact_kinematics(
|
10
|
+
jaxsim_models_types: js.model.JaxSimModel,
|
11
|
+
velocity_representation: VelRepr,
|
12
|
+
prng_key: jax.Array,
|
13
|
+
):
|
14
|
+
|
15
|
+
model = jaxsim_models_types
|
16
|
+
|
17
|
+
_, subkey = jax.random.split(prng_key, num=2)
|
18
|
+
data = js.data.random_model_data(
|
19
|
+
model=model,
|
20
|
+
key=subkey,
|
21
|
+
velocity_representation=velocity_representation,
|
22
|
+
)
|
23
|
+
|
24
|
+
# =====
|
25
|
+
# Tests
|
26
|
+
# =====
|
27
|
+
|
28
|
+
# Compute the pose of the implicit contact frame associated to the collidable points
|
29
|
+
# and the transforms of all links.
|
30
|
+
W_H_C = js.contact.transforms(model=model, data=data)
|
31
|
+
W_H_L = js.model.forward_kinematics(model=model, data=data)
|
32
|
+
|
33
|
+
# Check that the orientation of the implicit contact frame matches with the
|
34
|
+
# orientation of the link to which the contact point is attached.
|
35
|
+
for contact_idx, index_of_parent_link in enumerate(
|
36
|
+
model.kin_dyn_parameters.contact_parameters.body
|
37
|
+
):
|
38
|
+
assert W_H_C[contact_idx, 0:3, 0:3] == pytest.approx(
|
39
|
+
W_H_L[index_of_parent_link][0:3, 0:3]
|
40
|
+
)
|
41
|
+
|
42
|
+
# Check that the origin of the implicit contact frame is located over the
|
43
|
+
# collidable point.
|
44
|
+
W_p_C = js.contact.collidable_point_positions(model=model, data=data)
|
45
|
+
assert W_p_C == pytest.approx(W_H_C[:, 0:3, 3])
|
46
|
+
|
47
|
+
# Compute the velocity of the collidable point.
|
48
|
+
# This quantity always matches with the linear component of the mixed 6D velocity
|
49
|
+
# of the implicit frame associated to the collidable point.
|
50
|
+
W_ṗ_C = js.contact.collidable_point_velocities(model=model, data=data)
|
51
|
+
|
52
|
+
# Compute the velocity of the collidable point using the contact Jacobian.
|
53
|
+
ν = data.generalized_velocity()
|
54
|
+
CW_J_WC = js.contact.jacobian(model=model, data=data, output_vel_repr=VelRepr.Mixed)
|
55
|
+
CW_vl_WC = jnp.einsum("c6g,g->c6", CW_J_WC, ν)[:, 0:3]
|
56
|
+
|
57
|
+
# Compare the two velocities.
|
58
|
+
assert W_ṗ_C == pytest.approx(CW_vl_WC)
|