jaxsim 0.1rc0__py3-none-any.whl → 0.2.0__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.
Files changed (89) hide show
  1. jaxsim/__init__.py +5 -6
  2. jaxsim/_version.py +2 -2
  3. jaxsim/api/__init__.py +3 -0
  4. jaxsim/api/com.py +240 -0
  5. jaxsim/api/common.py +216 -0
  6. jaxsim/api/contact.py +271 -0
  7. jaxsim/api/data.py +821 -0
  8. jaxsim/api/joint.py +189 -0
  9. jaxsim/api/kin_dyn_parameters.py +777 -0
  10. jaxsim/api/link.py +361 -0
  11. jaxsim/api/model.py +1633 -0
  12. jaxsim/api/ode.py +295 -0
  13. jaxsim/api/ode_data.py +694 -0
  14. jaxsim/api/references.py +421 -0
  15. jaxsim/integrators/__init__.py +2 -0
  16. jaxsim/integrators/common.py +594 -0
  17. jaxsim/integrators/fixed_step.py +102 -0
  18. jaxsim/integrators/variable_step.py +610 -0
  19. jaxsim/math/__init__.py +11 -0
  20. jaxsim/math/adjoint.py +24 -2
  21. jaxsim/math/joint_model.py +335 -0
  22. jaxsim/math/quaternion.py +44 -3
  23. jaxsim/math/rotation.py +4 -4
  24. jaxsim/math/transform.py +92 -0
  25. jaxsim/mujoco/__init__.py +3 -0
  26. jaxsim/mujoco/__main__.py +192 -0
  27. jaxsim/mujoco/loaders.py +615 -0
  28. jaxsim/mujoco/model.py +414 -0
  29. jaxsim/mujoco/visualizer.py +176 -0
  30. jaxsim/parsers/descriptions/collision.py +14 -0
  31. jaxsim/parsers/descriptions/link.py +13 -2
  32. jaxsim/parsers/kinematic_graph.py +8 -3
  33. jaxsim/parsers/rod/parser.py +54 -38
  34. jaxsim/parsers/rod/utils.py +7 -8
  35. jaxsim/rbda/__init__.py +7 -0
  36. jaxsim/rbda/aba.py +295 -0
  37. jaxsim/rbda/collidable_points.py +142 -0
  38. jaxsim/{physics/algos → rbda}/crba.py +43 -42
  39. jaxsim/rbda/forward_kinematics.py +113 -0
  40. jaxsim/rbda/jacobian.py +201 -0
  41. jaxsim/rbda/rnea.py +237 -0
  42. jaxsim/rbda/soft_contacts.py +296 -0
  43. jaxsim/rbda/utils.py +152 -0
  44. jaxsim/terrain/__init__.py +2 -0
  45. jaxsim/{physics/algos → terrain}/terrain.py +4 -6
  46. jaxsim/typing.py +30 -30
  47. jaxsim/utils/__init__.py +1 -4
  48. jaxsim/utils/hashless.py +18 -0
  49. jaxsim/utils/jaxsim_dataclass.py +281 -31
  50. {jaxsim-0.1rc0.dist-info → jaxsim-0.2.0.dist-info}/LICENSE +1 -1
  51. jaxsim-0.2.0.dist-info/METADATA +237 -0
  52. jaxsim-0.2.0.dist-info/RECORD +64 -0
  53. {jaxsim-0.1rc0.dist-info → jaxsim-0.2.0.dist-info}/WHEEL +1 -1
  54. jaxsim/high_level/__init__.py +0 -2
  55. jaxsim/high_level/common.py +0 -11
  56. jaxsim/high_level/joint.py +0 -148
  57. jaxsim/high_level/link.py +0 -259
  58. jaxsim/high_level/model.py +0 -1695
  59. jaxsim/math/conv.py +0 -114
  60. jaxsim/math/joint.py +0 -101
  61. jaxsim/math/plucker.py +0 -100
  62. jaxsim/physics/__init__.py +0 -12
  63. jaxsim/physics/algos/__init__.py +0 -0
  64. jaxsim/physics/algos/aba.py +0 -256
  65. jaxsim/physics/algos/aba_motors.py +0 -284
  66. jaxsim/physics/algos/forward_kinematics.py +0 -79
  67. jaxsim/physics/algos/jacobian.py +0 -98
  68. jaxsim/physics/algos/rnea.py +0 -180
  69. jaxsim/physics/algos/rnea_motors.py +0 -196
  70. jaxsim/physics/algos/soft_contacts.py +0 -454
  71. jaxsim/physics/algos/utils.py +0 -69
  72. jaxsim/physics/model/__init__.py +0 -0
  73. jaxsim/physics/model/ground_contact.py +0 -55
  74. jaxsim/physics/model/physics_model.py +0 -358
  75. jaxsim/physics/model/physics_model_state.py +0 -174
  76. jaxsim/simulation/__init__.py +0 -4
  77. jaxsim/simulation/integrators.py +0 -452
  78. jaxsim/simulation/ode.py +0 -290
  79. jaxsim/simulation/ode_data.py +0 -53
  80. jaxsim/simulation/ode_integration.py +0 -125
  81. jaxsim/simulation/simulator.py +0 -544
  82. jaxsim/simulation/simulator_callbacks.py +0 -53
  83. jaxsim/simulation/utils.py +0 -15
  84. jaxsim/sixd/__init__.py +0 -2
  85. jaxsim/utils/oop.py +0 -532
  86. jaxsim/utils/vmappable.py +0 -117
  87. jaxsim-0.1rc0.dist-info/METADATA +0 -167
  88. jaxsim-0.1rc0.dist-info/RECORD +0 -64
  89. {jaxsim-0.1rc0.dist-info → jaxsim-0.2.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,192 @@
1
+ import argparse
2
+ import pathlib
3
+ import sys
4
+ import time
5
+
6
+ import numpy as np
7
+
8
+ from . import MujocoModelHelper, MujocoVisualizer, SdfToMjcf, UrdfToMjcf
9
+
10
+ if __name__ == "__main__":
11
+
12
+ parser = argparse.ArgumentParser(
13
+ prog="jaxsim.mujoco",
14
+ description="Process URDF and SDF files for Mujoco usage.",
15
+ )
16
+
17
+ parser.add_argument(
18
+ "-d",
19
+ "--description",
20
+ required=True,
21
+ metavar="INPUT_FILE",
22
+ type=pathlib.Path,
23
+ help="Path to the URDF or SDF file.",
24
+ )
25
+
26
+ parser.add_argument(
27
+ "-m",
28
+ "--model-name",
29
+ metavar="NAME",
30
+ type=str,
31
+ default=None,
32
+ help="The target model of a SDF description if multiple models exists.",
33
+ )
34
+
35
+ parser.add_argument(
36
+ "-e",
37
+ "--export",
38
+ metavar="MJCF_FILE",
39
+ type=pathlib.Path,
40
+ default=None,
41
+ help="Path to the exported MJCF file.",
42
+ )
43
+
44
+ parser.add_argument(
45
+ "-f",
46
+ "--force",
47
+ action="store_true",
48
+ default=False,
49
+ help="Override the output MJCF file if it already exists (default: %(default)s).",
50
+ )
51
+
52
+ parser.add_argument(
53
+ "-p",
54
+ "--print",
55
+ action="store_true",
56
+ default=False,
57
+ help="Print in the stdout the exported MJCF string (default: %(default)s).",
58
+ )
59
+
60
+ parser.add_argument(
61
+ "-v",
62
+ "--visualize",
63
+ action="store_true",
64
+ default=False,
65
+ help="Visualize the description in the Mujoco viewer (default: %(default)s).",
66
+ )
67
+
68
+ parser.add_argument(
69
+ "-b",
70
+ "--base-position",
71
+ metavar=("x", "y", "z"),
72
+ nargs=3,
73
+ type=float,
74
+ default=None,
75
+ help="Override the base position (supports only floating-base models).",
76
+ )
77
+
78
+ parser.add_argument(
79
+ "-q",
80
+ "--base-quaternion",
81
+ metavar=("w", "x", "y", "z"),
82
+ nargs=4,
83
+ type=float,
84
+ default=None,
85
+ help="Override the base quaternion (supports only floating-base models).",
86
+ )
87
+
88
+ args = parser.parse_args()
89
+
90
+ # ==================
91
+ # Validate arguments
92
+ # ==================
93
+
94
+ # Expand the path of the URDF/SDF file if not absolute.
95
+ if args.description is not None:
96
+ args.description = (
97
+ (
98
+ args.description
99
+ if args.description.is_absolute()
100
+ else pathlib.Path.cwd() / args.description
101
+ )
102
+ .expanduser()
103
+ .absolute()
104
+ )
105
+
106
+ if not pathlib.Path(args.description).is_file():
107
+ msg = f"The URDF/SDF file '{args.description}' does not exist."
108
+ parser.error(msg)
109
+ sys.exit(1)
110
+
111
+ # Expand the path of the output MJCF file if not absolute.
112
+ if args.export is not None:
113
+ args.export = (
114
+ (
115
+ args.export
116
+ if args.export.is_absolute()
117
+ else pathlib.Path.cwd() / args.export
118
+ )
119
+ .expanduser()
120
+ .absolute()
121
+ )
122
+
123
+ if pathlib.Path(args.export).is_file() and not args.force:
124
+ msg = "The output file '{}' already exists, use '--force' to override."
125
+ parser.error(msg.format(args.export))
126
+ sys.exit(1)
127
+
128
+ # ================================================
129
+ # Load the URDF/SDF file and produce a MJCF string
130
+ # ================================================
131
+
132
+ match args.description.suffix.lower()[1:]:
133
+
134
+ case "urdf":
135
+ mjcf_string, assets = UrdfToMjcf().convert(urdf=args.description)
136
+
137
+ case "sdf":
138
+ mjcf_string, assets = SdfToMjcf().convert(
139
+ sdf=args.description, model_name=args.model_name
140
+ )
141
+
142
+ case _:
143
+ msg = f"The file extension '{args.description.suffix}' is not supported."
144
+ parser.error(msg)
145
+ sys.exit(1)
146
+
147
+ if args.print:
148
+ print(mjcf_string, flush=True)
149
+
150
+ # ========================================
151
+ # Write the MJCF string to the output file
152
+ # ========================================
153
+
154
+ if args.export is not None:
155
+ with open(args.export, "w+", encoding="utf-8") as file:
156
+ file.write(mjcf_string)
157
+
158
+ # =======================================
159
+ # Visualize the MJCF in the Mujoco viewer
160
+ # =======================================
161
+
162
+ if args.visualize:
163
+
164
+ mj_model_helper = MujocoModelHelper.build_from_xml(
165
+ mjcf_description=mjcf_string, assets=assets
166
+ )
167
+
168
+ viz = MujocoVisualizer(model=mj_model_helper.model, data=mj_model_helper.data)
169
+
170
+ with viz.open() as viewer:
171
+
172
+ with viewer.lock():
173
+ if args.base_position is not None:
174
+ mj_model_helper.set_base_position(
175
+ position=np.array(args.base_position)
176
+ )
177
+
178
+ if args.base_quaternion is not None:
179
+ mj_model_helper.set_base_orientation(
180
+ orientation=np.array(args.base_quaternion)
181
+ )
182
+
183
+ viz.sync(viewer=viewer)
184
+
185
+ while viewer.is_running():
186
+ time.sleep(0.500)
187
+
188
+ # =============================
189
+ # Exit the program with success
190
+ # =============================
191
+
192
+ sys.exit(0)