jaxsim 0.5.1.dev147__tar.gz → 0.5.1.dev160__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.
Files changed (135) hide show
  1. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/PKG-INFO +36 -6
  2. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/README.md +35 -5
  3. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/_version.py +2 -2
  4. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/api/model.py +102 -105
  5. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/math/adjoint.py +14 -10
  6. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/math/cross.py +10 -5
  7. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/math/skew.py +14 -3
  8. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/math/transform.py +7 -3
  9. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim.egg-info/PKG-INFO +36 -6
  10. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/.devcontainer/Dockerfile +0 -0
  11. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/.devcontainer/devcontainer.json +0 -0
  12. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/.gitattributes +0 -0
  13. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/.github/CODEOWNERS +0 -0
  14. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/.github/dependabot.yml +0 -0
  15. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/.github/workflows/ci_cd.yml +0 -0
  16. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/.github/workflows/pixi.yml +0 -0
  17. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/.github/workflows/read_the_docs.yml +0 -0
  18. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/.gitignore +0 -0
  19. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/.pre-commit-config.yaml +0 -0
  20. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/.readthedocs.yaml +0 -0
  21. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/CONTRIBUTING.md +0 -0
  22. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/LICENSE +0 -0
  23. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/docs/Makefile +0 -0
  24. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/docs/conf.py +0 -0
  25. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/docs/examples.rst +0 -0
  26. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/docs/guide/configuration.rst +0 -0
  27. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/docs/guide/install.rst +0 -0
  28. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/docs/index.rst +0 -0
  29. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/docs/make.bat +0 -0
  30. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/docs/modules/api.rst +0 -0
  31. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/docs/modules/integrators.rst +0 -0
  32. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/docs/modules/math.rst +0 -0
  33. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/docs/modules/mujoco.rst +0 -0
  34. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/docs/modules/parsers.rst +0 -0
  35. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/docs/modules/rbda.rst +0 -0
  36. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/docs/modules/typing.rst +0 -0
  37. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/docs/modules/utils.rst +0 -0
  38. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/environment.yml +0 -0
  39. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/examples/.gitattributes +0 -0
  40. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/examples/.gitignore +0 -0
  41. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/examples/README.md +0 -0
  42. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/examples/assets/build_cartpole_urdf.py +0 -0
  43. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/examples/assets/cartpole.urdf +0 -0
  44. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/examples/jaxsim_as_multibody_dynamics_library.ipynb +0 -0
  45. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/examples/jaxsim_as_physics_engine.ipynb +0 -0
  46. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/examples/jaxsim_as_physics_engine_advanced.ipynb +0 -0
  47. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/examples/jaxsim_for_robot_controllers.ipynb +0 -0
  48. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/pixi.lock +0 -0
  49. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/pyproject.toml +0 -0
  50. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/setup.cfg +0 -0
  51. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/setup.py +0 -0
  52. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/__init__.py +0 -0
  53. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/api/__init__.py +0 -0
  54. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/api/com.py +0 -0
  55. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/api/common.py +0 -0
  56. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/api/contact.py +0 -0
  57. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/api/data.py +0 -0
  58. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/api/frame.py +0 -0
  59. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/api/joint.py +0 -0
  60. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/api/kin_dyn_parameters.py +0 -0
  61. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/api/link.py +0 -0
  62. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/api/ode.py +0 -0
  63. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/api/ode_data.py +0 -0
  64. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/api/references.py +0 -0
  65. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/exceptions.py +0 -0
  66. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/integrators/__init__.py +0 -0
  67. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/integrators/common.py +0 -0
  68. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/integrators/fixed_step.py +0 -0
  69. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/integrators/variable_step.py +0 -0
  70. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/logging.py +0 -0
  71. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/math/__init__.py +0 -0
  72. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/math/inertia.py +0 -0
  73. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/math/joint_model.py +0 -0
  74. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/math/quaternion.py +0 -0
  75. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/math/rotation.py +0 -0
  76. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/math/utils.py +0 -0
  77. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/mujoco/__init__.py +0 -0
  78. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/mujoco/__main__.py +0 -0
  79. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/mujoco/loaders.py +0 -0
  80. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/mujoco/model.py +0 -0
  81. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/mujoco/utils.py +0 -0
  82. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/mujoco/visualizer.py +0 -0
  83. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/parsers/__init__.py +0 -0
  84. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/parsers/descriptions/__init__.py +0 -0
  85. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/parsers/descriptions/collision.py +0 -0
  86. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/parsers/descriptions/joint.py +0 -0
  87. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/parsers/descriptions/link.py +0 -0
  88. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/parsers/descriptions/model.py +0 -0
  89. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/parsers/kinematic_graph.py +0 -0
  90. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/parsers/rod/__init__.py +0 -0
  91. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/parsers/rod/meshes.py +0 -0
  92. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/parsers/rod/parser.py +0 -0
  93. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/parsers/rod/utils.py +0 -0
  94. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/rbda/__init__.py +0 -0
  95. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/rbda/aba.py +0 -0
  96. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/rbda/collidable_points.py +0 -0
  97. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/rbda/contacts/__init__.py +0 -0
  98. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/rbda/contacts/common.py +0 -0
  99. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/rbda/contacts/relaxed_rigid.py +0 -0
  100. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/rbda/contacts/rigid.py +0 -0
  101. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/rbda/contacts/soft.py +0 -0
  102. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/rbda/contacts/visco_elastic.py +0 -0
  103. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/rbda/crba.py +0 -0
  104. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/rbda/forward_kinematics.py +0 -0
  105. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/rbda/jacobian.py +0 -0
  106. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/rbda/rnea.py +0 -0
  107. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/rbda/utils.py +0 -0
  108. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/terrain/__init__.py +0 -0
  109. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/terrain/terrain.py +0 -0
  110. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/typing.py +0 -0
  111. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/utils/__init__.py +0 -0
  112. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/utils/jaxsim_dataclass.py +0 -0
  113. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/utils/tracing.py +0 -0
  114. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim/utils/wrappers.py +0 -0
  115. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim.egg-info/SOURCES.txt +0 -0
  116. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim.egg-info/dependency_links.txt +0 -0
  117. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim.egg-info/requires.txt +0 -0
  118. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/src/jaxsim.egg-info/top_level.txt +0 -0
  119. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/tests/__init__.py +0 -0
  120. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/tests/conftest.py +0 -0
  121. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/tests/test_api_com.py +0 -0
  122. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/tests/test_api_contact.py +0 -0
  123. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/tests/test_api_data.py +0 -0
  124. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/tests/test_api_frame.py +0 -0
  125. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/tests/test_api_joint.py +0 -0
  126. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/tests/test_api_link.py +0 -0
  127. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/tests/test_api_model.py +0 -0
  128. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/tests/test_automatic_differentiation.py +0 -0
  129. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/tests/test_benchmark.py +0 -0
  130. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/tests/test_contact.py +0 -0
  131. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/tests/test_exceptions.py +0 -0
  132. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/tests/test_meshes.py +0 -0
  133. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/tests/test_pytree.py +0 -0
  134. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/tests/test_simulations.py +0 -0
  135. {jaxsim-0.5.1.dev147 → jaxsim-0.5.1.dev160}/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.dev147
