diff --git a/CMakeLists.txt b/CMakeLists.txt index 8a76576a..7bafe59a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,7 +28,7 @@ set(MSVC_INCREMENTAL_DEFAULT ON) project( mujoco - VERSION 3.0.1 + VERSION 3.0.2 DESCRIPTION "MuJoCo Physics Simulator" HOMEPAGE_URL "https://mujoco.org" ) diff --git a/cmake/MujocoDependencies.cmake b/cmake/MujocoDependencies.cmake index 4e3e2c8d..87bb13a7 100644 --- a/cmake/MujocoDependencies.cmake +++ b/cmake/MujocoDependencies.cmake @@ -39,7 +39,7 @@ set(MUJOCO_DEP_VERSION_qhull CACHE STRING "Version of `qhull` to be fetched." ) set(MUJOCO_DEP_VERSION_Eigen3 - e8515f78ac098329ab9f8cab21c87caede090a3f + aa6964bf3a34fd607837dd8123bc42465185c4f8 CACHE STRING "Version of `Eigen3` to be fetched." ) diff --git a/dist/mujoco.rc b/dist/mujoco.rc index eecb3c24..e52e3530 100644 --- a/dist/mujoco.rc +++ b/dist/mujoco.rc @@ -1,6 +1,6 @@ 1 VERSIONINFO -FILEVERSION 3,0,1,0 -PRODUCTVERSION 3,0,1,0 +FILEVERSION 3,0,2,0 +PRODUCTVERSION 3,0,2,0 FILEOS 0x4 FILETYPE 0x1 { @@ -9,9 +9,9 @@ FILETYPE 0x1 BLOCK "040904b0" { VALUE "ProductName", "MuJoCo" - VALUE "ProductVersion", "3.0.1" + VALUE "ProductVersion", "3.0.2" VALUE "FileDescription", "MuJoCo" - VALUE "FileVersion", "3.0.1" + VALUE "FileVersion", "3.0.2" VALUE "InternalName", "mujoco.dll" VALUE "OriginalFilename", "mujoco.dll" VALUE "CompanyName", "Google DeepMind" diff --git a/dist/simulate.rc b/dist/simulate.rc index bcf38e79..4835c979 100644 --- a/dist/simulate.rc +++ b/dist/simulate.rc @@ -1,8 +1,8 @@ MUJOCO ICON "mujoco.ico" 1 VERSIONINFO -FILEVERSION 3,0,1,0 -PRODUCTVERSION 3,0,1,0 +FILEVERSION 3,0,2,0 +PRODUCTVERSION 3,0,2,0 FILEOS 0x4 FILETYPE 0x1 { @@ -11,9 +11,9 @@ FILETYPE 0x1 BLOCK "040904b0" { VALUE "ProductName", "MuJoCo" - VALUE "ProductVersion", "3.0.1" + VALUE "ProductVersion", "3.0.2" VALUE "FileDescription", "MuJoCo" - VALUE "FileVersion", "3.0.1" + VALUE "FileVersion", "3.0.2" VALUE "InternalName", "simulate.exe" VALUE "OriginalFilename", "simulate.exe" VALUE "CompanyName", "Google DeepMind" diff --git a/doc/APIreference/APIglobals.rst b/doc/APIreference/APIglobals.rst index 6f821776..33c5401c 100644 --- a/doc/APIreference/APIglobals.rst +++ b/doc/APIreference/APIglobals.rst @@ -522,7 +522,7 @@ shown in the table below. Their names are in the format ``mjKEY_XXX``. They corr - Maximum number of UI rectangles. Defined in `mjui.h `_. * - ``mjVERSION_HEADER`` - - 301 + - 302 - 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 number with the same meaning but for the compiled library. diff --git a/doc/computation/index.rst b/doc/computation/index.rst index ca7c9e98..5665fb02 100644 --- a/doc/computation/index.rst +++ b/doc/computation/index.rst @@ -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 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` attribute of :ref:`equality constraints`. + User data: ``userdata`` ``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`. diff --git a/doc/images/mjx/SPS.svg b/doc/images/mjx/SPS.svg new file mode 100644 index 00000000..a35a2508 --- /dev/null +++ b/doc/images/mjx/SPS.svg @@ -0,0 +1 @@ + diff --git a/doc/images/mjx/mujoco_vs_mjx_large_scene.png b/doc/images/mjx/mujoco_vs_mjx_large_scene.png deleted file mode 100644 index d9ef4b54..00000000 Binary files a/doc/images/mjx/mujoco_vs_mjx_large_scene.png and /dev/null differ diff --git a/doc/mjx.rst b/doc/mjx.rst index 481da5c8..2bdd9a58 100644 --- a/doc/mjx.rst +++ b/doc/mjx.rst @@ -171,7 +171,7 @@ The following features are **fully supported** in MJX: .. list-table:: :width: 90% :align: left - :widths: 1 5 + :widths: 2 5 :header-rows: 1 * - Category @@ -182,9 +182,12 @@ The following features are **fully supported** in MJX: - ``FREE``, ``BALL``, ``SLIDE``, ``HINGE`` * - :ref:`Transmission ` - ``TRN_JOINT`` - * - :ref:`Actuation ` - - ``DYN_NONE``, ``DYN_INTEGRATOR``, ``DYN_FILTER``, ``GAIN_FIXED``, ``GAIN_AFFINE``, ``BIAS_NONE``, - ``BIAS_AFFINE`` + * - :ref:`Actuator Dynamics ` + - ``NONE``, ``INTEGRATOR``, ``FILTER`` + * - :ref:`Actuator Gain ` + - ``FIXED``, ``AFFINE`` + * - :ref:`Actuator Bias ` + - ``NONE``, ``AFFINE`` * - :ref:`Geom ` - ``PLANE``, ``SPHERE``, ``CAPSULE``, ``BOX``, ``MESH`` * - :ref:`Constraint ` @@ -207,7 +210,7 @@ The following features are **in development** and coming soon: .. list-table:: :width: 90% :align: left - :widths: 1 5 + :widths: 2 5 :header-rows: 1 * - Category @@ -216,8 +219,16 @@ The following features are **in development** and coming soon: - :ref:`Inverse ` * - :ref:`Transmission ` - ``TRN_TENDON`` + * - :ref:`Actuator Dynamics ` + - ``MUSCLE`` + * - :ref:`Actuator Gain ` + - ``MUSCLE`` + * - :ref:`Actuator Bias ` + - ``MUSCLE`` + * - :ref:`Tendon Wrapping ` + - ``NONE``, ``JOINT``, ``PULLEY``, ``SITE``, ``SPHERE``, ``CYLINDER`` * - :ref:`Geom ` - - ``HFIELD``, ``ELLIPSOID``, ``CYLINDER``, ``SDF`` + - ``HFIELD``, ``ELLIPSOID``, ``CYLINDER`` * - :ref:`Constraint ` - ``CONTACT_FRICTIONLESS``, ``CONTACT_ELLIPTIC``, ``FRICTION_DOF`` * - :ref:`Integrator ` @@ -233,24 +244,32 @@ The following features are **in development** and coming soon: * - :ref:`Equality ` - ``TENDON`` * - :ref:`Sensors ` - - All except ``mjSENS_PLUGIN``, ``mjSENS_USER`` + - All except ``PLUGIN``, ``USER`` The following features are **unsupported**: .. list-table:: :width: 90% :align: left - :widths: 1 5 + :widths: 2 5 :header-rows: 1 * - Category - Feature * - :ref:`Transmission ` - - ``TRN_JOINTINPARENT``, ``TRN_SLIDERCRANK``, ``TRN_SITE``, ``TRN_BODY``, ``MUSCLE`` + - ``TRN_JOINTINPARENT``, ``TRN_SLIDERCRANK``, ``TRN_SITE``, ``TRN_BODY`` + * - :ref:`Actuator Dynamics ` + - ``FILTEREXACT``, ``USER`` + * - :ref:`Actuator Gain ` + - ``USER`` + * - :ref:`Actuator Bias ` + - ``USER`` * - :ref:`Solver ` - ``PGS`` - * - :ref:`Callbacks ` - - ``mjDYN_USER``, ``mjGAIN_USER``, ``mjBIAS_USER``, ``mjSENS_USER`` + * - :ref:`Sensors ` + - ``PLUGIN``, ``USER`` + * - :ref:`Geom ` + - ``SDF`` .. _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 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 - simulate a scene with a variable number of humanoids (from 1 to 10) and then compare MJX's performance on an Nvidia - A100 GPU to MuJoCo on a 12-core workstation: + To see how this affects simulation, let us consider a physics scene with increasing numbers of humanoid bodies, + 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 + it using :ref:`testspeed`, 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 `__ + machine using a batch size of 16384. Note the vertical scale is logarithmic. - .. figure:: images/mjx/mujoco_vs_mjx_large_scene.png - :width: 658px - :align: center + .. figure:: images/mjx/SPS.svg + :width: 95% + :align: center - Notice that as we increase the number of humanoids (which increases the number of potential contacts in a scene), MJX - performance degrades more rapidly than MuJoCo. At the limit, for such a large scene, MuJoCo performance nearly - matches MJX. + The values for a single humanoid (leftmost datapoints) for the four timed architectures are **320K**, **1.8M**, + **950K** and **2.7M** steps per second, respectively. Note that as we increase the number of humanoids (which + increases the number of potential contacts in a scene), MJX throughput decreases more rapidly than MuJoCo. Scenes with collisions between meshes with many vertices MJX supports mesh geometries and can determine if two meshes are colliding using branchless versions of diff --git a/doc/unity.rst b/doc/unity.rst index 13ddec5a..457c2cd7 100644 --- a/doc/unity.rst +++ b/doc/unity.rst @@ -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 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``. Linux _____ 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 _______ diff --git a/include/mujoco/mujoco.h b/include/mujoco/mujoco.h index 54e6e582..ac1b509e 100644 --- a/include/mujoco/mujoco.h +++ b/include/mujoco/mujoco.h @@ -24,7 +24,7 @@ extern "C" { #endif // 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 #include diff --git a/mjx/mujoco/mjx/integration_test/collision_driver_test.py b/mjx/mujoco/mjx/integration_test/collision_driver_test.py index c5015446..d49ef10a 100644 --- a/mjx/mujoco/mjx/integration_test/collision_driver_test.py +++ b/mjx/mujoco/mjx/integration_test/collision_driver_test.py @@ -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) -class CollisionDriverTest(parameterized.TestCase): +class CollisionDriverIntegrationTest(parameterized.TestCase): @parameterized.parameters(list(range(256))) def test_collision_driver(self, seed): diff --git a/mjx/mujoco/mjx/integration_test/forward_test.py b/mjx/mujoco/mjx/integration_test/forward_test.py index bff9ed8b..6fa913c4 100644 --- a/mjx/mujoco/mjx/integration_test/forward_test.py +++ b/mjx/mujoco/mjx/integration_test/forward_test.py @@ -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) -class ActuationTest(parameterized.TestCase): +class ActuationIntegrationTest(parameterized.TestCase): @parameterized.parameters(list(range(30))) def test_actuation(self, seed): diff --git a/mjx/mujoco/mjx/integration_test/smooth_test.py b/mjx/mujoco/mjx/integration_test/smooth_test.py index 92284565..c924e005 100644 --- a/mjx/mujoco/mjx/integration_test/smooth_test.py +++ b/mjx/mujoco/mjx/integration_test/smooth_test.py @@ -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) -class TransmissionTest(parameterized.TestCase): +class TransmissionIntegrationTest(parameterized.TestCase): @parameterized.parameters(list(range(30))) def test_transmission(self, seed): diff --git a/mjx/pyproject.toml b/mjx/pyproject.toml index bea4b310..a385e9af 100644 --- a/mjx/pyproject.toml +++ b/mjx/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name="mujoco-mjx" -version = "3.0.1" +version = "3.0.2" authors = [ {name = "Google DeepMind", email = "mujoco@deepmind.com"}, ] @@ -31,13 +31,13 @@ dependencies = [ "etils[epath]", "jax", "jaxlib", - "mujoco>=3.0.1.dev0", + "mujoco>=3.0.2.dev0", "scipy", "trimesh", ] [project.urls] 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" -Changelog = "https://mujoco.readthedocs.io/en/3.0.1/changelog.html" +Changelog = "https://mujoco.readthedocs.io/en/3.0.2/changelog.html" diff --git a/python/mujoco/CMakeLists.txt b/python/mujoco/CMakeLists.txt index 942397d5..064f087b 100644 --- a/python/mujoco/CMakeLists.txt +++ b/python/mujoco/CMakeLists.txt @@ -84,7 +84,7 @@ if(NOT TARGET mujoco) if(MUJOCO_FRAMEWORK) message("MuJoCo framework is at ${MUJOCO_FRAMEWORK}/mujoco.framework") 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}) endif() @@ -92,7 +92,7 @@ if(NOT TARGET mujoco) if(NOT MUJOCO_FRAMEWORK) 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) message("MuJoCo is at ${MUJOCO_LIBRARY}") @@ -173,7 +173,7 @@ findorfetch( GIT_REPO https://gitlab.com/libeigen/eigen GIT_TAG - e8515f78ac098329ab9f8cab21c87caede090a3f + aa6964bf3a34fd607837dd8123bc42465185c4f8 TARGETS Eigen3::Eigen EXCLUDE_FROM_ALL diff --git a/python/mujoco/mjpython/Info.plist b/python/mujoco/mjpython/Info.plist index 39f09da3..6c6d68b2 100644 --- a/python/mujoco/mjpython/Info.plist +++ b/python/mujoco/mjpython/Info.plist @@ -7,13 +7,13 @@ CFBundleIdentifier org.mujoco.mjpython CFBundleVersion - 3.0.1 + 3.0.2 CFBundleGetInfoString - 3.0.1 + 3.0.2 CFBundleLongVersionString - 3.0.1 + 3.0.2 CFBundleShortVersionString - 3.0.1 + 3.0.2 CFBundleExecutable mjpython CFBundleIconFile diff --git a/python/pyproject.toml b/python/pyproject.toml index e42f08cf..81b7da8e 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "mujoco" -version = "3.0.1" +version = "3.0.2" authors = [ {name = "Google DeepMind", email = "mujoco@deepmind.com"}, ] @@ -36,9 +36,9 @@ dynamic = ["readme", "scripts"] [project.urls] 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" -Changelog = "https://mujoco.readthedocs.io/en/3.0.1/changelog.html" +Changelog = "https://mujoco.readthedocs.io/en/3.0.2/changelog.html" [tool.setuptools] include-package-data = false diff --git a/sample/CMakeLists.txt b/sample/CMakeLists.txt index 82e8dc49..3dceb85c 100644 --- a/sample/CMakeLists.txt +++ b/sample/CMakeLists.txt @@ -24,7 +24,7 @@ set(MSVC_INCREMENTAL_DEFAULT ON) project( mujoco_samples - VERSION 3.0.1 + VERSION 3.0.2 DESCRIPTION "MuJoCo samples binaries" HOMEPAGE_URL "https://mujoco.org" ) diff --git a/simulate/CMakeLists.txt b/simulate/CMakeLists.txt index 5ee3a866..464fc4c5 100644 --- a/simulate/CMakeLists.txt +++ b/simulate/CMakeLists.txt @@ -29,7 +29,7 @@ set(MUJOCO_DEP_VERSION_lodepng project( mujoco_simulate - VERSION 3.0.1 + VERSION 3.0.2 DESCRIPTION "MuJoCo simulate binaries" HOMEPAGE_URL "https://mujoco.org" ) diff --git a/simulate/simulate.cc b/simulate/simulate.cc index e73fd55f..676b1594 100644 --- a/simulate/simulate.cc +++ b/simulate/simulate.cc @@ -718,12 +718,12 @@ void MakePhysicsSection(mj::Simulate* sim, int oldstate) { }; mjuiDef defDisableActuator[] = { {mjITEM_SEPARATOR, "Actuator Group Enable", 1}, - {mjITEM_CHECKBYTE, "Act Group 0", 2, sim->enableactuator+0, " 0"}, - {mjITEM_CHECKBYTE, "Act Group 1", 2, sim->enableactuator+1, " 1"}, - {mjITEM_CHECKBYTE, "Act Group 2", 2, sim->enableactuator+2, " 2"}, - {mjITEM_CHECKBYTE, "Act Group 3", 2, sim->enableactuator+3, " 3"}, - {mjITEM_CHECKBYTE, "Act Group 4", 2, sim->enableactuator+4, " 4"}, - {mjITEM_CHECKBYTE, "Act Group 5", 2, sim->enableactuator+5, " 5"}, + {mjITEM_CHECKBYTE, "Act Group 0", 2, sim->enableactuator+0, ""}, + {mjITEM_CHECKBYTE, "Act Group 1", 2, sim->enableactuator+1, ""}, + {mjITEM_CHECKBYTE, "Act Group 2", 2, sim->enableactuator+2, ""}, + {mjITEM_CHECKBYTE, "Act Group 3", 2, sim->enableactuator+3, ""}, + {mjITEM_CHECKBYTE, "Act Group 4", 2, sim->enableactuator+4, ""}, + {mjITEM_CHECKBYTE, "Act Group 5", 2, sim->enableactuator+5, ""}, {mjITEM_END} }; diff --git a/src/engine/engine_support.c b/src/engine/engine_support.c index a6ef399a..b223a3e2 100644 --- a/src/engine/engine_support.c +++ b/src/engine/engine_support.c @@ -38,8 +38,8 @@ //-------------------------- Constants ------------------------------------------------------------- - #define mjVERSION 301 -#define mjVERSIONSTRING "3.0.1" + #define mjVERSION 302 +#define mjVERSIONSTRING "3.0.2" // names of disable flags const char* mjDISABLESTRING[mjNDISABLE] = { diff --git a/src/xml/xml_urdf.cc b/src/xml/xml_urdf.cc index 13c12ce2..dab94fa8 100644 --- a/src/xml/xml_urdf.cc +++ b/src/xml/xml_urdf.cc @@ -367,7 +367,7 @@ void mjXURDF::Joint(XMLElement* joint_elem) { throw mjXError(joint_elem, "invalid joint type in URDF joint definition"); } ReadAttrTxt(joint_elem, "name", jntname, true); - + jntname = GetPrefixedName(jntname); // get parent, check elem = FindSubElem(joint_elem, "parent", true); ReadAttrTxt(elem, "link", name, true); diff --git a/test/testdata/flex.xml b/test/testdata/flex.xml index bebf0163..5fdc6ca0 100644 --- a/test/testdata/flex.xml +++ b/test/testdata/flex.xml @@ -28,15 +28,16 @@ - - + + ("integrator", localDefault.Integrator); - Collision = mjcf.GetEnumAttribute("collision", localDefault.Collision); Cone = mjcf.GetEnumAttribute("cone", localDefault.Cone); Jacobian = mjcf.GetEnumAttribute("jacobian", localDefault.Jacobian); Solver = mjcf.GetEnumAttribute("solver", localDefault.Solver); @@ -295,7 +287,6 @@ public struct MjOptionStruct { OverrideSolImp.ToMjcf(mjcf, "o_solimp"); mjcf.SetAttribute("integrator", Integrator.ToString()); - mjcf.SetAttribute("collision", Collision.ToString()); mjcf.SetAttribute("cone", Cone.ToString()); mjcf.SetAttribute("jacobian", Jacobian.ToString()); mjcf.SetAttribute("solver", Solver.ToString()); diff --git a/unity/Tests/Editor/Components/MjGlobalSettingsTests.cs b/unity/Tests/Editor/Components/MjGlobalSettingsTests.cs index f3a6a218..6575bbf1 100644 --- a/unity/Tests/Editor/Components/MjGlobalSettingsTests.cs +++ b/unity/Tests/Editor/Components/MjGlobalSettingsTests.cs @@ -69,7 +69,6 @@ public class MjGlobalSettingsGenerationTests { Assert.That(_doc.OuterXml, Does.Contain(@"o_margin=""4.5""")); Assert.That(_doc.OuterXml, Does.Contain(@"integrator=""RK4""")); 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(@"o_solref=")); Assert.That(_doc.OuterXml, Does.Contain(@"o_solimp=")); @@ -143,7 +142,6 @@ public class MjGlobalSettingsParsingTests { _option.SetAttribute("o_margin", "4.5"); _option.SetAttribute("integrator", "RK4"); _option.SetAttribute("cone", "elliptic"); - _option.SetAttribute("collisionchecktype", "all"); _option.SetAttribute("jacobian", "dense"); _option.SetAttribute("solver", "PGS"); _option.SetAttribute("iterations", "12"); diff --git a/unity/package.json b/unity/package.json index 2f69424c..9c093316 100644 --- a/unity/package.json +++ b/unity/package.json @@ -1,7 +1,7 @@ { "name": "org.mujoco", "displayName": "MuJoCo", - "version": "3.0.1", + "version": "3.0.2", "description": "MuJoCo importer and runtime plug-in", "dependencies": {}, "author": {