jaxsim 0.4.1.dev11__tar.gz → 0.4.1.dev15__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.1.dev11 → jaxsim-0.4.1.dev15}/PKG-INFO +1 -1
  2. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/_version.py +2 -2
  3. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/integrators/common.py +24 -33
  4. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/rbda/utils.py +8 -0
  5. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim.egg-info/PKG-INFO +1 -1
  6. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/tests/test_automatic_differentiation.py +3 -3
  7. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/.devcontainer/Dockerfile +0 -0
  8. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/.devcontainer/devcontainer.json +0 -0
  9. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/.gitattributes +0 -0
  10. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/.github/CODEOWNERS +0 -0
  11. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/.github/workflows/ci_cd.yml +0 -0
  12. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/.github/workflows/read_the_docs.yml +0 -0
  13. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/.gitignore +0 -0
  14. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/.pre-commit-config.yaml +0 -0
  15. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/.readthedocs.yaml +0 -0
  16. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/CONTRIBUTING.md +0 -0
  17. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/LICENSE +0 -0
  18. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/README.md +0 -0
  19. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/docs/Makefile +0 -0
  20. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/docs/conf.py +0 -0
  21. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/docs/examples.rst +0 -0
  22. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/docs/guide/install.rst +0 -0
  23. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/docs/index.rst +0 -0
  24. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/docs/make.bat +0 -0
  25. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/docs/modules/api.rst +0 -0
  26. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/docs/modules/integrators.rst +0 -0
  27. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/docs/modules/math.rst +0 -0
  28. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/docs/modules/mujoco.rst +0 -0
  29. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/docs/modules/parsers.rst +0 -0
  30. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/docs/modules/rbda.rst +0 -0
  31. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/docs/modules/typing.rst +0 -0
  32. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/docs/modules/utils.rst +0 -0
  33. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/environment.yml +0 -0
  34. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/examples/.gitattributes +0 -0
  35. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/examples/.gitignore +0 -0
  36. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/examples/PD_controller.ipynb +0 -0
  37. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/examples/Parallel_computing.ipynb +0 -0
  38. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/examples/README.md +0 -0
  39. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/examples/assets/cartpole.urdf +0 -0
  40. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/pixi.lock +0 -0
  41. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/pyproject.toml +0 -0
  42. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/setup.cfg +0 -0
  43. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/setup.py +0 -0
  44. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/__init__.py +0 -0
  45. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/api/__init__.py +0 -0
  46. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/api/com.py +0 -0
  47. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/api/common.py +0 -0
  48. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/api/contact.py +0 -0
  49. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/api/data.py +0 -0
  50. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/api/frame.py +0 -0
  51. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/api/joint.py +0 -0
  52. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/api/kin_dyn_parameters.py +0 -0
  53. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/api/link.py +0 -0
  54. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/api/model.py +0 -0
  55. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/api/ode.py +0 -0
  56. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/api/ode_data.py +0 -0
  57. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/api/references.py +0 -0
  58. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/exceptions.py +0 -0
  59. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/integrators/__init__.py +0 -0
  60. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/integrators/fixed_step.py +0 -0
  61. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/integrators/variable_step.py +0 -0
  62. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/logging.py +0 -0
  63. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/math/__init__.py +0 -0
  64. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/math/adjoint.py +0 -0
  65. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/math/cross.py +0 -0
  66. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/math/inertia.py +0 -0
  67. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/math/joint_model.py +0 -0
  68. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/math/quaternion.py +0 -0
  69. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/math/rotation.py +0 -0
  70. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/math/skew.py +0 -0
  71. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/math/transform.py +0 -0
  72. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/mujoco/__init__.py +0 -0
  73. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/mujoco/__main__.py +0 -0
  74. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/mujoco/loaders.py +0 -0
  75. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/mujoco/model.py +0 -0
  76. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/mujoco/visualizer.py +0 -0
  77. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/parsers/__init__.py +0 -0
  78. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/parsers/descriptions/__init__.py +0 -0
  79. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/parsers/descriptions/collision.py +0 -0
  80. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/parsers/descriptions/joint.py +0 -0
  81. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/parsers/descriptions/link.py +0 -0
  82. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/parsers/descriptions/model.py +0 -0
  83. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/parsers/kinematic_graph.py +0 -0
  84. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/parsers/rod/__init__.py +0 -0
  85. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/parsers/rod/parser.py +0 -0
  86. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/parsers/rod/utils.py +0 -0
  87. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/rbda/__init__.py +0 -0
  88. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/rbda/aba.py +0 -0
  89. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/rbda/collidable_points.py +0 -0
  90. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/rbda/contacts/__init__.py +0 -0
  91. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/rbda/contacts/common.py +0 -0
  92. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/rbda/contacts/soft.py +0 -0
  93. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/rbda/crba.py +0 -0
  94. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/rbda/forward_kinematics.py +0 -0
  95. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/rbda/jacobian.py +0 -0
  96. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/rbda/rnea.py +0 -0
  97. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/terrain/__init__.py +0 -0
  98. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/terrain/terrain.py +0 -0
  99. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/typing.py +0 -0
  100. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/utils/__init__.py +0 -0
  101. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/utils/jaxsim_dataclass.py +0 -0
  102. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/utils/tracing.py +0 -0
  103. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim/utils/wrappers.py +0 -0
  104. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim.egg-info/SOURCES.txt +0 -0
  105. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim.egg-info/dependency_links.txt +0 -0
  106. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim.egg-info/requires.txt +0 -0
  107. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/src/jaxsim.egg-info/top_level.txt +0 -0
  108. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/tests/__init__.py +0 -0
  109. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/tests/conftest.py +0 -0
  110. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/tests/test_api_com.py +0 -0
  111. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/tests/test_api_contact.py +0 -0
  112. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/tests/test_api_data.py +0 -0
  113. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/tests/test_api_frame.py +0 -0
  114. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/tests/test_api_joint.py +0 -0
  115. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/tests/test_api_link.py +0 -0
  116. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/tests/test_api_model.py +0 -0
  117. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/tests/test_contact.py +0 -0
  118. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/tests/test_exceptions.py +0 -0
  119. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/tests/test_pytree.py +0 -0
  120. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/tests/test_simulations.py +0 -0
  121. {jaxsim-0.4.1.dev11 → jaxsim-0.4.1.dev15}/tests/utils_idyntree.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: jaxsim
