jaxsim 0.6.2.dev253__tar.gz → 0.6.2.dev259__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 (134) hide show
  1. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/PKG-INFO +1 -1
  2. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/_version.py +2 -2
  3. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/api/data.py +1 -7
  4. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/api/integrators.py +108 -0
  5. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/api/model.py +1 -0
  6. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim.egg-info/PKG-INFO +1 -1
  7. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/tests/conftest.py +1 -0
  8. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/.devcontainer/Dockerfile +0 -0
  9. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/.devcontainer/devcontainer.json +0 -0
  10. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/.gitattributes +0 -0
  11. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/.github/CODEOWNERS +0 -0
  12. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/.github/dependabot.yml +0 -0
  13. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/.github/workflows/ci_cd.yml +0 -0
  14. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/.github/workflows/gpu_benchmark.yml +0 -0
  15. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/.github/workflows/pixi.yml +0 -0
  16. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/.github/workflows/read_the_docs.yml +0 -0
  17. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/.gitignore +0 -0
  18. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/.pre-commit-config.yaml +0 -0
  19. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/.readthedocs.yaml +0 -0
  20. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/CONTRIBUTING.md +0 -0
  21. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/LICENSE +0 -0
  22. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/README.md +0 -0
  23. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/docs/Makefile +0 -0
  24. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/docs/conf.py +0 -0
  25. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/docs/examples.rst +0 -0
  26. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/docs/guide/configuration.rst +0 -0
  27. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/docs/guide/install.rst +0 -0
  28. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/docs/index.rst +0 -0
  29. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/docs/make.bat +0 -0
  30. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/docs/modules/api.rst +0 -0
  31. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/docs/modules/math.rst +0 -0
  32. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/docs/modules/mujoco.rst +0 -0
  33. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/docs/modules/parsers.rst +0 -0
  34. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/docs/modules/rbda.rst +0 -0
  35. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/docs/modules/typing.rst +0 -0
  36. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/docs/modules/utils.rst +0 -0
  37. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/environment.yml +0 -0
  38. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/examples/.gitattributes +0 -0
  39. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/examples/.gitignore +0 -0
  40. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/examples/README.md +0 -0
  41. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/examples/assets/build_cartpole_urdf.py +0 -0
  42. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/examples/assets/cartpole.urdf +0 -0
  43. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/examples/jaxsim_as_multibody_dynamics_library.ipynb +0 -0
  44. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/examples/jaxsim_as_physics_engine.ipynb +0 -0
  45. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/examples/jaxsim_as_physics_engine_advanced.ipynb +0 -0
  46. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/examples/jaxsim_for_robot_controllers.ipynb +0 -0
  47. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/pixi.lock +0 -0
  48. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/pyproject.toml +0 -0
  49. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/setup.cfg +0 -0
  50. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/setup.py +0 -0
  51. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/__init__.py +0 -0
  52. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/api/__init__.py +0 -0
  53. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/api/actuation_model.py +0 -0
  54. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/api/com.py +0 -0
  55. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/api/common.py +0 -0
  56. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/api/contact.py +0 -0
  57. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/api/frame.py +0 -0
  58. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/api/joint.py +0 -0
  59. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/api/kin_dyn_parameters.py +0 -0
  60. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/api/link.py +0 -0
  61. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/api/ode.py +0 -0
  62. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/api/references.py +0 -0
  63. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/exceptions.py +0 -0
  64. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/logging.py +0 -0
  65. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/math/__init__.py +0 -0
  66. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/math/adjoint.py +0 -0
  67. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/math/cross.py +0 -0
  68. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/math/inertia.py +0 -0
  69. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/math/joint_model.py +0 -0
  70. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/math/quaternion.py +0 -0
  71. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/math/rotation.py +0 -0
  72. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/math/skew.py +0 -0
  73. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/math/transform.py +0 -0
  74. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/math/utils.py +0 -0
  75. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/mujoco/__init__.py +0 -0
  76. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/mujoco/__main__.py +0 -0
  77. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/mujoco/loaders.py +0 -0
  78. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/mujoco/model.py +0 -0
  79. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/mujoco/utils.py +0 -0
  80. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/mujoco/visualizer.py +0 -0
  81. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/parsers/__init__.py +0 -0
  82. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/parsers/descriptions/__init__.py +0 -0
  83. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/parsers/descriptions/collision.py +0 -0
  84. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/parsers/descriptions/joint.py +0 -0
  85. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/parsers/descriptions/link.py +0 -0
  86. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/parsers/descriptions/model.py +0 -0
  87. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/parsers/kinematic_graph.py +0 -0
  88. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/parsers/rod/__init__.py +0 -0
  89. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/parsers/rod/meshes.py +0 -0
  90. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/parsers/rod/parser.py +0 -0
  91. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/parsers/rod/utils.py +0 -0
  92. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/rbda/__init__.py +0 -0
  93. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/rbda/aba.py +0 -0
  94. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/rbda/actuation/__init__.py +0 -0
  95. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/rbda/actuation/common.py +0 -0
  96. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/rbda/collidable_points.py +0 -0
  97. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/rbda/contacts/__init__.py +0 -0
  98. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/rbda/contacts/common.py +0 -0
  99. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/rbda/contacts/relaxed_rigid.py +0 -0
  100. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/rbda/contacts/rigid.py +0 -0
  101. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/rbda/contacts/soft.py +0 -0
  102. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/rbda/crba.py +0 -0
  103. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/rbda/forward_kinematics.py +0 -0
  104. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/rbda/jacobian.py +0 -0
  105. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/rbda/rnea.py +0 -0
  106. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/rbda/utils.py +0 -0
  107. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/terrain/__init__.py +0 -0
  108. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/terrain/terrain.py +0 -0
  109. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/typing.py +0 -0
  110. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/utils/__init__.py +0 -0
  111. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/utils/jaxsim_dataclass.py +0 -0
  112. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/utils/tracing.py +0 -0
  113. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim/utils/wrappers.py +0 -0
  114. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim.egg-info/SOURCES.txt +0 -0
  115. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim.egg-info/dependency_links.txt +0 -0
  116. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim.egg-info/requires.txt +0 -0
  117. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/src/jaxsim.egg-info/top_level.txt +0 -0
  118. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/tests/__init__.py +0 -0
  119. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/tests/test_actuation.py +0 -0
  120. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/tests/test_api_com.py +0 -0
  121. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/tests/test_api_contact.py +0 -0
  122. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/tests/test_api_data.py +0 -0
  123. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/tests/test_api_frame.py +0 -0
  124. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/tests/test_api_joint.py +0 -0
  125. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/tests/test_api_link.py +0 -0
  126. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/tests/test_api_model.py +0 -0
  127. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/tests/test_automatic_differentiation.py +0 -0
  128. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/tests/test_benchmark.py +0 -0
  129. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/tests/test_exceptions.py +0 -0
  130. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/tests/test_meshes.py +0 -0
  131. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/tests/test_pytree.py +0 -0
  132. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/tests/test_simulations.py +0 -0
  133. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/tests/test_visualizer.py +0 -0
  134. {jaxsim-0.6.2.dev253 → jaxsim-0.6.2.dev259}/tests/utils_idyntree.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jaxsim
