jaxsim 0.5.1.dev152__tar.gz → 0.5.1.dev162__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.5.1.dev152 → jaxsim-0.5.1.dev162}/PKG-INFO +1 -1
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/_version.py +2 -2
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/api/model.py +102 -105
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/math/adjoint.py +14 -10
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/math/cross.py +10 -5
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/math/skew.py +14 -3
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/math/transform.py +7 -3
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/parsers/rod/parser.py +5 -10
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim.egg-info/PKG-INFO +1 -1
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/.devcontainer/Dockerfile +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/.devcontainer/devcontainer.json +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/.gitattributes +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/.github/CODEOWNERS +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/.github/dependabot.yml +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/.github/workflows/ci_cd.yml +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/.github/workflows/pixi.yml +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/.github/workflows/read_the_docs.yml +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/.gitignore +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/.pre-commit-config.yaml +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/.readthedocs.yaml +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/CONTRIBUTING.md +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/LICENSE +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/README.md +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/docs/Makefile +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/docs/conf.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/docs/examples.rst +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/docs/guide/configuration.rst +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/docs/guide/install.rst +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/docs/index.rst +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/docs/make.bat +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/docs/modules/api.rst +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/docs/modules/integrators.rst +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/docs/modules/math.rst +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/docs/modules/mujoco.rst +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/docs/modules/parsers.rst +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/docs/modules/rbda.rst +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/docs/modules/typing.rst +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/docs/modules/utils.rst +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/environment.yml +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/examples/.gitattributes +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/examples/.gitignore +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/examples/README.md +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/examples/assets/build_cartpole_urdf.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/examples/assets/cartpole.urdf +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/examples/jaxsim_as_multibody_dynamics_library.ipynb +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/examples/jaxsim_as_physics_engine.ipynb +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/examples/jaxsim_as_physics_engine_advanced.ipynb +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/examples/jaxsim_for_robot_controllers.ipynb +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/pixi.lock +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/pyproject.toml +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/setup.cfg +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/setup.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/__init__.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/api/__init__.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/api/com.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/api/common.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/api/contact.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/api/data.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/api/frame.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/api/joint.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/api/kin_dyn_parameters.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/api/link.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/api/ode.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/api/ode_data.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/api/references.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/exceptions.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/integrators/__init__.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/integrators/common.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/integrators/fixed_step.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/integrators/variable_step.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/logging.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/math/__init__.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/math/inertia.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/math/joint_model.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/math/quaternion.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/math/rotation.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/math/utils.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/mujoco/__init__.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/mujoco/__main__.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/mujoco/loaders.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/mujoco/model.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/mujoco/utils.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/mujoco/visualizer.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/parsers/__init__.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/parsers/descriptions/__init__.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/parsers/descriptions/collision.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/parsers/descriptions/joint.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/parsers/descriptions/link.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/parsers/descriptions/model.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/parsers/kinematic_graph.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/parsers/rod/__init__.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/parsers/rod/meshes.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/parsers/rod/utils.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/rbda/__init__.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/rbda/aba.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/rbda/collidable_points.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/rbda/contacts/__init__.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/rbda/contacts/common.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/rbda/contacts/relaxed_rigid.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/rbda/contacts/rigid.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/rbda/contacts/soft.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/rbda/contacts/visco_elastic.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/rbda/crba.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/rbda/forward_kinematics.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/rbda/jacobian.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/rbda/rnea.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/rbda/utils.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/terrain/__init__.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/terrain/terrain.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/typing.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/utils/__init__.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/utils/jaxsim_dataclass.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/utils/tracing.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim/utils/wrappers.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim.egg-info/SOURCES.txt +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim.egg-info/dependency_links.txt +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim.egg-info/requires.txt +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/src/jaxsim.egg-info/top_level.txt +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/tests/__init__.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/tests/conftest.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/tests/test_api_com.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/tests/test_api_contact.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/tests/test_api_data.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/tests/test_api_frame.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/tests/test_api_joint.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/tests/test_api_link.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/tests/test_api_model.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/tests/test_automatic_differentiation.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/tests/test_benchmark.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/tests/test_contact.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/tests/test_exceptions.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/tests/test_meshes.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/tests/test_pytree.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/tests/test_simulations.py +0 -0
- {jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/tests/utils_idyntree.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: jaxsim
|
3
|
-
Version: 0.5.1.
|
3
|
+
Version: 0.5.1.dev162
|
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>, Filippo Luca Ferretti <filippoluca.ferretti@outlook.com>
|
6
6
|
Maintainer-email: Filippo Luca Ferretti <filippo.ferretti@iit.it>, Alessandro Croci <alessandro.croci@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.5.1.
|
16
|
-
__version_tuple__ = version_tuple = (0, 5, 1, '
|
15
|
+
__version__ = version = '0.5.1.dev162'
|
16
|
+
__version_tuple__ = version_tuple = (0, 5, 1, 'dev162')
|
@@ -736,152 +736,149 @@ def generalized_free_floating_jacobian_derivative(
|
|
736
736
|
# Compute the base transform.
|
737
737
|
W_H_B = data.base_transform()
|
738
738
|
|
739
|
-
|
740
|
-
|
741
|
-
|
742
|
-
|
743
|
-
|
744
|
-
|
745
|
-
|
739
|
+
# We add the 5 columns of ones to the Jacobian derivative to account for the
|
740
|
+
# base velocity and acceleration (5 + number of links = 6 + number of joints).
|
741
|
+
B_J̇_WL_B = (
|
742
|
+
jnp.hstack([jnp.ones((κb.shape[0], 5)), κb])[:, jnp.newaxis] * B_J̇_full_WX_B
|
743
|
+
)
|
744
|
+
B_J_WL_B = (
|
745
|
+
jnp.hstack([jnp.ones((κb.shape[0], 5)), κb])[:, jnp.newaxis] * B_J_full_WL_B
|
746
|
+
)
|
746
747
|
|
747
|
-
|
748
|
-
|
749
|
-
|
748
|
+
# =====================================================
|
749
|
+
# Compute quantities to adjust the input representation
|
750
|
+
# =====================================================
|
750
751
|
|
751
|
-
|
752
|
-
|
752
|
+
In = jnp.eye(model.dofs())
|
753
|
+
On = jnp.zeros(shape=(model.dofs(), model.dofs()))
|
753
754
|
|
754
|
-
|
755
|
-
B_J̇_WL_B = jnp.hstack([jnp.ones(5), κb]) * B_J̇_full_WX_B
|
756
|
-
B_J_WL_B = jnp.hstack([jnp.ones(5), κb]) * B_J_full_WL_B
|
755
|
+
match data.velocity_representation:
|
757
756
|
|
758
|
-
|
757
|
+
case VelRepr.Inertial:
|
759
758
|
|
760
|
-
|
759
|
+
B_X_W = jaxsim.math.Adjoint.from_transform(transform=W_H_B, inverse=True)
|
761
760
|
|
762
|
-
|
763
|
-
|
764
|
-
)
|
761
|
+
W_v_WB = data.base_velocity()
|
762
|
+
B_Ẋ_W = -B_X_W @ jaxsim.math.Cross.vx(W_v_WB)
|
765
763
|
|
766
|
-
|
767
|
-
|
764
|
+
# Compute the operator to change the representation of ν, and its
|
765
|
+
# time derivative.
|
766
|
+
T = jax.scipy.linalg.block_diag(B_X_W, In)
|
767
|
+
Ṫ = jax.scipy.linalg.block_diag(B_Ẋ_W, On)
|
768
768
|
|
769
|
-
|
770
|
-
# time derivative.
|
771
|
-
T = jax.scipy.linalg.block_diag(B_X_W, In)
|
772
|
-
Ṫ = jax.scipy.linalg.block_diag(B_Ẋ_W, On)
|
769
|
+
case VelRepr.Body:
|
773
770
|
|
774
|
-
|
771
|
+
B_X_B = jaxsim.math.Adjoint.from_rotation_and_translation(
|
772
|
+
translation=jnp.zeros(3), rotation=jnp.eye(3)
|
773
|
+
)
|
775
774
|
|
776
|
-
|
777
|
-
translation=jnp.zeros(3), rotation=jnp.eye(3)
|
778
|
-
)
|
775
|
+
B_Ẋ_B = jnp.zeros(shape=(6, 6))
|
779
776
|
|
780
|
-
|
777
|
+
# Compute the operator to change the representation of ν, and its
|
778
|
+
# time derivative.
|
779
|
+
T = jax.scipy.linalg.block_diag(B_X_B, In)
|
780
|
+
Ṫ = jax.scipy.linalg.block_diag(B_Ẋ_B, On)
|
781
781
|
|
782
|
-
|
783
|
-
# time derivative.
|
784
|
-
T = jax.scipy.linalg.block_diag(B_X_B, In)
|
785
|
-
Ṫ = jax.scipy.linalg.block_diag(B_Ẋ_B, On)
|
782
|
+
case VelRepr.Mixed:
|
786
783
|
|
787
|
-
|
784
|
+
BW_H_B = W_H_B.at[0:3, 3].set(jnp.zeros(3))
|
785
|
+
B_X_BW = jaxsim.math.Adjoint.from_transform(transform=BW_H_B, inverse=True)
|
788
786
|
|
789
|
-
|
790
|
-
|
791
|
-
transform=BW_H_B, inverse=True
|
792
|
-
)
|
787
|
+
BW_v_WB = data.base_velocity()
|
788
|
+
BW_v_W_BW = BW_v_WB.at[3:6].set(jnp.zeros(3))
|
793
789
|
|
794
|
-
|
795
|
-
|
790
|
+
BW_v_BW_B = BW_v_WB - BW_v_W_BW
|
791
|
+
B_Ẋ_BW = -B_X_BW @ jaxsim.math.Cross.vx(BW_v_BW_B)
|
796
792
|
|
797
|
-
|
798
|
-
|
793
|
+
# Compute the operator to change the representation of ν, and its
|
794
|
+
# time derivative.
|
795
|
+
T = jax.scipy.linalg.block_diag(B_X_BW, In)
|
796
|
+
Ṫ = jax.scipy.linalg.block_diag(B_Ẋ_BW, On)
|
799
797
|
|
800
|
-
|
801
|
-
|
802
|
-
T = jax.scipy.linalg.block_diag(B_X_BW, In)
|
803
|
-
Ṫ = jax.scipy.linalg.block_diag(B_Ẋ_BW, On)
|
798
|
+
case _:
|
799
|
+
raise ValueError(data.velocity_representation)
|
804
800
|
|
805
|
-
|
806
|
-
|
801
|
+
# ======================================================
|
802
|
+
# Compute quantities to adjust the output representation
|
803
|
+
# ======================================================
|
807
804
|
|
808
|
-
|
809
|
-
# Compute quantities to adjust the output representation
|
810
|
-
# ======================================================
|
805
|
+
match output_vel_repr:
|
811
806
|
|
812
|
-
|
807
|
+
case VelRepr.Inertial:
|
813
808
|
|
814
|
-
|
809
|
+
O_X_B = W_X_B = jaxsim.math.Adjoint.from_transform(transform=W_H_B)
|
815
810
|
|
816
|
-
|
811
|
+
with data.switch_velocity_representation(VelRepr.Body):
|
812
|
+
B_v_WB = data.base_velocity()
|
817
813
|
|
818
|
-
|
819
|
-
B_v_WB = data.base_velocity()
|
814
|
+
O_Ẋ_B = W_Ẋ_B = W_X_B @ jaxsim.math.Cross.vx(B_v_WB) # noqa: F841
|
820
815
|
|
821
|
-
|
816
|
+
case VelRepr.Body:
|
822
817
|
|
823
|
-
|
818
|
+
O_X_B = L_X_B = jaxsim.math.Adjoint.from_transform(
|
819
|
+
transform=B_H_L, inverse=True
|
820
|
+
)
|
824
821
|
|
825
|
-
|
826
|
-
transform=B_H_L, inverse=True
|
827
|
-
)
|
822
|
+
B_X_L = jaxsim.math.Adjoint.inverse(adjoint=L_X_B)
|
828
823
|
|
829
|
-
|
824
|
+
with data.switch_velocity_representation(VelRepr.Body):
|
825
|
+
B_v_WB = data.base_velocity()
|
826
|
+
L_v_WL = jnp.einsum(
|
827
|
+
"b6j,j->b6", L_X_B @ B_J_WL_B, data.generalized_velocity()
|
828
|
+
)
|
830
829
|
|
831
|
-
|
832
|
-
|
833
|
-
|
830
|
+
O_Ẋ_B = L_Ẋ_B = -L_X_B @ jaxsim.math.Cross.vx( # noqa: F841
|
831
|
+
jnp.einsum("bij,bj->bi", B_X_L, L_v_WL) - B_v_WB
|
832
|
+
)
|
834
833
|
|
835
|
-
|
836
|
-
B_X_L @ L_v_WL - B_v_WB
|
837
|
-
)
|
834
|
+
case VelRepr.Mixed:
|
838
835
|
|
839
|
-
|
836
|
+
W_H_L = W_H_B @ B_H_L
|
837
|
+
LW_H_L = W_H_L.at[:, 0:3, 3].set(jnp.zeros_like(W_H_L[:, 0:3, 3]))
|
838
|
+
LW_H_B = LW_H_L @ jaxsim.math.Transform.inverse(B_H_L)
|
840
839
|
|
841
|
-
|
842
|
-
LW_H_L = W_H_L.at[0:3, 3].set(jnp.zeros(3))
|
843
|
-
LW_H_B = LW_H_L @ jaxsim.math.Transform.inverse(B_H_L)
|
840
|
+
O_X_B = LW_X_B = jaxsim.math.Adjoint.from_transform(transform=LW_H_B)
|
844
841
|
|
845
|
-
|
842
|
+
B_X_LW = jaxsim.math.Adjoint.inverse(adjoint=LW_X_B)
|
846
843
|
|
847
|
-
|
844
|
+
with data.switch_velocity_representation(VelRepr.Body):
|
845
|
+
B_v_WB = data.base_velocity()
|
848
846
|
|
849
|
-
|
850
|
-
|
847
|
+
with data.switch_velocity_representation(VelRepr.Mixed):
|
848
|
+
BW_H_B = W_H_B.at[0:3, 3].set(jnp.zeros(3))
|
849
|
+
B_X_BW = Adjoint.from_transform(transform=BW_H_B, inverse=True)
|
850
|
+
LW_v_WL = jnp.einsum(
|
851
|
+
"bij,bj->bi",
|
852
|
+
LW_X_B,
|
853
|
+
B_J_WL_B
|
854
|
+
@ jax.scipy.linalg.block_diag(B_X_BW, jnp.eye(model.dofs()))
|
855
|
+
@ data.generalized_velocity(),
|
856
|
+
)
|
851
857
|
|
852
|
-
|
853
|
-
BW_H_B = W_H_B.at[0:3, 3].set(jnp.zeros(3))
|
854
|
-
B_X_BW = Adjoint.from_transform(transform=BW_H_B, inverse=True)
|
855
|
-
LW_v_WL = LW_X_B @ (
|
856
|
-
B_J_WL_B
|
857
|
-
@ jax.scipy.linalg.block_diag(B_X_BW, jnp.eye(model.dofs()))
|
858
|
-
@ data.generalized_velocity()
|
859
|
-
)
|
860
|
-
LW_v_W_LW = LW_v_WL.at[3:6].set(jnp.zeros(3))
|
858
|
+
LW_v_W_LW = LW_v_WL.at[:, 3:6].set(jnp.zeros_like(LW_v_WL[:, 3:6]))
|
861
859
|
|
862
|
-
|
863
|
-
|
860
|
+
LW_v_LW_L = LW_v_WL - LW_v_W_LW
|
861
|
+
LW_v_B_LW = LW_v_WL - jnp.einsum("bij,j->bi", LW_X_B, B_v_WB) - LW_v_LW_L
|
864
862
|
|
865
|
-
|
866
|
-
|
867
|
-
|
868
|
-
case _:
|
869
|
-
raise ValueError(output_vel_repr)
|
863
|
+
O_Ẋ_B = LW_Ẋ_B = -LW_X_B @ jaxsim.math.Cross.vx( # noqa: F841
|
864
|
+
jnp.einsum("bij,bj->bi", B_X_LW, LW_v_B_LW)
|
865
|
+
)
|
870
866
|
|
871
|
-
|
872
|
-
|
873
|
-
# =============================================================
|
867
|
+
case _:
|
868
|
+
raise ValueError(output_vel_repr)
|
874
869
|
|
875
|
-
|
876
|
-
|
877
|
-
|
878
|
-
O_J̇_WL_I += O_Ẋ_B @ B_J_WL_B @ T
|
879
|
-
O_J̇_WL_I += O_X_B @ B_J̇_WL_B @ T
|
880
|
-
O_J̇_WL_I += O_X_B @ B_J_WL_B @ Ṫ
|
870
|
+
# =============================================================
|
871
|
+
# Express the Jacobian derivative in the target representations
|
872
|
+
# =============================================================
|
881
873
|
|
882
|
-
|
874
|
+
# Sum all the components that form the Jacobian derivative in the target
|
875
|
+
# input/output velocity representations.
|
876
|
+
O_J̇_WL_I = jnp.zeros_like(B_J̇_WL_B)
|
877
|
+
O_J̇_WL_I += O_Ẋ_B @ B_J_WL_B @ T
|
878
|
+
O_J̇_WL_I += O_X_B @ B_J̇_WL_B @ T
|
879
|
+
O_J̇_WL_I += O_X_B @ B_J_WL_B @ Ṫ
|
883
880
|
|
884
|
-
return
|
881
|
+
return O_J̇_WL_I
|
885
882
|
|
886
883
|
|
887
884
|
@functools.partial(jax.jit, static_argnames=["prefer_aba"])
|
@@ -56,14 +56,13 @@ class Adjoint:
|
|
56
56
|
The 6x6 adjoint matrix.
|
57
57
|
"""
|
58
58
|
|
59
|
-
A_H_B = jnp.
|
60
|
-
assert transform.shape == (4, 4)
|
59
|
+
A_H_B = jnp.reshape(transform, (-1, 4, 4))
|
61
60
|
|
62
61
|
return (
|
63
62
|
jaxlie.SE3.from_matrix(matrix=A_H_B).adjoint()
|
64
63
|
if not inverse
|
65
64
|
else jaxlie.SE3.from_matrix(matrix=A_H_B).inverse().adjoint()
|
66
|
-
)
|
65
|
+
).reshape(transform.shape[:-2] + (6, 6))
|
67
66
|
|
68
67
|
@staticmethod
|
69
68
|
def from_rotation_and_translation(
|
@@ -145,13 +144,18 @@ class Adjoint:
|
|
145
144
|
Returns:
|
146
145
|
jtp.Matrix: The inverse adjoint matrix.
|
147
146
|
"""
|
148
|
-
A_X_B = adjoint
|
147
|
+
A_X_B = adjoint.reshape(-1, 6, 6)
|
149
148
|
|
150
|
-
|
149
|
+
A_R_B_T = jnp.swapaxes(A_X_B[..., 0:3, 0:3], -2, -1)
|
150
|
+
A_T_B = A_X_B[..., 0:3, 3:6]
|
151
151
|
|
152
|
-
return jnp.
|
152
|
+
return jnp.concatenate(
|
153
153
|
[
|
154
|
-
jnp.
|
155
|
-
|
156
|
-
|
157
|
-
|
154
|
+
jnp.concatenate(
|
155
|
+
[A_R_B_T, -A_R_B_T @ A_T_B @ A_R_B_T],
|
156
|
+
axis=-1,
|
157
|
+
),
|
158
|
+
jnp.concatenate([jnp.zeros_like(A_R_B_T), A_R_B_T], axis=-1),
|
159
|
+
],
|
160
|
+
axis=-2,
|
161
|
+
).reshape(adjoint.shape)
|
@@ -24,13 +24,18 @@ class Cross:
|
|
24
24
|
Raises:
|
25
25
|
ValueError: If the input vector does not have a size of 6.
|
26
26
|
"""
|
27
|
-
|
27
|
+
velocity_sixd = velocity_sixd.reshape(-1, 6)
|
28
28
|
|
29
|
-
|
29
|
+
v, ω = jnp.split(velocity_sixd, 2, axis=-1)
|
30
|
+
|
31
|
+
v_cross = jnp.concatenate(
|
30
32
|
[
|
31
|
-
jnp.
|
32
|
-
|
33
|
-
|
33
|
+
jnp.concatenate(
|
34
|
+
[Skew.wedge(ω), jnp.zeros((ω.shape[0], 3, 3)).squeeze()], axis=-2
|
35
|
+
),
|
36
|
+
jnp.concatenate([Skew.wedge(v), Skew.wedge(ω)], axis=-2),
|
37
|
+
],
|
38
|
+
axis=-1,
|
34
39
|
)
|
35
40
|
|
36
41
|
return v_cross
|
@@ -20,9 +20,20 @@ class Skew:
|
|
20
20
|
jtp.Matrix: The skew-symmetric matrix corresponding to the input vector.
|
21
21
|
|
22
22
|
"""
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
|
24
|
+
vector = vector.reshape(-1, 3)
|
25
|
+
|
26
|
+
x, y, z = jnp.split(vector, 3, axis=-1)
|
27
|
+
|
28
|
+
skew = jnp.stack(
|
29
|
+
[
|
30
|
+
jnp.concatenate([jnp.zeros_like(x), -z, y], axis=-1),
|
31
|
+
jnp.concatenate([z, jnp.zeros_like(x), -x], axis=-1),
|
32
|
+
jnp.concatenate([-y, x, jnp.zeros_like(x)], axis=-1),
|
33
|
+
],
|
34
|
+
axis=-2,
|
35
|
+
).squeeze()
|
36
|
+
|
26
37
|
return skew
|
27
38
|
|
28
39
|
@staticmethod
|
@@ -92,7 +92,11 @@ class Transform:
|
|
92
92
|
The 4x4 inverse transformation matrix.
|
93
93
|
"""
|
94
94
|
|
95
|
-
A_H_B = jnp.
|
96
|
-
assert A_H_B.shape == (4, 4)
|
95
|
+
A_H_B = jnp.reshape(transform, (-1, 4, 4))
|
97
96
|
|
98
|
-
return
|
97
|
+
return (
|
98
|
+
jaxlie.SE3.from_matrix(matrix=A_H_B)
|
99
|
+
.inverse()
|
100
|
+
.as_matrix()
|
101
|
+
.reshape(transform.shape[:-2] + (4, 4))
|
102
|
+
)
|
@@ -184,21 +184,16 @@ def extract_model_data(
|
|
184
184
|
msg = "Found more/less than one joint connecting a fixed-base model to the world"
|
185
185
|
raise ValueError(msg + f": {[j.name for j in joints_with_world_parent]}")
|
186
186
|
|
187
|
+
base_link_name = joints_with_world_parent[0].child.name
|
188
|
+
|
187
189
|
msg = "Combining the pose of base link '{}' with the pose of joint '{}'"
|
188
|
-
logging.info(
|
189
|
-
msg.format(
|
190
|
-
joints_with_world_parent[0].child.name, joints_with_world_parent[0].name
|
191
|
-
)
|
192
|
-
)
|
190
|
+
logging.info(msg.format(base_link_name, joints_with_world_parent[0].name))
|
193
191
|
|
194
192
|
# Combine the pose of the base link (child of the found fixed joint)
|
195
193
|
# with the pose of the fixed joint connecting with the world.
|
196
194
|
# Note: we assume it's a fixed joint and ignore any joint angle.
|
197
|
-
links_dict[
|
198
|
-
|
199
|
-
).pose = (
|
200
|
-
joints_with_world_parent[0].pose
|
201
|
-
@ links_dict[joints_with_world_parent[0].child.name].pose
|
195
|
+
links_dict[base_link_name].mutable(validate=False).pose = (
|
196
|
+
joints_with_world_parent[0].pose @ links_dict[base_link_name].pose
|
202
197
|
)
|
203
198
|
|
204
199
|
# ============
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: jaxsim
|
3
|
-
Version: 0.5.1.
|
3
|
+
Version: 0.5.1.dev162
|
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>, Filippo Luca Ferretti <filippoluca.ferretti@outlook.com>
|
6
6
|
Maintainer-email: Filippo Luca Ferretti <filippo.ferretti@iit.it>, Alessandro Croci <alessandro.croci@iit.it>
|
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
|
{jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/examples/jaxsim_as_multibody_dynamics_library.ipynb
RENAMED
File without changes
|
File without changes
|
{jaxsim-0.5.1.dev152 → jaxsim-0.5.1.dev162}/examples/jaxsim_as_physics_engine_advanced.ipynb
RENAMED
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
|