3
- Version: 0.4.1.dev11
3
+ Version: 0.4.1.dev15
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.1.dev11'
16
- __version_tuple__ = version_tuple = (0, 4, 1, 'dev11')
15
+ __version__ = version = '0.4.1.dev15'
16
+ __version_tuple__ = version_tuple = (0, 4, 1, 'dev15')
@@ -5,11 +5,12 @@ from typing import Any, ClassVar, Generic, Protocol, Type, TypeVar
5
5
  import jax
6
6
  import jax.numpy as jnp
7
7
  import jax_dataclasses
8
- import jaxlie
9
8
  from jax_dataclasses import Static
10
9
 
11
10
  import jaxsim.api as js
11
+ import jaxsim.math
12
12
  import jaxsim.typing as jtp
13
+ from jaxsim import exceptions
13
14
  from jaxsim.utils.jaxsim_dataclass import JaxsimDataclass, Mutability
14
15
 
15
16
  try:
@@ -539,48 +540,38 @@ class ExplicitRungeKuttaSO3Mixin:
539
540
  `PyTreeType = ODEState` to integrate the quaternion on SO(3).
540
541
  """
541
542
 
542
- @classmethod
543
- def integrate_rk_stage(
544
- cls, x0: js.ode_data.ODEState, t0: Time, dt: TimeStep, k: js.ode_data.ODEState
545
- ) -> js.ode_data.ODEState:
546
-
547
- op = lambda x0_leaf, k_leaf: x0_leaf + dt * k_leaf
548
- xf: js.ode_data.ODEState = jax.tree_util.tree_map(op, x0, k)
549
-
550
- W_Q_B_tf = xf.physics_model.base_quaternion
551
-
552
- return xf.replace(
553
- physics_model=xf.physics_model.replace(
554
- base_quaternion=W_Q_B_tf / jnp.linalg.norm(W_Q_B_tf)
555
- )
556
- )
557
-
558
543
  @classmethod
559
544
  def post_process_state(
560
545
  cls, x0: js.ode_data.ODEState, t0: Time, xf: js.ode_data.ODEState, dt: TimeStep
561
546
  ) -> js.ode_data.ODEState:
562
547
 
563
- # Indices to convert quaternions between serializations.
564
- to_xyzw = jnp.array([1, 2, 3, 0])
548
+ # Extract the initial base quaternion.
549
+ W_Q_B_t0 = x0.physics_model.base_quaternion
565
550
 
566
- # Get the initial rotation.
567
- W_R_B_t0 = jaxlie.SO3.from_quaternion_xyzw(
568
- xyzw=x0.physics_model.base_quaternion[to_xyzw]
551
+ # We assume that the initial quaternion is already unary.
552
+ exceptions.raise_runtime_error_if(
553
+ condition=jnp.logical_not(jnp.allclose(W_Q_B_t0.dot(W_Q_B_t0), 1.0)),
554
+ msg="The SO(3) integrator received a quaternion at t0 that is not unary.",
569
555
  )
570
556
 
571
- # Get the final angular velocity.
572
- # This is already computed by averaging the kᵢ in RK-based schemes.
573
- # Therefore, by using the ω at tf, we obtain a RK scheme operating
574
- # on the SO(3) manifold.
575
- W_ω_WB_tf = xf.physics_model.base_angular_velocity
576
-
577
- # Integrate the orientation on SO(3).
578
- # Note that we left-multiply with the exponential map since the angular
579
- # velocity is expressed in the inertial frame.
580
- W_R_B_tf = jaxlie.SO3.exp(tangent=dt * W_ω_WB_tf) @ W_R_B_t0
557
+ # Get the angular velocity ω to integrate the quaternion.
558
+ # This velocity ω[t0] is computed in the previous timestep by averaging the kᵢ
559
+ # corresponding to the active RK-based scheme. Therefore, by using the ω[t0],
560
+ # we obtain an explicit RK scheme operating on the SO(3) manifold.
561
+ # Note that the current integrator is not a semi-implicit scheme, therefore
562
+ # using the final ω[tf] would be not correct.
563
+ W_ω_WB_t0 = x0.physics_model.base_angular_velocity
564
+
565
+ # Integrate the quaternion on SO(3).
566
+ W_Q_B_tf = jaxsim.math.Quaternion.integration(
567
+ quaternion=W_Q_B_t0,
568
+ dt=dt,
569
+ omega=W_ω_WB_t0,
570
+ omega_in_body_fixed=False,
571
+ )
581
572
 
582
573
  # Replace the quaternion in the final state.
583
574
  return xf.replace(
584
- physics_model=xf.physics_model.replace(base_quaternion=W_R_B_tf.wxyz),
575
+ physics_model=xf.physics_model.replace(base_quaternion=W_Q_B_tf),
585
576
  validate=True,
586
577
  )
@@ -2,6 +2,7 @@ import jax.numpy as jnp
2
2
 
3
3
  import jaxsim.api as js
4
4
  import jaxsim.typing as jtp
5
+ from jaxsim import exceptions
5
6
  from jaxsim.math import StandardGravity
6
7
 
7
8
 
@@ -131,6 +132,13 @@ def process_inputs(
131
132
  if W_Q_B.shape != (4,):
132
133
  raise ValueError(W_Q_B.shape, (4,))
133
134
 
135
+ # Check that the quaternion is unary since our RBDAs make this assumption in order
136
+ # to prevent introducing additional normalizations that would affect AD.
137
+ exceptions.raise_value_error_if(
138
+ condition=jnp.logical_not(jnp.allclose(W_Q_B.dot(W_Q_B), 1.0)),
139
+ msg="A RBDA received a quaternion that is not normalized.",
140
+ )
141
+
134
142
  # Pack the 6D base velocity and acceleration.
135
143
  W_v_WB = jnp.hstack([W_vl_WB, W_ω_WB])
136
144
  W_v̇_WB = jnp.hstack([W_v̇l_WB, W_ω̇_WB])
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: jaxsim
3
- Version: 0.4.1.dev11
3
+ Version: 0.4.1.dev15
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>
@@ -93,7 +93,7 @@ def test_ad_aba(
93
93
  aba = lambda W_p_B, W_Q_B, s, W_v_WB, ṡ, τ, W_f_L, g: jaxsim.rbda.aba(
94
94
  model=model,
95
95
  base_position=W_p_B,
96
- base_quaternion=W_Q_B,
96
+ base_quaternion=W_Q_B / jnp.linalg.norm(W_Q_B),
97
97
  joint_positions=s,
98
98
  base_linear_velocity=W_v_WB[0:3],
99
99
  base_angular_velocity=W_v_WB[3:6],
@@ -150,7 +150,7 @@ def test_ad_rnea(
150
150
  rnea = lambda W_p_B, W_Q_B, s, W_v_WB, ṡ, W_v̇_WB, s̈, W_f_L, g: jaxsim.rbda.rnea(
151
151
  model=model,
152
152
  base_position=W_p_B,
153
- base_quaternion=W_Q_B,
153
+ base_quaternion=W_Q_B / jnp.linalg.norm(W_Q_B),
154
154
  joint_positions=s,
155
155
  base_linear_velocity=W_v_WB[0:3],
156
156
  base_angular_velocity=W_v_WB[3:6],
@@ -229,7 +229,7 @@ def test_ad_fk(
229
229
  fk = lambda W_p_B, W_Q_B, s: jaxsim.rbda.forward_kinematics_model(
230
230
  model=model,
231
231
  base_position=W_p_B,
232
- base_quaternion=W_Q_B,
232
+ base_quaternion=W_Q_B / jnp.linalg.norm(W_Q_B),
233
233
  joint_positions=s,
234
234
  )
235
235
 
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