jaxsim 0.4.3.dev200__tar.gz → 0.4.3.dev220__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 (132) hide show
  1. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/PKG-INFO +1 -1
  2. jaxsim-0.4.3.dev220/docs/examples.rst +60 -0
  3. jaxsim-0.4.3.dev220/examples/README.md +43 -0
  4. jaxsim-0.4.3.dev220/examples/assets/build_cartpole_urdf.py +202 -0
  5. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/examples/assets/cartpole.urdf +21 -24
  6. jaxsim-0.4.3.dev220/examples/jaxsim_as_multibody_dynamics_library.ipynb +887 -0
  7. jaxsim-0.4.3.dev220/examples/jaxsim_as_physics_engine.ipynb +480 -0
  8. jaxsim-0.4.3.dev220/examples/jaxsim_for_robot_controllers.ipynb +482 -0
  9. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/_version.py +2 -2
  10. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim.egg-info/PKG-INFO +1 -1
  11. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim.egg-info/SOURCES.txt +4 -2
  12. jaxsim-0.4.3.dev200/docs/examples.rst +0 -46
  13. jaxsim-0.4.3.dev200/examples/PD_controller.ipynb +0 -328
  14. jaxsim-0.4.3.dev200/examples/Parallel_computing.ipynb +0 -317
  15. jaxsim-0.4.3.dev200/examples/README.md +0 -40
  16. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/.devcontainer/Dockerfile +0 -0
  17. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/.devcontainer/devcontainer.json +0 -0
  18. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/.gitattributes +0 -0
  19. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/.github/CODEOWNERS +0 -0
  20. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/.github/workflows/ci_cd.yml +0 -0
  21. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/.github/workflows/read_the_docs.yml +0 -0
  22. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/.github/workflows/update_pixi_lockfile.yml +0 -0
  23. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/.gitignore +0 -0
  24. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/.pre-commit-config.yaml +0 -0
  25. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/.readthedocs.yaml +0 -0
  26. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/CONTRIBUTING.md +0 -0
  27. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/LICENSE +0 -0
  28. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/README.md +0 -0
  29. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/docs/Makefile +0 -0
  30. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/docs/conf.py +0 -0
  31. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/docs/guide/install.rst +0 -0
  32. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/docs/index.rst +0 -0
  33. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/docs/make.bat +0 -0
  34. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/docs/modules/api.rst +0 -0
  35. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/docs/modules/integrators.rst +0 -0
  36. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/docs/modules/math.rst +0 -0
  37. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/docs/modules/mujoco.rst +0 -0
  38. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/docs/modules/parsers.rst +0 -0
  39. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/docs/modules/rbda.rst +0 -0
  40. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/docs/modules/typing.rst +0 -0
  41. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/docs/modules/utils.rst +0 -0
  42. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/environment.yml +0 -0
  43. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/examples/.gitattributes +0 -0
  44. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/examples/.gitignore +0 -0
  45. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/pixi.lock +0 -0
  46. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/pyproject.toml +0 -0
  47. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/setup.cfg +0 -0
  48. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/setup.py +0 -0
  49. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/__init__.py +0 -0
  50. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/api/__init__.py +0 -0
  51. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/api/com.py +0 -0
  52. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/api/common.py +0 -0
  53. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/api/contact.py +0 -0
  54. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/api/data.py +0 -0
  55. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/api/frame.py +0 -0
  56. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/api/joint.py +0 -0
  57. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/api/kin_dyn_parameters.py +0 -0
  58. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/api/link.py +0 -0
  59. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/api/model.py +0 -0
  60. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/api/ode.py +0 -0
  61. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/api/ode_data.py +0 -0
  62. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/api/references.py +0 -0
  63. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/exceptions.py +0 -0
  64. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/integrators/__init__.py +0 -0
  65. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/integrators/common.py +0 -0
  66. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/integrators/fixed_step.py +0 -0
  67. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/integrators/variable_step.py +0 -0
  68. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/logging.py +0 -0
  69. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/math/__init__.py +0 -0
  70. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/math/adjoint.py +0 -0
  71. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/math/cross.py +0 -0
  72. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/math/inertia.py +0 -0
  73. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/math/joint_model.py +0 -0
  74. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/math/quaternion.py +0 -0
  75. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/math/rotation.py +0 -0
  76. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/math/skew.py +0 -0
  77. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/math/transform.py +0 -0
  78. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/mujoco/__init__.py +0 -0
  79. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/mujoco/__main__.py +0 -0
  80. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/mujoco/loaders.py +0 -0
  81. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/mujoco/model.py +0 -0
  82. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/mujoco/utils.py +0 -0
  83. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/mujoco/visualizer.py +0 -0
  84. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/parsers/__init__.py +0 -0
  85. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/parsers/descriptions/__init__.py +0 -0
  86. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/parsers/descriptions/collision.py +0 -0
  87. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/parsers/descriptions/joint.py +0 -0
  88. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/parsers/descriptions/link.py +0 -0
  89. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/parsers/descriptions/model.py +0 -0
  90. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/parsers/kinematic_graph.py +0 -0
  91. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/parsers/rod/__init__.py +0 -0
  92. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/parsers/rod/parser.py +0 -0
  93. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/parsers/rod/utils.py +0 -0
  94. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/rbda/__init__.py +0 -0
  95. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/rbda/aba.py +0 -0
  96. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/rbda/collidable_points.py +0 -0
  97. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/rbda/contacts/__init__.py +0 -0
  98. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/rbda/contacts/common.py +0 -0
  99. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/rbda/contacts/relaxed_rigid.py +0 -0
  100. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/rbda/contacts/rigid.py +0 -0
  101. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/rbda/contacts/soft.py +0 -0
  102. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/rbda/contacts/visco_elastic.py +0 -0
  103. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/rbda/crba.py +0 -0
  104. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/rbda/forward_kinematics.py +0 -0
  105. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/rbda/jacobian.py +0 -0
  106. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/rbda/rnea.py +0 -0
  107. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/rbda/utils.py +0 -0
  108. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/terrain/__init__.py +0 -0
  109. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/terrain/terrain.py +0 -0
  110. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/typing.py +0 -0
  111. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/utils/__init__.py +0 -0
  112. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/utils/jaxsim_dataclass.py +0 -0
  113. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/utils/tracing.py +0 -0
  114. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim/utils/wrappers.py +0 -0
  115. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim.egg-info/dependency_links.txt +0 -0
  116. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim.egg-info/requires.txt +0 -0
  117. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/src/jaxsim.egg-info/top_level.txt +0 -0
  118. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/tests/__init__.py +0 -0
  119. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/tests/conftest.py +0 -0
  120. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/tests/test_api_com.py +0 -0
  121. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/tests/test_api_contact.py +0 -0
  122. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/tests/test_api_data.py +0 -0
  123. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/tests/test_api_frame.py +0 -0
  124. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/tests/test_api_joint.py +0 -0
  125. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/tests/test_api_link.py +0 -0
  126. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/tests/test_api_model.py +0 -0
  127. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/tests/test_automatic_differentiation.py +0 -0
  128. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/tests/test_contact.py +0 -0
  129. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/tests/test_exceptions.py +0 -0
  130. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/tests/test_pytree.py +0 -0
  131. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/tests/test_simulations.py +0 -0
  132. {jaxsim-0.4.3.dev200 → jaxsim-0.4.3.dev220}/tests/utils_idyntree.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: jaxsim