3
+ Version: 0.5.1.dev160
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>
@@ -237,16 +237,30 @@ You can enforce GPU support, if needed, by also specifying `"jaxlib = * = *cuda*
237
237
  <details>
238
238
  <summary>With <code>pixi</code></summary>
239
239
 
240
- > [!NOTE]
240
+ > ### Note
241
241
  > The minimum version of `pixi` required is `0.39.0`.
242
242
 
243
- You can install the default dependencies of the project using [`pixi`][pixi] as follows:
243
+ You can add the jaxsim dependency in [`pixi`][pixi] project as follows:
244
244
 
245
245
  ```bash
246
- pixi install
246
+ pixi add jaxsim
247
247
  ```
248
248
 
249
- See `pixi task list` for a list of available tasks.
249
+ If you are on Linux and you want to use a `cuda`-powered version of `jax`, remember to add the appropriate line in the [`system-requirements`](https://pixi.sh/latest/reference/pixi_manifest/#the-system-requirements-table) table, i.e. adding
250
+
251
+ ~~~toml
252
+ [system-requirements]
253
+ cuda = "12"
254
+ ~~~
255
+
256
+ if you are using a `pixi.toml` file or
257
+
258
+ ~~~toml
259
+ [tool.pixi.system-requirements]
260
+ cuda = "12"
261
+ ~~~
262
+
263
+ if you are using a `pyproject.toml` file.
250
264
 
251
265
  </details>
252
266
 
@@ -267,7 +281,7 @@ If you need GPU support, follow the official [installation instructions][jax_gpu
267
281
  </details>
268
282
 
269
283
  <details>
270
- <summary>Contributors installation</summary>
284
+ <summary>Contributors installation (with <code>conda</code>)</summary>
271
285
 
272
286
  If you want to contribute to the project, we recommend creating the following `jaxsim` conda environment first:
273
287
 
@@ -284,6 +298,22 @@ pip install --no-deps -e .
284
298
 
285
299
  </details>
286
300
 
301
+ <details>
302
+ <summary>Contributors installation (with <code>pixi</code>)</summary>
303
+
304
+ > ### Note
305
+ > The minimum version of `pixi` required is `0.39.0`.
306
+
307
+ You can install the default dependencies of the project using [`pixi`][pixi] as follows:
308
+
309
+ ```bash
310
+ pixi install
311
+ ```
312
+
313
+ See `pixi task list` for a list of available tasks.
314
+
315
+ </details>
316
+
287
317
  [conda]: https://anaconda.org/
288
318
  [pip]: https://github.com/pypa/pip/
289
319
  [pixi]: https://pixi.sh/
@@ -145,16 +145,30 @@ You can enforce GPU support, if needed, by also specifying `"jaxlib = * = *cuda*
145
145
  <details>