3
- Version: 0.6.2.dev253
3
+ Version: 0.6.2.dev259
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>
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.6.2.dev253'
21
- __version_tuple__ = version_tuple = (0, 6, 2, 'dev253')
20
+ __version__ = version = '0.6.2.dev259'
21
+ __version_tuple__ = version_tuple = (0, 6, 2, 'dev259')
@@ -431,13 +431,6 @@ class JaxSimModelData(common.ModelDataWithVelocityRepresentation):
431
431
  if contact_state is None:
432
432
  contact_state = self.contact_state
433
433
 
434
- if isinstance(model.contact_model, jaxsim.rbda.contacts.SoftContacts):
435
- contact_state = {
436
- "tangential_deformation": jnp.zeros_like(
437
- contact_state["tangential_deformation"]
438
- )
439
- }
440
-
441
434
  # Normalize the quaternion to avoid numerical issues.
442
435
  base_quaternion_norm = jaxsim.math.safe_norm(
443
436
  base_quaternion, axis=-1, keepdims=True
@@ -525,6 +518,7 @@ class JaxSimModelData(common.ModelDataWithVelocityRepresentation):
525
518
  _joint_transforms=joint_transforms,
526
519
  _link_transforms=link_transforms,
527
520
  _link_velocities=link_velocities,
521
+ contact_state=contact_state,
528
522
  validate=validate,
529
523
  )
530
524
 
