jaxsim 0.4.3.dev80__tar.gz → 0.4.3.dev90__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.4.3.dev80 → jaxsim-0.4.3.dev90}/PKG-INFO +1 -1
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/_version.py +2 -2
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/api/contact.py +5 -7
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/api/kin_dyn_parameters.py +1 -3
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/api/model.py +2 -8
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/rbda/crba.py +29 -29
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim.egg-info/PKG-INFO +1 -1
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/test_api_link.py +10 -30
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/test_automatic_differentiation.py +1 -1
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/.devcontainer/Dockerfile +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/.devcontainer/devcontainer.json +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/.gitattributes +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/.github/CODEOWNERS +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/.github/workflows/ci_cd.yml +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/.github/workflows/read_the_docs.yml +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/.github/workflows/update_pixi_lockfile.yml +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/.gitignore +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/.pre-commit-config.yaml +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/.readthedocs.yaml +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/CONTRIBUTING.md +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/LICENSE +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/README.md +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/Makefile +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/conf.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/examples.rst +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/guide/install.rst +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/index.rst +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/make.bat +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/modules/api.rst +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/modules/integrators.rst +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/modules/math.rst +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/modules/mujoco.rst +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/modules/parsers.rst +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/modules/rbda.rst +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/modules/typing.rst +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/docs/modules/utils.rst +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/environment.yml +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/examples/.gitattributes +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/examples/.gitignore +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/examples/PD_controller.ipynb +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/examples/Parallel_computing.ipynb +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/examples/README.md +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/examples/assets/cartpole.urdf +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/pixi.lock +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/pyproject.toml +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/setup.cfg +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/setup.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/__init__.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/api/__init__.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/api/com.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/api/common.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/api/data.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/api/frame.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/api/joint.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/api/link.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/api/ode.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/api/ode_data.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/api/references.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/exceptions.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/integrators/__init__.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/integrators/common.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/integrators/fixed_step.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/integrators/variable_step.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/logging.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/math/__init__.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/math/adjoint.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/math/cross.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/math/inertia.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/math/joint_model.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/math/quaternion.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/math/rotation.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/math/skew.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/math/transform.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/mujoco/__init__.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/mujoco/__main__.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/mujoco/loaders.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/mujoco/model.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/mujoco/visualizer.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/parsers/__init__.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/parsers/descriptions/__init__.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/parsers/descriptions/collision.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/parsers/descriptions/joint.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/parsers/descriptions/link.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/parsers/descriptions/model.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/parsers/kinematic_graph.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/parsers/rod/__init__.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/parsers/rod/parser.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/parsers/rod/utils.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/rbda/__init__.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/rbda/aba.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/rbda/collidable_points.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/rbda/contacts/__init__.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/rbda/contacts/common.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/rbda/contacts/relaxed_rigid.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/rbda/contacts/rigid.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/rbda/contacts/soft.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/rbda/forward_kinematics.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/rbda/jacobian.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/rbda/rnea.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/rbda/utils.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/terrain/__init__.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/terrain/terrain.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/typing.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/utils/__init__.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/utils/jaxsim_dataclass.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/utils/tracing.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim/utils/wrappers.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim.egg-info/SOURCES.txt +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim.egg-info/dependency_links.txt +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim.egg-info/requires.txt +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/src/jaxsim.egg-info/top_level.txt +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/__init__.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/conftest.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/test_api_com.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/test_api_contact.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/test_api_data.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/test_api_frame.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/test_api_joint.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/test_api_model.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/test_contact.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/test_exceptions.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/test_pytree.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/test_simulations.py +0 -0
- {jaxsim-0.4.3.dev80 → jaxsim-0.4.3.dev90}/tests/utils_idyntree.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: jaxsim
|
3
|
-
Version: 0.4.3.
|
3
|
+
Version: 0.4.3.dev90
|
4
4
|
Summary: A differentiable physics engine and multibody dynamics library for control and robot learning.
|
5
5
|
Author-email: Diego Ferigo <dgferigo@gmail.com>
|
6
6
|
Maintainer-email: Diego Ferigo <dgferigo@gmail.com>, Filippo Luca Ferretti <filippo.ferretti@iit.it>
|
@@ -12,5 +12,5 @@ __version__: str
|
|
12
12
|
__version_tuple__: VERSION_TUPLE
|
13
13
|
version_tuple: VERSION_TUPLE
|
14
14
|
|
15
|
-
__version__ = version = '0.4.3.
|
16
|
-
__version_tuple__ = version_tuple = (0, 4, 3, '
|
15
|
+
__version__ = version = '0.4.3.dev90'
|
16
|
+
__version_tuple__ = version_tuple = (0, 4, 3, 'dev90')
|
@@ -372,11 +372,9 @@ def transforms(model: js.model.JaxSimModel, data: js.data.JaxSimModelData) -> jt
|
|
372
372
|
"""
|
373
373
|
|
374
374
|
# Get the transforms of the parent link of all collidable points.
|
375
|
-
W_H_L =
|
376
|
-
|
377
|
-
|
378
|
-
)
|
379
|
-
)(jnp.array(model.kin_dyn_parameters.contact_parameters.body, dtype=int))
|
375
|
+
W_H_L = js.model.forward_kinematics(model=model, data=data)[
|
376
|
+
jnp.array(model.kin_dyn_parameters.contact_parameters.body, dtype=int)
|
377
|
+
]
|
380
378
|
|
381
379
|
# Build the link-to-point transform from the displacement between the link frame L
|
382
380
|
# and the implicit contact frame C.
|
@@ -427,9 +425,9 @@ def jacobian(
|
|
427
425
|
# Compute the contact Jacobian.
|
428
426
|
# In inertial-fixed output representation, the Jacobian of the parent link is also
|
429
427
|
# the Jacobian of the frame C implicitly associated with the collidable point.
|
430
|
-
W_J_WC =
|
428
|
+
W_J_WC = W_J_WL[
|
431
429
|
jnp.array(model.kin_dyn_parameters.contact_parameters.body, dtype=int)
|
432
|
-
|
430
|
+
]
|
433
431
|
|
434
432
|
# Adjust the output representation.
|
435
433
|
match output_vel_repr:
|
@@ -422,9 +422,7 @@ class KynDynParameters(JaxsimDataclass):
|
|
422
422
|
# Note that here we include also the index 0 since suc_H_child[0] stores the
|
423
423
|
# optional pose of the base link w.r.t. the root frame of the model.
|
424
424
|
# This is supported by SDF when the base link <pose> element is defined.
|
425
|
-
suc_H_i =
|
426
|
-
jnp.arange(0, 1 + self.number_of_joints())
|
427
|
-
)
|
425
|
+
suc_H_i = self.joint_model.suc_H_i[jnp.arange(0, 1 + self.number_of_joints())]
|
428
426
|
|
429
427
|
# Compute the overall transforms from the parent to the child of each joint by
|
430
428
|
# composing all the components of our joint model.
|
@@ -395,13 +395,7 @@ def total_mass(model: JaxSimModel) -> jtp.Float:
|
|
395
395
|
The total mass of the model.
|
396
396
|
"""
|
397
397
|
|
398
|
-
return (
|
399
|
-
jax.vmap(lambda idx: js.link.mass(model=model, link_index=idx))(
|
400
|
-
jnp.arange(model.number_of_links())
|
401
|
-
)
|
402
|
-
.sum()
|
403
|
-
.astype(float)
|
404
|
-
)
|
398
|
+
return model.kin_dyn_parameters.link_parameters.mass.sum().astype(float)
|
405
399
|
|
406
400
|
|
407
401
|
@jax.jit
|
@@ -974,7 +968,7 @@ def free_floating_coriolis_matrix(
|
|
974
968
|
lambda link_index: js.link.jacobian_derivative(
|
975
969
|
model=model, data=data, link_index=link_index
|
976
970
|
)
|
977
|
-
)(
|
971
|
+
)(jnp.arange(model.number_of_links()))
|
978
972
|
|
979
973
|
L_M_L = link_spatial_inertia_matrices(model=model)
|
980
974
|
|
@@ -94,48 +94,48 @@ def crba(model: js.model.JaxSimModel, *, joint_positions: jtp.Vector) -> jtp.Mat
|
|
94
94
|
|
95
95
|
j = i
|
96
96
|
|
97
|
-
|
98
|
-
|
97
|
+
FakeWhileCarry = tuple[jtp.Int, jtp.Vector, jtp.Matrix]
|
98
|
+
fake_while_carry = (j, Fi, M)
|
99
99
|
|
100
|
-
|
101
|
-
|
100
|
+
# This internal for loop implements the while loop of the CRBA algorithm
|
101
|
+
# to compute off-diagonal blocks of the mass matrix M.
|
102
|
+
# In pseudocode it is implemented as a while loop. However, in order to enable
|
103
|
+
# applying reverse-mode AD, we implement it as a nested for loop with a fixed
|
104
|
+
# number of iterations and a branching model to skip for loop iterations.
|
105
|
+
def fake_while_loop(
|
106
|
+
carry: FakeWhileCarry, i: jtp.Int
|
107
|
+
) -> tuple[FakeWhileCarry, None]:
|
102
108
|
|
103
|
-
|
104
|
-
j = λ[j]
|
105
|
-
jj = j - 1
|
109
|
+
def compute(carry: FakeWhileCarry) -> FakeWhileCarry:
|
106
110
|
|
107
|
-
|
111
|
+
j, Fi, M = carry
|
108
112
|
|
109
|
-
|
110
|
-
|
113
|
+
Fi = i_X_λi[j].T @ Fi
|
114
|
+
j = λ[j]
|
111
115
|
|
112
|
-
|
116
|
+
M_ij = Fi.T @ S[j]
|
113
117
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
j,
|
119
|
-
out = jax.lax.cond(
|
120
|
-
pred=(λ[j] > 0),
|
121
|
-
true_fun=while_loop_body,
|
122
|
-
false_fun=lambda carry: carry,
|
123
|
-
operand=carry,
|
124
|
-
)
|
125
|
-
return out, None
|
118
|
+
jj = j - 1
|
119
|
+
M = M.at[ii + 6, jj + 6].set(M_ij.squeeze())
|
120
|
+
M = M.at[jj + 6, ii + 6].set(M_ij.squeeze())
|
121
|
+
|
122
|
+
return j, Fi, M
|
126
123
|
|
127
124
|
j, _, _ = carry
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
125
|
+
|
126
|
+
j, Fi, M = jax.lax.cond(
|
127
|
+
pred=jnp.logical_and(i == λ[j], λ[j] > 0),
|
128
|
+
true_fun=compute,
|
129
|
+
false_fun=lambda carry: carry,
|
132
130
|
operand=carry,
|
133
131
|
)
|
134
132
|
|
133
|
+
return (j, Fi, M), None
|
134
|
+
|
135
135
|
(j, Fi, M), _ = (
|
136
136
|
jax.lax.scan(
|
137
|
-
f=
|
138
|
-
init=
|
137
|
+
f=fake_while_loop,
|
138
|
+
init=fake_while_carry,
|
139
139
|
xs=jnp.flip(jnp.arange(start=1, stop=model.number_of_links())),
|
140
140
|
)
|
141
141
|
if model.number_of_links() > 1
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: jaxsim
|
3
|
-
Version: 0.4.3.
|
3
|
+
Version: 0.4.3.dev90
|
4
4
|
Summary: A differentiable physics engine and multibody dynamics library for control and robot learning.
|
5
5
|
Author-email: Diego Ferigo <dgferigo@gmail.com>
|
6
6
|
Maintainer-email: Diego Ferigo <dgferigo@gmail.com>, Filippo Luca Ferretti <filippo.ferretti@iit.it>
|
@@ -74,7 +74,7 @@ def test_link_inertial_properties(
|
|
74
74
|
|
75
75
|
for link_name, link_idx in zip(
|
76
76
|
model.link_names(),
|
77
|
-
|
77
|
+
jnp.arange(model.number_of_links()),
|
78
78
|
strict=True,
|
79
79
|
):
|
80
80
|
if link_name == model.base_link():
|
@@ -164,7 +164,7 @@ def test_link_jacobians(
|
|
164
164
|
|
165
165
|
for link_name, link_idx in zip(
|
166
166
|
model.link_names(),
|
167
|
-
|
167
|
+
jnp.arange(model.number_of_links()),
|
168
168
|
strict=True,
|
169
169
|
):
|
170
170
|
v_WL_idt = kin_dyn.frame_velocity(frame_name=link_name)
|
@@ -185,7 +185,7 @@ def test_link_jacobians(
|
|
185
185
|
|
186
186
|
for link_name, link_idx in zip(
|
187
187
|
model.link_names(),
|
188
|
-
|
188
|
+
jnp.arange(model.number_of_links()),
|
189
189
|
strict=True,
|
190
190
|
):
|
191
191
|
v_WL_idt = kin_dyn_other_repr.frame_velocity(frame_name=link_name)
|
@@ -220,7 +220,7 @@ def test_link_bias_acceleration(
|
|
220
220
|
|
221
221
|
for name, index in zip(
|
222
222
|
model.link_names(),
|
223
|
-
|
223
|
+
jnp.arange(model.number_of_links()),
|
224
224
|
strict=True,
|
225
225
|
):
|
226
226
|
Jν_idt = kin_dyn.frame_bias_acc(frame_name=name)
|
@@ -240,11 +240,7 @@ def test_link_bias_acceleration(
|
|
240
240
|
|
241
241
|
W_H_L = js.model.forward_kinematics(model=model, data=data)
|
242
242
|
|
243
|
-
W_a_bias_WL =
|
244
|
-
lambda index: js.link.bias_acceleration(
|
245
|
-
model=model, data=data, link_index=index
|
246
|
-
)
|
247
|
-
)(jnp.arange(model.number_of_links()))
|
243
|
+
W_a_bias_WL = js.model.link_bias_accelerations(model=model, data=data)
|
248
244
|
|
249
245
|
with data.switch_velocity_representation(VelRepr.Body):
|
250
246
|
|
@@ -252,11 +248,7 @@ def test_link_bias_acceleration(
|
|
252
248
|
lambda W_H_L: jaxsim.math.Adjoint.from_transform(transform=W_H_L)
|
253
249
|
)(W_H_L)
|
254
250
|
|
255
|
-
L_a_bias_WL =
|
256
|
-
lambda index: js.link.bias_acceleration(
|
257
|
-
model=model, data=data, link_index=index
|
258
|
-
)
|
259
|
-
)(jnp.arange(model.number_of_links()))
|
251
|
+
L_a_bias_WL = js.model.link_bias_accelerations(model=model, data=data)
|
260
252
|
|
261
253
|
W_a_bias_WL_converted = jax.vmap(
|
262
254
|
lambda W_X_L, L_a_bias_WL: W_X_L @ L_a_bias_WL
|
@@ -269,11 +261,7 @@ def test_link_bias_acceleration(
|
|
269
261
|
|
270
262
|
W_H_L = js.model.forward_kinematics(model=model, data=data)
|
271
263
|
|
272
|
-
L_a_bias_WL =
|
273
|
-
lambda index: js.link.bias_acceleration(
|
274
|
-
model=model, data=data, link_index=index
|
275
|
-
)
|
276
|
-
)(jnp.arange(model.number_of_links()))
|
264
|
+
L_a_bias_WL = js.model.link_bias_accelerations(model=model, data=data)
|
277
265
|
|
278
266
|
with data.switch_velocity_representation(VelRepr.Inertial):
|
279
267
|
|
@@ -283,11 +271,7 @@ def test_link_bias_acceleration(
|
|
283
271
|
)
|
284
272
|
)(W_H_L)
|
285
273
|
|
286
|
-
W_a_bias_WL =
|
287
|
-
lambda index: js.link.bias_acceleration(
|
288
|
-
model=model, data=data, link_index=index
|
289
|
-
)
|
290
|
-
)(jnp.arange(model.number_of_links()))
|
274
|
+
W_a_bias_WL = js.model.link_bias_accelerations(model=model, data=data)
|
291
275
|
|
292
276
|
L_a_bias_WL_converted = jax.vmap(
|
293
277
|
lambda L_X_W, W_a_bias_WL: L_X_W @ W_a_bias_WL
|
@@ -323,14 +307,10 @@ def test_link_jacobian_derivative(
|
|
323
307
|
lambda link_index: js.link.jacobian_derivative(
|
324
308
|
model=model, data=data, link_index=link_index
|
325
309
|
)
|
326
|
-
)(
|
310
|
+
)(jnp.arange(model.number_of_links()))
|
327
311
|
|
328
312
|
# Compute the product J̇ν.
|
329
|
-
O_a_bias_WL =
|
330
|
-
lambda link_index: js.link.bias_acceleration(
|
331
|
-
model=model, data=data, link_index=link_index
|
332
|
-
)
|
333
|
-
)(js.link.names_to_idxs(model=model, link_names=model.link_names()))
|
313
|
+
O_a_bias_WL = js.model.link_bias_accelerations(model=model, data=data)
|
334
314
|
|
335
315
|
# Compare the two computations.
|
336
316
|
assert jnp.einsum("l6g,g->l6", O_J̇_WL_I, I_ν) == pytest.approx(
|
@@ -263,7 +263,7 @@ def test_ad_jacobian(
|
|
263
263
|
# ====
|
264
264
|
|
265
265
|
# Get the link indices.
|
266
|
-
link_indices =
|
266
|
+
link_indices = jnp.arange(model.number_of_links())
|
267
267
|
|
268
268
|
# Get a closure exposing only the parameters to be differentiated.
|
269
269
|
# We differentiate the jacobian of the last link, likely among those
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|