jaxsim 0.6.2.dev107__tar.gz → 0.6.2.dev156__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.
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/.github/workflows/pixi.yml +1 -1
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/PKG-INFO +48 -25
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/README.md +47 -24
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/docs/guide/install.rst +2 -2
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/docs/index.rst +0 -1
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/docs/modules/api.rst +13 -4
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/docs/modules/rbda.rst +10 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/docs/modules/typing.rst +6 -5
- jaxsim-0.6.2.dev156/pixi.lock +3 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/pyproject.toml +1 -1
- jaxsim-0.6.2.dev156/src/jaxsim/_version.py +21 -0
- jaxsim-0.6.2.dev156/src/jaxsim/api/integrators.py +157 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/api/kin_dyn_parameters.py +3 -3
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/api/model.py +40 -32
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/api/ode.py +5 -9
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/mujoco/visualizer.py +23 -5
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/parsers/descriptions/link.py +3 -8
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/parsers/descriptions/model.py +4 -4
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/parsers/kinematic_graph.py +17 -20
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/parsers/rod/parser.py +1 -1
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/parsers/rod/utils.py +9 -2
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/rbda/utils.py +6 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim.egg-info/PKG-INFO +48 -25
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim.egg-info/SOURCES.txt +0 -1
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/tests/conftest.py +19 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/tests/test_automatic_differentiation.py +7 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/tests/test_simulations.py +2 -1
- jaxsim-0.6.2.dev107/docs/modules/integrators.rst +0 -23
- jaxsim-0.6.2.dev107/pixi.lock +0 -3
- jaxsim-0.6.2.dev107/src/jaxsim/_version.py +0 -16
- jaxsim-0.6.2.dev107/src/jaxsim/api/integrators.py +0 -76
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/.devcontainer/Dockerfile +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/.devcontainer/devcontainer.json +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/.gitattributes +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/.github/CODEOWNERS +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/.github/dependabot.yml +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/.github/workflows/ci_cd.yml +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/.github/workflows/read_the_docs.yml +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/.gitignore +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/.pre-commit-config.yaml +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/.readthedocs.yaml +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/CONTRIBUTING.md +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/LICENSE +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/docs/Makefile +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/docs/conf.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/docs/examples.rst +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/docs/guide/configuration.rst +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/docs/make.bat +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/docs/modules/math.rst +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/docs/modules/mujoco.rst +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/docs/modules/parsers.rst +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/docs/modules/utils.rst +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/environment.yml +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/examples/.gitattributes +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/examples/.gitignore +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/examples/README.md +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/examples/assets/build_cartpole_urdf.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/examples/assets/cartpole.urdf +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/examples/jaxsim_as_multibody_dynamics_library.ipynb +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/examples/jaxsim_as_physics_engine.ipynb +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/examples/jaxsim_as_physics_engine_advanced.ipynb +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/examples/jaxsim_for_robot_controllers.ipynb +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/setup.cfg +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/setup.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/__init__.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/api/__init__.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/api/actuation_model.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/api/com.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/api/common.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/api/contact.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/api/contact_model.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/api/data.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/api/frame.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/api/joint.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/api/link.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/api/references.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/exceptions.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/logging.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/math/__init__.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/math/adjoint.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/math/cross.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/math/inertia.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/math/joint_model.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/math/quaternion.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/math/rotation.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/math/skew.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/math/transform.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/math/utils.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/mujoco/__init__.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/mujoco/__main__.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/mujoco/loaders.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/mujoco/model.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/mujoco/utils.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/parsers/__init__.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/parsers/descriptions/__init__.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/parsers/descriptions/collision.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/parsers/descriptions/joint.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/parsers/rod/__init__.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/parsers/rod/meshes.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/rbda/__init__.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/rbda/aba.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/rbda/collidable_points.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/rbda/contacts/__init__.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/rbda/contacts/common.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/rbda/contacts/relaxed_rigid.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/rbda/crba.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/rbda/forward_kinematics.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/rbda/jacobian.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/rbda/rnea.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/terrain/__init__.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/terrain/terrain.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/typing.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/utils/__init__.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/utils/jaxsim_dataclass.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/utils/tracing.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim/utils/wrappers.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim.egg-info/dependency_links.txt +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim.egg-info/requires.txt +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/src/jaxsim.egg-info/top_level.txt +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/tests/__init__.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/tests/test_api_com.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/tests/test_api_contact.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/tests/test_api_data.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/tests/test_api_frame.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/tests/test_api_joint.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/tests/test_api_link.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/tests/test_api_model.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/tests/test_benchmark.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/tests/test_contact.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/tests/test_exceptions.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/tests/test_meshes.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/tests/test_pytree.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/tests/test_visualizer.py +0 -0
- {jaxsim-0.6.2.dev107 → jaxsim-0.6.2.dev156}/tests/utils_idyntree.py +0 -0
@@ -35,7 +35,7 @@ jobs:
|
|
35
35
|
pixi update --json | pixi exec pixi-diff-to-markdown --explicit-column > diff.md
|
36
36
|
|
37
37
|
- name: Test project against updated pixi
|
38
|
-
run: pixi run --environment
|
38
|
+
run: pixi run --environment default test
|
39
39
|
env:
|
40
40
|
PY_COLORS: "1"
|
41
41
|
JAX_PLATFORM_NAME: cpu
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: jaxsim
|
3
|
-
Version: 0.6.2.
|
3
|
+
Version: 0.6.2.dev156
|
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>
|
@@ -98,8 +98,8 @@ Requires-Dist: jaxsim[style,testing,viz]; extra == "all"
|
|
98
98
|
<br/>
|
99
99
|
<table>
|
100
100
|
<tr>
|
101
|
-
<th><img src="https://github.com/user-attachments/assets/f9661fae-9a85-41dd-9a58-218758ec8c9c"
|
102
|
-
<th><img src="https://github.com/user-attachments/assets/62b88b9d-45ea-4d22-99d2-f24fc842dd29"
|
101
|
+
<th><img src="https://github.com/user-attachments/assets/f9661fae-9a85-41dd-9a58-218758ec8c9c"></th>
|
102
|
+
<th><img src="https://github.com/user-attachments/assets/62b88b9d-45ea-4d22-99d2-f24fc842dd29"></th>
|
103
103
|
</tr>
|
104
104
|
</table>
|
105
105
|
<br/>
|
@@ -119,13 +119,16 @@ Requires-Dist: jaxsim[style,testing,viz]; extra == "all"
|
|
119
119
|
|
120
120
|
|
121
121
|
```python
|
122
|
+
import pathlib
|
123
|
+
|
124
|
+
import icub_models
|
122
125
|
import jax.numpy as jnp
|
126
|
+
|
123
127
|
import jaxsim.api as js
|
124
|
-
import icub_models
|
125
|
-
import pathlib
|
126
128
|
|
127
129
|
# Load the iCub model
|
128
130
|
model_path = icub_models.get_model_file("iCubGazeboV2_5")
|
131
|
+
|
129
132
|
joints = ('torso_pitch', 'torso_roll', 'torso_yaw', 'l_shoulder_pitch',
|
130
133
|
'l_shoulder_roll', 'l_shoulder_yaw', 'l_elbow', 'r_shoulder_pitch',
|
131
134
|
'r_shoulder_roll', 'r_shoulder_yaw', 'r_elbow', 'l_hip_pitch',
|
@@ -135,33 +138,45 @@ joints = ('torso_pitch', 'torso_roll', 'torso_yaw', 'l_shoulder_pitch',
|
|
135
138
|
|
136
139
|
# Build and reduce the model
|
137
140
|
model_description = pathlib.Path(model_path)
|
141
|
+
|
138
142
|
full_model = js.model.JaxSimModel.build_from_model_description(
|
139
143
|
model_description=model_description, time_step=0.0001, is_urdf=True
|
140
144
|
)
|
145
|
+
|
141
146
|
model = js.model.reduce(model=full_model, considered_joints=joints)
|
142
147
|
|
148
|
+
# Get the number of degrees of freedom
|
143
149
|
ndof = model.dofs()
|
150
|
+
|
144
151
|
# Initialize data and simulation
|
145
152
|
# Note that the default data representation is mixed velocity representation
|
146
|
-
data = js.data.JaxSimModelData.build(
|
153
|
+
data = js.data.JaxSimModelData.build(
|
154
|
+
model=model, base_position=jnp.array([0.0, 0.0, 1.0])
|
155
|
+
)
|
156
|
+
|
147
157
|
T = jnp.arange(start=0, stop=1.0, step=model.time_step)
|
158
|
+
|
148
159
|
tau = jnp.zeros(ndof)
|
149
160
|
|
150
161
|
# Simulate
|
151
|
-
for
|
152
|
-
data = js.model.step(
|
153
|
-
|
162
|
+
for _ in T:
|
163
|
+
data = js.model.step(
|
164
|
+
model=model, data=data, link_forces=None, joint_force_references=tau
|
165
|
+
)
|
154
166
|
```
|
155
167
|
|
156
168
|
### Using JaxSim as a multibody dynamics library
|
157
169
|
``` python
|
170
|
+
import pathlib
|
171
|
+
|
172
|
+
import icub_models
|
158
173
|
import jax.numpy as jnp
|
174
|
+
|
159
175
|
import jaxsim.api as js
|
160
|
-
import icub_models
|
161
|
-
import pathlib
|
162
176
|
|
163
177
|
# Load the iCub model
|
164
178
|
model_path = icub_models.get_model_file("iCubGazeboV2_5")
|
179
|
+
|
165
180
|
joints = ('torso_pitch', 'torso_roll', 'torso_yaw', 'l_shoulder_pitch',
|
166
181
|
'l_shoulder_roll', 'l_shoulder_yaw', 'l_elbow', 'r_shoulder_pitch',
|
167
182
|
'r_shoulder_roll', 'r_shoulder_yaw', 'r_elbow', 'l_hip_pitch',
|
@@ -171,21 +186,31 @@ joints = ('torso_pitch', 'torso_roll', 'torso_yaw', 'l_shoulder_pitch',
|
|
171
186
|
|
172
187
|
# Build and reduce the model
|
173
188
|
model_description = pathlib.Path(model_path)
|
189
|
+
|
174
190
|
full_model = js.model.JaxSimModel.build_from_model_description(
|
175
191
|
model_description=model_description, time_step=0.0001, is_urdf=True
|
176
192
|
)
|
193
|
+
|
177
194
|
model = js.model.reduce(model=full_model, considered_joints=joints)
|
178
195
|
|
179
196
|
# Initialize model data
|
180
197
|
data = js.data.JaxSimModelData.build(
|
181
198
|
model=model,
|
182
|
-
base_position=jnp.array([0.0, 0.0, 1.0],
|
199
|
+
base_position=jnp.array([0.0, 0.0, 1.0]),
|
183
200
|
)
|
184
201
|
|
185
202
|
# Frame and dynamics computations
|
186
203
|
frame_index = js.frame.name_to_idx(model=model, frame_name="l_foot")
|
187
|
-
|
188
|
-
|
204
|
+
|
205
|
+
# Frame transformation
|
206
|
+
W_H_F = js.frame.transform(
|
207
|
+
model=model, data=data, frame_index=frame_index
|
208
|
+
)
|
209
|
+
|
210
|
+
# Frame Jacobian
|
211
|
+
W_J_F = js.frame.jacobian(
|
212
|
+
model=model, data=data, frame_index=frame_index
|
213
|
+
)
|
189
214
|
|
190
215
|
# Dynamics properties
|
191
216
|
M = js.model.free_floating_mass_matrix(model=model, data=data) # Mass matrix
|
@@ -194,16 +219,15 @@ g = js.model.free_floating_gravity_forces(model=model, data=data) # Gravity for
|
|
194
219
|
C = js.model.free_floating_coriolis_matrix(model=model, data=data) # Coriolis matrix
|
195
220
|
|
196
221
|
# Print dynamics results
|
197
|
-
print(f"
|
198
|
-
|
222
|
+
print(f"{M.shape=} \n{h.shape=} \n{g.shape=} \n{C.shape=}")
|
199
223
|
```
|
224
|
+
|
200
225
|
### Additional features
|
201
226
|
|
202
227
|
- Full support for automatic differentiation of RBDAs (forward and reverse modes) with JAX.
|
203
228
|
- Support for automatically differentiating against kinematics and dynamics parameters.
|
204
229
|
- All fixed-step integrators are forward and reverse differentiable.
|
205
|
-
-
|
206
|
-
- Check the example folder for additional usecase !
|
230
|
+
- Check the example folder for additional use cases!
|
207
231
|
|
208
232
|
[jax]: https://github.com/google/jax/
|
209
233
|
[sdformat]: https://github.com/gazebosim/sdformat
|
@@ -335,23 +359,21 @@ The JaxSim API documentation is available at [jaxsim.readthedocs.io][readthedocs
|
|
335
359
|
|
336
360
|
src/jaxsim
|
337
361
|
|-- api..........................# Package containing the main functional APIs.
|
338
|
-
| |--
|
362
|
+
| |-- actuation_model.py.......# |-- APIs for computing quantities related to the actuation model.
|
339
363
|
| |-- common.py................# |-- Common utilities used in the current package.
|
364
|
+
| |-- com.py...................# |-- APIs for computing quantities related to the center of mass.
|
365
|
+
| |-- contact_model.py.........# |-- APIs for computing quantities related to the contact model.
|
340
366
|
| |-- contact.py...............# |-- APIs for computing quantities related to the collidable points.
|
341
367
|
| |-- data.py..................# |-- Class storing the data of a simulated model.
|
342
368
|
| |-- frame.py.................# |-- APIs for computing quantities related to additional frames.
|
369
|
+
| |-- integrators.py...........# |-- APIs for integrating the system dynamics.
|
343
370
|
| |-- joint.py.................# |-- APIs for computing quantities related to the joints.
|
344
371
|
| |-- kin_dyn_parameters.py....# |-- Class storing kinematic and dynamic parameters of a model.
|
345
372
|
| |-- link.py..................# |-- APIs for computing quantities related to the links.
|
346
373
|
| |-- model.py.................# |-- Class defining a simulated model and APIs for computing related quantities.
|
347
374
|
| |-- ode.py...................# |-- APIs for computing quantities related to the system dynamics.
|
348
|
-
| |-- ode_data.py..............# |-- Set of classes to store the data of the system dynamics.
|
349
375
|
| `-- references.py............# `-- Helper class to create references (link forces and joint torques).
|
350
376
|
|-- exceptions.py................# Module containing functions to raise exceptions from JIT-compiled functions.
|
351
|
-
|-- integrators..................# Package containing the integrators used to simulate the system dynamics.
|
352
|
-
| |-- common.py................# |-- Common utilities used in the current package.
|
353
|
-
| |-- fixed_step.py............# |-- Fixed-step integrators (explicit Runge-Kutta schemes).
|
354
|
-
| `-- variable_step.py.........# `-- Variable-step integrators (embedded Runge-Kutta schemes).
|
355
377
|
|-- logging.py...................# Module containing logging utilities.
|
356
378
|
|-- math.........................# Package containing mathematical utilities.
|
357
379
|
| |-- adjoint.py...............# |-- APIs for creating and manipulating 6D transformations.
|
@@ -361,7 +383,8 @@ src/jaxsim
|
|
361
383
|
| |-- quaternion.py............# |-- APIs for creating and manipulating quaternions.
|
362
384
|
| |-- rotation.py..............# |-- APIs for creating and manipulating rotation matrices.
|
363
385
|
| |-- skew.py..................# |-- APIs for creating and manipulating skew-symmetric matrices.
|
364
|
-
|
|
386
|
+
| |-- transform.py.............# |-- APIs for creating and manipulating homogeneous transformations.
|
387
|
+
| |-- utils.py.................# |-- Common utilities used in the current package.
|
365
388
|
|-- mujoco.......................# Package containing utilities to interact with the Mujoco passive viewer.
|
366
389
|
| |-- loaders.py...............# |-- Utilities for converting JaxSim models to Mujoco models.
|
367
390
|
| |-- model.py.................# |-- Class providing high-level methods to compute quantities using Mujoco.
|
@@ -6,8 +6,8 @@
|
|
6
6
|
<br/>
|
7
7
|
<table>
|
8
8
|
<tr>
|
9
|
-
<th><img src="https://github.com/user-attachments/assets/f9661fae-9a85-41dd-9a58-218758ec8c9c"
|
10
|
-
<th><img src="https://github.com/user-attachments/assets/62b88b9d-45ea-4d22-99d2-f24fc842dd29"
|
9
|
+
<th><img src="https://github.com/user-attachments/assets/f9661fae-9a85-41dd-9a58-218758ec8c9c"></th>
|
10
|
+
<th><img src="https://github.com/user-attachments/assets/62b88b9d-45ea-4d22-99d2-f24fc842dd29"></th>
|
11
11
|
</tr>
|
12
12
|
</table>
|
13
13
|
<br/>
|
@@ -27,13 +27,16 @@
|
|
27
27
|
|
28
28
|
|
29
29
|
```python
|
30
|
+
import pathlib
|
31
|
+
|
32
|
+
import icub_models
|
30
33
|
import jax.numpy as jnp
|
34
|
+
|
31
35
|
import jaxsim.api as js
|
32
|
-
import icub_models
|
33
|
-
import pathlib
|
34
36
|
|
35
37
|
# Load the iCub model
|
36
38
|
model_path = icub_models.get_model_file("iCubGazeboV2_5")
|
39
|
+
|
37
40
|
joints = ('torso_pitch', 'torso_roll', 'torso_yaw', 'l_shoulder_pitch',
|
38
41
|
'l_shoulder_roll', 'l_shoulder_yaw', 'l_elbow', 'r_shoulder_pitch',
|
39
42
|
'r_shoulder_roll', 'r_shoulder_yaw', 'r_elbow', 'l_hip_pitch',
|
@@ -43,33 +46,45 @@ joints = ('torso_pitch', 'torso_roll', 'torso_yaw', 'l_shoulder_pitch',
|
|
43
46
|
|
44
47
|
# Build and reduce the model
|
45
48
|
model_description = pathlib.Path(model_path)
|
49
|
+
|
46
50
|
full_model = js.model.JaxSimModel.build_from_model_description(
|
47
51
|
model_description=model_description, time_step=0.0001, is_urdf=True
|
48
52
|
)
|
53
|
+
|
49
54
|
model = js.model.reduce(model=full_model, considered_joints=joints)
|
50
55
|
|
56
|
+
# Get the number of degrees of freedom
|
51
57
|
ndof = model.dofs()
|
58
|
+
|
52
59
|
# Initialize data and simulation
|
53
60
|
# Note that the default data representation is mixed velocity representation
|
54
|
-
data = js.data.JaxSimModelData.build(
|
61
|
+
data = js.data.JaxSimModelData.build(
|
62
|
+
model=model, base_position=jnp.array([0.0, 0.0, 1.0])
|
63
|
+
)
|
64
|
+
|
55
65
|
T = jnp.arange(start=0, stop=1.0, step=model.time_step)
|
66
|
+
|
56
67
|
tau = jnp.zeros(ndof)
|
57
68
|
|
58
69
|
# Simulate
|
59
|
-
for
|
60
|
-
data = js.model.step(
|
61
|
-
|
70
|
+
for _ in T:
|
71
|
+
data = js.model.step(
|
72
|
+
model=model, data=data, link_forces=None, joint_force_references=tau
|
73
|
+
)
|
62
74
|
```
|
63
75
|
|
64
76
|
### Using JaxSim as a multibody dynamics library
|
65
77
|
``` python
|
78
|
+
import pathlib
|
79
|
+
|
80
|
+
import icub_models
|
66
81
|
import jax.numpy as jnp
|
82
|
+
|
67
83
|
import jaxsim.api as js
|
68
|
-
import icub_models
|
69
|
-
import pathlib
|
70
84
|
|
71
85
|
# Load the iCub model
|
72
86
|
model_path = icub_models.get_model_file("iCubGazeboV2_5")
|
87
|
+
|
73
88
|
joints = ('torso_pitch', 'torso_roll', 'torso_yaw', 'l_shoulder_pitch',
|
74
89
|
'l_shoulder_roll', 'l_shoulder_yaw', 'l_elbow', 'r_shoulder_pitch',
|
75
90
|
'r_shoulder_roll', 'r_shoulder_yaw', 'r_elbow', 'l_hip_pitch',
|
@@ -79,21 +94,31 @@ joints = ('torso_pitch', 'torso_roll', 'torso_yaw', 'l_shoulder_pitch',
|
|
79
94
|
|
80
95
|
# Build and reduce the model
|
81
96
|
model_description = pathlib.Path(model_path)
|
97
|
+
|
82
98
|
full_model = js.model.JaxSimModel.build_from_model_description(
|
83
99
|
model_description=model_description, time_step=0.0001, is_urdf=True
|
84
100
|
)
|
101
|
+
|
85
102
|
model = js.model.reduce(model=full_model, considered_joints=joints)
|
86
103
|
|
87
104
|
# Initialize model data
|
88
105
|
data = js.data.JaxSimModelData.build(
|
89
106
|
model=model,
|
90
|
-
base_position=jnp.array([0.0, 0.0, 1.0],
|
107
|
+
base_position=jnp.array([0.0, 0.0, 1.0]),
|
91
108
|
)
|
92
109
|
|
93
110
|
# Frame and dynamics computations
|
94
111
|
frame_index = js.frame.name_to_idx(model=model, frame_name="l_foot")
|
95
|
-
|
96
|
-
|
112
|
+
|
113
|
+
# Frame transformation
|
114
|
+
W_H_F = js.frame.transform(
|
115
|
+
model=model, data=data, frame_index=frame_index
|
116
|
+
)
|
117
|
+
|
118
|
+
# Frame Jacobian
|
119
|
+
W_J_F = js.frame.jacobian(
|
120
|
+
model=model, data=data, frame_index=frame_index
|
121
|
+
)
|
97
122
|
|
98
123
|
# Dynamics properties
|
99
124
|
M = js.model.free_floating_mass_matrix(model=model, data=data) # Mass matrix
|
@@ -102,16 +127,15 @@ g = js.model.free_floating_gravity_forces(model=model, data=data) # Gravity for
|
|
102
127
|
C = js.model.free_floating_coriolis_matrix(model=model, data=data) # Coriolis matrix
|
103
128
|
|
104
129
|
# Print dynamics results
|
105
|
-
print(f"
|
106
|
-
|
130
|
+
print(f"{M.shape=} \n{h.shape=} \n{g.shape=} \n{C.shape=}")
|
107
131
|
```
|
132
|
+
|
108
133
|
### Additional features
|
109
134
|
|
110
135
|
- Full support for automatic differentiation of RBDAs (forward and reverse modes) with JAX.
|
111
136
|
- Support for automatically differentiating against kinematics and dynamics parameters.
|
112
137
|
- All fixed-step integrators are forward and reverse differentiable.
|
113
|
-
-
|
114
|
-
- Check the example folder for additional usecase !
|
138
|
+
- Check the example folder for additional use cases!
|
115
139
|
|
116
140
|
[jax]: https://github.com/google/jax/
|
117
141
|
[sdformat]: https://github.com/gazebosim/sdformat
|
@@ -243,23 +267,21 @@ The JaxSim API documentation is available at [jaxsim.readthedocs.io][readthedocs
|
|
243
267
|
|
244
268
|
src/jaxsim
|
245
269
|
|-- api..........................# Package containing the main functional APIs.
|
246
|
-
| |--
|
270
|
+
| |-- actuation_model.py.......# |-- APIs for computing quantities related to the actuation model.
|
247
271
|
| |-- common.py................# |-- Common utilities used in the current package.
|
272
|
+
| |-- com.py...................# |-- APIs for computing quantities related to the center of mass.
|
273
|
+
| |-- contact_model.py.........# |-- APIs for computing quantities related to the contact model.
|
248
274
|
| |-- contact.py...............# |-- APIs for computing quantities related to the collidable points.
|
249
275
|
| |-- data.py..................# |-- Class storing the data of a simulated model.
|
250
276
|
| |-- frame.py.................# |-- APIs for computing quantities related to additional frames.
|
277
|
+
| |-- integrators.py...........# |-- APIs for integrating the system dynamics.
|
251
278
|
| |-- joint.py.................# |-- APIs for computing quantities related to the joints.
|
252
279
|
| |-- kin_dyn_parameters.py....# |-- Class storing kinematic and dynamic parameters of a model.
|
253
280
|
| |-- link.py..................# |-- APIs for computing quantities related to the links.
|
254
281
|
| |-- model.py.................# |-- Class defining a simulated model and APIs for computing related quantities.
|
255
282
|
| |-- ode.py...................# |-- APIs for computing quantities related to the system dynamics.
|
256
|
-
| |-- ode_data.py..............# |-- Set of classes to store the data of the system dynamics.
|
257
283
|
| `-- references.py............# `-- Helper class to create references (link forces and joint torques).
|
258
284
|
|-- exceptions.py................# Module containing functions to raise exceptions from JIT-compiled functions.
|
259
|
-
|-- integrators..................# Package containing the integrators used to simulate the system dynamics.
|
260
|
-
| |-- common.py................# |-- Common utilities used in the current package.
|
261
|
-
| |-- fixed_step.py............# |-- Fixed-step integrators (explicit Runge-Kutta schemes).
|
262
|
-
| `-- variable_step.py.........# `-- Variable-step integrators (embedded Runge-Kutta schemes).
|
263
285
|
|-- logging.py...................# Module containing logging utilities.
|
264
286
|
|-- math.........................# Package containing mathematical utilities.
|
265
287
|
| |-- adjoint.py...............# |-- APIs for creating and manipulating 6D transformations.
|
@@ -269,7 +291,8 @@ src/jaxsim
|
|
269
291
|
| |-- quaternion.py............# |-- APIs for creating and manipulating quaternions.
|
270
292
|
| |-- rotation.py..............# |-- APIs for creating and manipulating rotation matrices.
|
271
293
|
| |-- skew.py..................# |-- APIs for creating and manipulating skew-symmetric matrices.
|
272
|
-
|
|
294
|
+
| |-- transform.py.............# |-- APIs for creating and manipulating homogeneous transformations.
|
295
|
+
| |-- utils.py.................# |-- Common utilities used in the current package.
|
273
296
|
|-- mujoco.......................# Package containing utilities to interact with the Mujoco passive viewer.
|
274
297
|
| |-- loaders.py...............# |-- Utilities for converting JaxSim models to Mujoco models.
|
275
298
|
| |-- model.py.................# |-- Class providing high-level methods to compute quantities using Mujoco.
|
@@ -24,13 +24,13 @@ Alternatively, you can use `pypa/pip`_, preferably in a `virtual environment`_:
|
|
24
24
|
pip install jaxsim
|
25
25
|
|
26
26
|
Have a look to `pyproject.toml`_ for a complete list of optional dependencies.
|
27
|
-
You can install all
|
28
|
-
|
27
|
+
You can install all by using ``pip install "jaxsim[all]"``.
|
29
28
|
.. note::
|
30
29
|
|
31
30
|
If you need GPU support, please follow the official `installation instruction`_ of JAX.
|
32
31
|
|
33
32
|
.. _conda: https://anaconda.org/
|
33
|
+
.. _pyproject.toml: https://github.com/ami-iit/jaxsim/blob/main/pyproject.toml
|
34
34
|
.. _pypa/pip: https://github.com/pypa/pip/
|
35
35
|
.. _virtual environment: https://docs.python.org/3.8/tutorial/venv.html
|
36
36
|
.. _installation instruction: https://github.com/google/jax/#installation
|
@@ -10,13 +10,14 @@ Functional API
|
|
10
10
|
data
|
11
11
|
contact
|
12
12
|
kin_dyn_parameters
|
13
|
+
integrators
|
13
14
|
joint
|
14
15
|
link
|
15
16
|
frame
|
16
17
|
com
|
17
|
-
ode_data
|
18
18
|
ode
|
19
19
|
references
|
20
|
+
actuation_model
|
20
21
|
common
|
21
22
|
|
22
23
|
|
@@ -27,6 +28,10 @@ Model
|
|
27
28
|
:members:
|
28
29
|
:no-index:
|
29
30
|
|
31
|
+
.. automodule:: jaxsim.api.actuation_model
|
32
|
+
:members:
|
33
|
+
:no-index:
|
34
|
+
|
30
35
|
Data
|
31
36
|
~~~~
|
32
37
|
|
@@ -57,29 +62,33 @@ Joint
|
|
57
62
|
|
58
63
|
Link
|
59
64
|
~~~~~
|
65
|
+
|
60
66
|
.. automodule:: jaxsim.api.link
|
61
67
|
:members:
|
62
68
|
:no-index:
|
63
69
|
|
64
70
|
Frame
|
65
71
|
~~~~~
|
72
|
+
|
66
73
|
.. automodule:: jaxsim.api.frame
|
67
74
|
:members:
|
68
75
|
:no-index:
|
69
76
|
|
70
77
|
CoM
|
71
78
|
~~~
|
79
|
+
|
72
80
|
.. automodule:: jaxsim.api.com
|
73
81
|
:members:
|
74
82
|
:no-index:
|
75
83
|
|
76
|
-
|
77
|
-
|
84
|
+
Integration
|
85
|
+
~~~~~~~~~~~
|
78
86
|
|
79
|
-
.. automodule:: jaxsim.api.
|
87
|
+
.. automodule:: jaxsim.api.integrators
|
80
88
|
:members:
|
81
89
|
:no-index:
|
82
90
|
|
91
|
+
|
83
92
|
.. automodule:: jaxsim.api.ode
|
84
93
|
:members:
|
85
94
|
:no-index:
|
@@ -11,6 +11,8 @@ This module provides a set of algorithms for rigid body dynamics.
|
|
11
11
|
aba
|
12
12
|
collidable_points
|
13
13
|
contacts.soft
|
14
|
+
contacts.rigid
|
15
|
+
contacts.relaxed_rigid
|
14
16
|
crba
|
15
17
|
forward_kinematics
|
16
18
|
jacobian
|
@@ -30,6 +32,14 @@ Contact Models
|
|
30
32
|
:members:
|
31
33
|
:no-index:
|
32
34
|
|
35
|
+
.. automodule:: jaxsim.rbda.contacts.rigid
|
36
|
+
:members:
|
37
|
+
:no-index:
|
38
|
+
|
39
|
+
.. automodule:: jaxsim.rbda.contacts.relaxed_rigid
|
40
|
+
:members:
|
41
|
+
:no-index:
|
42
|
+
|
33
43
|
Utilities
|
34
44
|
~~~~~~~~~
|
35
45
|
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# file generated by setuptools-scm
|
2
|
+
# don't change, don't track in version control
|
3
|
+
|
4
|
+
__all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
|
5
|
+
|
6
|
+
TYPE_CHECKING = False
|
7
|
+
if TYPE_CHECKING:
|
8
|
+
from typing import Tuple
|
9
|
+
from typing import Union
|
10
|
+
|
11
|
+
VERSION_TUPLE = Tuple[Union[int, str], ...]
|
12
|
+
else:
|
13
|
+
VERSION_TUPLE = object
|
14
|
+
|
15
|
+
version: str
|
16
|
+
__version__: str
|
17
|
+
__version_tuple__: VERSION_TUPLE
|
18
|
+
version_tuple: VERSION_TUPLE
|
19
|
+
|
20
|
+
__version__ = version = '0.6.2.dev156'
|
21
|
+
__version_tuple__ = version_tuple = (0, 6, 2, 'dev156')
|