Merge branch 'google-deepmind:main' into usd-integration

This commit is contained in:
Abhishek Joshi
2023-11-19 10:33:14 -06:00
committed by GitHub
29 changed files with 99 additions and 81 deletions
+1 -1
View File
@@ -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"
) )
+1 -1
View File
@@ -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."
) )
+4 -4
View File
@@ -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"
+4 -4
View File
@@ -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"
+1 -1
View File
@@ -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.
+5
View File
@@ -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
View File
@@ -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
View File
@@ -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
_______ _______
+1 -1
View File
@@ -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
View File
@@ -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"
+3 -3
View File
@@ -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
+4 -4
View File
@@ -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>
+3 -3
View File
@@ -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
+1 -1
View File
@@ -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"
) )
+1 -1
View File
@@ -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"
) )
+6 -6
View File
@@ -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}
}; };
+2 -2
View File
@@ -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
View File
@@ -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);
+4 -3
View File
@@ -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();
} }
+1 -1
View File
@@ -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------------------------------------
+1 -10
View File
@@ -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
View File
@@ -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": {