mujoco 3.4.0__tar.gz → 3.6.0__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.
- {mujoco-3.4.0/mujoco.egg-info → mujoco-3.6.0}/PKG-INFO +16 -5
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/CMakeLists.txt +6 -4
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/__init__.py +15 -3
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/bindings_test.py +204 -2
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/cmake/MujocoDependencies.cmake +4 -36
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/cmake/MujocoLinkOptions.cmake +5 -9
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/cmake/ShellTests.cmake +1 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/constants.cc +1 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/enum_traits.h +40 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/function_traits.h +228 -74
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/functions.cc +151 -19
- mujoco-3.6.0/mujoco/gl_context.py +21 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/indexer_xmacro.h +4 -5
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/indexers.cc +1 -1
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/enums.py +59 -19
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/functions.py +512 -79
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/structs.py +391 -148
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/mjpython/Info.plist +4 -4
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/mjpython/mjpython.mm +31 -3
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/msh2obj_test.py +1 -0
- mujoco-3.6.0/mujoco/renderer.py +21 -0
- mujoco-3.6.0/mujoco/rendering/classic/__init__.py +16 -0
- {mujoco-3.4.0/mujoco → mujoco-3.6.0/mujoco/rendering/classic}/renderer.py +32 -33
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/CMakeLists.txt +1 -31
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/cmake/MujocoLinkOptions.cmake +5 -9
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/main.cc +16 -20
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/simulate.cc +168 -19
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/simulate.h +11 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate.cc +44 -27
- mujoco-3.6.0/mujoco/specs.cc.inc +8463 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/specs_test.py +315 -35
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/specs_wrapper.cc +14 -3
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/structs.cc +62 -125
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/structs.h +18 -38
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/structs_wrappers.cc +13 -7
- mujoco-3.6.0/mujoco/sysid/__init__.py +57 -0
- mujoco-3.6.0/mujoco/sysid/_src/__init__.py +15 -0
- mujoco-3.6.0/mujoco/sysid/_src/io.py +81 -0
- mujoco-3.6.0/mujoco/sysid/_src/model_modifier.py +598 -0
- mujoco-3.6.0/mujoco/sysid/_src/optimize.py +284 -0
- mujoco-3.6.0/mujoco/sysid/_src/parameter.py +673 -0
- mujoco-3.6.0/mujoco/sysid/_src/plotting.py +114 -0
- mujoco-3.6.0/mujoco/sysid/_src/residual.py +449 -0
- mujoco-3.6.0/mujoco/sysid/_src/signal_modifier.py +325 -0
- mujoco-3.6.0/mujoco/sysid/_src/signal_transform.py +301 -0
- mujoco-3.6.0/mujoco/sysid/_src/timeseries.py +794 -0
- mujoco-3.6.0/mujoco/sysid/_src/trajectory.py +652 -0
- mujoco-3.6.0/mujoco/sysid/py.typed +0 -0
- mujoco-3.6.0/mujoco/sysid/report/builder.py +122 -0
- mujoco-3.6.0/mujoco/sysid/report/defaults.py +291 -0
- mujoco-3.6.0/mujoco/sysid/report/sections/__init__.py +15 -0
- mujoco-3.6.0/mujoco/sysid/report/sections/base.py +63 -0
- mujoco-3.6.0/mujoco/sysid/report/sections/covariance.py +177 -0
- mujoco-3.6.0/mujoco/sysid/report/sections/group.py +59 -0
- mujoco-3.6.0/mujoco/sysid/report/sections/insights.py +113 -0
- mujoco-3.6.0/mujoco/sysid/report/sections/optimization_trace.py +471 -0
- mujoco-3.6.0/mujoco/sysid/report/sections/parameter_distribution.py +428 -0
- mujoco-3.6.0/mujoco/sysid/report/sections/parameters.py +240 -0
- mujoco-3.6.0/mujoco/sysid/report/sections/row.py +63 -0
- mujoco-3.6.0/mujoco/sysid/report/sections/signals.py +231 -0
- mujoco-3.6.0/mujoco/sysid/report/sections/video.py +216 -0
- mujoco-3.6.0/mujoco/sysid/report/templates/covariance.html +204 -0
- mujoco-3.6.0/mujoco/sysid/report/templates/group.html +13 -0
- mujoco-3.6.0/mujoco/sysid/report/templates/insights.html +90 -0
- mujoco-3.6.0/mujoco/sysid/report/templates/layout.html +699 -0
- mujoco-3.6.0/mujoco/sysid/report/templates/optimization_trace.html +20 -0
- mujoco-3.6.0/mujoco/sysid/report/templates/parameter_confidence.html +3 -0
- mujoco-3.6.0/mujoco/sysid/report/templates/parameters_table.html +147 -0
- mujoco-3.6.0/mujoco/sysid/report/templates/plot_generic.html +8 -0
- mujoco-3.6.0/mujoco/sysid/report/templates/row.html +13 -0
- mujoco-3.6.0/mujoco/sysid/report/templates/signals.html +3 -0
- mujoco-3.6.0/mujoco/sysid/report/templates/video.html +11 -0
- mujoco-3.6.0/mujoco/sysid/report/utils.py +61 -0
- mujoco-3.6.0/mujoco/sysid/tests/__init__.py +15 -0
- mujoco-3.6.0/mujoco/sysid/tests/conftest.py +224 -0
- mujoco-3.6.0/mujoco/sysid/tests/test_integration.py +235 -0
- mujoco-3.6.0/mujoco/sysid/tests/test_model_modifier.py +131 -0
- mujoco-3.6.0/mujoco/sysid/tests/test_parameter.py +148 -0
- mujoco-3.6.0/mujoco/sysid/tests/test_signal.py +391 -0
- mujoco-3.6.0/mujoco/sysid/tests/test_timeseries.py +453 -0
- mujoco-3.6.0/mujoco/sysid/tests/test_trajectory.py +204 -0
- mujoco-3.6.0/mujoco/testdata/model.urdf +4 -0
- {mujoco-3.4.0 → mujoco-3.6.0/mujoco.egg-info}/PKG-INFO +16 -5
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco.egg-info/SOURCES.txt +50 -0
- mujoco-3.6.0/mujoco.egg-info/requires.txt +21 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/pyproject.toml +19 -5
- mujoco-3.4.0/mujoco/specs.cc.inc +0 -8451
- mujoco-3.4.0/mujoco.egg-info/requires.txt +0 -9
- {mujoco-3.4.0 → mujoco-3.6.0}/LICENSE +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/LICENSES_THIRD_PARTY.md +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/MANIFEST.in +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/README.md +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/callbacks.cc +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/cgl/__init__.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/cgl/cgl.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/cmake/CheckAvxSupport.cmake +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/cmake/FindOrFetch.cmake +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/cmake/MujocoHarden.cmake +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/cmake/MujocoMacOS.cmake +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/cmake/MujocoOptions.cmake +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/cmake/TargetAddRpath.cmake +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/egl/__init__.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/egl/egl_ext.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/enums.cc +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/errors.cc +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/errors.h +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/functions.h +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/glfw/__init__.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/indexers.h +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/__init__.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/ast_nodes.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/ast_nodes_test.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/codegen/formatter.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/codegen/generate_enums.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/codegen/generate_functions.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/codegen/generate_structs.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/enums_test.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/functions_test.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/mjxmacro.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/structs_test.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/type_parsing.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/introspect/type_parsing_test.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/memory_leak_test.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/minimize.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/minimize_test.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/mjpython/mjpython.icns +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/mjpython/mjpython.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/msh2obj.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/osmesa/__init__.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/private.h +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/raw.h +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/render.cc +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/render_test.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/renderer_test.py +0 -0
- {mujoco-3.4.0/mujoco → mujoco-3.6.0/mujoco/rendering/classic}/gl_context.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/rollout.cc +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/rollout.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/rollout_test.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/serialization.h +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/array_safety.h +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/cmake/CheckAvxSupport.cmake +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/cmake/FindOrFetch.cmake +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/cmake/MujocoHarden.cmake +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/cmake/MujocoMacOS.cmake +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/cmake/SimulateDependencies.cmake +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/cmake/SimulateOptions.cmake +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/glfw_adapter.cc +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/glfw_adapter.h +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/glfw_corevideo.h +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/glfw_corevideo.mm +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/glfw_dispatch.cc +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/glfw_dispatch.h +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/macos_gui.mm +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/platform_ui_adapter.cc +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/simulate/platform_ui_adapter.h +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/specs.cc +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/specs_wrapper.h +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/testdata/MJCF_NoRoot.zip +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/testdata/MJCF_Root.zip +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/testdata/abdomen_1_body.msh +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/testdata/model.xml +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/testdata/msh.xml +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/testdata/simple_usd_preview_surface.usda +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/testdata/usd_golden.usda +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/threadpool.cc +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/threadpool.h +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/usd/camera.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/usd/demo.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/usd/exporter.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/usd/exporter_test.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/usd/lights.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/usd/objects.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/usd/shapes.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/usd/utils.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/util/CMakeLists.txt +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/util/array_traits.h +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/util/array_traits_test.cc +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/util/crossplatform.h +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/util/func_traits.h +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/util/func_traits_test.cc +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/util/func_wrap.h +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/util/func_wrap_test.cc +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/util/tuple_tools.h +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/util/tuple_tools_test.cc +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/viewer.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco/viewer_test.py +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco.egg-info/dependency_links.txt +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/mujoco.egg-info/top_level.txt +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/setup.cfg +0 -0
- {mujoco-3.4.0 → mujoco-3.6.0}/setup.py +0 -0
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mujoco
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.6.0
|
|
4
4
|
Summary: MuJoCo Physics Simulator
|
|
5
5
|
Author-email: Google DeepMind <mujoco@deepmind.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
7
7
|
Project-URL: Homepage, https://github.com/google-deepmind/mujoco
|
|
8
|
-
Project-URL: Documentation, https://mujoco.readthedocs.io/en/3.
|
|
8
|
+
Project-URL: Documentation, https://mujoco.readthedocs.io/en/3.6.0
|
|
9
9
|
Project-URL: Repository, https://github.com/google-deepmind/mujoco
|
|
10
|
-
Project-URL: Changelog, https://mujoco.readthedocs.io/en/3.
|
|
10
|
+
Project-URL: Changelog, https://mujoco.readthedocs.io/en/3.6.0/changelog.html
|
|
11
11
|
Classifier: Development Status :: 5 - Production/Stable
|
|
12
12
|
Classifier: Intended Audience :: Developers
|
|
13
13
|
Classifier: Intended Audience :: Science/Research
|
|
14
14
|
Classifier: Natural Language :: English
|
|
15
15
|
Classifier: Programming Language :: Python :: 3
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
17
16
|
Classifier: Programming Language :: Python :: 3.10
|
|
18
17
|
Classifier: Programming Language :: Python :: 3.11
|
|
19
18
|
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
20
|
Classifier: Topic :: Scientific/Engineering
|
|
21
|
-
Requires-Python: >=3.
|
|
21
|
+
Requires-Python: >=3.10
|
|
22
22
|
Description-Content-Type: text/markdown
|
|
23
23
|
License-File: LICENSE
|
|
24
24
|
License-File: LICENSES_THIRD_PARTY.md
|
|
@@ -27,6 +27,17 @@ Requires-Dist: etils[epath]
|
|
|
27
27
|
Requires-Dist: glfw
|
|
28
28
|
Requires-Dist: numpy
|
|
29
29
|
Requires-Dist: pyopengl
|
|
30
|
+
Provides-Extra: sysid
|
|
31
|
+
Requires-Dist: absl-py; extra == "sysid"
|
|
32
|
+
Requires-Dist: colorama; extra == "sysid"
|
|
33
|
+
Requires-Dist: imageio[ffmpeg]; extra == "sysid"
|
|
34
|
+
Requires-Dist: jinja2; extra == "sysid"
|
|
35
|
+
Requires-Dist: matplotlib; extra == "sysid"
|
|
36
|
+
Requires-Dist: plotly; extra == "sysid"
|
|
37
|
+
Requires-Dist: pyyaml; extra == "sysid"
|
|
38
|
+
Requires-Dist: scipy; extra == "sysid"
|
|
39
|
+
Requires-Dist: tabulate; extra == "sysid"
|
|
40
|
+
Requires-Dist: typing_extensions; extra == "sysid"
|
|
30
41
|
Provides-Extra: usd
|
|
31
42
|
Requires-Dist: usd-core; extra == "usd"
|
|
32
43
|
Requires-Dist: pillow; extra == "usd"
|
|
@@ -51,6 +51,8 @@ endif()
|
|
|
51
51
|
|
|
52
52
|
include(MujocoLinkOptions)
|
|
53
53
|
get_mujoco_extra_link_options(EXTRA_LINK_OPTIONS)
|
|
54
|
+
list(FILTER EXTRA_LINK_OPTIONS EXCLUDE REGEX "STACK")
|
|
55
|
+
list(FILTER EXTRA_LINK_OPTIONS EXCLUDE REGEX "stack")
|
|
54
56
|
add_link_options(${EXTRA_LINK_OPTIONS})
|
|
55
57
|
|
|
56
58
|
include(MujocoMacOS)
|
|
@@ -84,7 +86,7 @@ if(NOT TARGET mujoco)
|
|
|
84
86
|
if(MUJOCO_FRAMEWORK)
|
|
85
87
|
message("MuJoCo framework is at ${MUJOCO_FRAMEWORK}/mujoco.framework")
|
|
86
88
|
set(MUJOCO_LIBRARY
|
|
87
|
-
${MUJOCO_FRAMEWORK}/mujoco.framework/Versions/A/libmujoco.3.
|
|
89
|
+
${MUJOCO_FRAMEWORK}/mujoco.framework/Versions/A/libmujoco.3.6.0.dylib
|
|
88
90
|
)
|
|
89
91
|
target_compile_options(mujoco INTERFACE -F${MUJOCO_FRAMEWORK})
|
|
90
92
|
endif()
|
|
@@ -92,7 +94,7 @@ if(NOT TARGET mujoco)
|
|
|
92
94
|
|
|
93
95
|
if(NOT MUJOCO_FRAMEWORK)
|
|
94
96
|
find_library(
|
|
95
|
-
MUJOCO_LIBRARY mujoco mujoco.3.
|
|
97
|
+
MUJOCO_LIBRARY mujoco mujoco.3.6.0 HINTS ${MUJOCO_LIBRARY_DIR} REQUIRED
|
|
96
98
|
)
|
|
97
99
|
find_path(MUJOCO_INCLUDE mujoco/mujoco.h HINTS ${MUJOCO_INCLUDE_DIR} REQUIRED)
|
|
98
100
|
message("MuJoCo is at ${MUJOCO_LIBRARY}")
|
|
@@ -140,7 +142,7 @@ findorfetch(
|
|
|
140
142
|
GIT_REPO
|
|
141
143
|
https://github.com/abseil/abseil-cpp
|
|
142
144
|
GIT_TAG
|
|
143
|
-
|
|
145
|
+
255c84dadd029fd8ad25c5efb5933e47beaa00c7 # LTS 20250814.1
|
|
144
146
|
TARGETS
|
|
145
147
|
${MUJOCO_PYTHON_ABSL_TARGETS}
|
|
146
148
|
EXCLUDE_FROM_ALL
|
|
@@ -173,7 +175,7 @@ findorfetch(
|
|
|
173
175
|
GIT_REPO
|
|
174
176
|
https://gitlab.com/libeigen/eigen
|
|
175
177
|
GIT_TAG
|
|
176
|
-
|
|
178
|
+
75bcd155c40cb48e647c87c3f29052360255bc9e
|
|
177
179
|
TARGETS
|
|
178
180
|
Eigen3::Eigen
|
|
179
181
|
EXCLUDE_FROM_ALL
|
|
@@ -56,11 +56,23 @@ from mujoco._constants import *
|
|
|
56
56
|
from mujoco._enums import *
|
|
57
57
|
from mujoco._errors import *
|
|
58
58
|
from mujoco._functions import *
|
|
59
|
-
from mujoco._render import *
|
|
60
59
|
from mujoco._specs import *
|
|
61
60
|
from mujoco._structs import *
|
|
62
|
-
|
|
63
|
-
|
|
61
|
+
|
|
62
|
+
try:
|
|
63
|
+
from mujoco._render import * # pytype: disable=import-error
|
|
64
|
+
except ImportError:
|
|
65
|
+
pass
|
|
66
|
+
|
|
67
|
+
try:
|
|
68
|
+
from mujoco.rendering.classic.renderer import Renderer # pytype: disable=import-error
|
|
69
|
+
except ImportError:
|
|
70
|
+
pass
|
|
71
|
+
|
|
72
|
+
try:
|
|
73
|
+
from mujoco.rendering.classic.gl_context import * # pytype: disable=import-error
|
|
74
|
+
except ImportError:
|
|
75
|
+
pass
|
|
64
76
|
|
|
65
77
|
MjStruct: TypeAlias = Union[
|
|
66
78
|
_specs.MjsBody,
|
|
@@ -495,6 +495,15 @@ class MuJoCoBindingsTest(parameterized.TestCase):
|
|
|
495
495
|
mujoco.mj_forward(self.model, data_copy)
|
|
496
496
|
self.assertEqual(data_copy.ncon, 4)
|
|
497
497
|
|
|
498
|
+
# Test copying into existing data.
|
|
499
|
+
data_copy.qpos[1] = 1.234
|
|
500
|
+
data_copy.geom_xpos[2] = 5.678
|
|
501
|
+
self.assertFalse(np.array_equal(self.data.qpos, data_copy.qpos))
|
|
502
|
+
self.assertFalse(np.array_equal(self.data.geom_xpos, data_copy.geom_xpos))
|
|
503
|
+
mujoco.mj_copyData(self.data, self.model, data_copy)
|
|
504
|
+
np.testing.assert_array_equal(self.data.qpos, data_copy.qpos)
|
|
505
|
+
np.testing.assert_array_equal(self.data.geom_xpos, data_copy.geom_xpos)
|
|
506
|
+
|
|
498
507
|
def test_mjdata_can_read_warning_array(self):
|
|
499
508
|
warnings = self.data.warning
|
|
500
509
|
self.assertLen(warnings, mujoco.mjtWarning.mjNWARNING)
|
|
@@ -1279,8 +1288,9 @@ Euler integrator, semi-implicit in velocity.
|
|
|
1279
1288
|
geomid = np.zeros(1, np.int32)
|
|
1280
1289
|
mujoco.mj_forward(self.model, self.data)
|
|
1281
1290
|
mujoco.mj_ray(
|
|
1282
|
-
self.model, self.data, [0, 0, 0], [0, 0, 1], None, 0, 0, geomid
|
|
1291
|
+
self.model, self.data, [0, 0, 0], [0, 0, 1], None, 0, 0, geomid, None
|
|
1283
1292
|
)
|
|
1293
|
+
# Check the normal argument is optional
|
|
1284
1294
|
mujoco.mj_ray(
|
|
1285
1295
|
self.model,
|
|
1286
1296
|
self.data,
|
|
@@ -1292,6 +1302,7 @@ Euler integrator, semi-implicit in velocity.
|
|
|
1292
1302
|
geomid,
|
|
1293
1303
|
)
|
|
1294
1304
|
# Check that named arguments work
|
|
1305
|
+
normal = np.zeros(3, np.float64)
|
|
1295
1306
|
mujoco.mj_ray(
|
|
1296
1307
|
m=self.model,
|
|
1297
1308
|
d=self.data,
|
|
@@ -1301,7 +1312,33 @@ Euler integrator, semi-implicit in velocity.
|
|
|
1301
1312
|
flg_static=0,
|
|
1302
1313
|
bodyexclude=0,
|
|
1303
1314
|
geomid=geomid,
|
|
1315
|
+
normal=normal,
|
|
1316
|
+
)
|
|
1317
|
+
|
|
1318
|
+
def test_mju_ray_geom(self):
|
|
1319
|
+
# Test mju_rayGeom with a plane at origin
|
|
1320
|
+
pos = np.zeros(3)
|
|
1321
|
+
mat = np.eye(3).flatten()
|
|
1322
|
+
size = np.array([10.0, 10.0, 1.0])
|
|
1323
|
+
pnt = np.array([5.0, 5.0, 5.0])
|
|
1324
|
+
# Normalize direction for Euclidean distance
|
|
1325
|
+
vec = np.array([-1.0, -1.0, -1.0])
|
|
1326
|
+
vec = vec / np.linalg.norm(vec)
|
|
1327
|
+
normal = np.zeros(3)
|
|
1328
|
+
|
|
1329
|
+
# Call with normal argument
|
|
1330
|
+
dist = mujoco.mju_rayGeom(
|
|
1331
|
+
pos, mat, size, pnt, vec, mujoco.mjtGeom.mjGEOM_PLANE, normal
|
|
1332
|
+
)
|
|
1333
|
+
expected_dist = np.sqrt(3 * 5 * 5)
|
|
1334
|
+
np.testing.assert_allclose(dist, expected_dist)
|
|
1335
|
+
np.testing.assert_allclose(normal, [0, 0, 1])
|
|
1336
|
+
|
|
1337
|
+
# Call without normal argument (should still work)
|
|
1338
|
+
dist2 = mujoco.mju_rayGeom(
|
|
1339
|
+
pos, mat, size, pnt, vec, mujoco.mjtGeom.mjGEOM_PLANE
|
|
1304
1340
|
)
|
|
1341
|
+
np.testing.assert_allclose(dist2, expected_dist)
|
|
1305
1342
|
|
|
1306
1343
|
def test_mj_multi_ray(self):
|
|
1307
1344
|
nray = 3
|
|
@@ -1324,6 +1361,7 @@ Euler integrator, semi-implicit in velocity.
|
|
|
1324
1361
|
bodyexclude=-1,
|
|
1325
1362
|
geomid=geomid,
|
|
1326
1363
|
dist=dist,
|
|
1364
|
+
normal=None,
|
|
1327
1365
|
nray=nray,
|
|
1328
1366
|
cutoff=mujoco.mjMAXVAL,
|
|
1329
1367
|
)
|
|
@@ -1331,7 +1369,9 @@ Euler integrator, semi-implicit in velocity.
|
|
|
1331
1369
|
for i in range(0, 3):
|
|
1332
1370
|
self.assertEqual(
|
|
1333
1371
|
dist[i],
|
|
1334
|
-
mujoco.mj_ray(
|
|
1372
|
+
mujoco.mj_ray(
|
|
1373
|
+
self.model, self.data, pnt, vec[i], None, 1, -1, geom1, None
|
|
1374
|
+
),
|
|
1335
1375
|
)
|
|
1336
1376
|
self.assertEqual(geomid[i], geom1)
|
|
1337
1377
|
self.assertEqual(geomid[i], geom_ex[i])
|
|
@@ -1679,6 +1719,168 @@ Euler integrator, semi-implicit in velocity.
|
|
|
1679
1719
|
self.assertIn(model_path, dependencies)
|
|
1680
1720
|
self.assertIn(msh_path, dependencies)
|
|
1681
1721
|
|
|
1722
|
+
def test_mj_read_ctrl_and_init_ctrl_delay(self):
|
|
1723
|
+
xml = r"""
|
|
1724
|
+
<mujoco>
|
|
1725
|
+
<worldbody>
|
|
1726
|
+
<body>
|
|
1727
|
+
<geom type="sphere" size="0.1"/>
|
|
1728
|
+
<joint name="hinge" type="hinge"/>
|
|
1729
|
+
</body>
|
|
1730
|
+
</worldbody>
|
|
1731
|
+
<actuator>
|
|
1732
|
+
<position name="actuator" joint="hinge" delay="0.01" nsample="4"/>
|
|
1733
|
+
</actuator>
|
|
1734
|
+
</mujoco>
|
|
1735
|
+
"""
|
|
1736
|
+
model = mujoco.MjModel.from_xml_string(xml)
|
|
1737
|
+
data = mujoco.MjData(model)
|
|
1738
|
+
mujoco.mj_forward(model, data)
|
|
1739
|
+
|
|
1740
|
+
# Initialize the delay buffer with known values
|
|
1741
|
+
# actuator_history[i, 0] = nsample, actuator_history[i, 1] = interp
|
|
1742
|
+
nhistory = model.actuator_history[0, 0]
|
|
1743
|
+
self.assertEqual(nhistory, 4)
|
|
1744
|
+
times = np.array([0.0, 0.01, 0.02, 0.03])
|
|
1745
|
+
values = np.array([1.0, 2.0, 3.0, 4.0])
|
|
1746
|
+
mujoco.mj_initCtrlHistory(model, data, 0, times, values)
|
|
1747
|
+
|
|
1748
|
+
# Read back a value using zero-order hold
|
|
1749
|
+
# mj_readCtrl auto-subtracts delay: lookup_time = read_time - delay
|
|
1750
|
+
# delay = 0.01, so:
|
|
1751
|
+
# read_time=0.02 -> lookup at 0.01 -> value 2.0
|
|
1752
|
+
# read_time=0.03 -> lookup at 0.02 -> value 3.0
|
|
1753
|
+
result = mujoco.mj_readCtrl(model, data, 0, 0.02, interp=0)
|
|
1754
|
+
self.assertEqual(result, 2.0) # ZOH returns value at t=0.01
|
|
1755
|
+
|
|
1756
|
+
# Test with times=None (uses existing timestamps)
|
|
1757
|
+
new_values = np.array([5.0, 6.0, 7.0, 8.0])
|
|
1758
|
+
mujoco.mj_initCtrlHistory(model, data, 0, None, new_values)
|
|
1759
|
+
# read_time=0.02 -> lookup at 0.01 -> value 6.0
|
|
1760
|
+
result = mujoco.mj_readCtrl(model, data, 0, 0.02, interp=0)
|
|
1761
|
+
self.assertEqual(result, 6.0)
|
|
1762
|
+
|
|
1763
|
+
# Test dimension validation errors
|
|
1764
|
+
with self.assertRaises(TypeError):
|
|
1765
|
+
# wrong times
|
|
1766
|
+
mujoco.mj_initCtrlHistory(model, data, 0, np.zeros(3), values)
|
|
1767
|
+
with self.assertRaises(TypeError):
|
|
1768
|
+
# wrong values
|
|
1769
|
+
mujoco.mj_initCtrlHistory(model, data, 0, times, np.zeros(5))
|
|
1770
|
+
|
|
1771
|
+
def test_mj_read_sensor_and_init_sensor_delay(self):
|
|
1772
|
+
xml = r"""
|
|
1773
|
+
<mujoco>
|
|
1774
|
+
<worldbody>
|
|
1775
|
+
<body>
|
|
1776
|
+
<geom type="sphere" size="0.1"/>
|
|
1777
|
+
<joint name="hinge" type="hinge"/>
|
|
1778
|
+
<site name="site"/>
|
|
1779
|
+
</body>
|
|
1780
|
+
</worldbody>
|
|
1781
|
+
<sensor>
|
|
1782
|
+
<accelerometer name="accel" site="site" delay="0.01" nsample="3"/>
|
|
1783
|
+
</sensor>
|
|
1784
|
+
</mujoco>
|
|
1785
|
+
"""
|
|
1786
|
+
model = mujoco.MjModel.from_xml_string(xml)
|
|
1787
|
+
data = mujoco.MjData(model)
|
|
1788
|
+
mujoco.mj_forward(model, data)
|
|
1789
|
+
|
|
1790
|
+
# Initialize the delay buffer with known values
|
|
1791
|
+
# sensor_history[i, 0] = nsample, sensor_history[i, 1] = interp
|
|
1792
|
+
nhistory = model.sensor_history[0, 0]
|
|
1793
|
+
dim = model.sensor_dim[0]
|
|
1794
|
+
self.assertEqual(nhistory, 3)
|
|
1795
|
+
self.assertEqual(dim, 3) # accelerometer has dim=3
|
|
1796
|
+
times = np.array([0.0, 0.01, 0.02])
|
|
1797
|
+
values = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype=np.float64)
|
|
1798
|
+
mujoco.mj_initSensorHistory(model, data, 0, times, values, phase=0.0)
|
|
1799
|
+
|
|
1800
|
+
# Read back a value using zero-order hold
|
|
1801
|
+
# mj_readSensor auto-subtracts delay: lookup_time = read_time - delay
|
|
1802
|
+
# delay = 0.01, so:
|
|
1803
|
+
# read_time=0.02 -> lookup at 0.01 -> value [4, 5, 6]
|
|
1804
|
+
result = np.zeros(dim)
|
|
1805
|
+
mujoco.mj_readSensor(model, data, 0, 0.02, result, interp=0)
|
|
1806
|
+
# ZOH returns value at t=0.01
|
|
1807
|
+
np.testing.assert_array_equal(result, [4, 5, 6])
|
|
1808
|
+
|
|
1809
|
+
# Test with times=None (uses existing timestamps)
|
|
1810
|
+
new_values = np.array([
|
|
1811
|
+
[10, 11, 12], [13, 14, 15], [16, 17, 18]], dtype=np.float64)
|
|
1812
|
+
mujoco.mj_initSensorHistory(model, data, 0, None, new_values, phase=0.0)
|
|
1813
|
+
# read_time=0.02 -> lookup at 0.01 -> value [13, 14, 15]
|
|
1814
|
+
mujoco.mj_readSensor(model, data, 0, 0.02, result, interp=0)
|
|
1815
|
+
np.testing.assert_array_equal(result, [13, 14, 15])
|
|
1816
|
+
|
|
1817
|
+
# Test dimension validation errors
|
|
1818
|
+
with self.assertRaises(TypeError):
|
|
1819
|
+
# wrong result size
|
|
1820
|
+
mujoco.mj_readSensor(model, data, 0, 0.02, np.zeros(2), interp=0)
|
|
1821
|
+
with self.assertRaises(TypeError):
|
|
1822
|
+
# wrong times size
|
|
1823
|
+
mujoco.mj_initSensorHistory(model, data, 0, np.zeros(2), values, 0.0)
|
|
1824
|
+
with self.assertRaises(TypeError):
|
|
1825
|
+
# wrong values rows
|
|
1826
|
+
mujoco.mj_initSensorHistory(model, data, 0, times, np.zeros((4, 3)), 0.0)
|
|
1827
|
+
with self.assertRaises(TypeError):
|
|
1828
|
+
# wrong values cols
|
|
1829
|
+
mujoco.mj_initSensorHistory(model, data, 0, times, np.zeros((3, 2)), 0.0)
|
|
1830
|
+
|
|
1831
|
+
def test_init_sensor_history_pedagogical(self):
|
|
1832
|
+
# A framequat sensor reports body orientation as a unit quaternion.
|
|
1833
|
+
# Quaternions are never zero: the identity quaternion is [1, 0, 0, 0].
|
|
1834
|
+
# This test demonstrates why mj_initSensorHistory is needed: after
|
|
1835
|
+
# mj_makeData, the history buffer is filled with zeros, which is invalid.
|
|
1836
|
+
xml = r"""
|
|
1837
|
+
<mujoco>
|
|
1838
|
+
<worldbody>
|
|
1839
|
+
<body name="body">
|
|
1840
|
+
<freejoint/>
|
|
1841
|
+
<geom type="sphere" size="0.1"/>
|
|
1842
|
+
</body>
|
|
1843
|
+
</worldbody>
|
|
1844
|
+
<sensor>
|
|
1845
|
+
<framequat name="quat" objtype="body" objname="body" delay="0.01" nsample="5"/>
|
|
1846
|
+
</sensor>
|
|
1847
|
+
</mujoco>
|
|
1848
|
+
"""
|
|
1849
|
+
model = mujoco.MjModel.from_xml_string(xml)
|
|
1850
|
+
data = mujoco.MjData(model)
|
|
1851
|
+
dim = model.sensor_dim[0]
|
|
1852
|
+
nsample = model.sensor_history[0, 0]
|
|
1853
|
+
delay = model.sensor_delay[0]
|
|
1854
|
+
self.assertEqual(dim, 4)
|
|
1855
|
+
self.assertEqual(nsample, 5)
|
|
1856
|
+
self.assertEqual(delay, 0.01)
|
|
1857
|
+
|
|
1858
|
+
# After mj_makeData, reading from the delay buffer gives all zeros.
|
|
1859
|
+
# For a quaternion sensor, this is invalid data.
|
|
1860
|
+
result = np.zeros(dim)
|
|
1861
|
+
mujoco.mj_readSensor(model, data, 0, delay, result, interp=0)
|
|
1862
|
+
np.testing.assert_array_equal(result, [0, 0, 0, 0])
|
|
1863
|
+
|
|
1864
|
+
# To get valid sensor values, we temporarily set delay to 0 so that
|
|
1865
|
+
# mj_forward populates sensordata directly (without using the delay
|
|
1866
|
+
# buffer), then restore the original delay value.
|
|
1867
|
+
saved_delay = model.sensor_delay.copy()
|
|
1868
|
+
model.sensor_delay[:] = 0
|
|
1869
|
+
mujoco.mj_forward(model, data)
|
|
1870
|
+
model.sensor_delay[:] = saved_delay
|
|
1871
|
+
|
|
1872
|
+
# Now sensordata contains the valid identity quaternion.
|
|
1873
|
+
np.testing.assert_array_equal(data.sensordata, [1, 0, 0, 0])
|
|
1874
|
+
|
|
1875
|
+
# Use mj_initSensorHistory to fill the buffer with valid quaternion values.
|
|
1876
|
+
# Passing None for times keeps the existing timestamps in the buffer.
|
|
1877
|
+
values = np.tile(data.sensordata, (nsample, 1))
|
|
1878
|
+
mujoco.mj_initSensorHistory(model, data, 0, None, values, phase=0.0)
|
|
1879
|
+
|
|
1880
|
+
# Now reading from the delay buffer gives the valid identity quaternion.
|
|
1881
|
+
mujoco.mj_readSensor(model, data, 0, delay, result, interp=0)
|
|
1882
|
+
np.testing.assert_array_equal(result, [1, 0, 0, 0])
|
|
1883
|
+
|
|
1682
1884
|
def _assert_attributes_equal(self, actual_obj, expected_obj, attr_to_compare):
|
|
1683
1885
|
for name in attr_to_compare:
|
|
1684
1886
|
actual_value = getattr(actual_obj, name)
|
|
@@ -39,12 +39,12 @@ set(MUJOCO_DEP_VERSION_qhull
|
|
|
39
39
|
CACHE STRING "Version of `qhull` to be fetched."
|
|
40
40
|
)
|
|
41
41
|
set(MUJOCO_DEP_VERSION_Eigen3
|
|
42
|
-
|
|
42
|
+
75bcd155c40cb48e647c87c3f29052360255bc9e
|
|
43
43
|
CACHE STRING "Version of `Eigen3` to be fetched."
|
|
44
44
|
)
|
|
45
45
|
|
|
46
46
|
set(MUJOCO_DEP_VERSION_abseil
|
|
47
|
-
|
|
47
|
+
255c84dadd029fd8ad25c5efb5933e47beaa00c7 # LTS 20250814.1
|
|
48
48
|
CACHE STRING "Version of `abseil` to be fetched."
|
|
49
49
|
)
|
|
50
50
|
|
|
@@ -54,15 +54,10 @@ set(MUJOCO_DEP_VERSION_gtest
|
|
|
54
54
|
)
|
|
55
55
|
|
|
56
56
|
set(MUJOCO_DEP_VERSION_benchmark
|
|
57
|
-
|
|
57
|
+
5c55f5d4f45a1b09c5d98aa63a671993ebd42c69
|
|
58
58
|
CACHE STRING "Version of `benchmark` to be fetched."
|
|
59
59
|
)
|
|
60
60
|
|
|
61
|
-
set(MUJOCO_DEP_VERSION_TriangleMeshDistance
|
|
62
|
-
2cb643de1436e1ba8e2be49b07ec5491ac604457
|
|
63
|
-
CACHE STRING "Version of `TriangleMeshDistance` to be fetched."
|
|
64
|
-
)
|
|
65
|
-
|
|
66
61
|
mark_as_advanced(MUJOCO_DEP_VERSION_lodepng)
|
|
67
62
|
mark_as_advanced(MUJOCO_DEP_VERSION_MarchingCubeCpp)
|
|
68
63
|
mark_as_advanced(MUJOCO_DEP_VERSION_tinyxml2)
|
|
@@ -73,7 +68,6 @@ mark_as_advanced(MUJOCO_DEP_VERSION_Eigen3)
|
|
|
73
68
|
mark_as_advanced(MUJOCO_DEP_VERSION_abseil)
|
|
74
69
|
mark_as_advanced(MUJOCO_DEP_VERSION_gtest)
|
|
75
70
|
mark_as_advanced(MUJOCO_DEP_VERSION_benchmark)
|
|
76
|
-
mark_as_advanced(MUJOCO_DEP_VERSION_TriangleMeshDistance)
|
|
77
71
|
|
|
78
72
|
include(FetchContent)
|
|
79
73
|
include(FindOrFetch)
|
|
@@ -202,30 +196,6 @@ if(CMAKE_POLICY_VERSION_MINIMUM_LOCALLY_DEFINED)
|
|
|
202
196
|
unset(CMAKE_POLICY_VERSION_MINIMUM_LOCALLY_DEFINED)
|
|
203
197
|
endif()
|
|
204
198
|
|
|
205
|
-
if(NOT TARGET trianglemeshdistance)
|
|
206
|
-
FetchContent_Declare(
|
|
207
|
-
trianglemeshdistance
|
|
208
|
-
GIT_REPOSITORY https://github.com/InteractiveComputerGraphics/TriangleMeshDistance.git
|
|
209
|
-
GIT_TAG ${MUJOCO_DEP_VERSION_TriangleMeshDistance}
|
|
210
|
-
)
|
|
211
|
-
|
|
212
|
-
FetchContent_GetProperties(trianglemeshdistance)
|
|
213
|
-
if(NOT trianglemeshdistance_POPULATED)
|
|
214
|
-
FetchContent_Populate(trianglemeshdistance)
|
|
215
|
-
# Patch the source code to silence a warning/error related to a loop variable creating a copy.
|
|
216
|
-
# Since this is a header only library this fix is less intrusive than disabling the warning for
|
|
217
|
-
# any target including the header.
|
|
218
|
-
set(TMD_HEADER ${trianglemeshdistance_SOURCE_DIR}/TriangleMeshDistance/include/tmd/TriangleMeshDistance.h)
|
|
219
|
-
file(READ ${TMD_HEADER} TMD_CONTENT)
|
|
220
|
-
string(REPLACE
|
|
221
|
-
"for (const auto edge_count : edges_count) {"
|
|
222
|
-
"for (const auto& edge_count : edges_count) {"
|
|
223
|
-
TMD_CONTENT "${TMD_CONTENT}")
|
|
224
|
-
file(WRITE ${TMD_HEADER} "${TMD_CONTENT}")
|
|
225
|
-
include_directories(${trianglemeshdistance_SOURCE_DIR})
|
|
226
|
-
endif()
|
|
227
|
-
endif()
|
|
228
|
-
|
|
229
199
|
set(ENABLE_DOUBLE_PRECISION ON)
|
|
230
200
|
set(CCD_HIDE_ALL_SYMBOLS ON)
|
|
231
201
|
|
|
@@ -339,9 +309,7 @@ if(MUJOCO_BUILD_TESTS)
|
|
|
339
309
|
"sed"
|
|
340
310
|
"-i"
|
|
341
311
|
"-e"
|
|
342
|
-
"s/-
|
|
343
|
-
"-e"
|
|
344
|
-
"s/HAVE_CXX_FLAG_STD_CXX11/HAVE_CXX_FLAG_STD_CXX14/g"
|
|
312
|
+
"s/-Wformat=2/-Wformat/g"
|
|
345
313
|
"${CMAKE_BINARY_DIR}/_deps/benchmark-src/CMakeLists.txt"
|
|
346
314
|
)
|
|
347
315
|
endif()
|
|
@@ -23,16 +23,12 @@ function(get_mujoco_extra_link_options OUTPUT_VAR)
|
|
|
23
23
|
set(EXTRA_LINK_OPTIONS)
|
|
24
24
|
|
|
25
25
|
if(WIN32)
|
|
26
|
-
set(EXTRA_LINK_OPTIONS ${EXTRA_LINK_OPTIONS} -Wl,/STACK:16777216)
|
|
27
26
|
set(CMAKE_REQUIRED_FLAGS "-fuse-ld=lld-link")
|
|
28
|
-
check_c_source_compiles("int main() {}"
|
|
29
|
-
if(
|
|
30
|
-
set(EXTRA_LINK_OPTIONS
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
-Wl,/OPT:REF
|
|
34
|
-
-Wl,/OPT:ICF
|
|
35
|
-
)
|
|
27
|
+
check_c_source_compiles("int main() {}" SUPPORTS_LLD_LINK)
|
|
28
|
+
if(SUPPORTS_LLD_LINK)
|
|
29
|
+
set(EXTRA_LINK_OPTIONS ${EXTRA_LINK_OPTIONS} -fuse-ld=lld-link -Wl,/STACK:16777216 -Wl,/OPT:REF -Wl,/OPT:ICF)
|
|
30
|
+
else()
|
|
31
|
+
set(EXTRA_LINK_OPTIONS ${EXTRA_LINK_OPTIONS} -Wl,--stack,16777216)
|
|
36
32
|
endif()
|
|
37
33
|
else()
|
|
38
34
|
set(CMAKE_REQUIRED_FLAGS "-fuse-ld=lld")
|
|
@@ -38,6 +38,7 @@ function(add_mujoco_shell_test TEST_NAME TARGET_BINARY)
|
|
|
38
38
|
"CMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR}"
|
|
39
39
|
"TARGET_BINARY=$<TARGET_FILE:${TARGET_BINARY}>"
|
|
40
40
|
"TEST_TMPDIR=${TEST_TMPDIR}"
|
|
41
|
+
"MUJOCO_PLUGIN_DIR=$<TARGET_FILE_DIR:obj_decoder>"
|
|
41
42
|
)
|
|
42
43
|
if(WIN32)
|
|
43
44
|
# Define the directory containing the mujoco DLL library so that it can be added to the PATH.
|
|
@@ -98,6 +98,14 @@ struct mjtGeom {
|
|
|
98
98
|
std::make_pair("mjGEOM_NONE", ::mjtGeom::mjGEOM_NONE)};
|
|
99
99
|
};
|
|
100
100
|
|
|
101
|
+
struct mjtProjection {
|
|
102
|
+
static constexpr char name[] = "mjtProjection";
|
|
103
|
+
using type = ::mjtProjection;
|
|
104
|
+
static constexpr auto values = std::array{
|
|
105
|
+
std::make_pair("mjPROJ_PERSPECTIVE", ::mjtProjection::mjPROJ_PERSPECTIVE),
|
|
106
|
+
std::make_pair("mjPROJ_ORTHOGRAPHIC", ::mjtProjection::mjPROJ_ORTHOGRAPHIC)};
|
|
107
|
+
};
|
|
108
|
+
|
|
101
109
|
struct mjtCamLight {
|
|
102
110
|
static constexpr char name[] = "mjtCamLight";
|
|
103
111
|
using type = ::mjtCamLight;
|
|
@@ -199,6 +207,8 @@ struct mjtEq {
|
|
|
199
207
|
std::make_pair("mjEQ_JOINT", ::mjtEq::mjEQ_JOINT),
|
|
200
208
|
std::make_pair("mjEQ_TENDON", ::mjtEq::mjEQ_TENDON),
|
|
201
209
|
std::make_pair("mjEQ_FLEX", ::mjtEq::mjEQ_FLEX),
|
|
210
|
+
std::make_pair("mjEQ_FLEXVERT", ::mjtEq::mjEQ_FLEXVERT),
|
|
211
|
+
std::make_pair("mjEQ_FLEXSTRAIN", ::mjtEq::mjEQ_FLEXSTRAIN),
|
|
202
212
|
std::make_pair("mjEQ_DISTANCE", ::mjtEq::mjEQ_DISTANCE)};
|
|
203
213
|
};
|
|
204
214
|
|
|
@@ -384,6 +394,31 @@ struct mjtConDataField {
|
|
|
384
394
|
std::make_pair("mjNCONDATA", ::mjtConDataField::mjNCONDATA)};
|
|
385
395
|
};
|
|
386
396
|
|
|
397
|
+
struct mjtRayDataField {
|
|
398
|
+
static constexpr char name[] = "mjtRayDataField";
|
|
399
|
+
using type = ::mjtRayDataField;
|
|
400
|
+
static constexpr auto values = std::array{
|
|
401
|
+
std::make_pair("mjRAYDATA_DIST", ::mjtRayDataField::mjRAYDATA_DIST),
|
|
402
|
+
std::make_pair("mjRAYDATA_DIR", ::mjtRayDataField::mjRAYDATA_DIR),
|
|
403
|
+
std::make_pair("mjRAYDATA_ORIGIN", ::mjtRayDataField::mjRAYDATA_ORIGIN),
|
|
404
|
+
std::make_pair("mjRAYDATA_POINT", ::mjtRayDataField::mjRAYDATA_POINT),
|
|
405
|
+
std::make_pair("mjRAYDATA_NORMAL", ::mjtRayDataField::mjRAYDATA_NORMAL),
|
|
406
|
+
std::make_pair("mjRAYDATA_DEPTH", ::mjtRayDataField::mjRAYDATA_DEPTH),
|
|
407
|
+
std::make_pair("mjNRAYDATA", ::mjtRayDataField::mjNRAYDATA)};
|
|
408
|
+
};
|
|
409
|
+
|
|
410
|
+
struct mjtCamOutBit {
|
|
411
|
+
static constexpr char name[] = "mjtCamOutBit";
|
|
412
|
+
using type = ::mjtCamOutBit;
|
|
413
|
+
static constexpr auto values = std::array{
|
|
414
|
+
std::make_pair("mjCAMOUT_RGB", ::mjtCamOutBit::mjCAMOUT_RGB),
|
|
415
|
+
std::make_pair("mjCAMOUT_DEPTH", ::mjtCamOutBit::mjCAMOUT_DEPTH),
|
|
416
|
+
std::make_pair("mjCAMOUT_DIST", ::mjtCamOutBit::mjCAMOUT_DIST),
|
|
417
|
+
std::make_pair("mjCAMOUT_NORMAL", ::mjtCamOutBit::mjCAMOUT_NORMAL),
|
|
418
|
+
std::make_pair("mjCAMOUT_SEG", ::mjtCamOutBit::mjCAMOUT_SEG),
|
|
419
|
+
std::make_pair("mjNCAMOUT", ::mjtCamOutBit::mjNCAMOUT)};
|
|
420
|
+
};
|
|
421
|
+
|
|
387
422
|
struct mjtSameFrame {
|
|
388
423
|
static constexpr char name[] = "mjtSameFrame";
|
|
389
424
|
using type = ::mjtSameFrame;
|
|
@@ -455,6 +490,7 @@ struct mjtState {
|
|
|
455
490
|
std::make_pair("mjSTATE_QPOS", ::mjtState::mjSTATE_QPOS),
|
|
456
491
|
std::make_pair("mjSTATE_QVEL", ::mjtState::mjSTATE_QVEL),
|
|
457
492
|
std::make_pair("mjSTATE_ACT", ::mjtState::mjSTATE_ACT),
|
|
493
|
+
std::make_pair("mjSTATE_HISTORY", ::mjtState::mjSTATE_HISTORY),
|
|
458
494
|
std::make_pair("mjSTATE_WARMSTART", ::mjtState::mjSTATE_WARMSTART),
|
|
459
495
|
std::make_pair("mjSTATE_CTRL", ::mjtState::mjSTATE_CTRL),
|
|
460
496
|
std::make_pair("mjSTATE_QFRC_APPLIED", ::mjtState::mjSTATE_QFRC_APPLIED),
|
|
@@ -762,6 +798,7 @@ struct mjtRndFlag {
|
|
|
762
798
|
std::make_pair("mjRND_SKYBOX", ::mjtRndFlag::mjRND_SKYBOX),
|
|
763
799
|
std::make_pair("mjRND_FOG", ::mjtRndFlag::mjRND_FOG),
|
|
764
800
|
std::make_pair("mjRND_HAZE", ::mjtRndFlag::mjRND_HAZE),
|
|
801
|
+
std::make_pair("mjRND_DEPTH", ::mjtRndFlag::mjRND_DEPTH),
|
|
765
802
|
std::make_pair("mjRND_SEGMENT", ::mjtRndFlag::mjRND_SEGMENT),
|
|
766
803
|
std::make_pair("mjRND_IDCOLOR", ::mjtRndFlag::mjRND_IDCOLOR),
|
|
767
804
|
std::make_pair("mjRND_CULL_FACE", ::mjtRndFlag::mjRND_CULL_FACE),
|
|
@@ -900,6 +937,7 @@ static constexpr auto kAllEnums = std::make_tuple(
|
|
|
900
937
|
mjtEnableBit{},
|
|
901
938
|
mjtJoint{},
|
|
902
939
|
mjtGeom{},
|
|
940
|
+
mjtProjection{},
|
|
903
941
|
mjtCamLight{},
|
|
904
942
|
mjtLightType{},
|
|
905
943
|
mjtTexture{},
|
|
@@ -920,6 +958,8 @@ static constexpr auto kAllEnums = std::make_tuple(
|
|
|
920
958
|
mjtStage{},
|
|
921
959
|
mjtDataType{},
|
|
922
960
|
mjtConDataField{},
|
|
961
|
+
mjtRayDataField{},
|
|
962
|
+
mjtCamOutBit{},
|
|
923
963
|
mjtSameFrame{},
|
|
924
964
|
mjtSleepPolicy{},
|
|
925
965
|
mjtLRMode{},
|