Merge branch 'google-deepmind:main' into usd-integration
This commit is contained in:
+1
-1
@@ -28,7 +28,7 @@ set(MSVC_INCREMENTAL_DEFAULT ON)
|
|||||||
|
|
||||||
project(
|
project(
|
||||||
mujoco
|
mujoco
|
||||||
VERSION 3.0.1
|
VERSION 3.0.2
|
||||||
DESCRIPTION "MuJoCo Physics Simulator"
|
DESCRIPTION "MuJoCo Physics Simulator"
|
||||||
HOMEPAGE_URL "https://mujoco.org"
|
HOMEPAGE_URL "https://mujoco.org"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ set(MUJOCO_DEP_VERSION_qhull
|
|||||||
CACHE STRING "Version of `qhull` to be fetched."
|
CACHE STRING "Version of `qhull` to be fetched."
|
||||||
)
|
)
|
||||||
set(MUJOCO_DEP_VERSION_Eigen3
|
set(MUJOCO_DEP_VERSION_Eigen3
|
||||||
e8515f78ac098329ab9f8cab21c87caede090a3f
|
aa6964bf3a34fd607837dd8123bc42465185c4f8
|
||||||
CACHE STRING "Version of `Eigen3` to be fetched."
|
CACHE STRING "Version of `Eigen3` to be fetched."
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Vendored
+4
-4
@@ -1,6 +1,6 @@
|
|||||||
1 VERSIONINFO
|
1 VERSIONINFO
|
||||||
FILEVERSION 3,0,1,0
|
FILEVERSION 3,0,2,0
|
||||||
PRODUCTVERSION 3,0,1,0
|
PRODUCTVERSION 3,0,2,0
|
||||||
FILEOS 0x4
|
FILEOS 0x4
|
||||||
FILETYPE 0x1
|
FILETYPE 0x1
|
||||||
{
|
{
|
||||||
@@ -9,9 +9,9 @@ FILETYPE 0x1
|
|||||||
BLOCK "040904b0"
|
BLOCK "040904b0"
|
||||||
{
|
{
|
||||||
VALUE "ProductName", "MuJoCo"
|
VALUE "ProductName", "MuJoCo"
|
||||||
VALUE "ProductVersion", "3.0.1"
|
VALUE "ProductVersion", "3.0.2"
|
||||||
VALUE "FileDescription", "MuJoCo"
|
VALUE "FileDescription", "MuJoCo"
|
||||||
VALUE "FileVersion", "3.0.1"
|
VALUE "FileVersion", "3.0.2"
|
||||||
VALUE "InternalName", "mujoco.dll"
|
VALUE "InternalName", "mujoco.dll"
|
||||||
VALUE "OriginalFilename", "mujoco.dll"
|
VALUE "OriginalFilename", "mujoco.dll"
|
||||||
VALUE "CompanyName", "Google DeepMind"
|
VALUE "CompanyName", "Google DeepMind"
|
||||||
|
|||||||
Vendored
+4
-4
@@ -1,8 +1,8 @@
|
|||||||
MUJOCO ICON "mujoco.ico"
|
MUJOCO ICON "mujoco.ico"
|
||||||
|
|
||||||
1 VERSIONINFO
|
1 VERSIONINFO
|
||||||
FILEVERSION 3,0,1,0
|
FILEVERSION 3,0,2,0
|
||||||
PRODUCTVERSION 3,0,1,0
|
PRODUCTVERSION 3,0,2,0
|
||||||
FILEOS 0x4
|
FILEOS 0x4
|
||||||
FILETYPE 0x1
|
FILETYPE 0x1
|
||||||
{
|
{
|
||||||
@@ -11,9 +11,9 @@ FILETYPE 0x1
|
|||||||
BLOCK "040904b0"
|
BLOCK "040904b0"
|
||||||
{
|
{
|
||||||
VALUE "ProductName", "MuJoCo"
|
VALUE "ProductName", "MuJoCo"
|
||||||
VALUE "ProductVersion", "3.0.1"
|
VALUE "ProductVersion", "3.0.2"
|
||||||
VALUE "FileDescription", "MuJoCo"
|
VALUE "FileDescription", "MuJoCo"
|
||||||
VALUE "FileVersion", "3.0.1"
|
VALUE "FileVersion", "3.0.2"
|
||||||
VALUE "InternalName", "simulate.exe"
|
VALUE "InternalName", "simulate.exe"
|
||||||
VALUE "OriginalFilename", "simulate.exe"
|
VALUE "OriginalFilename", "simulate.exe"
|
||||||
VALUE "CompanyName", "Google DeepMind"
|
VALUE "CompanyName", "Google DeepMind"
|
||||||
|
|||||||
@@ -522,7 +522,7 @@ shown in the table below. Their names are in the format ``mjKEY_XXX``. They corr
|
|||||||
- Maximum number of UI rectangles.
|
- Maximum number of UI rectangles.
|
||||||
Defined in `mjui.h <https://github.com/google-deepmind/mujoco/blob/main/include/mujoco/mjui.h>`_.
|
Defined in `mjui.h <https://github.com/google-deepmind/mujoco/blob/main/include/mujoco/mjui.h>`_.
|
||||||
* - ``mjVERSION_HEADER``
|
* - ``mjVERSION_HEADER``
|
||||||
- 301
|
- 302
|
||||||
- The version of the MuJoCo headers; changes with every release. This is an integer equal to 100x the software
|
- The version of the MuJoCo headers; changes with every release. This is an integer equal to 100x the software
|
||||||
version, so 210 corresponds to version 2.1. Defined in mujoco.h. The API function :ref:`mj_version` returns a
|
version, so 210 corresponds to version 2.1. Defined in mujoco.h. The API function :ref:`mj_version` returns a
|
||||||
number with the same meaning but for the compiled library.
|
number with the same meaning but for the compiled library.
|
||||||
|
|||||||
@@ -656,6 +656,11 @@ MoCap poses: ``mocap_pos`` and ``mocap_quat``
|
|||||||
6D poses from a motion-capture device. The default values set by :ref:`mj_resetData` are the poses of the bodies at
|
6D poses from a motion-capture device. The default values set by :ref:`mj_resetData` are the poses of the bodies at
|
||||||
the default configuration.
|
the default configuration.
|
||||||
|
|
||||||
|
Equality constraint toggle: ``eq_active``
|
||||||
|
``mjData.eq_active`` is a byte-valued array that allows the user to toggle the state of equality constraints at
|
||||||
|
runtime. The initial value of this array is ``mjModel.eq_active0`` which can be set in XML using the
|
||||||
|
:ref:`active<equality-connect-active>` attribute of :ref:`equality constraints<coEquality>`.
|
||||||
|
|
||||||
User data: ``userdata``
|
User data: ``userdata``
|
||||||
``mjData.userdata`` acts as a user-defined memory space untouched by the engine. For example it can be used by
|
``mjData.userdata`` acts as a user-defined memory space untouched by the engine. For example it can be used by
|
||||||
callbacks. This is described in more detail in the :ref:`Programming chapter<siSimulation>`.
|
callbacks. This is described in more detail in the :ref:`Programming chapter<siSimulation>`.
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 93 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 26 KiB |
+42
-20
@@ -171,7 +171,7 @@ The following features are **fully supported** in MJX:
|
|||||||
.. list-table::
|
.. list-table::
|
||||||
:width: 90%
|
:width: 90%
|
||||||
:align: left
|
:align: left
|
||||||
:widths: 1 5
|
:widths: 2 5
|
||||||
:header-rows: 1
|
:header-rows: 1
|
||||||
|
|
||||||
* - Category
|
* - Category
|
||||||
@@ -182,9 +182,12 @@ The following features are **fully supported** in MJX:
|
|||||||
- ``FREE``, ``BALL``, ``SLIDE``, ``HINGE``
|
- ``FREE``, ``BALL``, ``SLIDE``, ``HINGE``
|
||||||
* - :ref:`Transmission <mjtTrn>`
|
* - :ref:`Transmission <mjtTrn>`
|
||||||
- ``TRN_JOINT``
|
- ``TRN_JOINT``
|
||||||
* - :ref:`Actuation <geactuation>`
|
* - :ref:`Actuator Dynamics <mjtDyn>`
|
||||||
- ``DYN_NONE``, ``DYN_INTEGRATOR``, ``DYN_FILTER``, ``GAIN_FIXED``, ``GAIN_AFFINE``, ``BIAS_NONE``,
|
- ``NONE``, ``INTEGRATOR``, ``FILTER``
|
||||||
``BIAS_AFFINE``
|
* - :ref:`Actuator Gain <mjtGain>`
|
||||||
|
- ``FIXED``, ``AFFINE``
|
||||||
|
* - :ref:`Actuator Bias <mjtBias>`
|
||||||
|
- ``NONE``, ``AFFINE``
|
||||||
* - :ref:`Geom <mjtGeom>`
|
* - :ref:`Geom <mjtGeom>`
|
||||||
- ``PLANE``, ``SPHERE``, ``CAPSULE``, ``BOX``, ``MESH``
|
- ``PLANE``, ``SPHERE``, ``CAPSULE``, ``BOX``, ``MESH``
|
||||||
* - :ref:`Constraint <mjtConstraint>`
|
* - :ref:`Constraint <mjtConstraint>`
|
||||||
@@ -207,7 +210,7 @@ The following features are **in development** and coming soon:
|
|||||||
.. list-table::
|
.. list-table::
|
||||||
:width: 90%
|
:width: 90%
|
||||||
:align: left
|
:align: left
|
||||||
:widths: 1 5
|
:widths: 2 5
|
||||||
:header-rows: 1
|
:header-rows: 1
|
||||||
|
|
||||||
* - Category
|
* - Category
|
||||||
@@ -216,8 +219,16 @@ The following features are **in development** and coming soon:
|
|||||||
- :ref:`Inverse <mj_inverse>`
|
- :ref:`Inverse <mj_inverse>`
|
||||||
* - :ref:`Transmission <mjtTrn>`
|
* - :ref:`Transmission <mjtTrn>`
|
||||||
- ``TRN_TENDON``
|
- ``TRN_TENDON``
|
||||||
|
* - :ref:`Actuator Dynamics <mjtDyn>`
|
||||||
|
- ``MUSCLE``
|
||||||
|
* - :ref:`Actuator Gain <mjtGain>`
|
||||||
|
- ``MUSCLE``
|
||||||
|
* - :ref:`Actuator Bias <mjtBias>`
|
||||||
|
- ``MUSCLE``
|
||||||
|
* - :ref:`Tendon Wrapping <mjtWrap>`
|
||||||
|
- ``NONE``, ``JOINT``, ``PULLEY``, ``SITE``, ``SPHERE``, ``CYLINDER``
|
||||||
* - :ref:`Geom <mjtGeom>`
|
* - :ref:`Geom <mjtGeom>`
|
||||||
- ``HFIELD``, ``ELLIPSOID``, ``CYLINDER``, ``SDF``
|
- ``HFIELD``, ``ELLIPSOID``, ``CYLINDER``
|
||||||
* - :ref:`Constraint <mjtConstraint>`
|
* - :ref:`Constraint <mjtConstraint>`
|
||||||
- ``CONTACT_FRICTIONLESS``, ``CONTACT_ELLIPTIC``, ``FRICTION_DOF``
|
- ``CONTACT_FRICTIONLESS``, ``CONTACT_ELLIPTIC``, ``FRICTION_DOF``
|
||||||
* - :ref:`Integrator <mjtIntegrator>`
|
* - :ref:`Integrator <mjtIntegrator>`
|
||||||
@@ -233,24 +244,32 @@ The following features are **in development** and coming soon:
|
|||||||
* - :ref:`Equality <mjtEq>`
|
* - :ref:`Equality <mjtEq>`
|
||||||
- ``TENDON``
|
- ``TENDON``
|
||||||
* - :ref:`Sensors <mjtSensor>`
|
* - :ref:`Sensors <mjtSensor>`
|
||||||
- All except ``mjSENS_PLUGIN``, ``mjSENS_USER``
|
- All except ``PLUGIN``, ``USER``
|
||||||
|
|
||||||
The following features are **unsupported**:
|
The following features are **unsupported**:
|
||||||
|
|
||||||
.. list-table::
|
.. list-table::
|
||||||
:width: 90%
|
:width: 90%
|
||||||
:align: left
|
:align: left
|
||||||
:widths: 1 5
|
:widths: 2 5
|
||||||
:header-rows: 1
|
:header-rows: 1
|
||||||
|
|
||||||
* - Category
|
* - Category
|
||||||
- Feature
|
- Feature
|
||||||
* - :ref:`Transmission <mjtTrn>`
|
* - :ref:`Transmission <mjtTrn>`
|
||||||
- ``TRN_JOINTINPARENT``, ``TRN_SLIDERCRANK``, ``TRN_SITE``, ``TRN_BODY``, ``MUSCLE``
|
- ``TRN_JOINTINPARENT``, ``TRN_SLIDERCRANK``, ``TRN_SITE``, ``TRN_BODY``
|
||||||
|
* - :ref:`Actuator Dynamics <mjtDyn>`
|
||||||
|
- ``FILTEREXACT``, ``USER``
|
||||||
|
* - :ref:`Actuator Gain <mjtGain>`
|
||||||
|
- ``USER``
|
||||||
|
* - :ref:`Actuator Bias <mjtBias>`
|
||||||
|
- ``USER``
|
||||||
* - :ref:`Solver <mjtSolver>`
|
* - :ref:`Solver <mjtSolver>`
|
||||||
- ``PGS``
|
- ``PGS``
|
||||||
* - :ref:`Callbacks <glphysics>`
|
* - :ref:`Sensors <mjtSensor>`
|
||||||
- ``mjDYN_USER``, ``mjGAIN_USER``, ``mjBIAS_USER``, ``mjSENS_USER``
|
- ``PLUGIN``, ``USER``
|
||||||
|
* - :ref:`Geom <mjtGeom>`
|
||||||
|
- ``SDF``
|
||||||
|
|
||||||
.. _MjxSharpBits:
|
.. _MjxSharpBits:
|
||||||
|
|
||||||
@@ -276,17 +295,20 @@ Large, complex scenes with many contacts
|
|||||||
bodies in a scene. MJX ships with a simple branchless broad-phase algorithm (see performance tuning) but it is not as
|
bodies in a scene. MJX ships with a simple branchless broad-phase algorithm (see performance tuning) but it is not as
|
||||||
powerful as the one in MuJoCo.
|
powerful as the one in MuJoCo.
|
||||||
|
|
||||||
To see how this affects simulation, let us consider a physics scene with increasing numbers of physics bodies. We
|
To see how this affects simulation, let us consider a physics scene with increasing numbers of humanoid bodies,
|
||||||
simulate a scene with a variable number of humanoids (from 1 to 10) and then compare MJX's performance on an Nvidia
|
varied from 1 to 10. We simulate this scene using CPU MuJoCo on an Apple M1 Pro and a 64-core AMD 3995WX and time
|
||||||
A100 GPU to MuJoCo on a 12-core workstation:
|
it using :ref:`testspeed<saTestspeed>`, using ``2 x numcore`` threads. We time the MJX simulation on an Nvidia
|
||||||
|
A100 GPU using a batch size of 8192 and an 8-chip
|
||||||
|
`v5 TPU <https://cloud.google.com/blog/products/compute/announcing-cloud-tpu-v5e-and-a3-gpus-in-ga>`__
|
||||||
|
machine using a batch size of 16384. Note the vertical scale is logarithmic.
|
||||||
|
|
||||||
.. figure:: images/mjx/mujoco_vs_mjx_large_scene.png
|
.. figure:: images/mjx/SPS.svg
|
||||||
:width: 658px
|
:width: 95%
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
Notice that as we increase the number of humanoids (which increases the number of potential contacts in a scene), MJX
|
The values for a single humanoid (leftmost datapoints) for the four timed architectures are **320K**, **1.8M**,
|
||||||
performance degrades more rapidly than MuJoCo. At the limit, for such a large scene, MuJoCo performance nearly
|
**950K** and **2.7M** steps per second, respectively. Note that as we increase the number of humanoids (which
|
||||||
matches MJX.
|
increases the number of potential contacts in a scene), MJX throughput decreases more rapidly than MuJoCo.
|
||||||
|
|
||||||
Scenes with collisions between meshes with many vertices
|
Scenes with collisions between meshes with many vertices
|
||||||
MJX supports mesh geometries and can determine if two meshes are colliding using branchless versions of
|
MJX supports mesh geometries and can determine if two meshes are colliding using branchless versions of
|
||||||
|
|||||||
+2
-2
@@ -30,14 +30,14 @@ _____
|
|||||||
|
|
||||||
The MuJoCo app needs to be run at least once before the native library can be used, in order to register the library as
|
The MuJoCo app needs to be run at least once before the native library can be used, in order to register the library as
|
||||||
a trusted binary. Then, copy the dynamic library file from
|
a trusted binary. Then, copy the dynamic library file from
|
||||||
``/Applications/MuJoCo.app/Contents/Frameworks/mujoco.framework/Versions/Current/libmujoco.3.0.1.dylib`` (it can be
|
``/Applications/MuJoCo.app/Contents/Frameworks/mujoco.framework/Versions/Current/libmujoco.3.0.2.dylib`` (it can be
|
||||||
found by browsing the contents of ``MuJoCo.app``) and rename it as ``mujoco.dylib``.
|
found by browsing the contents of ``MuJoCo.app``) and rename it as ``mujoco.dylib``.
|
||||||
|
|
||||||
Linux
|
Linux
|
||||||
_____
|
_____
|
||||||
|
|
||||||
Expand the ``tar.gz`` archive to ``~/.mujoco``. Then copy the dynamic library from
|
Expand the ``tar.gz`` archive to ``~/.mujoco``. Then copy the dynamic library from
|
||||||
``~/.mujoco/mujoco-3.0.1/lib/libmujoco.so.3.0.1`` and rename it as ``libmujoco.so``.
|
``~/.mujoco/mujoco-3.0.2/lib/libmujoco.so.3.0.2`` and rename it as ``libmujoco.so``.
|
||||||
|
|
||||||
Windows
|
Windows
|
||||||
_______
|
_______
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// header version; should match the library version as returned by mj_version()
|
// header version; should match the library version as returned by mj_version()
|
||||||
#define mjVERSION_HEADER 301
|
#define mjVERSION_HEADER 302
|
||||||
|
|
||||||
// needed to define size_t, fabs and log10
|
// needed to define size_t, fabs and log10
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ def _assert_attr_eq(mjx_d, mj_d, attr, name, atol):
|
|||||||
np.testing.assert_allclose(mjx_d, mj_d, err_msg=err_msg, atol=atol)
|
np.testing.assert_allclose(mjx_d, mj_d, err_msg=err_msg, atol=atol)
|
||||||
|
|
||||||
|
|
||||||
class CollisionDriverTest(parameterized.TestCase):
|
class CollisionDriverIntegrationTest(parameterized.TestCase):
|
||||||
|
|
||||||
@parameterized.parameters(list(range(256)))
|
@parameterized.parameters(list(range(256)))
|
||||||
def test_collision_driver(self, seed):
|
def test_collision_driver(self, seed):
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ def _assert_attr_eq(a, b, attr, step, fname, atol=1e-3, rtol=1e-3):
|
|||||||
np.testing.assert_allclose(a, b, err_msg=err_msg, atol=atol, rtol=rtol)
|
np.testing.assert_allclose(a, b, err_msg=err_msg, atol=atol, rtol=rtol)
|
||||||
|
|
||||||
|
|
||||||
class ActuationTest(parameterized.TestCase):
|
class ActuationIntegrationTest(parameterized.TestCase):
|
||||||
|
|
||||||
@parameterized.parameters(list(range(30)))
|
@parameterized.parameters(list(range(30)))
|
||||||
def test_actuation(self, seed):
|
def test_actuation(self, seed):
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ def _assert_attr_eq(a, b, attr, step, fname, atol=1e-5, rtol=1e-5):
|
|||||||
np.testing.assert_allclose(a, b, err_msg=err_msg, atol=atol, rtol=rtol)
|
np.testing.assert_allclose(a, b, err_msg=err_msg, atol=atol, rtol=rtol)
|
||||||
|
|
||||||
|
|
||||||
class TransmissionTest(parameterized.TestCase):
|
class TransmissionIntegrationTest(parameterized.TestCase):
|
||||||
|
|
||||||
@parameterized.parameters(list(range(30)))
|
@parameterized.parameters(list(range(30)))
|
||||||
def test_transmission(self, seed):
|
def test_transmission(self, seed):
|
||||||
|
|||||||
+4
-4
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name="mujoco-mjx"
|
name="mujoco-mjx"
|
||||||
version = "3.0.1"
|
version = "3.0.2"
|
||||||
authors = [
|
authors = [
|
||||||
{name = "Google DeepMind", email = "mujoco@deepmind.com"},
|
{name = "Google DeepMind", email = "mujoco@deepmind.com"},
|
||||||
]
|
]
|
||||||
@@ -31,13 +31,13 @@ dependencies = [
|
|||||||
"etils[epath]",
|
"etils[epath]",
|
||||||
"jax",
|
"jax",
|
||||||
"jaxlib",
|
"jaxlib",
|
||||||
"mujoco>=3.0.1.dev0",
|
"mujoco>=3.0.2.dev0",
|
||||||
"scipy",
|
"scipy",
|
||||||
"trimesh",
|
"trimesh",
|
||||||
]
|
]
|
||||||
|
|
||||||
[project.urls]
|
[project.urls]
|
||||||
Homepage = "https://github.com/google-deepmind/mujoco/tree/main/mjx"
|
Homepage = "https://github.com/google-deepmind/mujoco/tree/main/mjx"
|
||||||
Documentation = "https://mujoco.readthedocs.io/en/3.0.1"
|
Documentation = "https://mujoco.readthedocs.io/en/3.0.2"
|
||||||
Repository = "https://github.com/google-deepmind/mujoco/tree/main/mjx"
|
Repository = "https://github.com/google-deepmind/mujoco/tree/main/mjx"
|
||||||
Changelog = "https://mujoco.readthedocs.io/en/3.0.1/changelog.html"
|
Changelog = "https://mujoco.readthedocs.io/en/3.0.2/changelog.html"
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ if(NOT TARGET mujoco)
|
|||||||
if(MUJOCO_FRAMEWORK)
|
if(MUJOCO_FRAMEWORK)
|
||||||
message("MuJoCo framework is at ${MUJOCO_FRAMEWORK}/mujoco.framework")
|
message("MuJoCo framework is at ${MUJOCO_FRAMEWORK}/mujoco.framework")
|
||||||
set(MUJOCO_LIBRARY
|
set(MUJOCO_LIBRARY
|
||||||
${MUJOCO_FRAMEWORK}/mujoco.framework/Versions/A/libmujoco.3.0.1.dylib
|
${MUJOCO_FRAMEWORK}/mujoco.framework/Versions/A/libmujoco.3.0.2.dylib
|
||||||
)
|
)
|
||||||
target_compile_options(mujoco INTERFACE -F${MUJOCO_FRAMEWORK})
|
target_compile_options(mujoco INTERFACE -F${MUJOCO_FRAMEWORK})
|
||||||
endif()
|
endif()
|
||||||
@@ -92,7 +92,7 @@ if(NOT TARGET mujoco)
|
|||||||
|
|
||||||
if(NOT MUJOCO_FRAMEWORK)
|
if(NOT MUJOCO_FRAMEWORK)
|
||||||
find_library(
|
find_library(
|
||||||
MUJOCO_LIBRARY mujoco mujoco.3.0.1 HINTS ${MUJOCO_LIBRARY_DIR} REQUIRED
|
MUJOCO_LIBRARY mujoco mujoco.3.0.2 HINTS ${MUJOCO_LIBRARY_DIR} REQUIRED
|
||||||
)
|
)
|
||||||
find_path(MUJOCO_INCLUDE mujoco/mujoco.h HINTS ${MUJOCO_INCLUDE_DIR} REQUIRED)
|
find_path(MUJOCO_INCLUDE mujoco/mujoco.h HINTS ${MUJOCO_INCLUDE_DIR} REQUIRED)
|
||||||
message("MuJoCo is at ${MUJOCO_LIBRARY}")
|
message("MuJoCo is at ${MUJOCO_LIBRARY}")
|
||||||
@@ -173,7 +173,7 @@ findorfetch(
|
|||||||
GIT_REPO
|
GIT_REPO
|
||||||
https://gitlab.com/libeigen/eigen
|
https://gitlab.com/libeigen/eigen
|
||||||
GIT_TAG
|
GIT_TAG
|
||||||
e8515f78ac098329ab9f8cab21c87caede090a3f
|
aa6964bf3a34fd607837dd8123bc42465185c4f8
|
||||||
TARGETS
|
TARGETS
|
||||||
Eigen3::Eigen
|
Eigen3::Eigen
|
||||||
EXCLUDE_FROM_ALL
|
EXCLUDE_FROM_ALL
|
||||||
|
|||||||
@@ -7,13 +7,13 @@
|
|||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
<string>org.mujoco.mjpython</string>
|
<string>org.mujoco.mjpython</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>3.0.1</string>
|
<string>3.0.2</string>
|
||||||
<key>CFBundleGetInfoString</key>
|
<key>CFBundleGetInfoString</key>
|
||||||
<string>3.0.1</string>
|
<string>3.0.2</string>
|
||||||
<key>CFBundleLongVersionString</key>
|
<key>CFBundleLongVersionString</key>
|
||||||
<string>3.0.1</string>
|
<string>3.0.2</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>3.0.1</string>
|
<string>3.0.2</string>
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>mjpython</string>
|
<string>mjpython</string>
|
||||||
<key>CFBundleIconFile</key>
|
<key>CFBundleIconFile</key>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "mujoco"
|
name = "mujoco"
|
||||||
version = "3.0.1"
|
version = "3.0.2"
|
||||||
authors = [
|
authors = [
|
||||||
{name = "Google DeepMind", email = "mujoco@deepmind.com"},
|
{name = "Google DeepMind", email = "mujoco@deepmind.com"},
|
||||||
]
|
]
|
||||||
@@ -36,9 +36,9 @@ dynamic = ["readme", "scripts"]
|
|||||||
|
|
||||||
[project.urls]
|
[project.urls]
|
||||||
Homepage = "https://github.com/google-deepmind/mujoco"
|
Homepage = "https://github.com/google-deepmind/mujoco"
|
||||||
Documentation = "https://mujoco.readthedocs.io/en/3.0.1"
|
Documentation = "https://mujoco.readthedocs.io/en/3.0.2"
|
||||||
Repository = "https://github.com/google-deepmind/mujoco"
|
Repository = "https://github.com/google-deepmind/mujoco"
|
||||||
Changelog = "https://mujoco.readthedocs.io/en/3.0.1/changelog.html"
|
Changelog = "https://mujoco.readthedocs.io/en/3.0.2/changelog.html"
|
||||||
|
|
||||||
[tool.setuptools]
|
[tool.setuptools]
|
||||||
include-package-data = false
|
include-package-data = false
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ set(MSVC_INCREMENTAL_DEFAULT ON)
|
|||||||
|
|
||||||
project(
|
project(
|
||||||
mujoco_samples
|
mujoco_samples
|
||||||
VERSION 3.0.1
|
VERSION 3.0.2
|
||||||
DESCRIPTION "MuJoCo samples binaries"
|
DESCRIPTION "MuJoCo samples binaries"
|
||||||
HOMEPAGE_URL "https://mujoco.org"
|
HOMEPAGE_URL "https://mujoco.org"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ set(MUJOCO_DEP_VERSION_lodepng
|
|||||||
|
|
||||||
project(
|
project(
|
||||||
mujoco_simulate
|
mujoco_simulate
|
||||||
VERSION 3.0.1
|
VERSION 3.0.2
|
||||||
DESCRIPTION "MuJoCo simulate binaries"
|
DESCRIPTION "MuJoCo simulate binaries"
|
||||||
HOMEPAGE_URL "https://mujoco.org"
|
HOMEPAGE_URL "https://mujoco.org"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -718,12 +718,12 @@ void MakePhysicsSection(mj::Simulate* sim, int oldstate) {
|
|||||||
};
|
};
|
||||||
mjuiDef defDisableActuator[] = {
|
mjuiDef defDisableActuator[] = {
|
||||||
{mjITEM_SEPARATOR, "Actuator Group Enable", 1},
|
{mjITEM_SEPARATOR, "Actuator Group Enable", 1},
|
||||||
{mjITEM_CHECKBYTE, "Act Group 0", 2, sim->enableactuator+0, " 0"},
|
{mjITEM_CHECKBYTE, "Act Group 0", 2, sim->enableactuator+0, ""},
|
||||||
{mjITEM_CHECKBYTE, "Act Group 1", 2, sim->enableactuator+1, " 1"},
|
{mjITEM_CHECKBYTE, "Act Group 1", 2, sim->enableactuator+1, ""},
|
||||||
{mjITEM_CHECKBYTE, "Act Group 2", 2, sim->enableactuator+2, " 2"},
|
{mjITEM_CHECKBYTE, "Act Group 2", 2, sim->enableactuator+2, ""},
|
||||||
{mjITEM_CHECKBYTE, "Act Group 3", 2, sim->enableactuator+3, " 3"},
|
{mjITEM_CHECKBYTE, "Act Group 3", 2, sim->enableactuator+3, ""},
|
||||||
{mjITEM_CHECKBYTE, "Act Group 4", 2, sim->enableactuator+4, " 4"},
|
{mjITEM_CHECKBYTE, "Act Group 4", 2, sim->enableactuator+4, ""},
|
||||||
{mjITEM_CHECKBYTE, "Act Group 5", 2, sim->enableactuator+5, " 5"},
|
{mjITEM_CHECKBYTE, "Act Group 5", 2, sim->enableactuator+5, ""},
|
||||||
{mjITEM_END}
|
{mjITEM_END}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -38,8 +38,8 @@
|
|||||||
|
|
||||||
//-------------------------- Constants -------------------------------------------------------------
|
//-------------------------- Constants -------------------------------------------------------------
|
||||||
|
|
||||||
#define mjVERSION 301
|
#define mjVERSION 302
|
||||||
#define mjVERSIONSTRING "3.0.1"
|
#define mjVERSIONSTRING "3.0.2"
|
||||||
|
|
||||||
// names of disable flags
|
// names of disable flags
|
||||||
const char* mjDISABLESTRING[mjNDISABLE] = {
|
const char* mjDISABLESTRING[mjNDISABLE] = {
|
||||||
|
|||||||
+1
-1
@@ -367,7 +367,7 @@ void mjXURDF::Joint(XMLElement* joint_elem) {
|
|||||||
throw mjXError(joint_elem, "invalid joint type in URDF joint definition");
|
throw mjXError(joint_elem, "invalid joint type in URDF joint definition");
|
||||||
}
|
}
|
||||||
ReadAttrTxt(joint_elem, "name", jntname, true);
|
ReadAttrTxt(joint_elem, "name", jntname, true);
|
||||||
|
jntname = GetPrefixedName(jntname);
|
||||||
// get parent, check
|
// get parent, check
|
||||||
elem = FindSubElem(joint_elem, "parent", true);
|
elem = FindSubElem(joint_elem, "parent", true);
|
||||||
ReadAttrTxt(elem, "link", name, true);
|
ReadAttrTxt(elem, "link", name, true);
|
||||||
|
|||||||
Vendored
+4
-3
@@ -28,15 +28,16 @@
|
|||||||
<inertial pos="0 0 0" mass="1" diaginertia="0.01 0.01 0.01"/>
|
<inertial pos="0 0 0" mass="1" diaginertia="0.01 0.01 0.01"/>
|
||||||
<freejoint/>
|
<freejoint/>
|
||||||
|
|
||||||
<flexcomp name="f1" type="ellipsoid" rgba=".8 .2 .2 1" radius="0.001" count="5 5 5"
|
<flexcomp name="f1" type="ellipsoid" rgba=".8 .2 .2 1" radius="0.001" count="4 4 4"
|
||||||
spacing=".025 .025 .025" dim="3" mass="1">
|
spacing=".025 .025 .025" dim="3" mass="1">
|
||||||
<edge equality="true" solref="0.15 0.2" stiffness="0" damping="0"/>
|
<edge equality="true" solref="0.15 0.2" stiffness="0" damping="0"/>
|
||||||
</flexcomp>
|
</flexcomp>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
<flexcomp name="f2" type="grid" rgba="1 1 0 1" radius="0.003" dim="2" pos="0 0 .6"
|
<flexcomp name="f2" type="grid" rgba="1 1 0 1" radius="0.003" dim="2" pos="0 0 .1"
|
||||||
zaxis="1 1 1" count="7 7 1" mass="1" spacing="0.02 0.03 0.04" material="grid">
|
zaxis="0 0 1" count="6 6 1" mass="1" spacing="0.02 0.03 0.04" material="grid">
|
||||||
<edge equality="true" solref="0.15 0.2" stiffness="0" damping="0"/>
|
<edge equality="true" solref="0.15 0.2" stiffness="0" damping="0"/>
|
||||||
|
<pin id="0"/>
|
||||||
</flexcomp>
|
</flexcomp>
|
||||||
|
|
||||||
<flexcomp name="f3" type="grid" rgba=".6 .5 .1 1" radius="0.003" dim="3" pos="0 0 .3"
|
<flexcomp name="f3" type="grid" rgba=".6 .5 .1 1" radius="0.003" dim="3" pos="0 0 .3"
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ public class MujocoBinaryRetriever {
|
|||||||
if (AssetDatabase.LoadMainAssetAtPath(mujocoPath + "/mujoco.dylib") == null) {
|
if (AssetDatabase.LoadMainAssetAtPath(mujocoPath + "/mujoco.dylib") == null) {
|
||||||
File.Copy(
|
File.Copy(
|
||||||
"/Applications/MuJoCo.app/Contents/Frameworks" +
|
"/Applications/MuJoCo.app/Contents/Frameworks" +
|
||||||
"/mujoco.framework/Versions/Current/libmujoco.3.0.1.dylib",
|
"/mujoco.framework/Versions/Current/libmujoco.3.0.2.dylib",
|
||||||
mujocoPath + "/mujoco.dylib");
|
mujocoPath + "/mujoco.dylib");
|
||||||
AssetDatabase.Refresh();
|
AssetDatabase.Refresh();
|
||||||
}
|
}
|
||||||
@@ -45,7 +45,7 @@ public class MujocoBinaryRetriever {
|
|||||||
if (AssetDatabase.LoadMainAssetAtPath(mujocoPath + "/libmujoco.so") == null) {
|
if (AssetDatabase.LoadMainAssetAtPath(mujocoPath + "/libmujoco.so") == null) {
|
||||||
File.Copy(
|
File.Copy(
|
||||||
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) +
|
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) +
|
||||||
"/.mujoco/mujoco-3.0.1/lib/libmujoco.so.3.0.1",
|
"/.mujoco/mujoco-3.0.2/lib/libmujoco.so.3.0.2",
|
||||||
mujocoPath + "/libmujoco.so");
|
mujocoPath + "/libmujoco.so");
|
||||||
AssetDatabase.Refresh();
|
AssetDatabase.Refresh();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ public const int mjMAXLINEPNT = 1000;
|
|||||||
public const int mjMAXPLANEGRID = 200;
|
public const int mjMAXPLANEGRID = 200;
|
||||||
public const bool THIRD_PARTY_MUJOCO_MJXMACRO_H_ = true;
|
public const bool THIRD_PARTY_MUJOCO_MJXMACRO_H_ = true;
|
||||||
public const bool THIRD_PARTY_MUJOCO_MUJOCO_H_ = true;
|
public const bool THIRD_PARTY_MUJOCO_MUJOCO_H_ = true;
|
||||||
public const int mjVERSION_HEADER = 301;
|
public const int mjVERSION_HEADER = 302;
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------Enums------------------------------------
|
// ------------------------------------Enums------------------------------------
|
||||||
|
|||||||
@@ -34,10 +34,6 @@ public enum IntegratorType {
|
|||||||
@implicitfast
|
@implicitfast
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum CollisionCheckType {
|
|
||||||
all
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum FrictionConeType {
|
public enum FrictionConeType {
|
||||||
pyramidal,
|
pyramidal,
|
||||||
elliptic
|
elliptic
|
||||||
@@ -151,7 +147,7 @@ public struct MjSizeStruct {
|
|||||||
};
|
};
|
||||||
|
|
||||||
public void ParseMjcf(XmlElement mjcf) {
|
public void ParseMjcf(XmlElement mjcf) {
|
||||||
Memory = mjcf.GetAttribute("memory");
|
Memory = mjcf.GetStringAttribute("memory", "-1");
|
||||||
}
|
}
|
||||||
|
|
||||||
public XmlElement ToMjcf(XmlElement mjcf) {
|
public XmlElement ToMjcf(XmlElement mjcf) {
|
||||||
@@ -183,8 +179,6 @@ public struct MjOptionStruct {
|
|||||||
public SolverImpedance OverrideSolImp;
|
public SolverImpedance OverrideSolImp;
|
||||||
[Tooltip("Numerical integrator.")]
|
[Tooltip("Numerical integrator.")]
|
||||||
public IntegratorType Integrator;
|
public IntegratorType Integrator;
|
||||||
[Tooltip("What collision types should be checked.")]
|
|
||||||
public CollisionCheckType Collision;
|
|
||||||
[Tooltip("How to model the friction cone.")]
|
[Tooltip("How to model the friction cone.")]
|
||||||
public FrictionConeType Cone;
|
public FrictionConeType Cone;
|
||||||
[Tooltip("How to represent the constraint Jacobian.")]
|
[Tooltip("How to represent the constraint Jacobian.")]
|
||||||
@@ -217,7 +211,6 @@ public struct MjOptionStruct {
|
|||||||
OverrideSolRef = SolverReference.Default,
|
OverrideSolRef = SolverReference.Default,
|
||||||
OverrideSolImp = SolverImpedance.Default,
|
OverrideSolImp = SolverImpedance.Default,
|
||||||
Integrator = IntegratorType.Euler,
|
Integrator = IntegratorType.Euler,
|
||||||
Collision = CollisionCheckType.all,
|
|
||||||
Cone = FrictionConeType.pyramidal,
|
Cone = FrictionConeType.pyramidal,
|
||||||
Jacobian = JacobianType.auto,
|
Jacobian = JacobianType.auto,
|
||||||
Solver = ConstraintSolverType.Newton,
|
Solver = ConstraintSolverType.Newton,
|
||||||
@@ -260,7 +253,6 @@ public struct MjOptionStruct {
|
|||||||
OverrideSolImp.FromMjcf(mjcf, "o_solimp");
|
OverrideSolImp.FromMjcf(mjcf, "o_solimp");
|
||||||
|
|
||||||
Integrator = mjcf.GetEnumAttribute<IntegratorType>("integrator", localDefault.Integrator);
|
Integrator = mjcf.GetEnumAttribute<IntegratorType>("integrator", localDefault.Integrator);
|
||||||
Collision = mjcf.GetEnumAttribute<CollisionCheckType>("collision", localDefault.Collision);
|
|
||||||
Cone = mjcf.GetEnumAttribute<FrictionConeType>("cone", localDefault.Cone);
|
Cone = mjcf.GetEnumAttribute<FrictionConeType>("cone", localDefault.Cone);
|
||||||
Jacobian = mjcf.GetEnumAttribute<JacobianType>("jacobian", localDefault.Jacobian);
|
Jacobian = mjcf.GetEnumAttribute<JacobianType>("jacobian", localDefault.Jacobian);
|
||||||
Solver = mjcf.GetEnumAttribute<ConstraintSolverType>("solver", localDefault.Solver);
|
Solver = mjcf.GetEnumAttribute<ConstraintSolverType>("solver", localDefault.Solver);
|
||||||
@@ -295,7 +287,6 @@ public struct MjOptionStruct {
|
|||||||
OverrideSolImp.ToMjcf(mjcf, "o_solimp");
|
OverrideSolImp.ToMjcf(mjcf, "o_solimp");
|
||||||
|
|
||||||
mjcf.SetAttribute("integrator", Integrator.ToString());
|
mjcf.SetAttribute("integrator", Integrator.ToString());
|
||||||
mjcf.SetAttribute("collision", Collision.ToString());
|
|
||||||
mjcf.SetAttribute("cone", Cone.ToString());
|
mjcf.SetAttribute("cone", Cone.ToString());
|
||||||
mjcf.SetAttribute("jacobian", Jacobian.ToString());
|
mjcf.SetAttribute("jacobian", Jacobian.ToString());
|
||||||
mjcf.SetAttribute("solver", Solver.ToString());
|
mjcf.SetAttribute("solver", Solver.ToString());
|
||||||
|
|||||||
@@ -69,7 +69,6 @@ public class MjGlobalSettingsGenerationTests {
|
|||||||
Assert.That(_doc.OuterXml, Does.Contain(@"o_margin=""4.5"""));
|
Assert.That(_doc.OuterXml, Does.Contain(@"o_margin=""4.5"""));
|
||||||
Assert.That(_doc.OuterXml, Does.Contain(@"integrator=""RK4"""));
|
Assert.That(_doc.OuterXml, Does.Contain(@"integrator=""RK4"""));
|
||||||
Assert.That(_doc.OuterXml, Does.Contain(@"cone=""elliptic"""));
|
Assert.That(_doc.OuterXml, Does.Contain(@"cone=""elliptic"""));
|
||||||
Assert.That(_doc.OuterXml, Does.Contain(@"collision=""all""")); // the default value.
|
|
||||||
Assert.That(_doc.OuterXml, Does.Contain(@"jacobian=""dense"""));
|
Assert.That(_doc.OuterXml, Does.Contain(@"jacobian=""dense"""));
|
||||||
Assert.That(_doc.OuterXml, Does.Contain(@"o_solref="));
|
Assert.That(_doc.OuterXml, Does.Contain(@"o_solref="));
|
||||||
Assert.That(_doc.OuterXml, Does.Contain(@"o_solimp="));
|
Assert.That(_doc.OuterXml, Does.Contain(@"o_solimp="));
|
||||||
@@ -143,7 +142,6 @@ public class MjGlobalSettingsParsingTests {
|
|||||||
_option.SetAttribute("o_margin", "4.5");
|
_option.SetAttribute("o_margin", "4.5");
|
||||||
_option.SetAttribute("integrator", "RK4");
|
_option.SetAttribute("integrator", "RK4");
|
||||||
_option.SetAttribute("cone", "elliptic");
|
_option.SetAttribute("cone", "elliptic");
|
||||||
_option.SetAttribute("collisionchecktype", "all");
|
|
||||||
_option.SetAttribute("jacobian", "dense");
|
_option.SetAttribute("jacobian", "dense");
|
||||||
_option.SetAttribute("solver", "PGS");
|
_option.SetAttribute("solver", "PGS");
|
||||||
_option.SetAttribute("iterations", "12");
|
_option.SetAttribute("iterations", "12");
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "org.mujoco",
|
"name": "org.mujoco",
|
||||||
"displayName": "MuJoCo",
|
"displayName": "MuJoCo",
|
||||||
"version": "3.0.1",
|
"version": "3.0.2",
|
||||||
"description": "MuJoCo importer and runtime plug-in",
|
"description": "MuJoCo importer and runtime plug-in",
|
||||||
"dependencies": {},
|
"dependencies": {},
|
||||||
"author": {
|
"author": {
|
||||||
|
|||||||
Reference in New Issue
Block a user