jaxsim 0.2.dev423__tar.gz → 0.2.dev428__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 (118) hide show
  1. jaxsim-0.2.dev428/PKG-INFO +237 -0
  2. jaxsim-0.2.dev428/README.md +171 -0
  3. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/environment.yml +16 -6
  4. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/setup.cfg +2 -1
  5. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/_version.py +2 -2
  6. jaxsim-0.2.dev428/src/jaxsim.egg-info/PKG-INFO +237 -0
  7. jaxsim-0.2.dev423/PKG-INFO +0 -182
  8. jaxsim-0.2.dev423/README.md +0 -117
  9. jaxsim-0.2.dev423/src/jaxsim.egg-info/PKG-INFO +0 -182
  10. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/.devcontainer/Dockerfile +0 -0
  11. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/.devcontainer/devcontainer.json +0 -0
  12. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/.github/CODEOWNERS +0 -0
  13. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/.github/workflows/ci_cd.yml +0 -0
  14. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/.github/workflows/read_the_docs.yml +0 -0
  15. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/.github/workflows/style.yml +0 -0
  16. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/.gitignore +0 -0
  17. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/.pre-commit-config.yaml +0 -0
  18. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/.readthedocs.yaml +0 -0
  19. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/CONTRIBUTING.md +0 -0
  20. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/LICENSE +0 -0
  21. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/docs/Makefile +0 -0
  22. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/docs/conf.py +0 -0
  23. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/docs/guide/install.rst +0 -0
  24. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/docs/index.rst +0 -0
  25. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/docs/make.bat +0 -0
  26. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/docs/modules/api.rst +0 -0
  27. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/docs/modules/index.rst +0 -0
  28. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/docs/modules/integrators.rst +0 -0
  29. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/docs/modules/math.rst +0 -0
  30. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/docs/modules/mujoco.rst +0 -0
  31. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/docs/modules/parsers.rst +0 -0
  32. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/docs/modules/rbda.rst +0 -0
  33. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/docs/modules/typing.rst +0 -0
  34. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/docs/modules/utils.rst +0 -0
  35. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/examples/.gitattributes +0 -0
  36. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/examples/.gitignore +0 -0
  37. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/examples/PD_controller.ipynb +0 -0
  38. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/examples/Parallel_computing.ipynb +0 -0
  39. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/examples/README.md +0 -0
  40. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/examples/assets/cartpole.urdf +0 -0
  41. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/examples/pixi.lock +0 -0
  42. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/examples/pixi.toml +0 -0
  43. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/pyproject.toml +0 -0
  44. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/setup.py +0 -0
  45. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/__init__.py +0 -0
  46. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/api/__init__.py +0 -0
  47. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/api/com.py +0 -0
  48. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/api/common.py +0 -0
  49. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/api/contact.py +0 -0
  50. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/api/data.py +0 -0
  51. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/api/joint.py +0 -0
  52. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/api/kin_dyn_parameters.py +0 -0
  53. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/api/link.py +0 -0
  54. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/api/model.py +0 -0
  55. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/api/ode.py +0 -0
  56. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/api/ode_data.py +0 -0
  57. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/api/references.py +0 -0
  58. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/integrators/__init__.py +0 -0
  59. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/integrators/common.py +0 -0
  60. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/integrators/fixed_step.py +0 -0
  61. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/integrators/variable_step.py +0 -0
  62. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/logging.py +0 -0
  63. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/math/__init__.py +0 -0
  64. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/math/adjoint.py +0 -0
  65. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/math/cross.py +0 -0
  66. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/math/inertia.py +0 -0
  67. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/math/joint_model.py +0 -0
  68. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/math/quaternion.py +0 -0
  69. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/math/rotation.py +0 -0
  70. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/math/skew.py +0 -0
  71. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/math/transform.py +0 -0
  72. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/mujoco/__init__.py +0 -0
  73. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/mujoco/__main__.py +0 -0
  74. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/mujoco/loaders.py +0 -0
  75. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/mujoco/model.py +0 -0
  76. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/mujoco/visualizer.py +0 -0
  77. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/parsers/__init__.py +0 -0
  78. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/parsers/descriptions/__init__.py +0 -0
  79. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/parsers/descriptions/collision.py +0 -0
  80. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/parsers/descriptions/joint.py +0 -0
  81. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/parsers/descriptions/link.py +0 -0
  82. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/parsers/descriptions/model.py +0 -0
  83. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/parsers/kinematic_graph.py +0 -0
  84. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/parsers/rod/__init__.py +0 -0
  85. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/parsers/rod/parser.py +0 -0
  86. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/parsers/rod/utils.py +0 -0
  87. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/rbda/__init__.py +0 -0
  88. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/rbda/aba.py +0 -0
  89. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/rbda/collidable_points.py +0 -0
  90. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/rbda/crba.py +0 -0
  91. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/rbda/forward_kinematics.py +0 -0
  92. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/rbda/jacobian.py +0 -0
  93. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/rbda/rnea.py +0 -0
  94. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/rbda/soft_contacts.py +0 -0
  95. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/rbda/utils.py +0 -0
  96. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/terrain/__init__.py +0 -0
  97. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/terrain/terrain.py +0 -0
  98. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/typing.py +0 -0
  99. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/utils/__init__.py +0 -0
  100. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/utils/hashless.py +0 -0
  101. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/utils/jaxsim_dataclass.py +0 -0
  102. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim/utils/tracing.py +0 -0
  103. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim.egg-info/SOURCES.txt +0 -0
  104. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim.egg-info/dependency_links.txt +0 -0
  105. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim.egg-info/not-zip-safe +0 -0
  106. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim.egg-info/requires.txt +0 -0
  107. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/src/jaxsim.egg-info/top_level.txt +0 -0
  108. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/tests/__init__.py +0 -0
  109. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/tests/conftest.py +0 -0
  110. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/tests/test_api_com.py +0 -0
  111. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/tests/test_api_data.py +0 -0
  112. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/tests/test_api_joint.py +0 -0
  113. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/tests/test_api_link.py +0 -0
  114. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/tests/test_api_model.py +0 -0
  115. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/tests/test_automatic_differentiation.py +0 -0
  116. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/tests/test_pytree.py +0 -0
  117. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/tests/test_simulations.py +0 -0
  118. {jaxsim-0.2.dev423 → jaxsim-0.2.dev428}/tests/utils_idyntree.py +0 -0