@@ -156,9 +156,117 @@ def rk4_integration(
156
156
  return data_tf.replace(model=model)
157
157
 
158
158
 
159
+ def rk4fast_integration(
160
+ model: js.model.JaxSimModel,
161
+ data: JaxSimModelData,
162
+ link_forces: jtp.Vector,
163
+ joint_torques: jtp.Vector,
164
+ ) -> JaxSimModelData:
165
+ """
166
+ Integrate the system state using the Runge-Kutta 4 fast method.
167
+
168
+ Note:
169
+ This method is a faster version of the RK4 method, but it may not be as accurate.
170
+ It computes the contact forces only once at the beginning of the integration step.
171
+ """
172
+
173
+ dt = model.time_step
174
+
175
+ if len(model.kin_dyn_parameters.contact_parameters.body) > 0:
176
+
177
+ # Compute the 6D forces W_f ∈ ℝ^{n_L × 6} applied to links due to contact
178
+ # with the terrain.
179
+ W_f_L_terrain, contact_state_derivative = js.contact.link_contact_forces(
180
+ model=model,
181
+ data=data,
182
+ link_forces=link_forces,
183
+ joint_torques=joint_torques,
184
+ )
185
+
186
+ W_f_L_total = link_forces + W_f_L_terrain
187
+
188
+ # Update the contact state data. This is necessary only for the contact models
189
+ # that require propagation and integration of contact state.
190
+ contact_state = model.contact_model.update_contact_state(contact_state_derivative)
191
+
192
+ def f(x) -> dict[str, jtp.Matrix]:
193
+
194
+ with data.switch_velocity_representation(jaxsim.VelRepr.Inertial):
195
+
196
+ data_ti = data.replace(model=model, **x)
197
+
198
+ W_v̇_WB, s̈ = js.model.forward_dynamics_aba(
199
+ model=model,
200
+ data=data_ti,
201
+ joint_forces=joint_torques,
202
+ link_forces=W_f_L_total,
203
+ )
204
+
205
+ W_ṗ_B, W_Q̇_B, ṡ = js.ode.system_position_dynamics(
206
+ data=data,
207
+ baumgarte_quaternion_regularization=1.0,
208
+ )
209
+
210
+ return dict(
211
+ base_position=W_ṗ_B,
212
+ base_quaternion=W_Q̇_B,
213
+ joint_positions=ṡ,
214
+ base_linear_velocity=W_v̇_WB[0:3],
215
+ base_angular_velocity=W_v̇_WB[3:6],
216
+ joint_velocities=s̈,
217
+ # The contact state is not updated here, as it is assumed to be constant.
218
+ contact_state=data_ti.contact_state,
219
+ )
220
+
221
+ base_quaternion_norm = jaxsim.math.safe_norm(data._base_quaternion, axis=-1)
222
+ base_quaternion = data._base_quaternion / jnp.where(
223
+ base_quaternion_norm == 0, 1.0, base_quaternion_norm
224
+ )
225
+
226
+ x_t0 = dict(
227
+ base_position=data._base_position,
228
+ base_quaternion=base_quaternion,
229
+ joint_positions=data._joint_positions,
230
+ base_linear_velocity=data._base_linear_velocity,
231
+ base_angular_velocity=data._base_angular_velocity,
232
+ joint_velocities=data._joint_velocities,
233
+ contact_state=contact_state,
234
+ )
235
+
236
+ euler_mid = lambda x, dxdt: x + (0.5 * dt) * dxdt
237
+ euler_fin = lambda x, dxdt: x + dt * dxdt
238
+
239
+ k1 = f(x_t0)
240
+ k2 = f(jax.tree.map(euler_mid, x_t0, k1))
241
+ k3 = f(jax.tree.map(euler_mid, x_t0, k2))
242
+ k4 = f(jax.tree.map(euler_fin, x_t0, k3))
243
+
244
+ # Average the slopes and compute the RK4 state derivative.
245
+ average = lambda k1, k2, k3, k4: (k1 + 2 * k2 + 2 * k3 + k4) / 6
246
+
247
+ dxdt = jax.tree_util.tree_map(average, k1, k2, k3, k4)
248
+
249
+ # Integrate the dynamics
250
+ x_tf = jax.tree_util.tree_map(euler_fin, x_t0, dxdt)
251
+
252
+ data_tf = dataclasses.replace(
253
+ data,
254
+ _base_position=x_tf["base_position"],
255
+ _base_quaternion=x_tf["base_quaternion"],
256
+ _joint_positions=x_tf["joint_positions"],
257
+ _base_linear_velocity=x_tf["base_linear_velocity"],
258
+ _base_angular_velocity=x_tf["base_angular_velocity"],
259
+ _joint_velocities=x_tf["joint_velocities"],
260
+ contact_state=x_tf["contact_state"],
261
+ )
262
+
263
+ return data_tf.replace(model=model)
264
+
265
+
159
266
  _INTEGRATORS_MAP: dict[
160
267
  js.model.IntegratorType, Callable[..., js.data.JaxSimModelData]
161
268
  ] = {
162
269
  js.model.IntegratorType.SemiImplicitEuler: semi_implicit_euler_integration,
163
270
  js.model.IntegratorType.RungeKutta4: rk4_integration,
271
+ js.model.IntegratorType.RungeKutta4Fast: rk4fast_integration,
164
272
  }
@@ -29,6 +29,7 @@ class IntegratorType(enum.IntEnum):
29
29
 
30
30
  SemiImplicitEuler = enum.auto()
31
31
  RungeKutta4 = enum.auto()
32
+ RungeKutta4Fast = enum.auto()
32
33
 
33
34
 
34
35
  @jax_dataclasses.pytree_dataclass(eq=False, unsafe_hash=False)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jaxsim
3
- Version: 0.6.2.dev253
3
+ Version: 0.6.2.dev259
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>
@@ -133,6 +133,7 @@ def velocity_representation(request) -> jaxsim.VelRepr:
133
133
  params=[
134
134
  pytest.param(IntegratorType.SemiImplicitEuler, id="semi_implicit_euler"),
135
135
  pytest.param(IntegratorType.RungeKutta4, id="runge_kutta_4"),
136
+ pytest.param(IntegratorType.RungeKutta4Fast, id="runge_kutta_4_fast"),
136
137
  ],
137
138
  )
138
139
  def integrator(request) -> str:
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes