jaxsim 0.4.2.dev45__tar.gz → 0.4.2.dev50__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 (121) hide show
  1. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/PKG-INFO +1 -1
  2. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/_version.py +2 -2
  3. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/api/references.py +10 -17
  4. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/rbda/crba.py +24 -12
  5. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/rbda/forward_kinematics.py +8 -4
  6. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/rbda/jacobian.py +24 -12
  7. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim.egg-info/PKG-INFO +1 -1
  8. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/.devcontainer/Dockerfile +0 -0
  9. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/.devcontainer/devcontainer.json +0 -0
  10. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/.gitattributes +0 -0
  11. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/.github/CODEOWNERS +0 -0
  12. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/.github/workflows/ci_cd.yml +0 -0
  13. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/.github/workflows/read_the_docs.yml +0 -0
  14. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/.gitignore +0 -0
  15. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/.pre-commit-config.yaml +0 -0
  16. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/.readthedocs.yaml +0 -0
  17. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/CONTRIBUTING.md +0 -0
  18. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/LICENSE +0 -0
  19. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/README.md +0 -0
  20. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/docs/Makefile +0 -0
  21. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/docs/conf.py +0 -0
  22. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/docs/examples.rst +0 -0
  23. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/docs/guide/install.rst +0 -0
  24. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/docs/index.rst +0 -0
  25. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/docs/make.bat +0 -0
  26. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/docs/modules/api.rst +0 -0
  27. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/docs/modules/integrators.rst +0 -0
  28. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/docs/modules/math.rst +0 -0
  29. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/docs/modules/mujoco.rst +0 -0
  30. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/docs/modules/parsers.rst +0 -0
  31. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/docs/modules/rbda.rst +0 -0
  32. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/docs/modules/typing.rst +0 -0
  33. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/docs/modules/utils.rst +0 -0
  34. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/environment.yml +0 -0
  35. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/examples/.gitattributes +0 -0
  36. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/examples/.gitignore +0 -0
  37. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/examples/PD_controller.ipynb +0 -0
  38. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/examples/Parallel_computing.ipynb +0 -0
  39. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/examples/README.md +0 -0
  40. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/examples/assets/cartpole.urdf +0 -0
  41. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/pixi.lock +0 -0
  42. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/pyproject.toml +0 -0
  43. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/setup.cfg +0 -0
  44. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/setup.py +0 -0
  45. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/__init__.py +0 -0
  46. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/api/__init__.py +0 -0
  47. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/api/com.py +0 -0
  48. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/api/common.py +0 -0
  49. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/api/contact.py +0 -0
  50. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/api/data.py +0 -0
  51. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/api/frame.py +0 -0
  52. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/api/joint.py +0 -0
  53. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/api/kin_dyn_parameters.py +0 -0
  54. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/api/link.py +0 -0
  55. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/api/model.py +0 -0
  56. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/api/ode.py +0 -0
  57. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/api/ode_data.py +0 -0
  58. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/exceptions.py +0 -0
  59. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/integrators/__init__.py +0 -0
  60. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/integrators/common.py +0 -0
  61. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/integrators/fixed_step.py +0 -0
  62. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/integrators/variable_step.py +0 -0
  63. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/logging.py +0 -0
  64. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/math/__init__.py +0 -0
  65. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/math/adjoint.py +0 -0
  66. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/math/cross.py +0 -0
  67. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/math/inertia.py +0 -0
  68. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/math/joint_model.py +0 -0
  69. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/math/quaternion.py +0 -0
  70. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/math/rotation.py +0 -0
  71. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/math/skew.py +0 -0
  72. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/math/transform.py +0 -0
  73. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/mujoco/__init__.py +0 -0
  74. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/mujoco/__main__.py +0 -0
  75. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/mujoco/loaders.py +0 -0
  76. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/mujoco/model.py +0 -0
  77. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/mujoco/visualizer.py +0 -0
  78. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/parsers/__init__.py +0 -0
  79. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/parsers/descriptions/__init__.py +0 -0
  80. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/parsers/descriptions/collision.py +0 -0
  81. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/parsers/descriptions/joint.py +0 -0
  82. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/parsers/descriptions/link.py +0 -0
  83. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/parsers/descriptions/model.py +0 -0
  84. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/parsers/kinematic_graph.py +0 -0
  85. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/parsers/rod/__init__.py +0 -0
  86. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/parsers/rod/parser.py +0 -0
  87. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/parsers/rod/utils.py +0 -0
  88. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/rbda/__init__.py +0 -0
  89. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/rbda/aba.py +0 -0
  90. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/rbda/collidable_points.py +0 -0
  91. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/rbda/contacts/__init__.py +0 -0
  92. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/rbda/contacts/common.py +0 -0
  93. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/rbda/contacts/soft.py +0 -0
  94. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/rbda/rnea.py +0 -0
  95. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/rbda/utils.py +0 -0
  96. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/terrain/__init__.py +0 -0
  97. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/terrain/terrain.py +0 -0
  98. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/typing.py +0 -0
  99. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/utils/__init__.py +0 -0
  100. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/utils/jaxsim_dataclass.py +0 -0
  101. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/utils/tracing.py +0 -0
  102. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim/utils/wrappers.py +0 -0
  103. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim.egg-info/SOURCES.txt +0 -0
  104. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim.egg-info/dependency_links.txt +0 -0
  105. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim.egg-info/requires.txt +0 -0
  106. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/src/jaxsim.egg-info/top_level.txt +0 -0
  107. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/tests/__init__.py +0 -0
  108. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/tests/conftest.py +0 -0
  109. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/tests/test_api_com.py +0 -0
  110. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/tests/test_api_contact.py +0 -0
  111. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/tests/test_api_data.py +0 -0
  112. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/tests/test_api_frame.py +0 -0
  113. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/tests/test_api_joint.py +0 -0
  114. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/tests/test_api_link.py +0 -0
  115. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/tests/test_api_model.py +0 -0
  116. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/tests/test_automatic_differentiation.py +0 -0
  117. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/tests/test_contact.py +0 -0
  118. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/tests/test_exceptions.py +0 -0
  119. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/tests/test_pytree.py +0 -0
  120. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/tests/test_simulations.py +0 -0
  121. {jaxsim-0.4.2.dev45 → jaxsim-0.4.2.dev50}/tests/utils_idyntree.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: jaxsim
3
- Version: 0.4.2.dev45
3
+ Version: 0.4.2.dev50
4
4
  Summary: A differentiable physics engine and multibody dynamics library for control and robot learning.
5
5
  Author-email: Diego Ferigo <dgferigo@gmail.com>
6
6
  Maintainer-email: Diego Ferigo <dgferigo@gmail.com>, Filippo Luca Ferretti <filippo.ferretti@iit.it>
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.4.2.dev45'
16
- __version_tuple__ = version_tuple = (0, 4, 2, 'dev45')
15
+ __version__ = version = '0.4.2.dev50'
16
+ __version_tuple__ = version_tuple = (0, 4, 2, 'dev50')
@@ -9,7 +9,6 @@ import jax_dataclasses
9
9
  import jaxsim.api as js
10
10
  import jaxsim.typing as jtp
11
11
  from jaxsim import exceptions
12
- from jaxsim.math import Adjoint
13
12
  from jaxsim.utils.tracing import not_tracing
14
13
 
15
14
  from .common import VelRepr
@@ -493,9 +492,9 @@ class JaxSimModelReferences(js.common.ModelDataWithVelocityRepresentation):
493
492
 
494
493
  # Extract the frame indices.
495
494
  frame_idxs = js.frame.names_to_idxs(frame_names=frame_names, model=model)
496
- parent_link_idxs = jax.vmap(
497
- lambda frame_idx: js.frame.idx_of_parent_link, in_axes=(None,)
498
- )(model, frame_idx=frame_idxs)
495
+ parent_link_idxs = jax.vmap(js.frame.idx_of_parent_link, in_axes=(None,))(
496
+ model, frame_index=frame_idxs
497
+ )
499
498
 