3
- Version: 0.4.3.dev200
3
+ Version: 0.4.3.dev220
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>
@@ -0,0 +1,60 @@
1
+ .. _collections:
2
+
3
+ Example Notebooks
4
+ =================
5
+
6
+ .. toctree::
7
+ :glob:
8
+ :hidden:
9
+ :maxdepth: 1
10
+
11
+ _collections/examples/README.md
12
+
13
+ .. raw:: html
14
+
15
+ <div class="sphx-glr-thumbnails">
16
+
17
+ .. raw:: html
18
+
19
+ <div class="sphx-glr-thumbcontainer" tooltip="JaxSim as a hardware-accelerated parallel physics engine">
20
+
21
+ .. only:: html
22
+
23
+ :doc:`_collections/examples/jaxsim_as_physics_engine`
24
+
25
+ .. raw:: html
26
+
27
+ <div class="sphx-glr-thumbnail-title">JaxSim as a hardware-accelerated parallel physics engine</div>
28
+ </div>
29
+
30
+
31
+ .. raw:: html
32
+
33
+ <div class="sphx-glr-thumbcontainer" tooltip="JaxSim for developing closed-loop robot controllers">
34
+
35
+ .. only:: html
36
+
37
+ :doc:`_collections/examples/jaxsim_for_robot_controllers`
38
+
39
+ .. raw:: html
40
+
41
+ <div class="sphx-glr-thumbnail-title">JaxSim for developing closed-loop robot controllers</div>
42
+ </div>
43
+
44
+
45
+ .. raw:: html
46
+
47
+ <div class="sphx-glr-thumbcontainer" tooltip="JaxSim as a multibody dynamics library">
48
+
49
+ .. only:: html
50
+
51
+ :doc:`_collections/examples/jaxsim_as_multibody_dynamics_library`
52
+
53
+ .. raw:: html
54
+
55
+ <div class="sphx-glr-thumbnail-title">JaxSim as a multibody dynamics library</div>
56
+ </div>
57
+
58
+ .. raw:: html
59
+
60
+ </div>
@@ -0,0 +1,43 @@
1
+ # JaxSim Examples
2
+
3
+ This folder contains Jupyter notebooks that demonstrate the practical usage of JaxSim.
4
+
5
+ ## Featured examples
6
+
7
+ | Notebook | Google Colab | Description |
8
+ | :--- | :---: | :--- |
9
+ | [`jaxsim_as_multibody_dynamics_library`](./jaxsim_as_multibody_dynamics_library.ipynb) | [![Open In Colab][colab_badge]][ipynb_jaxsim_as_multibody_dynamics] | An example demonstrating how to use JaxSim as a multibody dynamics library. |
10
+ | [`jaxsim_as_physics_engine.ipynb`](./jaxsim_as_physics_engine.ipynb) | [![Open In Colab][colab_badge]][ipynb_jaxsim_as_physics_engine] | An example demonstrating how to simulate vectorized models in parallel. |
11
+ | [`jaxsim_for_robot_controllers.ipynb`](./jaxsim_for_robot_controllers.ipynb) | [![Open In Colab][colab_badge]][ipynb_jaxsim_closed_loop] | A basic example showing how to simulate a PD controller with gravity compensation for a 2-DOF cart-pole. |
12
+
13
+ [colab_badge]: https://colab.research.google.com/assets/colab-badge.svg
14
+ [ipynb_jaxsim_closed_loop]: https://colab.research.google.com/github/ami-iit/jaxsim/blob/main/examples/jaxsim_for_robot_controllers.ipynb
15
+ [ipynb_jaxsim_as_physics_engine]: https://colab.research.google.com/github/ami-iit/jaxsim/blob/main/examples/jaxsim_as_physics_engine.ipynb
16
+ [ipynb_jaxsim_as_multibody_dynamics]: https://colab.research.google.com/github/ami-iit/jaxsim/blob/main/examples/jaxsim_as_multibody_dynamics_library.ipynb
17
+
18
+ ## How to run the examples
19
+
20
+ You can run the JaxSim examples with hardware acceleration in two ways.
21
+
22
+ ### Option 1: Google Colab (recommended)
23
+
24
+ The easiest way is to use the provided Google Colab links to run the notebooks in a hosted environment
25
+ with no setup required.
26
+
27
+ ### Option 2: Local execution with `pixi`
28
+
29
+ To run the examples locally, first install `pixi` following the [official documentation][pixi_installation]:
30
+
31
+ [pixi_installation]: https://pixi.sh/#installation
32
+
33
+ ```bash
34
+ curl -fsSL https://pixi.sh/install.sh | bash
35
+ ```
36
+
37
+ Then, from the repository's root directory, execute the example notebooks using:
38
+
39
+ ```bash
40
+ pixi run examples
41
+ ```
42
+
43
+ This command will automatically handle all necessary dependencies and run the examples in a self-contained environment.
@@ -0,0 +1,202 @@
1
+ import os
2
+
3
+ if "ROD_LOGGING_LEVEL" not in os.environ:
4
+ os.environ["ROD_LOGGING_LEVEL"] = "WARNING"
5
+
6
+ import numpy as np
7
+ import rod.kinematics.tree_transforms
8
+ from rod.builder import primitives
9
+
10
+ if __name__ == "__main__":
11
+
12
+ # ================
13
+ # Model parameters
14
+ # ================
15
+
16
+ # Rail parameters.
17
+ rail_height = 1.2
18
+ rail_length = 5.0
19
+ rail_radius = 0.005
20
+ rail_mass = 5.0
21
+
22
+ # Cart parameters.
23
+ cart_mass = 1.0
24
+ cart_size = (0.1, 0.2, 0.05)
25
+
26
+ # Pole parameters.
27
+ pole_mass = 0.5
28
+ pole_length = 1.0
29
+ pole_radius = 0.005
30
+
31
+ # ========================
32
+ # Create the link builders
33
+ # ========================
34
+
35
+ rail_builder = primitives.CylinderBuilder(
36
+ name="rail",
37
+ mass=rail_mass,
38
+ radius=rail_radius,
39
+ length=rail_length,
40
+ )
41
+
42
+ cart_builder = primitives.BoxBuilder(
43
+ name="cart",
44
+ mass=cart_mass,
45
+ x=cart_size[0],
46
+ y=cart_size[1],
47
+ z=cart_size[2],
48
+ )
49
+
50
+ pole_builder = primitives.CylinderBuilder(
51
+ name="pole",
52
+ mass=pole_mass,
53
+ radius=pole_radius,
54
+ length=pole_length,
55
+ )
56
+
57
+ # =================
58
+ # Create the joints
59
+ # =================
60
+
61
+ world_to_rail = rod.Joint(
62
+ name="world_to_rail",
63
+ type="fixed",
64
+ parent="world",
65
+ child=rail_builder.name,
66
+ pose=primitives.PrimitiveBuilder.build_pose(
67
+ relative_to="world",
68
+ ),
69
+ )
70
+
71
+ linear = rod.Joint(
72
+ name="linear",
73
+ type="prismatic",
74
+ parent=rail_builder.name,
75
+ child=cart_builder.name,
76
+ pose=primitives.PrimitiveBuilder.build_pose(
77
+ relative_to=rail_builder.name,
78
+ pos=np.array([0, 0, rail_height]),
79
+ ),
80
+ axis=rod.Axis(
81
+ xyz=rod.Xyz(xyz=[0, 1, 0]),
82
+ limit=rod.Limit(
83
+ upper=(rail_length / 2 - cart_size[1] / 2),
84
+ lower=-(rail_length / 2 - cart_size[1] / 2),
85
+ effort=500.0,
86
+ velocity=10.0,
87
+ ),
88
+ ),
89
+ )
90
+
91
+ pivot = rod.Joint(
92
+ name="pivot",
93
+ type="continuous",
94
+ parent=cart_builder.name,
95
+ child=pole_builder.name,
96
+ pose=primitives.PrimitiveBuilder.build_pose(
97
+ relative_to=cart_builder.name,
98
+ ),
99
+ axis=rod.Axis(
100
+ xyz=rod.Xyz(xyz=[1, 0, 0]),
101
+ limit=rod.Limit(),
102
+ ),
103
+ )
104
+
105
+ # ================
106
+ # Create the links
107
+ # ================
108
+
109
+ rail_elements_pose = primitives.PrimitiveBuilder.build_pose(
110
+ pos=np.array([0, 0, rail_height]),
111
+ rpy=np.array([np.pi / 2, 0, 0]),
112
+ )
113
+
114
+ rail = (
115
+ rail_builder.build_link(
116
+ name=rail_builder.name,
117
+ pose=primitives.PrimitiveBuilder.build_pose(
118
+ relative_to=world_to_rail.name,
119
+ ),
120
+ )
121
+ .add_inertial(pose=rail_elements_pose)
122
+ .add_visual(pose=rail_elements_pose)
123
+ .add_collision(pose=rail_elements_pose)
124
+ .build()
125
+ )
126
+
127
+ cart = (
128
+ cart_builder.build_link(
129
+ name=cart_builder.name,
130
+ pose=primitives.PrimitiveBuilder.build_pose(relative_to=linear.name),
131
+ )
132
+ .add_inertial()
133
+ .add_visual()
134
+ .add_collision()
135
+ .build()
136
+ )
137
+
138
+ pole_elements_pose = primitives.PrimitiveBuilder.build_pose(
139
+ pos=np.array([0, 0, pole_length / 2]),
140
+ )
141
+
142
+ pole = (
143
+ pole_builder.build_link(
144
+ name=pole_builder.name,
145
+ pose=primitives.PrimitiveBuilder.build_pose(
146
+ relative_to=pivot.name,
147
+ ),
148
+ )
149
+ .add_inertial(pose=pole_elements_pose)
150
+ .add_visual(pose=pole_elements_pose)
151
+ .add_collision(pose=pole_elements_pose)
152
+ .build()
153
+ )
154
+
155
+ # ===========
156
+ # Build model
157
+ # ===========
158
+
159
+ # Create ROD in-memory model.
160
+ model = rod.Model(
161
+ name="cartpole",
162
+ canonical_link=rail.name,
163
+ link=[
164
+ rail,
165
+ cart,
166
+ pole,
167
+ ],
168
+ joint=[
169
+ world_to_rail,
170
+ linear,
171
+ pivot,
172
+ ],
173
+ )
174
+
175
+ # Update the pose elements to be closer to those expected in URDF.
176
+ model.switch_frame_convention(
177
+ frame_convention=rod.FrameConvention.Urdf, explicit_frames=True
178
+ )
179
+
180
+ # ==============
181
+ # Get SDF string
182
+ # ==============
183
+
184
+ # Create the top-level SDF object.
185
+ sdf = rod.Sdf(version="1.10", model=model)
186
+
187
+ # Generate the SDF string.
188
+ # sdf_string = sdf.serialize(pretty=True, validate=True)
189
+
190
+ # ===============
191
+ # Get URDF string
192
+ # ===============
193
+
194
+ import rod.urdf.exporter
195
+
196
+ # Convert the SDF to URDF.
197
+ urdf_string = rod.urdf.exporter.UrdfExporter(
198
+ pretty=True, indent=" "
199
+ ).to_urdf_string(sdf=sdf)
200
+
201
+ # Print the URDF string.
202
+ print(urdf_string)
@@ -1,5 +1,4 @@
1
1
  <?xml version="1.0" encoding="utf-8"?>