@@ -0,0 +1,237 @@
1
+ Metadata-Version: 2.1
2
+ Name: jaxsim
3
+ Version: 0.2.dev428
4
+ Summary: A differentiable physics engine and multibody dynamics library for control and robot learning.
5
+ Home-page: https://github.com/ami-iit/jaxsim
6
+ Author: Diego Ferigo
7
+ Author-email: diego.ferigo@iit.it
8
+ License: BSD
9
+ Project-URL: Changelog, https://github.com/ami-iit/jaxsim/releases
10
+ Project-URL: Documentation, https://jaxsim.readthedocs.io
11
+ Project-URL: Source, https://github.com/ami-iit/jaxsim
12
+ Project-URL: Tracker, https://github.com/ami-iit/jaxsim/issues
13
+ Keywords: physics,physics engine,jax,rigid body dynamics,featherstone,reinforcement learning,robot,robotics,sdf,urdf
14
+ Platform: any
15
+ Classifier: Development Status :: 4 - Beta
16
+ Classifier: Framework :: Robot Framework
17
+ Classifier: Intended Audience :: Developers
18
+ Classifier: Intended Audience :: Science/Research
19
+ Classifier: License :: OSI Approved :: BSD License
20
+ Classifier: Operating System :: POSIX :: Linux
21
+ Classifier: Operating System :: MacOS
22
+ Classifier: Operating System :: Microsoft
23
+ Classifier: Programming Language :: Python :: 3.11
24
+ Classifier: Programming Language :: Python :: 3.12
25
+ Classifier: Programming Language :: Python :: 3 :: Only
26
+ Classifier: Programming Language :: Python :: Implementation :: CPython
27
+ Classifier: Topic :: Games/Entertainment :: Simulation
28
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
29
+ Classifier: Topic :: Scientific/Engineering :: Physics
30
+ Classifier: Topic :: Software Development
31
+ Requires-Python: >=3.11
32
+ Description-Content-Type: text/markdown
33
+ License-File: LICENSE
34
+ Requires-Dist: coloredlogs
35
+ Requires-Dist: jax>=0.4.13
36
+ Requires-Dist: jaxlib>=0.4.13
37
+ Requires-Dist: jaxlie>=1.3.0
38
+ Requires-Dist: jax_dataclasses>=1.4.0
39
+ Requires-Dist: pptree
40
+ Requires-Dist: rod>=0.2.0
41
+ Requires-Dist: typing_extensions; python_version < "3.12"
42
+ Provides-Extra: style
43
+ Requires-Dist: black[jupyter]~=24.0; extra == "style"
44
+ Requires-Dist: isort; extra == "style"
45
+ Requires-Dist: pre-commit; extra == "style"
46
+ Provides-Extra: testing
47
+ Requires-Dist: idyntree; extra == "testing"
48
+ Requires-Dist: pytest>=6.0; extra == "testing"
49
+ Requires-Dist: pytest-icdiff; extra == "testing"
50
+ Requires-Dist: robot-descriptions; extra == "testing"
51
+ Provides-Extra: viz
52
+ Requires-Dist: lxml; extra == "viz"
53
+ Requires-Dist: mediapy; extra == "viz"
54
+ Requires-Dist: mujoco>=3.0.0; extra == "viz"
55
+ Provides-Extra: all
56
+ Requires-Dist: black[jupyter]~=24.0; extra == "all"
57
+ Requires-Dist: isort; extra == "all"
58
+ Requires-Dist: pre-commit; extra == "all"
59
+ Requires-Dist: idyntree; extra == "all"
60
+ Requires-Dist: pytest>=6.0; extra == "all"
61
+ Requires-Dist: pytest-icdiff; extra == "all"
62
+ Requires-Dist: robot-descriptions; extra == "all"
63
+ Requires-Dist: lxml; extra == "all"
64
+ Requires-Dist: mediapy; extra == "all"
65
+ Requires-Dist: mujoco>=3.0.0; extra == "all"
66
+
67
+ # JaxSim
68
+
69
+ JaxSim is a **differentiable physics engine** and **multibody dynamics library** designed for applications in control and robot learning, implemented with JAX.
70
+
71
+ Its design facilitates research and accelerates prototyping in the intersection of robotics and artificial intelligence.
72
+
73
+ ## Features
74
+
75
+ - Physics engine in reduced coordinates supporting fixed-base and floating-base robots.
76
+ - Multibody dynamics library providing all the necessary components for developing model-based control algorithms.
77
+ - Completely developed in Python with [`google/jax`][jax] following a functional programming paradigm.
78
+ - Transparent support for running on CPUs, GPUs, and TPUs.
79
+ - Full support for JIT compilation for increased performance.
80
+ - Full support for automatic vectorization for massive parallelization of open-loop and closed-loop architectures.
81
+ - Support for SDF models and, upon conversion with [sdformat][sdformat], URDF models.
82
+ - Visualization based on the [passive viewer][passive_viewer_mujoco] of Mujoco.
83
+
84
+ ### JaxSim as a simulator
85
+
86
+ - Wide range of fixed-step explicit Runge-Kutta integrators.
87
+ - Support for variable-step integrators implemented as embedded Runge-Kutta schemes.
88
+ - Improved stability by optionally integrating the base orientation on the $\text{SO}(3)$ manifold.
89
+ - Soft contacts model supporting full friction cone and sticking-slipping transition.
90
+ - Collision detection between points rigidly attached to bodies and uneven ground surfaces.
91
+
92
+ ### JaxSim as a multibody dynamics library
93
+
94
+ - Provides rigid body dynamics algorithms (RBDAs) like RNEA, ABA, CRBA, and Jacobians.
95
+ - Provides all the quantities included in the Euler-Poincarè formulation of the equations of motion.
96
+ - Supports body-fixed, inertial-fixed, and mixed [velocity representations][notation].
97
+ - Exposes all the necessary quantities to develop controllers in centroidal coordinates.
98
+
99
+ ### JaxSim for robot learning
100
+
101
+ - Being developed with JAX, all the RBDAs support automatic differentiation both in forward and reverse modes.
102
+ - Support for automatically differentiating against kinematics and dynamics parameters.
103
+ - All fixed-step integrators are forward and reverse differentiable.
104
+ - All variable-step integrators are forward differentiable.
105
+ - Ideal for sampling synthetic data for reinforcement learning (RL).
106
+ - Ideal for designing physics-informed neural networks (PINNs) with loss functions requiring model-based quantities.
107
+ - Ideal for combining model-based control with learning-based components.
108
+
109
+ [jax]: https://github.com/google/jax/
110
+ [sdformat]: https://github.com/gazebosim/sdformat
111
+ [notation]: https://research.tue.nl/en/publications/multibody-dynamics-notation-version-2
112
+ [passive_viewer_mujoco]: https://mujoco.readthedocs.io/en/stable/python.html#passive-viewer
113
+
114
+ > [!WARNING]
115
+ > This project is still experimental, APIs could change between releases without notice.
116
+
117
+ > [!NOTE]
118
+ > JaxSim currently focuses on locomotion applications.
119
+ > Only contacts between bodies and smooth ground surfaces are supported.
120
+
121
+ ## Documentation
122
+
123
+ The JaxSim API documentation is available at [jaxsim.readthedocs.io][readthedocs].
124
+
125
+ [readthedocs]: https://jaxsim.readthedocs.io/
126
+
127
+ ## Installation
128
+
129
+ <details>
130
+ <summary>With conda</summary>
131
+
132
+ You can install the project using [`conda`][conda] as follows:
133
+
134
+ ```bash
135
+ conda install jaxsim -c conda-forge
136
+ ```
137
+
138
+ You can enforce GPU support, if needed, by also specifying `"jaxlib = * = *cuda*"`.
139
+
140
+ </details>
141
+
142
+ <details>
143
+ <summary>With pip</summary>
144
+
145
+ You can install the project using [`pypa/pip`][pip], preferably in a [virtual environment][venv], as follows:
146
+
147
+ ```bash
148
+ pip install jaxsim
149
+ ```
150
+
151
+ Check [`setup.cfg`](setup.cfg) for the complete list of optional dependencies.
152
+ You can obtain a full installation using `jaxsim[all]`.
153
+
154
+ If you need GPU support, follow the official [installation instructions][jax_gpu] of JAX.
155
+
156
+ </details>
157
+
158
+ <details>
159
+ <summary>Contributors installation</summary>
160
+
161
+ If you want to contribute to the project, we recommend creating the following `jaxsim` conda environment first:
162
+
163
+ ```bash
164
+ conda env create -f environment.yml
165
+ ```
166
+
167
+ Then, activate the environment and install the project in editable mode:
168
+
169
+ ```bash
170
+ conda activate jaxsim
171
+ pip install --no-deps -e .
172
+ ```
173
+
174
+ </details>
175
+
176
+ [conda]: https://anaconda.org/
177
+ [pip]: https://github.com/pypa/pip/
178
+ [venv]: https://docs.python.org/3/tutorial/venv.html
179
+ [jax_gpu]: https://github.com/google/jax/#installation
180
+
181
+ ## Credits
182
+
183
+ The RBDAs are based on the theory of the [Rigid Body Dynamics Algorithms][RBDA]
184
+ book by Roy Featherstone.
185
+ The algorithms and some simulation features were inspired by its accompanying [code][spatial_v2].
186
+
187
+ [RBDA]: https://link.springer.com/book/10.1007/978-1-4899-7560-7
188
+ [spatial_v2]: http://royfeatherstone.org/spatial/index.html#spatial-software
189
+
190
+ The development of JaxSim started in late 2021, inspired by early versions of [`google/brax`][brax].
191
+ At that time, Brax was implemented in maximal coordinates, and we wanted a physics engine in reduced coordinates.
192
+ We are grateful to the Brax team for their work and showing the potential of [JAX][jax] in this field.
193
+
194
+ Brax v2 was later implemented reduced coordinates, following an approach comparable to JaxSim.
195
+ The development then shifted to [MJX][mjx], which today provides a JAX-based implementation of the Mujoco APIs.
196
+
197
+ The main differences between MJX/Brax and JaxSim are as follows:
198
+
199
+ - JaxSim supports out-of-the-box all SDF models with [Pose Frame Semantics][PFS].
200
+ - JaxSim only supports collisions between points rigidly attached to bodies and a compliant ground surface.
201
+ Our contact model requires careful tuning of its spring-damper parameters, but being an instantaneous
202
+ function of the state $(\mathbf{q}, \boldsymbol{\nu})$, it doesn't require running any optimization algorithm
203
+ when stepping the simulation forward.
204
+ - JaxSim mitigates the stiffness of the contact-aware system dynamics by providing variable-step integrators.
205
+
206
+ [brax]: https://github.com/google/brax
207
+ [mjx]: https://mujoco.readthedocs.io/en/3.0.0/mjx.html
208
+ [PFS]: http://sdformat.org/tutorials?tut=pose_frame_semantics
209
+
210
+ ## Contributing
211
+
212
+ We welcome contributions from the community.
213
+ Please read the [contributing guide](./CONTRIBUTING.md) to get started.
214
+
215
+ ## Citing
216
+
217
+ ```bibtex
218
+ @software{ferigo_jaxsim_2022,
219
+ author = {Diego Ferigo and Filippo Luca Ferretti and Silvio Traversaro and Daniele Pucci},
220
+ title = {{JaxSim}: A Differentiable Physics Engine and Multibody Dynamics Library for Control and Robot Learning},
221
+ url = {http://github.com/ami-iit/jaxsim},
222
+ year = {2022},
223
+ }
224
+ ```
225
+
226
+ ## People
227
+
228
+ | Author | Maintainers |
229
+ |:------:|:-----------:|
230
+ | [<img src="https://avatars.githubusercontent.com/u/469199?v=4" width="40">][df] | [<img src="https://avatars.githubusercontent.com/u/102977828?v=4" width="40">][ff] [<img src="https://avatars.githubusercontent.com/u/469199?v=4" width="40">][df] |
231
+
232
+ [df]: https://github.com/diegoferigo
233
+ [ff]: https://github.com/flferretti
234
+
235
+ ## License
236
+
237
+ [BSD3](https://choosealicense.com/licenses/bsd-3-clause/)
@@ -0,0 +1,171 @@
1
+ # JaxSim
2
+
3
+ JaxSim is a **differentiable physics engine** and **multibody dynamics library** designed for applications in control and robot learning, implemented with JAX.
4
+
5
+ Its design facilitates research and accelerates prototyping in the intersection of robotics and artificial intelligence.
6
+
7
+ ## Features
8
+
9
+ - Physics engine in reduced coordinates supporting fixed-base and floating-base robots.
10
+ - Multibody dynamics library providing all the necessary components for developing model-based control algorithms.
11
+ - Completely developed in Python with [`google/jax`][jax] following a functional programming paradigm.
12
+ - Transparent support for running on CPUs, GPUs, and TPUs.
13
+ - Full support for JIT compilation for increased performance.
14
+ - Full support for automatic vectorization for massive parallelization of open-loop and closed-loop architectures.
15
+ - Support for SDF models and, upon conversion with [sdformat][sdformat], URDF models.
16
+ - Visualization based on the [passive viewer][passive_viewer_mujoco] of Mujoco.
17
+
18
+ ### JaxSim as a simulator
19
+
20
+ - Wide range of fixed-step explicit Runge-Kutta integrators.
21
+ - Support for variable-step integrators implemented as embedded Runge-Kutta schemes.
22
+ - Improved stability by optionally integrating the base orientation on the $\text{SO}(3)$ manifold.
23
+ - Soft contacts model supporting full friction cone and sticking-slipping transition.
24
+ - Collision detection between points rigidly attached to bodies and uneven ground surfaces.
25
+
26
+ ### JaxSim as a multibody dynamics library
27
+
28
+ - Provides rigid body dynamics algorithms (RBDAs) like RNEA, ABA, CRBA, and Jacobians.
29
+ - Provides all the quantities included in the Euler-Poincarè formulation of the equations of motion.
30
+ - Supports body-fixed, inertial-fixed, and mixed [velocity representations][notation].
31
+ - Exposes all the necessary quantities to develop controllers in centroidal coordinates.
32
+
33
+ ### JaxSim for robot learning
34
+
35
+ - Being developed with JAX, all the RBDAs support automatic differentiation both in forward and reverse modes.
36
+ - Support for automatically differentiating against kinematics and dynamics parameters.
37
+ - All fixed-step integrators are forward and reverse differentiable.
38
+ - All variable-step integrators are forward differentiable.
39
+ - Ideal for sampling synthetic data for reinforcement learning (RL).
40
+ - Ideal for designing physics-informed neural networks (PINNs) with loss functions requiring model-based quantities.
41
+ - Ideal for combining model-based control with learning-based components.
42
+
43
+ [jax]: https://github.com/google/jax/
44
+ [sdformat]: https://github.com/gazebosim/sdformat
45
+ [notation]: https://research.tue.nl/en/publications/multibody-dynamics-notation-version-2
46
+ [passive_viewer_mujoco]: https://mujoco.readthedocs.io/en/stable/python.html#passive-viewer
47
+
48
+ > [!WARNING]
49
+ > This project is still experimental, APIs could change between releases without notice.
50
+
51
+ > [!NOTE]
52
+ > JaxSim currently focuses on locomotion applications.
53
+ > Only contacts between bodies and smooth ground surfaces are supported.
54
+
55
+ ## Documentation
56
+
57
+ The JaxSim API documentation is available at [jaxsim.readthedocs.io][readthedocs].
58
+
59
+ [readthedocs]: https://jaxsim.readthedocs.io/
60
+
61
+ ## Installation
62
+
63
+ <details>
64
+ <summary>With conda</summary>
65
+
66
+ You can install the project using [`conda`][conda] as follows:
67
+
68
+ ```bash
69
+ conda install jaxsim -c conda-forge
70
+ ```
71
+
72
+ You can enforce GPU support, if needed, by also specifying `"jaxlib = * = *cuda*"`.
73
+
74
+ </details>
75
+
76
+ <details>
77
+ <summary>With pip</summary>
78
+
79
+ You can install the project using [`pypa/pip`][pip], preferably in a [virtual environment][venv], as follows:
80
+
81
+ ```bash
82
+ pip install jaxsim
83
+ ```
84
+
85
+ Check [`setup.cfg`](setup.cfg) for the complete list of optional dependencies.
86
+ You can obtain a full installation using `jaxsim[all]`.
87
+
88
+ If you need GPU support, follow the official [installation instructions][jax_gpu] of JAX.
89
+
90
+ </details>
91
+
92
+ <details>
93
+ <summary>Contributors installation</summary>
94
+
95
+ If you want to contribute to the project, we recommend creating the following `jaxsim` conda environment first:
96
+
97
+ ```bash
98
+ conda env create -f environment.yml
99
+ ```
100
+
101
+ Then, activate the environment and install the project in editable mode:
102
+
103
+ ```bash
104
+ conda activate jaxsim
105
+ pip install --no-deps -e .
106
+ ```
107
+
108
+ </details>
109
+
110
+ [conda]: https://anaconda.org/
111
+ [pip]: https://github.com/pypa/pip/
112
+ [venv]: https://docs.python.org/3/tutorial/venv.html
113
+ [jax_gpu]: https://github.com/google/jax/#installation
114
+
115
+ ## Credits
116
+
117
+ The RBDAs are based on the theory of the [Rigid Body Dynamics Algorithms][RBDA]
118
+ book by Roy Featherstone.
119
+ The algorithms and some simulation features were inspired by its accompanying [code][spatial_v2].
120
+
121
+ [RBDA]: https://link.springer.com/book/10.1007/978-1-4899-7560-7
122
+ [spatial_v2]: http://royfeatherstone.org/spatial/index.html#spatial-software
123
+
124
+ The development of JaxSim started in late 2021, inspired by early versions of [`google/brax`][brax].
125
+ At that time, Brax was implemented in maximal coordinates, and we wanted a physics engine in reduced coordinates.
126
+ We are grateful to the Brax team for their work and showing the potential of [JAX][jax] in this field.
127
+
128
+ Brax v2 was later implemented reduced coordinates, following an approach comparable to JaxSim.
129
+ The development then shifted to [MJX][mjx], which today provides a JAX-based implementation of the Mujoco APIs.
130
+
131
+ The main differences between MJX/Brax and JaxSim are as follows:
132
+
133
+ - JaxSim supports out-of-the-box all SDF models with [Pose Frame Semantics][PFS].
134
+ - JaxSim only supports collisions between points rigidly attached to bodies and a compliant ground surface.
135
+ Our contact model requires careful tuning of its spring-damper parameters, but being an instantaneous
136
+ function of the state $(\mathbf{q}, \boldsymbol{\nu})$, it doesn't require running any optimization algorithm
137
+ when stepping the simulation forward.
138
+ - JaxSim mitigates the stiffness of the contact-aware system dynamics by providing variable-step integrators.
139
+
140
+ [brax]: https://github.com/google/brax
141
+ [mjx]: https://mujoco.readthedocs.io/en/3.0.0/mjx.html
142
+ [PFS]: http://sdformat.org/tutorials?tut=pose_frame_semantics
143
+
144
+ ## Contributing
145
+
146
+ We welcome contributions from the community.
147
+ Please read the [contributing guide](./CONTRIBUTING.md) to get started.
148
+
149
+ ## Citing
150
+
151
+ ```bibtex
152
+ @software{ferigo_jaxsim_2022,
153
+ author = {Diego Ferigo and Filippo Luca Ferretti and Silvio Traversaro and Daniele Pucci},
154
+ title = {{JaxSim}: A Differentiable Physics Engine and Multibody Dynamics Library for Control and Robot Learning},
155
+ url = {http://github.com/ami-iit/jaxsim},
156
+ year = {2022},
157
+ }
158
+ ```
159
+
160
+ ## People
161
+
162
+ | Author | Maintainers |
163
+ |:------:|:-----------:|
164
+ | [<img src="https://avatars.githubusercontent.com/u/469199?v=4" width="40">][df] | [<img src="https://avatars.githubusercontent.com/u/102977828?v=4" width="40">][ff] [<img src="https://avatars.githubusercontent.com/u/469199?v=4" width="40">][df] |
165
+
166
+ [df]: https://github.com/diegoferigo
167
+ [ff]: https://github.com/flferretti
168
+
169
+ ## License
170
+
171
+ [BSD3](https://choosealicense.com/licenses/bsd-3-clause/)
@@ -2,20 +2,25 @@ name: jaxsim
2
2
  channels:
3
3
  - conda-forge
4
4
  dependencies:
5
+ # ===========================
5
6
  # Dependencies from setup.cfg
7
+ # ===========================
6
8
  - python=3.11
7
9
  - coloredlogs
8
10
  - jax >= 0.4.13
9
- - jaxlib
11
+ - jaxlib >= 0.4.13
10
12
  - jaxlie >= 1.3.0
11
13
  - jax-dataclasses >= 1.4.0
12
14
  - pptree
13
15
  - rod >= 0.2.0
14
16
  - typing_extensions # python<3.12
17
+ # ====================================
15
18
  # Optional dependencies from setup.cfg
19
+ # ====================================
16
20
  # [style]
17
21
  - black == 24.*
18
22
  - isort
23
+ - pre-commit
19
24
  # [testing]
20
25
  - idyntree
21
26
  - pytest
@@ -25,16 +30,15 @@ dependencies:
25
30
  - lxml
26
31
  - mediapy
27
32
  - mujoco >= 3.0.0
28
- # System dependencies to run the tests
29
- - gz-sim7
30
- # Other packages
31
- - ipython
33
+ # ==========================
32
34
  # Documentation dependencies
35
+ # ==========================
33
36
  - cachecontrol
34
37
  - enum_tools
35
38
  - filecache
36
39
  - filelock
37
40
  - jinja2
41
+ - pip
38
42
  - sphinx
39
43
  - sphinx-autodoc-typehints
40
44
  - sphinx-copybutton
@@ -45,4 +49,10 @@ dependencies:
45
49
  - sphinx_rtd_theme
46
50
  - sphinx-book-theme
47
51
  - sphinx-toolbox
48
- - pip
52
+ # ========================================
53
+ # Other dependencies for GitHub Codespaces
54
+ # ========================================
55
+ # System dependencies to run the tests
56
+ - gz-sim7
57
+ # Other packages
58
+ - ipython
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = jaxsim
3
- description = A physics engine in reduced coordinates implemented with JAX.
3
+ description = A differentiable physics engine and multibody dynamics library for control and robot learning.
4
4
  long_description = file: README.md
5
5
  long_description_content_type = text/markdown
6
6
  author = Diego Ferigo
@@ -11,6 +11,7 @@ platforms = any
11
11
  url = https://github.com/ami-iit/jaxsim
12
12
  project_urls =
13
13
  Changelog = https://github.com/ami-iit/jaxsim/releases
14
+ Documentation = https://jaxsim.readthedocs.io
14
15
  Source = https://github.com/ami-iit/jaxsim
15
16
  Tracker = https://github.com/ami-iit/jaxsim/issues
16
17
  keywords =
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.2.dev423'
16
- __version_tuple__ = version_tuple = (0, 2, 'dev423')
15
+ __version__ = version = '0.2.dev428'
16
+ __version_tuple__ = version_tuple = (0, 2, 'dev428')