jaxsim 0.2.dev366__py3-none-any.whl → 0.2.dev388__py3-none-any.whl
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/_version.py +2 -2
- jaxsim/api/common.py +2 -2
- jaxsim/api/data.py +4 -4
- jaxsim/api/model.py +14 -3
- jaxsim/api/ode.py +0 -1
- jaxsim/integrators/common.py +2 -2
- jaxsim/math/transform.py +0 -1
- jaxsim/mujoco/loaders.py +34 -8
- jaxsim/mujoco/model.py +45 -2
- jaxsim/parsers/kinematic_graph.py +1 -1
- jaxsim/terrain/__init__.py +1 -1
- jaxsim/utils/jaxsim_dataclass.py +0 -1
- {jaxsim-0.2.dev366.dist-info → jaxsim-0.2.dev388.dist-info}/METADATA +1 -1
- {jaxsim-0.2.dev366.dist-info → jaxsim-0.2.dev388.dist-info}/RECORD +17 -17
- {jaxsim-0.2.dev366.dist-info → jaxsim-0.2.dev388.dist-info}/LICENSE +0 -0
- {jaxsim-0.2.dev366.dist-info → jaxsim-0.2.dev388.dist-info}/WHEEL +0 -0
- {jaxsim-0.2.dev366.dist-info → jaxsim-0.2.dev388.dist-info}/top_level.txt +0 -0
jaxsim/_version.py
CHANGED
@@ -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.
|
16
|
-
__version_tuple__ = version_tuple = (0, 2, '
|
15
|
+
__version__ = version = '0.2.dev388'
|
16
|
+
__version_tuple__ = version_tuple = (0, 2, 'dev388')
|
jaxsim/api/common.py
CHANGED
@@ -89,7 +89,7 @@ class ModelDataWithVelocityRepresentation(JaxsimDataclass, abc.ABC):
|
|
89
89
|
transform: jtp.Matrix,
|
90
90
|
is_force: bool = False,
|
91
91
|
) -> jtp.Array:
|
92
|
-
"""
|
92
|
+
r"""
|
93
93
|
Convert a 6D quantity from inertial-fixed to another representation.
|
94
94
|
|
95
95
|
Args:
|
@@ -155,7 +155,7 @@ class ModelDataWithVelocityRepresentation(JaxsimDataclass, abc.ABC):
|
|
155
155
|
transform: jtp.Matrix,
|
156
156
|
is_force: bool = False,
|
157
157
|
) -> jtp.Array:
|
158
|
-
"""
|
158
|
+
r"""
|
159
159
|
Convert a 6D quantity from another representation to inertial-fixed.
|
160
160
|
|
161
161
|
Args:
|
jaxsim/api/data.py
CHANGED
@@ -415,9 +415,9 @@ class JaxSimModelData(common.ModelDataWithVelocityRepresentation):
|
|
415
415
|
|
416
416
|
@jax.jit
|
417
417
|
def generalized_position(self) -> tuple[jtp.Matrix, jtp.Vector]:
|
418
|
-
"""
|
418
|
+
r"""
|
419
419
|
Get the generalized position
|
420
|
-
:math
|
420
|
+
:math:`\\mathbf{q} = ({}^W \\mathbf{H}_B, \\mathbf{s}) \\in \text{SO}(3) \times \\mathbb{R}^n`.
|
421
421
|
|
422
422
|
Returns:
|
423
423
|
A tuple containing the base transform and the joint positions.
|
@@ -427,9 +427,9 @@ class JaxSimModelData(common.ModelDataWithVelocityRepresentation):
|
|
427
427
|
|
428
428
|
@jax.jit
|
429
429
|
def generalized_velocity(self) -> jtp.Vector:
|
430
|
-
"""
|
430
|
+
r"""
|
431
431
|
Get the generalized velocity
|
432
|
-
:math:`\boldsymbol{\nu} = (\boldsymbol{v}_{W,B}
|
432
|
+
:math:`\boldsymbol{\nu} = (\boldsymbol{v}_{W,B};\\, \boldsymbol{\\omega}_{W,B};\\, \\mathbf{s}) \\in \\mathbb{R}^{6+n}`
|
433
433
|
|
434
434
|
Returns:
|
435
435
|
The generalized velocity in the active representation.
|
jaxsim/api/model.py
CHANGED
@@ -52,6 +52,8 @@ class JaxSimModel(JaxsimDataclass):
|
|
52
52
|
def build_from_model_description(
|
53
53
|
model_description: str | pathlib.Path | rod.Model,
|
54
54
|
model_name: str | None = None,
|
55
|
+
*,
|
56
|
+
terrain: jaxsim.terrain.Terrain | None = None,
|
55
57
|
is_urdf: bool | None = None,
|
56
58
|
considered_joints: list[str] | None = None,
|
57
59
|
) -> JaxSimModel:
|
@@ -65,6 +67,8 @@ class JaxSimModel(JaxsimDataclass):
|
|
65
67
|
model_name:
|
66
68
|
The optional name of the model that overrides the one in
|
67
69
|
the description.
|
70
|
+
terrain:
|
71
|
+
The optional terrain to consider.
|
68
72
|
is_urdf:
|
69
73
|
Whether the model description is a URDF or an SDF. This is
|
70
74
|
automatically inferred if the model description is a path to a file.
|
@@ -92,7 +96,9 @@ class JaxSimModel(JaxsimDataclass):
|
|
92
96
|
|
93
97
|
# Build the model
|
94
98
|
model = JaxSimModel.build(
|
95
|
-
model_description=intermediate_description,
|
99
|
+
model_description=intermediate_description,
|
100
|
+
model_name=model_name,
|
101
|
+
terrain=terrain,
|
96
102
|
)
|
97
103
|
|
98
104
|
# Store the origin of the model, in case downstream logic needs it
|
@@ -105,6 +111,8 @@ class JaxSimModel(JaxsimDataclass):
|
|
105
111
|
def build(
|
106
112
|
model_description: jaxsim.parsers.descriptions.ModelDescription,
|
107
113
|
model_name: str | None = None,
|
114
|
+
*,
|
115
|
+
terrain: jaxsim.terrain.Terrain | None = None,
|
108
116
|
) -> JaxSimModel:
|
109
117
|
"""
|
110
118
|
Build a Model object from an intermediate model description.
|
@@ -115,6 +123,8 @@ class JaxSimModel(JaxsimDataclass):
|
|
115
123
|
of the model.
|
116
124
|
model_name:
|
117
125
|
The optional name of the model overriding the physics model name.
|
126
|
+
terrain:
|
127
|
+
The optional terrain to consider.
|
118
128
|
|
119
129
|
Returns:
|
120
130
|
The built Model object.
|
@@ -130,6 +140,7 @@ class JaxSimModel(JaxsimDataclass):
|
|
130
140
|
kin_dyn_parameters=js.kin_dyn_parameters.KynDynParameters.build(
|
131
141
|
model_description=model_description
|
132
142
|
),
|
143
|
+
terrain=terrain or JaxSimModel.__dataclass_fields__["terrain"].default,
|
133
144
|
)
|
134
145
|
|
135
146
|
return model
|
@@ -926,7 +937,7 @@ def inverse_dynamics(
|
|
926
937
|
def free_floating_gravity_forces(
|
927
938
|
model: JaxSimModel, data: js.data.JaxSimModelData
|
928
939
|
) -> jtp.Vector:
|
929
|
-
"""
|
940
|
+
r"""
|
930
941
|
Compute the free-floating gravity forces :math:`g(\mathbf{q})` of the model.
|
931
942
|
|
932
943
|
Args:
|
@@ -976,7 +987,7 @@ def free_floating_bias_forces(
|
|
976
987
|
model: JaxSimModel, data: js.data.JaxSimModelData
|
977
988
|
) -> jtp.Vector:
|
978
989
|
"""
|
979
|
-
Compute the free-floating bias forces :math:`h(
|
990
|
+
Compute the free-floating bias forces :math:`h(\\mathbf{q}, \boldsymbol{\nu})`
|
980
991
|
of the model.
|
981
992
|
|
982
993
|
Args:
|
jaxsim/api/ode.py
CHANGED
jaxsim/integrators/common.py
CHANGED
@@ -324,7 +324,7 @@ class ExplicitRungeKutta(Integrator[PyTreeType, PyTreeType], Generic[PyTreeType]
|
|
324
324
|
def post_process_state(
|
325
325
|
cls, x0: State, t0: Time, xf: NextState, dt: TimeStep
|
326
326
|
) -> NextState:
|
327
|
-
"""
|
327
|
+
r"""
|
328
328
|
Post-process the integrated state at :math:`t_f = t_0 + \Delta t`.
|
329
329
|
|
330
330
|
Args:
|
@@ -529,7 +529,7 @@ class ExplicitRungeKutta(Integrator[PyTreeType, PyTreeType], Generic[PyTreeType]
|
|
529
529
|
# Return the index of the row of A providing the fsal derivative (that is the
|
530
530
|
# possibly intermediate kᵢ derivative).
|
531
531
|
# Note that if multiple rows match (it should not), we return the first match.
|
532
|
-
return True, int(jnp.where(rows_of_A_with_fsal
|
532
|
+
return True, int(jnp.where(rows_of_A_with_fsal)[0].tolist()[0])
|
533
533
|
|
534
534
|
|
535
535
|
class ExplicitRungeKuttaSO3Mixin:
|
jaxsim/math/transform.py
CHANGED
jaxsim/mujoco/loaders.py
CHANGED
@@ -102,7 +102,7 @@ class RodModelToMjcf:
|
|
102
102
|
|
103
103
|
if root.find(f".//joint[@name='{floating_joint_name}']") is not None:
|
104
104
|
msg = f"The URDF already has a floating joint '{floating_joint_name}'"
|
105
|
-
warnings.warn(msg)
|
105
|
+
warnings.warn(msg, stacklevel=2)
|
106
106
|
return ET.tostring(root, pretty_print=True).decode()
|
107
107
|
|
108
108
|
# Create the "world" link if it doesn't exist.
|
@@ -129,6 +129,8 @@ class RodModelToMjcf:
|
|
129
129
|
def convert(
|
130
130
|
rod_model: rod.Model,
|
131
131
|
considered_joints: list[str] | None = None,
|
132
|
+
plane_normal: tuple[float, float, float] = (0, 0, 1),
|
133
|
+
heightmap: bool | None = None,
|
132
134
|
) -> tuple[str, dict[str, Any]]:
|
133
135
|
""""""
|
134
136
|
|
@@ -198,8 +200,6 @@ class RodModelToMjcf:
|
|
198
200
|
)
|
199
201
|
|
200
202
|
urdf_string = ET.tostring(root, pretty_print=True).decode()
|
201
|
-
# print(urdf_string)
|
202
|
-
# raise
|
203
203
|
|
204
204
|
# ------------------------------
|
205
205
|
# Post-process all dummy visuals
|
@@ -358,6 +358,19 @@ class RodModelToMjcf:
|
|
358
358
|
texuniform="true",
|
359
359
|
)
|
360
360
|
|
361
|
+
_ = (
|
362
|
+
ET.SubElement(
|
363
|
+
asset_element,
|
364
|
+
"hfield",
|
365
|
+
name="terrain",
|
366
|
+
nrow="100",
|
367
|
+
ncol="100",
|
368
|
+
size="5 5 1 1",
|
369
|
+
)
|
370
|
+
if heightmap
|
371
|
+
else None
|
372
|
+
)
|
373
|
+
|
361
374
|
# ----------------------------------
|
362
375
|
# Populate the scene with the assets
|
363
376
|
# ----------------------------------
|
@@ -368,12 +381,14 @@ class RodModelToMjcf:
|
|
368
381
|
worldbody_scene_element,
|
369
382
|
"geom",
|
370
383
|
name="floor",
|
371
|
-
type="plane",
|
384
|
+
type="plane" if not heightmap else "hfield",
|
372
385
|
size="0 0 0.05",
|
373
386
|
material="plane_material",
|
374
387
|
condim="3",
|
375
388
|
contype="1",
|
376
389
|
conaffinity="1",
|
390
|
+
zaxis=" ".join(map(str, plane_normal)),
|
391
|
+
**({"hfield": "terrain"} if heightmap else {}),
|
377
392
|
)
|
378
393
|
|
379
394
|
_ = ET.SubElement(
|
@@ -407,13 +422,14 @@ class RodModelToMjcf:
|
|
407
422
|
raise RuntimeError("Failed to find the <worldbody> element of the model")
|
408
423
|
|
409
424
|
# Camera attached to the model
|
425
|
+
# It can be manually copied from `python -m mujoco.viewer --mjcf=<URDF_PATH>`
|
410
426
|
_ = ET.SubElement(
|
411
427
|
worldbody_element,
|
412
428
|
"camera",
|
413
429
|
name="track",
|
414
430
|
mode="trackcom",
|
415
|
-
pos="1 0
|
416
|
-
|
431
|
+
pos="1.930 -2.279 0.556",
|
432
|
+
xyaxes="0.771 0.637 0.000 -0.116 0.140 0.983",
|
417
433
|
fovy="60",
|
418
434
|
)
|
419
435
|
|
@@ -449,6 +465,8 @@ class UrdfToMjcf:
|
|
449
465
|
urdf: str | pathlib.Path,
|
450
466
|
considered_joints: list[str] | None = None,
|
451
467
|
model_name: str | None = None,
|
468
|
+
plane_normal: tuple[float, float, float] = (0, 0, 1),
|
469
|
+
heightmap: bool | None = None,
|
452
470
|
) -> tuple[str, dict[str, Any]]:
|
453
471
|
""""""
|
454
472
|
|
@@ -461,7 +479,10 @@ class UrdfToMjcf:
|
|
461
479
|
|
462
480
|
# Convert the ROD model to MJCF.
|
463
481
|
return RodModelToMjcf.convert(
|
464
|
-
rod_model=rod_model,
|
482
|
+
rod_model=rod_model,
|
483
|
+
considered_joints=considered_joints,
|
484
|
+
plane_normal=plane_normal,
|
485
|
+
heightmap=heightmap,
|
465
486
|
)
|
466
487
|
|
467
488
|
|
@@ -471,6 +492,8 @@ class SdfToMjcf:
|
|
471
492
|
sdf: str | pathlib.Path,
|
472
493
|
considered_joints: list[str] | None = None,
|
473
494
|
model_name: str | None = None,
|
495
|
+
plane_normal: tuple[float, float, float] = (0, 0, 1),
|
496
|
+
heightmap: bool | None = None,
|
474
497
|
) -> tuple[str, dict[str, Any]]:
|
475
498
|
""""""
|
476
499
|
|
@@ -483,5 +506,8 @@ class SdfToMjcf:
|
|
483
506
|
|
484
507
|
# Convert the ROD model to MJCF.
|
485
508
|
return RodModelToMjcf.convert(
|
486
|
-
rod_model=rod_model,
|
509
|
+
rod_model=rod_model,
|
510
|
+
considered_joints=considered_joints,
|
511
|
+
plane_normal=plane_normal,
|
512
|
+
heightmap=heightmap,
|
487
513
|
)
|
jaxsim/mujoco/model.py
CHANGED
@@ -1,12 +1,16 @@
|
|
1
1
|
import functools
|
2
2
|
import pathlib
|
3
|
-
from typing import Any
|
3
|
+
from typing import Any, Callable
|
4
4
|
|
5
5
|
import mujoco as mj
|
6
6
|
import numpy as np
|
7
7
|
import numpy.typing as npt
|
8
8
|
from scipy.spatial.transform import Rotation
|
9
9
|
|
10
|
+
import jaxsim.typing as jtp
|
11
|
+
|
12
|
+
HeightmapCallable = Callable[[jtp.FloatLike, jtp.FloatLike], jtp.FloatLike]
|
13
|
+
|
10
14
|
|
11
15
|
class MujocoModelHelper:
|
12
16
|
"""
|
@@ -27,7 +31,9 @@ class MujocoModelHelper:
|
|
27
31
|
|
28
32
|
@staticmethod
|
29
33
|
def build_from_xml(
|
30
|
-
mjcf_description: str | pathlib.Path,
|
34
|
+
mjcf_description: str | pathlib.Path,
|
35
|
+
assets: dict[str, Any] = None,
|
36
|
+
heightmap: HeightmapCallable | None = None,
|
31
37
|
) -> "MujocoModelHelper":
|
32
38
|
""""""
|
33
39
|
|
@@ -40,6 +46,13 @@ class MujocoModelHelper:
|
|
40
46
|
|
41
47
|
# Create the Mujoco model from the XML and, optionally, the assets dictionary
|
42
48
|
model = mj.MjModel.from_xml_string(xml=mjcf_description, assets=assets) # noqa
|
49
|
+
data = mj.MjData(model)
|
50
|
+
|
51
|
+
if heightmap:
|
52
|
+
nrow = model.hfield_nrow.item()
|
53
|
+
ncol = model.hfield_ncol.item()
|
54
|
+
new_hfield = generate_hfield(heightmap, (nrow, ncol))
|
55
|
+
model.hfield_data = new_hfield
|
43
56
|
|
44
57
|
return MujocoModelHelper(model=model, data=mj.MjData(model))
|
45
58
|
|
@@ -350,3 +363,33 @@ class MujocoModelHelper:
|
|
350
363
|
]
|
351
364
|
).squeeze()
|
352
365
|
)
|
366
|
+
|
367
|
+
|
368
|
+
def generate_hfield(
|
369
|
+
heightmap: HeightmapCallable, size: tuple[int, int] = (10, 10)
|
370
|
+
) -> npt.NDArray:
|
371
|
+
"""
|
372
|
+
Generates a numpy array representing the heightmap of
|
373
|
+
The map will have the following format:
|
374
|
+
```
|
375
|
+
heightmap[0, 0] heightmap[0, 1] ... heightmap[0, size[1]-1]
|
376
|
+
heightmap[1, 0] heightmap[1, 1] ... heightmap[1, size[1]-1]
|
377
|
+
...
|
378
|
+
heightmap[size[0]-1, 0] heightmap[size[0]-1, 1] ... heightmap[size[0]-1, size[1]-1]
|
379
|
+
```
|
380
|
+
|
381
|
+
Args:
|
382
|
+
heightmap: A function that takes two arguments (x, y) and returns the height
|
383
|
+
at that point.
|
384
|
+
size: A tuple of two integers representing the size of the grid.
|
385
|
+
|
386
|
+
Returns:
|
387
|
+
np.ndarray: The terrain heightmap
|
388
|
+
"""
|
389
|
+
|
390
|
+
# Generate the grid.
|
391
|
+
x = np.linspace(0, 1, size[0])
|
392
|
+
y = np.linspace(0, 1, size[1])
|
393
|
+
|
394
|
+
# Generate the heightmap.
|
395
|
+
return np.array([[heightmap(xi, yi) for xi in x] for yi in y]).flatten()
|
@@ -268,7 +268,7 @@ class KinematicGraph:
|
|
268
268
|
|
269
269
|
# Return early if there is no action to take
|
270
270
|
if len(joint_names_to_remove) == 0:
|
271
|
-
logging.info(
|
271
|
+
logging.info("The kinematic graph doesn't need to be reduced")
|
272
272
|
return copy.deepcopy(self)
|
273
273
|
|
274
274
|
# Check if all considered joints are part of the full kinematic graph
|
jaxsim/terrain/__init__.py
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
from . import terrain
|
2
|
-
from .terrain import FlatTerrain, Terrain
|
2
|
+
from .terrain import FlatTerrain, PlaneTerrain, Terrain
|
jaxsim/utils/jaxsim_dataclass.py
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
jaxsim/__init__.py,sha256=OcrfoYS1DGcmAGqu2AqlCTiUVxcpi-IsVwcr_16x74Q,1789
|
2
|
-
jaxsim/_version.py,sha256=
|
2
|
+
jaxsim/_version.py,sha256=ajN4RtI-FZYlNpUqVy327D57EXvmjZkyMCV_lzLqeUo,423
|
3
3
|
jaxsim/logging.py,sha256=c4zhwBKf9eAYAHVp62kTEllqdsZgh0K-kPKVy8L3elU,1584
|
4
4
|
jaxsim/typing.py,sha256=MeuOCQtLAr-sPkvB_sU8FtwGNRirz1auCwIgRC-QZl8,646
|
5
5
|
jaxsim/api/__init__.py,sha256=fNTCPUeDfOAizRd4RsW3Epv0sLTu0KJGoFRSEsi75VM,162
|
6
6
|
jaxsim/api/com.py,sha256=Qtm_6qpiK4WtDVn6JMUHa8DySgBl9CjgKCybJqZ58Lc,7379
|
7
|
-
jaxsim/api/common.py,sha256=
|
7
|
+
jaxsim/api/common.py,sha256=DV-WZG28sikXopNv458aYvpLjmiAtFr5LRscOwXusuk,6640
|
8
8
|
jaxsim/api/contact.py,sha256=Ve4ZOWkLEBRgK3KhtICxKY7YzsxYvc3lO-pPRBjqSnY,8659
|
9
|
-
jaxsim/api/data.py,sha256=
|
9
|
+
jaxsim/api/data.py,sha256=cPFy6TTm0rNpDk1O0ZxOpvBwWVPu6V14XLRMeC7x81Q,26786
|
10
10
|
jaxsim/api/joint.py,sha256=q31Kp3Cqv-yTcxijjzbj_QADFnGQyjb2al9fYZtzedo,4763
|
11
11
|
jaxsim/api/kin_dyn_parameters.py,sha256=G4mtSi8fElYe0yttLgsxSOPf7vcK-yqTu06Aa5SSrYg,26012
|
12
12
|
jaxsim/api/link.py,sha256=LZVcQhQsTKsfR13KewFtEMYu4siVJl7mqoDwYsoFFes,9240
|
13
|
-
jaxsim/api/model.py,sha256=
|
14
|
-
jaxsim/api/ode.py,sha256=
|
13
|
+
jaxsim/api/model.py,sha256=Kpe5PQHP1VCS8Xmu4M_aa6EAJFPkOCO_Y11-TGhEtq8,44091
|
14
|
+
jaxsim/api/ode.py,sha256=6l-6i2YHagsQvR8Ac-_fmO6P0hBVT6NkHhwXnrdITEg,9785
|
15
15
|
jaxsim/api/ode_data.py,sha256=dwRFVPJ30XMmdUbPXEu7YxsQ97jZP4L4fd5ZzhrO5Ys,22184
|
16
16
|
jaxsim/api/references.py,sha256=Lvskf17r619KKxwCJP7hAAty2kaXgDXJX1uKqoDIDgo,15483
|
17
17
|
jaxsim/integrators/__init__.py,sha256=hxvOD-VK_mmd6v31wtC-nb28AYve1gLuZCNLV9wS-Kg,103
|
18
|
-
jaxsim/integrators/common.py,sha256=
|
18
|
+
jaxsim/integrators/common.py,sha256=9HXRVFo95Mpt6RcVhBrOfvOO7mDxqbkXeg_lKUibEFY,20693
|
19
19
|
jaxsim/integrators/fixed_step.py,sha256=JXaEyEzfSiYea0GnPA7l27J3X0YPB0e25D4qfrxAvzQ,2766
|
20
20
|
jaxsim/integrators/variable_step.py,sha256=jq3PStzFiMciU7lux6CTj4B3gVOfSpYgK2oz2yzIbdo,21380
|
21
21
|
jaxsim/math/__init__.py,sha256=inJ9nRFkqstuGa8OyFkfWVudo5U9Ug4WgDBuKva8AIA,337
|
@@ -26,14 +26,14 @@ jaxsim/math/joint_model.py,sha256=LKLB26VMz6vx9JLdFUWhGyrElYFEQV-bJiQO5kaZUGY,10
|
|
26
26
|
jaxsim/math/quaternion.py,sha256=X9b8jHf0QemKUjIZSnXRJc3DdMr42CBhBy_mi9_X_AM,5068
|
27
27
|
jaxsim/math/rotation.py,sha256=Z90daUjGpuNEVLfWB3SVtM9EtwAIaneVj9A9UpWXqhA,2182
|
28
28
|
jaxsim/math/skew.py,sha256=oOGSSR8PUGROl6IJFlrmu6K3gPH-u16hUPfKIkcVv9o,1177
|
29
|
-
jaxsim/math/transform.py,sha256=
|
29
|
+
jaxsim/math/transform.py,sha256=boeuN8df4Yd9NvS64g-xUYoNqG91YafYLam4iITFJVg,2917
|
30
30
|
jaxsim/mujoco/__init__.py,sha256=Zo5GAlN1DYKvX8s1hu1j6HntKIbBMLB9Puv9ouaNAZ8,158
|
31
31
|
jaxsim/mujoco/__main__.py,sha256=GBmB7J-zj75ZnFyuAAmpSOpbxi_HhHhWJeot3ljGDJY,5291
|
32
|
-
jaxsim/mujoco/loaders.py,sha256=
|
33
|
-
jaxsim/mujoco/model.py,sha256=
|
32
|
+
jaxsim/mujoco/loaders.py,sha256=PG6TrmurdF99B_HJW39daNXMYlwGy3JMofb4oTRwPLc,17406
|
33
|
+
jaxsim/mujoco/model.py,sha256=ErL4X4QWPCJJJjCAMHsFsksYTgIpmV_M8xWPZc-gQcA,12117
|
34
34
|
jaxsim/mujoco/visualizer.py,sha256=-qg26t5tleTva6zzQmc5SdnlC8XZ1ZAwZ_lDjdwHJ0A,4400
|
35
35
|
jaxsim/parsers/__init__.py,sha256=sonYi-bBWAoB04kp1mxT4uIORxjb7SdZ0ukGPmVx98Y,44
|
36
|
-
jaxsim/parsers/kinematic_graph.py,sha256=
|
36
|
+
jaxsim/parsers/kinematic_graph.py,sha256=_ZJr-u1m64qPCeY6BHTI56dSOWhOGfbg2HN49XbTXhA,23784
|
37
37
|
jaxsim/parsers/descriptions/__init__.py,sha256=EbTfnrK3oCxA3pNv--YUwllJ6uICENvFgAdRbYtS9ts,238
|
38
38
|
jaxsim/parsers/descriptions/collision.py,sha256=HUWwuRgI9KznY29FFw1_zU3bGigDEezrcPOJSxSJGNU,3382
|
39
39
|
jaxsim/parsers/descriptions/joint.py,sha256=hpH0ANvIhbEQk-NGRmWIvPv3lXW385TBIMWNgz5rzM4,4106
|
@@ -51,14 +51,14 @@ jaxsim/rbda/jacobian.py,sha256=9LGGy9ya5m5U0mBmV1NFH5XYZpEMYbx74qnYBvZs7Ok,6360
|
|
51
51
|
jaxsim/rbda/rnea.py,sha256=DjwkvXQVUSUclM3Uy3UPZ2tao91R5dGd4o7TsS2qObI,7650
|
52
52
|
jaxsim/rbda/soft_contacts.py,sha256=2EZ9Lw4nFWqXTMEeYsirl17H61s82SmTZllKVsP1Yek,10759
|
53
53
|
jaxsim/rbda/utils.py,sha256=zpbFM2Iq8cntku0BFVu9nfEqZhInCWi9D2INT6MFEI8,5003
|
54
|
-
jaxsim/terrain/__init__.py,sha256=
|
54
|
+
jaxsim/terrain/__init__.py,sha256=f7lVX-iNpH_wkkjef9Qpjh19TTAUOQw76EiLYJDVizc,78
|
55
55
|
jaxsim/terrain/terrain.py,sha256=q0xkWqEShVq-p1j2abTLZq8sEhjyJwquxQKm80PaHhM,2161
|
56
56
|
jaxsim/utils/__init__.py,sha256=tnQq1_CavdfeKaLYt3pmO7Jk4MU2RwwQU_qICkjyoTY,197
|
57
57
|
jaxsim/utils/hashless.py,sha256=bFIwKeo9KiWwsY8QM55duEGGQOyyJ4jQyPcuqTLEp5k,297
|
58
|
-
jaxsim/utils/jaxsim_dataclass.py,sha256=
|
58
|
+
jaxsim/utils/jaxsim_dataclass.py,sha256=T8nZolb563mYJD7YvTmYW-z-hpkEiaK3cDbYHqwtqRc,11347
|
59
59
|
jaxsim/utils/tracing.py,sha256=KDMoyVPlu2NJvFkhtZwq5AkqMMgajt3munvJom-vEjQ,650
|
60
|
-
jaxsim-0.2.
|
61
|
-
jaxsim-0.2.
|
62
|
-
jaxsim-0.2.
|
63
|
-
jaxsim-0.2.
|
64
|
-
jaxsim-0.2.
|
60
|
+
jaxsim-0.2.dev388.dist-info/LICENSE,sha256=EsU2z6_sWW4Zduzq3goVWjZoCZVKQsM4H_y0o7oRA7Q,1547
|
61
|
+
jaxsim-0.2.dev388.dist-info/METADATA,sha256=T1FlCTdSjlgSIOFqv9Fik7fMwpwIcX6Ps5N2fCElQ7I,7630
|
62
|
+
jaxsim-0.2.dev388.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
63
|
+
jaxsim-0.2.dev388.dist-info/top_level.txt,sha256=LxGMA8FLtXjQ6oI7N5gd_R_oSUHxpXxUEOfT1xS_ni0,7
|
64
|
+
jaxsim-0.2.dev388.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|