500
499
  exceptions.raise_value_error_if(
501
500
  condition=jnp.logical_not(data.valid(model=model)),
@@ -527,25 +526,14 @@ class JaxSimModelReferences(js.common.ModelDataWithVelocityRepresentation):
527
526
  case _:
528
527
  raise ValueError("Invalid velocity representation.")
529
528
 
530
- W_H_L = js.model.forward_kinematics(model=model, data=data)
531
-
532
- def convert_to_link_force(
533
- W_f_F: jtp.MatrixLike, W_H_F: jtp.MatrixLike, parent_link_idx: jtp.ArrayLike
534
- ) -> jtp.Matrix:
535
- L_Xf_W = Adjoint.from_transform(W_H_L[parent_link_idx]).T
536
-
537
- return L_Xf_W @ W_f_F
538
-
539
- W_f_L_i = jax.vmap(convert_to_link_force)(W_f_F, W_H_Fi, parent_link_idxs)
540
-
541
529
  # Sum the forces on the parent links.
542
530
  mask = parent_link_idxs[:, jnp.newaxis] == jnp.arange(model.number_of_links())
543
- W_f_L = mask.T @ W_f_L_i
531
+ W_f_L = mask.T @ W_f_F
544
532
 
545
533
  with self.switch_velocity_representation(
546
534
  velocity_representation=VelRepr.Inertial
547
535
  ):
548
- return self.apply_link_forces(
536
+ references = self.apply_link_forces(
549
537
  model=model,
550
538
  data=data,
551
539
  link_names=js.link.idxs_to_names(
@@ -554,3 +542,8 @@ class JaxSimModelReferences(js.common.ModelDataWithVelocityRepresentation):
554
542
  forces=W_f_L,
555
543
  additive=additive,
556
544
  )
545
+
546
+ with references.switch_velocity_representation(
547
+ velocity_representation=self.velocity_representation
548
+ ):
549
+ return references
@@ -59,10 +59,14 @@ def crba(model: js.model.JaxSimModel, *, joint_positions: jtp.Vector) -> jtp.Mat
59
59
 
60
60
  return (i_X_0,), None
61
61
 
62
- (i_X_0,), _ = jax.lax.scan(
63
- f=propagate_kinematics,
64
- init=forward_pass_carry,
65
- xs=jnp.arange(start=1, stop=model.number_of_links()),
62
+ (i_X_0,), _ = (
63
+ jax.lax.scan(
64
+ f=propagate_kinematics,
65
+ init=forward_pass_carry,
66
+ xs=jnp.arange(start=1, stop=model.number_of_links()),
67
+ )
68
+ if model.number_of_links() > 1
69
+ else [(i_X_0,), None]
66
70
  )
67
71
 
68
72
  # ===================
@@ -128,10 +132,14 @@ def crba(model: js.model.JaxSimModel, *, joint_positions: jtp.Vector) -> jtp.Mat
128
132
  operand=carry,
129
133
  )
130
134
 
131
- (j, Fi, M), _ = jax.lax.scan(
132
- f=inner_fn,
133
- init=carry_inner_fn,
134
- xs=jnp.flip(jnp.arange(start=1, stop=model.number_of_links())),
135
+ (j, Fi, M), _ = (
136
+ jax.lax.scan(
137
+ f=inner_fn,
138
+ init=carry_inner_fn,
139
+ xs=jnp.flip(jnp.arange(start=1, stop=model.number_of_links())),
140
+ )
141
+ if model.number_of_links() > 1
142
+ else [(j, Fi, M), None]
135
143
  )
136
144
 
137
145
  Fi = i_X_0[j].T @ Fi
@@ -143,10 +151,14 @@ def crba(model: js.model.JaxSimModel, *, joint_positions: jtp.Vector) -> jtp.Mat
143
151
 
144
152
  # This scan performs the backward pass to compute Mbj, Mjb and Mjj, that
145
153
  # also includes a fake while loop implemented with a scan and two cond.
146
- (Mc, M), _ = jax.lax.scan(
147
- f=backward_pass,
148
- init=backward_pass_carry,
149
- xs=jnp.flip(jnp.arange(start=1, stop=model.number_of_links())),
154
+ (Mc, M), _ = (
155
+ jax.lax.scan(
156
+ f=backward_pass,
157
+ init=backward_pass_carry,
158
+ xs=jnp.flip(jnp.arange(start=1, stop=model.number_of_links())),
159
+ )
160
+ if model.number_of_links() > 1
161
+ else [(Mc, M), None]
150
162
  )
151
163
 
152
164
  # Store the locked 6D rigid-body inertia matrix Mbb ∈ ℝ⁶ˣ⁶.
@@ -75,10 +75,14 @@ def forward_kinematics_model(
75
75
 
76
76
  return (W_X_i,), None
77
77
 
78
- (W_X_i,), _ = jax.lax.scan(
79
- f=propagate_kinematics,
80
- init=propagate_kinematics_carry,
81
- xs=jnp.arange(start=1, stop=model.number_of_links()),
78
+ (W_X_i,), _ = (
79
+ jax.lax.scan(
80
+ f=propagate_kinematics,
81
+ init=propagate_kinematics_carry,
82
+ xs=jnp.arange(start=1, stop=model.number_of_links()),
83
+ )
84
+ if model.number_of_links() > 1
85
+ else [(W_X_i,), None]
82
86
  )
83
87
 
84
88
  return jax.vmap(Adjoint.to_transform)(W_X_i)
@@ -67,10 +67,14 @@ def jacobian(
67
67
 
68
68
  return (i_X_0,), None
69
69
 
70
- (i_X_0,), _ = jax.lax.scan(
71
- f=propagate_kinematics,
72
- init=propagate_kinematics_carry,
73
- xs=np.arange(start=1, stop=model.number_of_links()),
70
+ (i_X_0,), _ = (
71
+ jax.lax.scan(
72
+ f=propagate_kinematics,
73
+ init=propagate_kinematics_carry,
74
+ xs=np.arange(start=1, stop=model.number_of_links()),
75
+ )
76
+ if model.number_of_links() > 1
77
+ else [(i_X_0,), None]
74
78
  )
75
79
 
76
80
  # ============================
@@ -105,10 +109,14 @@ def jacobian(
105
109
 
106
110
  return J, None
107
111
 
108
- L_J_WL_B, _ = jax.lax.scan(
109
- f=compute_jacobian,
110
- init=J,
111
- xs=np.arange(start=1, stop=model.number_of_links()),
112
+ L_J_WL_B, _ = (
113
+ jax.lax.scan(
114
+ f=compute_jacobian,
115
+ init=J,
116
+ xs=np.arange(start=1, stop=model.number_of_links()),
117
+ )
118
+ if model.number_of_links() > 1
119
+ else [J, None]
112
120
  )
113
121
 
114
122
  return L_J_WL_B
@@ -184,10 +192,14 @@ def jacobian_full_doubly_left(
184
192
 
185
193
  return (B_X_i, J), None
186
194
 
187
- (B_X_i, J), _ = jax.lax.scan(
188
- f=compute_full_jacobian,
189
- init=compute_full_jacobian_carry,
190
- xs=np.arange(start=1, stop=model.number_of_links()),
195
+ (B_X_i, J), _ = (
196
+ jax.lax.scan(
197
+ f=compute_full_jacobian,
198
+ init=compute_full_jacobian_carry,
199
+ xs=np.arange(start=1, stop=model.number_of_links()),
200
+ )
201
+ if model.number_of_links() > 1
202
+ else [(B_X_i, J), None]
191
203
  )
192
204
 
193
205
  # Convert adjoints to SE(3) transforms.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: jaxsim
3
- Version: 0.4.2.dev45
3
+ Version: 0.4.2.dev50
4
4
  Summary: A differentiable physics engine and multibody dynamics library for control and robot learning.
5
5
  Author-email: Diego Ferigo <dgferigo@gmail.com>
6
6
  Maintainer-email: Diego Ferigo <dgferigo@gmail.com>, Filippo Luca Ferretti <filippo.ferretti@iit.it>
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