146
146
  <summary>With <code>pixi</code></summary>
147
147
 
148
- > [!NOTE]
148
+ > ### Note
149
149
  > The minimum version of `pixi` required is `0.39.0`.
150
150
 
151
- You can install the default dependencies of the project using [`pixi`][pixi] as follows:
151
+ You can add the jaxsim dependency in [`pixi`][pixi] project as follows:
152
152
 
153
153
  ```bash
154
- pixi install
154
+ pixi add jaxsim
155
155
  ```
156
156
 
157
- See `pixi task list` for a list of available tasks.
157
+ If you are on Linux and you want to use a `cuda`-powered version of `jax`, remember to add the appropriate line in the [`system-requirements`](https://pixi.sh/latest/reference/pixi_manifest/#the-system-requirements-table) table, i.e. adding
158
+
159
+ ~~~toml
160
+ [system-requirements]
161
+ cuda = "12"
162
+ ~~~
163
+
164
+ if you are using a `pixi.toml` file or
165
+
166
+ ~~~toml
167
+ [tool.pixi.system-requirements]
168
+ cuda = "12"
169
+ ~~~
170
+
171
+ if you are using a `pyproject.toml` file.
158
172
 
159
173
  </details>
160
174
 
@@ -175,7 +189,7 @@ If you need GPU support, follow the official [installation instructions][jax_gpu
175
189
  </details>
176
190
 
177
191
  <details>
178
- <summary>Contributors installation</summary>
192
+ <summary>Contributors installation (with <code>conda</code>)</summary>
179
193
 
180
194
  If you want to contribute to the project, we recommend creating the following `jaxsim` conda environment first:
181
195
 
@@ -192,6 +206,22 @@ pip install --no-deps -e .
192
206
 
193
207
  </details>
194
208
 
209
+ <details>
210
+ <summary>Contributors installation (with <code>pixi</code>)</summary>
211
+
212
+ > ### Note
213
+ > The minimum version of `pixi` required is `0.39.0`.
214
+
215
+ You can install the default dependencies of the project using [`pixi`][pixi] as follows:
216
+
217
+ ```bash
218
+ pixi install
219
+ ```
220
+
221
+ See `pixi task list` for a list of available tasks.
222
+
223
+ </details>
224
+
195
225
  [conda]: https://anaconda.org/
196
226
  [pip]: https://github.com/pypa/pip/
197
227
  [pixi]: https://pixi.sh/
@@ -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.dev147'
16
- __version_tuple__ = version_tuple = (0, 5, 1, 'dev147')
15
+ __version__ = version = '0.5.1.dev160'
16
+ __version_tuple__ = version_tuple = (0, 5, 1, 'dev160')
@@ -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
- @functools.partial(jax.vmap, in_axes=(0, None, None, 0))
740
- def _compute_row(
741
- B_H_L: jtp.Matrix,
742
- B_J_full_WL_B: jtp.Matrix,
743
- W_H_B: jtp.Matrix,
744
- κb: jtp.Matrix,
745
- ) -> jtp.Matrix:
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
- # Compute quantities to adjust the input representation
749
- # =====================================================
748
+ # =====================================================
749
+ # Compute quantities to adjust the input representation
750
+ # =====================================================
750
751
 
751
- In = jnp.eye(model.dofs())
752
- On = jnp.zeros(shape=(model.dofs(), model.dofs()))
752
+ In = jnp.eye(model.dofs())
753
+ On = jnp.zeros(shape=(model.dofs(), model.dofs()))
753
754
 
754
- # Extract the link quantities using the boolean support body array.
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
- match data.velocity_representation:
757
+ case VelRepr.Inertial:
759
758
 
760
- case VelRepr.Inertial:
759
+ B_X_W = jaxsim.math.Adjoint.from_transform(transform=W_H_B, inverse=True)
761
760
 
762
- B_X_W = jaxsim.math.Adjoint.from_transform(
763
- transform=W_H_B, inverse=True
764
- )
761
+ W_v_WB = data.base_velocity()
762
+ B_Ẋ_W = -B_X_W @ jaxsim.math.Cross.vx(W_v_WB)
765
763
 
766
- W_v_WB = data.base_velocity()
767
- B_Ẋ_W = -B_X_W @ jaxsim.math.Cross.vx(W_v_WB)
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
- # Compute the operator to change the representation of ν, and its
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
- case VelRepr.Body:
771
+ B_X_B = jaxsim.math.Adjoint.from_rotation_and_translation(
772
+ translation=jnp.zeros(3), rotation=jnp.eye(3)
773
+ )
775
774
 
776
- B_X_B = jaxsim.math.Adjoint.from_rotation_and_translation(
777
- translation=jnp.zeros(3), rotation=jnp.eye(3)
778
- )
775
+ B_Ẋ_B = jnp.zeros(shape=(6, 6))
779
776
 
780
- B_Ẋ_B = jnp.zeros(shape=(6, 6))
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
- # Compute the operator to change the representation of ν, and its
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
- case VelRepr.Mixed:
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
- BW_H_B = W_H_B.at[0:3, 3].set(jnp.zeros(3))
790
- B_X_BW = jaxsim.math.Adjoint.from_transform(
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
- BW_v_WB = data.base_velocity()
795
- BW_v_W_BW = BW_v_WB.at[3:6].set(jnp.zeros(3))
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
- BW_v_BW_B = BW_v_WB - BW_v_W_BW
798
- B_Ẋ_BW = -B_X_BW @ jaxsim.math.Cross.vx(BW_v_BW_B)
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
- # Compute the operator to change the representation of ν, and its
801
- # time derivative.
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
- case _:
806
- raise ValueError(data.velocity_representation)
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
- match output_vel_repr:
807
+ case VelRepr.Inertial:
813
808
 
814
- case VelRepr.Inertial:
809
+ O_X_B = W_X_B = jaxsim.math.Adjoint.from_transform(transform=W_H_B)
815
810
 
816
- O_X_B = W_X_B = jaxsim.math.Adjoint.from_transform(transform=W_H_B)
811
+ with data.switch_velocity_representation(VelRepr.Body):
812
+ B_v_WB = data.base_velocity()
817
813
 
818
- with data.switch_velocity_representation(VelRepr.Body):
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
- O_Ẋ_B = W_Ẋ_B = W_X_B @ jaxsim.math.Cross.vx(B_v_WB) # noqa: F841
816
+ case VelRepr.Body:
822
817
 
823
- case VelRepr.Body:
818
+ O_X_B = L_X_B = jaxsim.math.Adjoint.from_transform(
819
+ transform=B_H_L, inverse=True
820
+ )
824
821
 
825
- O_X_B = L_X_B = jaxsim.math.Adjoint.from_transform(
826
- transform=B_H_L, inverse=True
827
- )
822
+ B_X_L = jaxsim.math.Adjoint.inverse(adjoint=L_X_B)
828
823
 
829
- B_X_L = jaxsim.math.Adjoint.inverse(adjoint=L_X_B)
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
- with data.switch_velocity_representation(VelRepr.Body):
832
- B_v_WB = data.base_velocity()
833
- L_v_WL = L_X_B @ B_J_WL_B @ data.generalized_velocity()
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
- O_Ẋ_B = L_Ẋ_B = -L_X_B @ jaxsim.math.Cross.vx( # noqa: F841
836
- B_X_L @ L_v_WL - B_v_WB
837
- )
834
+ case VelRepr.Mixed:
838
835
 
839
- case VelRepr.Mixed:
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
- W_H_L = W_H_B @ B_H_L
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
- O_X_B = LW_X_B = jaxsim.math.Adjoint.from_transform(transform=LW_H_B)
842
+ B_X_LW = jaxsim.math.Adjoint.inverse(adjoint=LW_X_B)
846
843
 
847
- B_X_LW = jaxsim.math.Adjoint.inverse(adjoint=LW_X_B)
844
+ with data.switch_velocity_representation(VelRepr.Body):
845
+ B_v_WB = data.base_velocity()
848
846
 
849
- with data.switch_velocity_representation(VelRepr.Body):
850
- B_v_WB = data.base_velocity()
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
- with data.switch_velocity_representation(VelRepr.Mixed):
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
- LW_v_LW_L = LW_v_WL - LW_v_W_LW
863
- LW_v_B_LW = LW_v_WL - LW_X_B @ B_v_WB - LW_v_LW_L
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
- O_Ẋ_B = LW_Ẋ_B = -LW_X_B @ jaxsim.math.Cross.vx( # noqa: F841
866
- B_X_LW @ LW_v_B_LW
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
- # Express the Jacobian derivative in the target representations
873
- # =============================================================
867
+ case _:
868
+ raise ValueError(output_vel_repr)
874
869
 
875
- # Sum all the components that form the Jacobian derivative in the target
876
- # input/output velocity representations.
877
- O_J̇_WL_I = jnp.zeros(shape=(6, 6 + model.dofs()))
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
- return O_J̇_WL_I
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 _compute_row(B_H_L, B_J_full_WL_B, W_H_B, κb)
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.array(transform).astype(float)
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
- A_R_B = A_X_B[0:3, 0:3]
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.vstack(
152
+ return jnp.concatenate(
153
153
  [
154
- jnp.block([A_R_B.T, -A_R_B.T @ A_X_B[0:3, 3:6] @ A_R_B.T]),
155
- jnp.block([jnp.zeros(shape=(3, 3)), A_R_B.T]),
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
- v, ω = jnp.split(velocity_sixd.squeeze(), 2)
27
+ velocity_sixd = velocity_sixd.reshape(-1, 6)
28
28
 
29
- v_cross = jnp.vstack(
29
+ v, ω = jnp.split(velocity_sixd, 2, axis=-1)
30
+
31
+ v_cross = jnp.concatenate(
30
32
  [
31
- jnp.block([Skew.wedge(vector=ω), Skew.wedge(vector=v)]),
32
- jnp.block([jnp.zeros(shape=(3, 3)), Skew.wedge(vector=ω)]),
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
- vector = vector.squeeze()
24
- x, y, z = vector
25
- skew = jnp.array([[0, -z, y], [z, 0, -x], [-y, x, 0]])
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.array(transform).astype(float)
96
- assert A_H_B.shape == (4, 4)
95
+ A_H_B = jnp.reshape(transform, (-1, 4, 4))
97
96
 
98
- return jaxlie.SE3.from_matrix(matrix=A_H_B).inverse().as_matrix()
97
+ return (
98
+ jaxlie.SE3.from_matrix(matrix=A_H_B)
99
+ .inverse()
100
+ .as_matrix()
101
+ .reshape(transform.shape[:-2] + (4, 4))
102
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: jaxsim
3
- Version: 0.5.1.dev147
3
+ Version: 0.5.1.dev160
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>
@@ -237,16 +237,30 @@ You can enforce GPU support, if needed, by also specifying `"jaxlib = * = *cuda*
237
237
  <details>
238
238
  <summary>With <code>pixi</code></summary>
239
239
 
240
- > [!NOTE]
240
+ > ### Note
241
241
  > The minimum version of `pixi` required is `0.39.0`.
242
242
 
243
- You can install the default dependencies of the project using [`pixi`][pixi] as follows:
243
+ You can add the jaxsim dependency in [`pixi`][pixi] project as follows:
244
244
 
245
245
  ```bash
246
- pixi install
246
+ pixi add jaxsim
247
247
  ```
248
248
 
249
- See `pixi task list` for a list of available tasks.
249
+ If you are on Linux and you want to use a `cuda`-powered version of `jax`, remember to add the appropriate line in the [`system-requirements`](https://pixi.sh/latest/reference/pixi_manifest/#the-system-requirements-table) table, i.e. adding
250
+
251
+ ~~~toml
252
+ [system-requirements]
253
+ cuda = "12"
254
+ ~~~
255
+
256
+ if you are using a `pixi.toml` file or
257
+
258
+ ~~~toml
259
+ [tool.pixi.system-requirements]
260
+ cuda = "12"
261
+ ~~~
262
+
263
+ if you are using a `pyproject.toml` file.
250
264
 
251
265
  </details>
252
266
 
@@ -267,7 +281,7 @@ If you need GPU support, follow the official [installation instructions][jax_gpu
267
281
  </details>
268
282
 
269
283
  <details>
270
- <summary>Contributors installation</summary>
284
+ <summary>Contributors installation (with <code>conda</code>)</summary>
271
285
 
272
286
  If you want to contribute to the project, we recommend creating the following `jaxsim` conda environment first:
273
287
 
@@ -284,6 +298,22 @@ pip install --no-deps -e .
284
298
 
285
299
  </details>
286
300
 
301
+ <details>
302
+ <summary>Contributors installation (with <code>pixi</code>)</summary>
303
+
304
+ > ### Note
305
+ > The minimum version of `pixi` required is `0.39.0`.
306
+
307
+ You can install the default dependencies of the project using [`pixi`][pixi] as follows:
308
+
309
+ ```bash
310
+ pixi install
311
+ ```
312
+
313
+ See `pixi task list` for a list of available tasks.
314
+
315
+ </details>
316
+
287
317
  [conda]: https://anaconda.org/
288
318
  [pip]: https://github.com/pypa/pip/
289
319
  [pixi]: https://pixi.sh/
File without changes
File without changes
File without changes
File without changes
File without changes