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(
|
||||
mujoco
|
||||
VERSION 3.0.1
|
||||
VERSION 3.0.2
|
||||
DESCRIPTION "MuJoCo Physics Simulator"
|
||||
HOMEPAGE_URL "https://mujoco.org"
|
||||
)
|
||||
|
||||
@@ -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."
|
||||
)
|
||||
|
||||
|
||||
Vendored
+4
-4
@@ -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"
|
||||
|
||||
Vendored
+4
-4
@@ -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"
|
||||
|
||||
@@ -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 <https://github.com/google-deepmind/mujoco/blob/main/include/mujoco/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.
|
||||
|
||||
@@ -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<equality-connect-active>` attribute of :ref:`equality constraints<coEquality>`.
|
||||
|
||||
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<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::
|
||||
: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 <mjtTrn>`
|
||||
- ``TRN_JOINT``
|
||||
* - :ref:`Actuation <geactuation>`
|
||||
- ``DYN_NONE``, ``DYN_INTEGRATOR``, ``DYN_FILTER``, ``GAIN_FIXED``, ``GAIN_AFFINE``, ``BIAS_NONE``,
|
||||
``BIAS_AFFINE``
|
||||
* - :ref:`Actuator Dynamics <mjtDyn>`
|
||||
- ``NONE``, ``INTEGRATOR``, ``FILTER``
|
||||
* - :ref:`Actuator Gain <mjtGain>`
|
||||
- ``FIXED``, ``AFFINE``
|
||||
* - :ref:`Actuator Bias <mjtBias>`
|
||||
- ``NONE``, ``AFFINE``
|
||||
* - :ref:`Geom <mjtGeom>`
|
||||
- ``PLANE``, ``SPHERE``, ``CAPSULE``, ``BOX``, ``MESH``
|
||||
* - :ref:`Constraint <mjtConstraint>`
|
||||
@@ -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 <mj_inverse>`
|
||||
* - :ref:`Transmission <mjtTrn>`
|
||||
- ``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>`
|
||||
- ``HFIELD``, ``ELLIPSOID``, ``CYLINDER``, ``SDF``
|
||||
- ``HFIELD``, ``ELLIPSOID``, ``CYLINDER``
|
||||
* - :ref:`Constraint <mjtConstraint>`
|
||||
- ``CONTACT_FRICTIONLESS``, ``CONTACT_ELLIPTIC``, ``FRICTION_DOF``
|
||||
* - :ref:`Integrator <mjtIntegrator>`
|
||||
@@ -233,24 +244,32 @@ The following features are **in development** and coming soon:
|
||||
* - :ref:`Equality <mjtEq>`
|
||||
- ``TENDON``
|
||||
* - :ref:`Sensors <mjtSensor>`
|
||||
- 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 <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>`
|
||||
- ``PGS``
|
||||
* - :ref:`Callbacks <glphysics>`
|
||||
- ``mjDYN_USER``, ``mjGAIN_USER``, ``mjBIAS_USER``, ``mjSENS_USER``
|
||||
* - :ref:`Sensors <mjtSensor>`
|
||||
- ``PLUGIN``, ``USER``
|
||||
* - :ref:`Geom <mjtGeom>`
|
||||
- ``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<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
|
||||
: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
|
||||
|
||||
+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
|
||||
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
|
||||
_______
|
||||
|
||||
@@ -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 <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)
|
||||
|
||||
|
||||
class CollisionDriverTest(parameterized.TestCase):
|
||||
class CollisionDriverIntegrationTest(parameterized.TestCase):
|
||||
|
||||
@parameterized.parameters(list(range(256)))
|
||||
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)
|
||||
|
||||
|
||||
class ActuationTest(parameterized.TestCase):
|
||||
class ActuationIntegrationTest(parameterized.TestCase):
|
||||
|
||||
@parameterized.parameters(list(range(30)))
|
||||
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)
|
||||
|
||||
|
||||
class TransmissionTest(parameterized.TestCase):
|
||||
class TransmissionIntegrationTest(parameterized.TestCase):
|
||||
|
||||
@parameterized.parameters(list(range(30)))
|
||||
def test_transmission(self, seed):
|
||||
|
||||
+4
-4
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>org.mujoco.mjpython</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>3.0.1</string>
|
||||
<string>3.0.2</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>3.0.1</string>
|
||||
<string>3.0.2</string>
|
||||
<key>CFBundleLongVersionString</key>
|
||||
<string>3.0.1</string>
|
||||
<string>3.0.2</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>3.0.1</string>
|
||||
<string>3.0.2</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>mjpython</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
)
|
||||
|
||||
@@ -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"
|
||||
)
|
||||
|
||||
@@ -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}
|
||||
};
|
||||
|
||||
|
||||
@@ -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] = {
|
||||
|
||||
+1
-1
@@ -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);
|
||||
|
||||
Vendored
+4
-3
@@ -28,15 +28,16 @@
|
||||
<inertial pos="0 0 0" mass="1" diaginertia="0.01 0.01 0.01"/>
|
||||
<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">
|
||||
<edge equality="true" solref="0.15 0.2" stiffness="0" damping="0"/>
|
||||
</flexcomp>
|
||||
</body>
|
||||
|
||||
<flexcomp name="f2" type="grid" rgba="1 1 0 1" radius="0.003" dim="2" pos="0 0 .6"
|
||||
zaxis="1 1 1" count="7 7 1" mass="1" spacing="0.02 0.03 0.04" material="grid">
|
||||
<flexcomp name="f2" type="grid" rgba="1 1 0 1" radius="0.003" dim="2" pos="0 0 .1"
|
||||
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"/>
|
||||
<pin id="0"/>
|
||||
</flexcomp>
|
||||
|
||||
<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) {
|
||||
File.Copy(
|
||||
"/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");
|
||||
AssetDatabase.Refresh();
|
||||
}
|
||||
@@ -45,7 +45,7 @@ public class MujocoBinaryRetriever {
|
||||
if (AssetDatabase.LoadMainAssetAtPath(mujocoPath + "/libmujoco.so") == null) {
|
||||
File.Copy(
|
||||
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");
|
||||
AssetDatabase.Refresh();
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ public const int mjMAXLINEPNT = 1000;
|
||||
public const int mjMAXPLANEGRID = 200;
|
||||
public const bool THIRD_PARTY_MUJOCO_MJXMACRO_H_ = true;
|
||||
public const bool THIRD_PARTY_MUJOCO_MUJOCO_H_ = true;
|
||||
public const int mjVERSION_HEADER = 301;
|
||||
public const int mjVERSION_HEADER = 302;
|
||||
|
||||
|
||||
// ------------------------------------Enums------------------------------------
|
||||
|
||||
@@ -34,10 +34,6 @@ public enum IntegratorType {
|
||||
@implicitfast
|
||||
}
|
||||
|
||||
public enum CollisionCheckType {
|
||||
all
|
||||
}
|
||||
|
||||
public enum FrictionConeType {
|
||||
pyramidal,
|
||||
elliptic
|
||||
@@ -151,7 +147,7 @@ public struct MjSizeStruct {
|
||||
};
|
||||
|
||||
public void ParseMjcf(XmlElement mjcf) {
|
||||
Memory = mjcf.GetAttribute("memory");
|
||||
Memory = mjcf.GetStringAttribute("memory", "-1");
|
||||
}
|
||||
|
||||
public XmlElement ToMjcf(XmlElement mjcf) {
|
||||
@@ -183,8 +179,6 @@ public struct MjOptionStruct {
|
||||
public SolverImpedance OverrideSolImp;
|
||||
[Tooltip("Numerical integrator.")]
|
||||
public IntegratorType Integrator;
|
||||
[Tooltip("What collision types should be checked.")]
|
||||
public CollisionCheckType Collision;
|
||||
[Tooltip("How to model the friction cone.")]
|
||||
public FrictionConeType Cone;
|
||||
[Tooltip("How to represent the constraint Jacobian.")]
|
||||
@@ -217,7 +211,6 @@ public struct MjOptionStruct {
|
||||
OverrideSolRef = SolverReference.Default,
|
||||
OverrideSolImp = SolverImpedance.Default,
|
||||
Integrator = IntegratorType.Euler,
|
||||
Collision = CollisionCheckType.all,
|
||||
Cone = FrictionConeType.pyramidal,
|
||||
Jacobian = JacobianType.auto,
|
||||
Solver = ConstraintSolverType.Newton,
|
||||
@@ -260,7 +253,6 @@ public struct MjOptionStruct {
|
||||
OverrideSolImp.FromMjcf(mjcf, "o_solimp");
|
||||
|
||||
Integrator = mjcf.GetEnumAttribute<IntegratorType>("integrator", localDefault.Integrator);
|
||||
Collision = mjcf.GetEnumAttribute<CollisionCheckType>("collision", localDefault.Collision);
|
||||
Cone = mjcf.GetEnumAttribute<FrictionConeType>("cone", localDefault.Cone);
|
||||
Jacobian = mjcf.GetEnumAttribute<JacobianType>("jacobian", localDefault.Jacobian);
|
||||
Solver = mjcf.GetEnumAttribute<ConstraintSolverType>("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());
|
||||
|
||||
@@ -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");
|
||||
|
||||
+1
-1
@@ -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": {
|
||||
|
||||
Reference in New Issue
Block a user