2
- <!--Create with rod using build_cartpole_model.py -->
3
2
  <robot name="cartpole">
4
3
  <link name="world"/>
5
4
  <link name="rail">
@@ -22,29 +21,29 @@
22
21
  </collision>
23
22
  </link>
24
23
  <link name="cart">
25
- <inertial>
26
- <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
27
- <mass value="1.0"/>
28
- <inertia ixx="0.0035416666666666674" ixy="0.0" ixz="0.0" iyy="0.0010416666666666669" iyz="0.0" izz="0.0041666666666666675"/>
29
- </inertial>
30
- <visual name="cart_visual">
31
- <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
32
- <geometry>
33
- <box size="0.1 0.2 0.05"/>
34
- </geometry>
35
- </visual>
36
- <collision name="cart_collision">
37
- <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
38
- <geometry>
39
- <box size="0.1 0.2 0.05"/>
40
- </geometry>
41
- </collision>
24
+ <inertial>
25
+ <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
26
+ <mass value="1.0"/>
27
+ <inertia ixx="0.0035416666666666674" ixy="0.0" ixz="0.0" iyy="0.0010416666666666669" iyz="0.0" izz="0.0041666666666666675"/>
28
+ </inertial>
29
+ <visual name="cart_visual">
30
+ <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
31
+ <geometry>
32
+ <box size="0.1 0.2 0.05"/>
33
+ </geometry>
34
+ </visual>
35
+ <collision name="cart_collision">
36
+ <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
37
+ <geometry>
38
+ <box size="0.1 0.2 0.05"/>
39
+ </geometry>
40
+ </collision>
42
41
  </link>
43
42
  <link name="pole">
44
43
  <inertial>
45
44
  <origin xyz="0.0 0.0 0.5" rpy="0.0 0.0 0.0"/>
46
- <mass value="0.1"/>
47
- <inertia ixx="0.008333958333333334" ixy="0.0" ixz="0.0" iyy="0.008333958333333334" iyz="0.0" izz="1.25e-06"/>
45
+ <mass value="0.5"/>
46
+ <inertia ixx="0.04166979166666667" ixy="0.0" ixz="0.0" iyy="0.04166979166666667" iyz="0.0" izz="6.25e-06"/>
48
47
  </inertial>
49
48
  <visual name="pole_visual">
50
49
  <origin xyz="0.0 0.0 0.5" rpy="0.0 0.0 0.0"/>
@@ -71,13 +70,11 @@
71
70
  <axis xyz="0 1 0"/>
72
71
  <limit effort="500.0" velocity="10.0" lower="-2.4" upper="2.4"/>
73
72
  </joint>
74
- <joint name="pivot" type="revolute">
73
+ <joint name="pivot" type="continuous">
75
74
  <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
76
75
  <parent link="cart"/>
77
76
  <child link="pole"/>
78
77
  <axis xyz="1 0 0"/>
79
- <!-- We avoid to use -3.4028234663852886e+38 as limits as mujoco parser have some problems with this,
80
- TODO(traversaro) report issue in mujoco upstream -->
81
- <limit effort="500.0" velocity="10.0" lower="-100000000" upper="100000000"/>
78
+ <limit effort="3.4028235e+38" velocity="3.4028235e+38"/>
82
79
  </joint>
83
80
  </robot>