Fix some changelog links

PiperOrigin-RevId: 948651115
Change-Id: Ibc915ddc71d884cee9f89eaa5dcaf498a833c57a
This commit is contained in:
Yuval Tassa
2026-07-15 18:05:14 -07:00
committed by Copybara-Service
parent 4787c8094c
commit f841b67c17
+90 -90
View File
@@ -126,7 +126,7 @@ General
.. admonition:: Breaking API changes .. admonition:: Breaking API changes
:class: attention :class: attention
10. :commit:`cd6db9eb` The header file ``mjthread.h`` was removed along with the old engine threading API. 10. :commit:`b935d415` The header file ``mjthread.h`` was removed along with the old engine threading API.
|br| **Migration:** Use :ref:`mju_threadpool` to set number of worker threads for the engine. |br| **Migration:** Use :ref:`mju_threadpool` to set number of worker threads for the engine.
11. :commit:`96bf8aea` Moved island sparse matrix construction from :ref:`mj_island` (single threaded) into 11. :commit:`96bf8aea` Moved island sparse matrix construction from :ref:`mj_island` (single threaded) into
:ref:`mj_fwdConstraint` (multi-threaded). The island-specific matrices ``iM, iLD, iefc_J`` were removed from :ref:`mj_fwdConstraint` (multi-threaded). The island-specific matrices ``iM, iLD, iefc_J`` were removed from
@@ -259,10 +259,10 @@ General
(nonzero :ref:`density<option-density>` or :ref:`viscosity<option-viscosity>`). (nonzero :ref:`density<option-density>` or :ref:`viscosity<option-viscosity>`).
Midpoint integration treats external forces as zero-order-hold constants, which causes Midpoint integration treats external forces as zero-order-hold constants, which causes
energy gain in the presence of contacts and in fluid media. energy gain in the presence of contacts and in fluid media.
5. :commit:`68820957` Added :ref:`mjs_getOriginSpec`, returning the spec that originally defined an element, prior to 5. :commit:`ec50260e` Added :ref:`mjs_getOriginSpec`, returning the spec that originally defined an element, prior to
attachment. This is in contrast to :ref:`mjs_getSpec` which returns the spec currently owning the element. If the attachment. This is in contrast to :ref:`mjs_getSpec` which returns the spec currently owning the element. If the
element is not the result of an attach operation, the functions are identical. element is not the result of an attach operation, the functions are identical.
6. :commit:`68820957` Added :ref:`mju_sym2dense`, converting a lower-triangular, implicitly symmetric CSR matrix to a 6. :commit:`767c607f` Added :ref:`mju_sym2dense`, converting a lower-triangular, implicitly symmetric CSR matrix to a
dense symmetric matrix. The inertia matrix ``mjData.M`` is an example of such a matrix. dense symmetric matrix. The inertia matrix ``mjData.M`` is an example of such a matrix.
.. admonition:: Future breaking API changes .. admonition:: Future breaking API changes
@@ -302,7 +302,7 @@ General
2. :commit:`2f2d00da` Added :ref:`multi-cell support<body-flexcomp-cellcount>` for trilinear and quadratic flexes. Note 2. :commit:`2f2d00da` Added :ref:`multi-cell support<body-flexcomp-cellcount>` for trilinear and quadratic flexes. Note
that the implicit integrator uses a dense solver for the flex degrees of freedom, which can be slow for multi-cell that the implicit integrator uses a dense solver for the flex degrees of freedom, which can be slow for multi-cell
flexes. flexes.
3. :commit:`34d69ad4` Refactored ``strain`` flex :ref:`equality constraints<flexcomp-edge-equality>` to be instantiated 3. :commit:`3d45a331` Refactored ``strain`` flex :ref:`equality constraints<flexcomp-edge-equality>` to be instantiated
per cell instead of per flex object, reducing the number of degrees of freedom per constraint row. The equality can per cell instead of per flex object, reducing the number of degrees of freedom per constraint row. The equality can
be associated with a specific cell with the new attribute :ref:`cell <equality-flexstrain-cell>` be associated with a specific cell with the new attribute :ref:`cell <equality-flexstrain-cell>`
4. :commit:`33259718` Added new :ref:`mj_maxContact<mj_maxContact>` function to get the maximum number of possible 4. :commit:`33259718` Added new :ref:`mj_maxContact<mj_maxContact>` function to get the maximum number of possible
@@ -313,7 +313,7 @@ General
.. admonition:: Breaking API changes .. admonition:: Breaking API changes
:class: attention :class: attention
6. :commit:`34d69ad4` The :ref:`multiccd<coMultiCCD>` option (multiple contacts returned from the convex collision 6. :commit:`6cb6e5a9` The :ref:`multiccd<coMultiCCD>` option (multiple contacts returned from the convex collision
detection pipeline) is now enabled by default. The new implementation (as opposed to the legacy pipeline) has detection pipeline) is now enabled by default. The new implementation (as opposed to the legacy pipeline) has
little performance overhead and improves stability. little performance overhead and improves stability.
@@ -365,7 +365,7 @@ General
for :ref:`connect<equality-connect>` and :ref:`weld<equality-weld>` equality constaints. This significantly improves for :ref:`connect<equality-connect>` and :ref:`weld<equality-weld>` equality constaints. This significantly improves
the stability of constrained mechanisms like four-bar linkages. See :ref:`Dual problem<soDual>` for details. the stability of constrained mechanisms like four-bar linkages. See :ref:`Dual problem<soDual>` for details.
6. :commit:`0c337799` Introduced :ref:`mjpEncoder`, the counterpart to :ref:`mjpDecoder` for encoding of :ref:`mjSpec` 6. :commit:`f5d3ce34` Introduced :ref:`mjpEncoder`, the counterpart to :ref:`mjpDecoder` for encoding of :ref:`mjSpec`
and :ref:`mjModel` into :ref:`mjResource`. and :ref:`mjModel` into :ref:`mjResource`.
7. :commit:`f5d3ce34` Added :ref:`mj_encode`, :ref:`mjp_registerEncoder`, :ref:`mjp_defaultEncoder`, and 7. :commit:`f5d3ce34` Added :ref:`mj_encode`, :ref:`mjp_registerEncoder`, :ref:`mjp_defaultEncoder`, and
@@ -406,7 +406,7 @@ General
Bug fixes Bug fixes
^^^^^^^^^ ^^^^^^^^^
14. :commit:`efae9157` The compiler now correctly accounts for negative scaling when loading user specified mesh data. 14. :commit:`ecc22667` The compiler now correctly accounts for negative scaling when loading user specified mesh data.
Version 3.6.0 (March 10, 2026) Version 3.6.0 (March 10, 2026)
------------------------------ ------------------------------
@@ -417,7 +417,7 @@ General
.. admonition:: Breaking API changes .. admonition:: Breaking API changes
:class: attention :class: attention
1. :commit:`1370a540` The tendon Jacobian ``ten_J`` is now always sparse. The fields ``ten_J_rownnz``, 1. :commit:`9efe41c0` The tendon Jacobian ``ten_J`` is now always sparse. The fields ``ten_J_rownnz``,
``ten_J_rowadr``, and ``ten_J_colind`` have been moved from :ref:`mjData` to :ref:`mjModel` and are no longer ``ten_J_rowadr``, and ``ten_J_colind`` have been moved from :ref:`mjData` to :ref:`mjModel` and are no longer
computed at run time by ``mj_tendon`` but at compile time. computed at run time by ``mj_tendon`` but at compile time.
@@ -427,15 +427,15 @@ General
3. :commit:`713b5524` Added a new ``strain`` :ref:`equality constraint<flexcomp-edge-equality>` type for trilinear and 3. :commit:`713b5524` Added a new ``strain`` :ref:`equality constraint<flexcomp-edge-equality>` type for trilinear and
quadratic :ref:`dofs<body-flexcomp-dof>`. quadratic :ref:`dofs<body-flexcomp-dof>`.
4. :commit:`bf74d01d` Flexes now support collisions with SDF geoms. 4. :commit:`bf74d01d` Flexes now support collisions with SDF geoms.
5. :commit:`3cada28b` Improved memory requirements for ``ten_J`` and ``ten_J_colind`` by reducing the upper bound for 5. :commit:`5903d482` Improved memory requirements for ``ten_J`` and ``ten_J_colind`` by reducing the upper bound for
the number of non-zeros ``nJten``. the number of non-zeros ``nJten``.
6. :commit:`1370a540` Improved memory requirements for ``actuator_moment`` and ``moment_colind`` by reducing the upper 6. :commit:`37e993f6` Improved memory requirements for ``actuator_moment`` and ``moment_colind`` by reducing the upper
bound for the number of non-zeros ``nJmom``. bound for the number of non-zeros ``nJmom``.
MJX MJX
^^^ ^^^
7. :commit:`3cada28b` Add batch rendering support for MJX-Warp. See the 7. :commit:`62a32386` Add batch rendering support for MJX-Warp. See the
:ref:`MJX-Warp batch rendering<MjxWarpBatchRendering>` section for details. :ref:`MJX-Warp batch rendering<MjxWarpBatchRendering>` section for details.
Bug fixes Bug fixes
@@ -450,8 +450,8 @@ Version 3.5.0 (February 12, 2026)
Significant new features Significant new features
^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^
1. :commit:`54b8b68b` :doc:`MuJoCo Warp <mjwarp/index>` is now officially released. 1. :commit:`b64b527e` :doc:`MuJoCo Warp <mjwarp/index>` is now officially released.
2. :commit:`54b8b68b` Added a new **System Identification** toolbox (Python), see 2. :commit:`146a5c08` Added a new **System Identification** toolbox (Python), see
`README <https://github.com/google-deepmind/mujoco/blob/main/python/mujoco/sysid/README.md>`__ for details. `README <https://github.com/google-deepmind/mujoco/blob/main/python/mujoco/sysid/README.md>`__ for details.
|br| A Colab notebook demonstrating the toolbox is available here: |sysid_colab| |br| A Colab notebook demonstrating the toolbox is available here: |sysid_colab|
|br| Contribution by :github:user:`kevinzakka`, :github:user:`aftersomemath`, :github:user:`jonathanembleyriches`, |br| Contribution by :github:user:`kevinzakka`, :github:user:`aftersomemath`, :github:user:`jonathanembleyriches`,
@@ -461,7 +461,7 @@ Significant new features
:target: https://colab.research.google.com/github/google-deepmind/mujoco/blob/main/python/mujoco/sysid/sysid.ipynb :target: https://colab.research.google.com/github/google-deepmind/mujoco/blob/main/python/mujoco/sysid/sysid.ipynb
3. :commit:`54b8b68b` Actuators and sensors now support arbitrary delays via history buffers, and sensor values can be 3. :commit:`6419534b` Actuators and sensors now support arbitrary delays via history buffers, and sensor values can be
computed at intervals larger than the simulation timestep. Using a delay or interval introduces a new computed at intervals larger than the simulation timestep. Using a delay or interval introduces a new
``mjData.history`` variable to the :ref:`Physics state<siPhysicsState>`. See :ref:`Delays<CDelay>` for details. ``mjData.history`` variable to the :ref:`Physics state<siPhysicsState>`. See :ref:`Delays<CDelay>` for details.
@@ -484,7 +484,7 @@ Significant new features
:align: right :align: right
:target: https://github.com/google-deepmind/mujoco/blob/main/test/engine/testdata/sensor/rfcamera.xml :target: https://github.com/google-deepmind/mujoco/blob/main/test/engine/testdata/sensor/rfcamera.xml
6. :commit:`54b8b68b` Rangefinder sensors can now be attached to a camera using the 6. :commit:`9d646e65` Rangefinder sensors can now be attached to a camera using the
:ref:`rangefinder/camera<sensor-rangefinder-camera>` attribute. In this case, the sensor respects the :ref:`rangefinder/camera<sensor-rangefinder-camera>` attribute. In this case, the sensor respects the
:ref:`camera/resolution<body-camera-resolution>` attribute and casts multiple rays, one for each pixel. :ref:`camera/resolution<body-camera-resolution>` attribute and casts multiple rays, one for each pixel.
7. :commit:`ed15493a` :ref:`Rangefinders<sensor-rangefinder>` can now report various kinds of information besides ray 7. :commit:`ed15493a` :ref:`Rangefinders<sensor-rangefinder>` can now report various kinds of information besides ray
@@ -502,7 +502,7 @@ General
.. admonition:: Breaking API changes .. admonition:: Breaking API changes
:class: attention :class: attention
8. :commit:`54b8b68b` Ray-cast functions now optionally compute the surface normal at the ray intersection. This is a 8. :commit:`218226fc` Ray-cast functions now optionally compute the surface normal at the ray intersection. This is a
breaking change due to the addition of the ``mjtNum normal[3]`` argument. The modified functions are breaking change due to the addition of the ``mjtNum normal[3]`` argument. The modified functions are
:ref:`mj_ray`, :ref:`mj_multiRay`, :ref:`mju_rayGeom`, :ref:`mj_rayFlex`, :ref:`mj_rayHfield` and :ref:`mj_ray`, :ref:`mj_multiRay`, :ref:`mju_rayGeom`, :ref:`mj_rayFlex`, :ref:`mj_rayHfield` and
:ref:`mj_rayMesh`. :ref:`mj_rayMesh`.
@@ -513,7 +513,7 @@ General
9. :commit:`218226fc` ``mju_rayFlex`` has been renamed to :ref:`mj_rayFlex` for consistency with other functions that 9. :commit:`218226fc` ``mju_rayFlex`` has been renamed to :ref:`mj_rayFlex` for consistency with other functions that
take ``mjModel*`` and ``mjData*`` arguments. take ``mjModel*`` and ``mjData*`` arguments.
10. :commit:`54b8b68b` The ``mjModel.cam_orthographic`` field has been renamed to ``cam_projection``, with the 10. :commit:`b8a4ac5d` The ``mjModel.cam_orthographic`` field has been renamed to ``cam_projection``, with the
semantic of a new enum type :ref:`mjtProjection`. This will allow for more projection types in the future like semantic of a new enum type :ref:`mjtProjection`. This will allow for more projection types in the future like
fisheye cameras. Relatedly, the ``camera/orthographic`` MJCF attribute for cameras has been renamed to fisheye cameras. Relatedly, the ``camera/orthographic`` MJCF attribute for cameras has been renamed to
:ref:`camera/projection<body-camera-projection>` and now accepts the values ``orthographic`` and ``perspective``. :ref:`camera/projection<body-camera-projection>` and now accepts the values ``orthographic`` and ``perspective``.
@@ -523,7 +523,7 @@ General
11. :commit:`cb9a9c15` Removed ``getdir`` from the ``mjpResourceProvider`` struct. All Resource Providers now use the 11. :commit:`cb9a9c15` Removed ``getdir`` from the ``mjpResourceProvider`` struct. All Resource Providers now use the
same shared implementation. same shared implementation.
12. :commit:`54b8b68b` When combining the ``margin`` or ``gap`` :ref:`parameters<CContact>` of two geoms to obtain 12. :commit:`6af0d4c8` When combining the ``margin`` or ``gap`` :ref:`parameters<CContact>` of two geoms to obtain
the parameters of a contact, the respective values are now **summed** rather than taking the maximum. This allows the parameters of a contact, the respective values are now **summed** rather than taking the maximum. This allows
geom margins to be a proper "inflation" of the geom. geom margins to be a proper "inflation" of the geom.
@@ -533,7 +533,7 @@ General
14. :commit:`608115ab` Cameras now have an :ref:`output<body-camera-output>` attribute, parsed into the 14. :commit:`608115ab` Cameras now have an :ref:`output<body-camera-output>` attribute, parsed into the
``mjModel.cam_output`` bitfield. Unused by the renderer, it serves as a convenient location to store a camera's ``mjModel.cam_output`` bitfield. Unused by the renderer, it serves as a convenient location to store a camera's
supported output types. supported output types.
15. :commit:`54b8b68b` Added :ref:`mj_mountVFS` and :ref:`mj_unmountVFS` functions for mounting a custom VFS provider. 15. :commit:`37762e3f` Added :ref:`mj_mountVFS` and :ref:`mj_unmountVFS` functions for mounting a custom VFS provider.
Mounting allows providers to be used to open/read/close resources dynamically at arbitrary paths. Mounting allows providers to be used to open/read/close resources dynamically at arbitrary paths.
16. :commit:`1d2d0b1c` The optimization whereby sequential :ref:`collision sensors<collision-sensors>` with identical 16. :commit:`1d2d0b1c` The optimization whereby sequential :ref:`collision sensors<collision-sensors>` with identical
attributes shared computation has been removed. This results in a (likely minor) performance regression for models attributes shared computation has been removed. This results in a (likely minor) performance regression for models
@@ -571,7 +571,7 @@ Documentation
has been expanded. has been expanded.
22. :commit:`c5925e7b` The usability of the :ref:`MJCF schema<CSchema>` is improved with a collapsible dropdown menu 22. :commit:`c5925e7b` The usability of the :ref:`MJCF schema<CSchema>` is improved with a collapsible dropdown menu
with links to elements and attributes. with links to elements and attributes.
23. :commit:`54b8b68b` MuJoCo version numbering is now based on Semantic Versioning, see 23. :commit:`c54f1fe3` MuJoCo version numbering is now based on Semantic Versioning, see
`VERSIONING.md <https://github.com/google-deepmind/mujoco/blob/main/VERSIONING.md>`__. `VERSIONING.md <https://github.com/google-deepmind/mujoco/blob/main/VERSIONING.md>`__.
@@ -581,10 +581,10 @@ Bug fixes
derivatives were incorrectly computed when the force was clamped by :ref:`forcerange<actuator-general-forcerange>`. derivatives were incorrectly computed when the force was clamped by :ref:`forcerange<actuator-general-forcerange>`.
25. :commit:`7f74487a` Fixed a bug in :ref:`implicit integrator<geIntegrators>` derivatives where actuator velocity 25. :commit:`7f74487a` Fixed a bug in :ref:`implicit integrator<geIntegrators>` derivatives where actuator velocity
derivatives did not account for the :ref:`actearly<actuator-general-actearly>` flag. derivatives did not account for the :ref:`actearly<actuator-general-actearly>` flag.
26. :commit:`54b8b68b` Multi-threaded mesh processing, enabled by the :ref:`usethread<compiler-usethread>` compiler flag 26. :commit:`64a2345c` Multi-threaded mesh processing, enabled by the :ref:`usethread<compiler-usethread>` compiler flag
(on by default), was in fact disabled by the flag. Fixing this bug speeds up compilation of mesh-heavy models by (up (on by default), was in fact disabled by the flag. Fixing this bug speeds up compilation of mesh-heavy models by (up
to) the number of available cores. to) the number of available cores.
27. :commit:`218226fc` The ``vertid`` argument of :ref:`mj_rayFlex` and :ref:`mju_raySkin` was marked as nullable but 27. :commit:`223ba99e` The ``vertid`` argument of :ref:`mj_rayFlex` and :ref:`mju_raySkin` was marked as nullable but
was not; it is now nullable. was not; it is now nullable.
28. :commit:`c1b3b306` Fixed :ref:`gravcomp<body-gravcomp>` being ignored for bodies with no joints nested inside 28. :commit:`c1b3b306` Fixed :ref:`gravcomp<body-gravcomp>` being ignored for bodies with no joints nested inside
jointed parent bodies (:issue:`3066`, reported by :github:user:`Alex108306`). jointed parent bodies (:issue:`3066`, reported by :github:user:`Alex108306`).
@@ -655,7 +655,7 @@ General
.. admonition:: Breaking API changes .. admonition:: Breaking API changes
:class: attention :class: attention
1. :commit:`f7708954` The mjSpec C API fields :ref:`meshdir<compiler-meshdir>` and 1. :commit:`77e025ea` The mjSpec C API fields :ref:`meshdir<compiler-meshdir>` and
:ref:`texturedir<compiler-texturedir>` have been moved to :ref:`texturedir<compiler-texturedir>` have been moved to
`compiler.meshdir <https://github.com/google-deepmind/mujoco/blob/0baac589993220095cf09e153f194f35ca0f0738/include/mujoco/mjspec.h#L154>`__ `compiler.meshdir <https://github.com/google-deepmind/mujoco/blob/0baac589993220095cf09e153f194f35ca0f0738/include/mujoco/mjspec.h#L154>`__
and and
@@ -674,11 +674,11 @@ General
existing color with :ref:`visual/rgba/constraint<visual-rgba-constraint>`. For spatial tendons, this visualization existing color with :ref:`visual/rgba/constraint<visual-rgba-constraint>`. For spatial tendons, this visualization
aid is active only if no :ref:`material<tendon-spatial-material>` is set and :ref:`rgba<tendon-spatial-rgba>` is aid is active only if no :ref:`material<tendon-spatial-material>` is set and :ref:`rgba<tendon-spatial-rgba>` is
default. default.
5. :commit:`e4704cd2` Added :ref:`mju_getXMLDependencies` for computing a list of unique asset dependencies from an MJCF 5. :commit:`6320b959` Added :ref:`mju_getXMLDependencies` for computing a list of unique asset dependencies from an MJCF
file. file.
6. :commit:`e4704cd2` Added the code sample ``dependencies`` which provides command line utility for printing the result 6. :commit:`e4704cd2` Added the code sample ``dependencies`` which provides command line utility for printing the result
of :ref:`mju_getXMLDependencies`. of :ref:`mju_getXMLDependencies`.
7. :commit:`f7708954` The minimum C++ standard required to compile MuJoCo is now C++20, this has been the case within 7. :commit:`bd68f0c6` The minimum C++ standard required to compile MuJoCo is now C++20, this has been the case within
Google since 2023 but the CMake update was forgotten. Google since 2023 but the CMake update was forgotten.
.. admonition:: Breaking ABI changes .. admonition:: Breaking ABI changes
@@ -691,7 +691,7 @@ General
MJX MJX
^^^ ^^^
10. :commit:`6ae9cc80` Fix :issue:`2508`, ``qLD`` shapes mismatched mjModel during ``get_data_into``. 10. :commit:`6ae9cc80` Fix :issue:`2508`, ``qLD`` shapes mismatched mjModel during ``get_data_into``.
11. :commit:`f7708954` Pull in MuJoCo Warp update to ``io.py``, and use ``naconmax`` instead of ``nconmax`` to set the 11. :commit:`b56cf98e` Pull in MuJoCo Warp update to ``io.py``, and use ``naconmax`` instead of ``nconmax`` to set the
maximum number of contacts over all environments. maximum number of contacts over all environments.
Bug fixes Bug fixes
@@ -760,12 +760,12 @@ General
MJX MJX
^^^ ^^^
10. :commit:`d7e925bd` Promote ``ten_length`` to the public MJX API. Add Warp support for ``mjx.tendon``. 10. :commit:`1763fa53` Promote ``ten_length`` to the public MJX API. Add Warp support for ``mjx.tendon``.
.. admonition:: Breaking API changes .. admonition:: Breaking API changes
:class: attention :class: attention
11. :commit:`d7e925bd` ``ten_length`` was moved from ``mjx.Data._impl.ten_length`` to a public field 11. :commit:`1763fa53` ``ten_length`` was moved from ``mjx.Data._impl.ten_length`` to a public field
``mjx.Data.ten_length``. ``mjx.Data.ten_length``.
Bug fixes Bug fixes
@@ -781,7 +781,7 @@ General
^^^^^^^ ^^^^^^^
1. :commit:`e6c57159` Added the :ref:`insidesite<sensor-insidesite>` sensor, for checking if an object is inside the 1. :commit:`e6c57159` Added the :ref:`insidesite<sensor-insidesite>` sensor, for checking if an object is inside the
volume of a site. It is useful for triggering events in surrounding environment logic. volume of a site. It is useful for triggering events in surrounding environment logic.
2. :commit:`3152458a` Added the :ref:`contact<sensor-contact>` sensor, for reporting contact information according to 2. :commit:`d0e4771c` Added the :ref:`contact<sensor-contact>` sensor, for reporting contact information according to
user-defined criteria. user-defined criteria.
The purpose of the :el:`contact` sensor is to report contact-related information in a fixed-size array. This is The purpose of the :el:`contact` sensor is to report contact-related information in a fixed-size array. This is
useful as input to learning-based agents and in environment logic. useful as input to learning-based agents and in environment logic.
@@ -805,7 +805,7 @@ General
Bug fixes Bug fixes
^^^^^^^^^ ^^^^^^^^^
9. :commit:`3152458a` Fixed a bug that caused object lists in the child to have missing elements after attaching an 9. :commit:`6e7aaacb` Fixed a bug that caused object lists in the child to have missing elements after attaching an
mjSpec. This was caused by adding to the lists only the objects that belong to the tree of the requested body, but mjSpec. This was caused by adding to the lists only the objects that belong to the tree of the requested body, but
this causes to skip objects that were attached, since they belong to the tree of the parent. this causes to skip objects that were attached, since they belong to the tree of the parent.
10. :commit:`3434f5d9` Fixed a bug where the convex hull of a collision mesh was not being computed if the mesh could 10. :commit:`3434f5d9` Fixed a bug where the convex hull of a collision mesh was not being computed if the mesh could
@@ -880,7 +880,7 @@ General
**Migration:** Replace light/directional="false/true" with light/type="spot/directional", respectively. **Migration:** Replace light/directional="false/true" with light/type="spot/directional", respectively.
4. :commit:`7548d370` Added :ref:`mjtColorSpace` enum and associated :ref:`colorspace<asset-texture-colorspace>` 4. :commit:`3e9bc79b` Added :ref:`mjtColorSpace` enum and associated :ref:`colorspace<asset-texture-colorspace>`
attribute that allows to specify the color space of textures (either linear or attribute that allows to specify the color space of textures (either linear or
`sRGB <https://en.wikipedia.org/wiki/SRGB>`__). Since this property is now read correctly from PNG files, textures `sRGB <https://en.wikipedia.org/wiki/SRGB>`__). Since this property is now read correctly from PNG files, textures
files which use sRGB will now be rendered differently. files which use sRGB will now be rendered differently.
@@ -943,7 +943,7 @@ General
length. length.
4. :commit:`f96f3e1c` Added the :ref:`compiler/saveinertial<compiler-saveinertial>` flag, writing explicit inertial 4. :commit:`f96f3e1c` Added the :ref:`compiler/saveinertial<compiler-saveinertial>` flag, writing explicit inertial
clauses for all bodies when saving to XML. clauses for all bodies when saving to XML.
5. :commit:`f96f3e1c` Added :ref:`orientation<body-composite-quat>` attribute to :ref:`composite<body-composite>`. 5. :commit:`e8c67ca5` Added :ref:`orientation<body-composite-quat>` attribute to :ref:`composite<body-composite>`.
Moreover, allow the composite to be the direct child of a frame. Moreover, allow the composite to be the direct child of a frame.
6. :commit:`96dda6ea` Added :ref:`tendon actuator force limits<tendon-spatial-actuatorfrclimited>` and 6. :commit:`96dda6ea` Added :ref:`tendon actuator force limits<tendon-spatial-actuatorfrclimited>` and
:ref:`tendon actuator force sensor<sensor-tendonactuatorfrc>`. :ref:`tendon actuator force sensor<sensor-tendonactuatorfrc>`.
@@ -958,7 +958,7 @@ Bug fixes
which the Jacobian is computed, now fixed. which the Jacobian is computed, now fixed.
9. :commit:`1bf24e9f` Fixed a bug that caused the parent frame of elements in the child worldbody to be incorrectly set 9. :commit:`1bf24e9f` Fixed a bug that caused the parent frame of elements in the child worldbody to be incorrectly set
when attaching an mjSpec to a frame or a site. when attaching an mjSpec to a frame or a site.
10. :commit:`006c18b1` Fixed a bug that caused shadow rendering to flicker on platforms (e.g., MacOS) that do not 10. :commit:`40393f46` Fixed a bug that caused shadow rendering to flicker on platforms (e.g., MacOS) that do not
support ARB_clip_control. Fixed in collaboration with :github:user:`aftersomemath`. support ARB_clip_control. Fixed in collaboration with :github:user:`aftersomemath`.
Python bindings Python bindings
@@ -970,7 +970,7 @@ Python bindings
:width: 240px :width: 240px
11. :commit:`16e49f27` Added examples of procedural model creation to the Model Editing tutorial: |mjspec_colab| 11. :commit:`16e49f27` Added examples of procedural model creation to the Model Editing tutorial: |mjspec_colab|
12. :commit:`006c18b1` Added support for nameless :ref:`mjSpec` objects in the ``bind`` method, see the corresponding 12. :commit:`ebd30493` Added support for nameless :ref:`mjSpec` objects in the ``bind`` method, see the corresponding
:ref:`section<PyMJCF>` in the documentation. :ref:`section<PyMJCF>` in the documentation.
.. |mjspec_colab| image:: https://colab.research.google.com/assets/colab-badge.png .. |mjspec_colab| image:: https://colab.research.google.com/assets/colab-badge.png
@@ -1030,7 +1030,7 @@ General
8. :commit:`ed16f2da` As mentioned above, the native convex collision detection pipeline is now the default, which 8. :commit:`ed16f2da` As mentioned above, the native convex collision detection pipeline is now the default, which
may break some workflows. In this case, set :ref:`nativeccd<option-flag-nativeccd>` to "disable" to restore the may break some workflows. In this case, set :ref:`nativeccd<option-flag-nativeccd>` to "disable" to restore the
old behavior. old behavior.
9. :commit:`240a7afd` Added :ref:`mjs_setDeepCopy` API function. When the deep copy flag is 0, attaching a model will 9. :commit:`c2138c3f` Added :ref:`mjs_setDeepCopy` API function. When the deep copy flag is 0, attaching a model will
not copy it to the parent, so the original references to the child can be used to modify the parent after not copy it to the parent, so the original references to the child can be used to modify the parent after
attachment. The default behavior is to perform such a shallow copy. The old behavior of creating a deep copy of attachment. The default behavior is to perform such a shallow copy. The old behavior of creating a deep copy of
the child model while attaching can be restored by setting the deep copy flag to 1. the child model while attaching can be restored by setting the deep copy flag to 1.
@@ -1108,16 +1108,16 @@ MJX
Python bindings Python bindings
^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^
3. :commit:`74dcd51d` Provide prebuilt wheels for Python 3.13. 3. :commit:`74dcd51d` Provide prebuilt wheels for Python 3.13.
4. :commit:`ec9986dc` Added ``bind`` method and removed id attribute from :ref:`mjSpec` objects. Using ids is error 4. :commit:`3a12db9a` Added ``bind`` method and removed id attribute from :ref:`mjSpec` objects. Using ids is error
prone in scenarios of repeated attachment and detachment. Python users are encouraged to use names for unique prone in scenarios of repeated attachment and detachment. Python users are encouraged to use names for unique
identification of model elements. identification of model elements.
5. :commit:`ec9986dc` :ref:`rollout<PyRollout>` can now accept sequences of MjModel of length ``nroll``. Also removed 5. :commit:`943eb6bc` :ref:`rollout<PyRollout>` can now accept sequences of MjModel of length ``nroll``. Also removed
the ``nroll`` argument because its value can always be inferred. the ``nroll`` argument because its value can always be inferred.
Bug fixes Bug fixes
^^^^^^^^^ ^^^^^^^^^
6. :commit:`f9569cda` Fixed :issue:`2212`, type error in ``mjx.get_data``. 6. :commit:`f9569cda` Fixed :issue:`2212`, type error in ``mjx.get_data``.
7. :commit:`ec9986dc` Fixed bug introduced in 3.2.0 in handling of :ref:`texrepeat<asset-material-texrepeat>` attribute, 7. :commit:`5c23ae11` Fixed bug introduced in 3.2.0 in handling of :ref:`texrepeat<asset-material-texrepeat>` attribute,
was mistakenly cast from ``float`` to ``int``, (fixed :issue:`2223`). was mistakenly cast from ``float`` to ``int``, (fixed :issue:`2223`).
Version 3.2.5 (Nov 4, 2024) Version 3.2.5 (Nov 4, 2024)
@@ -1139,7 +1139,7 @@ General
4. :commit:`7dc8aef8` The not-useful ``convexhull`` compiler option (to disable computation of mesh convex hulls) has 4. :commit:`7dc8aef8` The not-useful ``convexhull`` compiler option (to disable computation of mesh convex hulls) has
been removed. been removed.
5. :commit:`d8494fef` Removed the deprecated ``mju_rotVecMat``, ``mju_rotVecMatT`` and ``mjv_makeConnector`` functions. 5. :commit:`d8494fef` Removed the deprecated ``mju_rotVecMat``, ``mju_rotVecMatT`` and ``mjv_makeConnector`` functions.
6. :commit:`61cb552f` Sorting now uses a faster, native sort function (fixes :issue:`1638`). 6. :commit:`2b0629d7` Sorting now uses a faster, native sort function (fixes :issue:`1638`).
7. :commit:`61cb552f` The PBR texture layers introduced in 3.2.1 were refactored from separate sub-elements to a single 7. :commit:`61cb552f` The PBR texture layers introduced in 3.2.1 were refactored from separate sub-elements to a single
:ref:`layer<material-layer>` sub-element. :ref:`layer<material-layer>` sub-element.
8. :commit:`831d9881` The composite types box, cylinder, and sphere have been removed. Users should instead use the 8. :commit:`831d9881` The composite types box, cylinder, and sphere have been removed. Users should instead use the
@@ -1250,7 +1250,7 @@ General
( ``mjModel.site_quat``) at runtime will correctly modify the constraint definition. This ( ``mjModel.site_quat``) at runtime will correctly modify the constraint definition. This
`example model <https://github.com/google-deepmind/mujoco/blob/main/test/engine/testdata/equality_site.xml>`__ using `example model <https://github.com/google-deepmind/mujoco/blob/main/test/engine/testdata/equality_site.xml>`__ using
the new semantic is shown in the video on the right. the new semantic is shown in the video on the right.
6. :commit:`577afd1e` Introduced **free joint alignment**, an optimization that applies to bodies with a free joint and 6. :commit:`8954a088` Introduced **free joint alignment**, an optimization that applies to bodies with a free joint and
no child bodies (simple free-floating bodies): automatically aligning the body frame with the inertial frame. This no child bodies (simple free-floating bodies): automatically aligning the body frame with the inertial frame. This
feature can be toggled individually using the :ref:`freejoint/align<body-freejoint-align>` attribute or globally feature can be toggled individually using the :ref:`freejoint/align<body-freejoint-align>` attribute or globally
using the compiler :ref:`alignfree<compiler-alignfree>` attribute. The alignment diagonalizes the related 6x6 inertia using the compiler :ref:`alignfree<compiler-alignfree>` attribute. The alignment diagonalizes the related 6x6 inertia
@@ -1261,9 +1261,9 @@ General
become invalid. The global compiler attribute currently defaults to "false" due to this potential breakage, but could become invalid. The global compiler attribute currently defaults to "false" due to this potential breakage, but could
be changed to "true" in a future release. Aligned free joints are recommended for all new models. be changed to "true" in a future release. Aligned free joints are recommended for all new models.
7. :commit:`577afd1e` Added an :ref:`mjSpec` option for creating a texture directly from a buffer. 7. :commit:`851bb6ee` Added an :ref:`mjSpec` option for creating a texture directly from a buffer.
8. :commit:`577afd1e` :ref:`shell (surface) inertia <body-geom-shellinertia>` is now supported by all geom types. 8. :commit:`466368ef` :ref:`shell (surface) inertia <body-geom-shellinertia>` is now supported by all geom types.
9. :commit:`8b03daa0` When :ref:`attaching<meAttachment>` sub-models, :ref:`keyframes<keyframe>` will now be correctly 9. :commit:`afd7c73f` When :ref:`attaching<meAttachment>` sub-models, :ref:`keyframes<keyframe>` will now be correctly
merged into the parent model, but only on the first attachment. merged into the parent model, but only on the first attachment.
10. :commit:`8b03daa0` Added the :ref:`mjtSameFrame` enum which contains the possible frame alignments of bodies and 10. :commit:`8b03daa0` Added the :ref:`mjtSameFrame` enum which contains the possible frame alignments of bodies and
their children. These alignments are used for computation shortcuts in :ref:`mj_kinematics`. their children. These alignments are used for computation shortcuts in :ref:`mj_kinematics`.
@@ -1291,7 +1291,7 @@ MJX
Bug fixes Bug fixes
^^^^^^^^^ ^^^^^^^^^
23. :commit:`0bcaa856` Fixed a performance regression introduced in 3.1.7 in mesh Bounding Volume Hierarchies 23. :commit:`39896f80` Fixed a performance regression introduced in 3.1.7 in mesh Bounding Volume Hierarchies
(:issue:`1875`, contribution by :github:user:`michael-ahn`). (:issue:`1875`, contribution by :github:user:`michael-ahn`).
24. :commit:`0bcaa856` Fixed a bug wherein, for models that have both muscles and stateless actuators and used one of 24. :commit:`0bcaa856` Fixed a bug wherein, for models that have both muscles and stateless actuators and used one of
the implicit integrators, wrong derivatives would be computed. the implicit integrators, wrong derivatives would be computed.
@@ -1365,7 +1365,7 @@ General
.. admonition:: Breaking API changes .. admonition:: Breaking API changes
:class: attention :class: attention
2. :commit:`57e6760e` Removed deprecated ``mj_makeEmptyFileVFS`` and ``mj_findFileVFS`` functions. The constants 2. :commit:`e66b9a36` Removed deprecated ``mj_makeEmptyFileVFS`` and ``mj_findFileVFS`` functions. The constants
``mjMAXVFS`` and ``mjMAXVFSNAME`` are also removed as they are no longer needed. ``mjMAXVFS`` and ``mjMAXVFSNAME`` are also removed as they are no longer needed.
**Migration:** Use :ref:`mj_addBufferVFS` to copy a buffer into a VFS file directly. **Migration:** Use :ref:`mj_addBufferVFS` to copy a buffer into a VFS file directly.
@@ -1382,7 +1382,7 @@ General
happened when keyframes were used in a model with stateful actuator plugins. The PID plugin will give an error happened when keyframes were used in a model with stateful actuator plugins. The PID plugin will give an error
when the wrong value of actdim is provided. when the wrong value of actdim is provided.
6. :commit:`e13ddfa2` Added :ref:`attach<body-attach>` meta-element to MJCF, which allows :ref:`attaching<meAttachment>` 6. :commit:`27b9ddda` Added :ref:`attach<body-attach>` meta-element to MJCF, which allows :ref:`attaching<meAttachment>`
a subtree from a different model to a body in the current model. a subtree from a different model to a body in the current model.
7. :commit:`57e6760e` The :ref:`VFS<Virtualfilesystem>` implementation has been rewritten in C++ and is now considerably 7. :commit:`57e6760e` The :ref:`VFS<Virtualfilesystem>` implementation has been rewritten in C++ and is now considerably
more efficient in speed and memory footprint. more efficient in speed and memory footprint.
@@ -1398,7 +1398,7 @@ General
9. :commit:`ace0c8f0` Added :ref:`maxhullvert<asset-mesh-maxhullvert>`, the maximum number of vertices in a mesh's 9. :commit:`ace0c8f0` Added :ref:`maxhullvert<asset-mesh-maxhullvert>`, the maximum number of vertices in a mesh's
convex hull. convex hull.
10. :commit:`c9bcf837` Added :ref:`mj_setKeyframe` for saving the current state into a model keyframe. 10. :commit:`c9bcf837` Added :ref:`mj_setKeyframe` for saving the current state into a model keyframe.
11. :commit:`c9bcf837` Added support for ``ball`` joints in the URDF parser ("spherical" in URDF). 11. :commit:`5ed464b4` Added support for ``ball`` joints in the URDF parser ("spherical" in URDF).
12. :commit:`3f3b39bb` Replaced ``mjUSEDOUBLE`` which was previously hard-coded in 12. :commit:`3f3b39bb` Replaced ``mjUSEDOUBLE`` which was previously hard-coded in
`mjtnum.h <https://github.com/google-deepmind/mujoco/blob/3577e2cf8bf841475b489aefff52276a39f24d51/include/mjtnum.h>`__ `mjtnum.h <https://github.com/google-deepmind/mujoco/blob/3577e2cf8bf841475b489aefff52276a39f24d51/include/mjtnum.h>`__
with the build-time flag ``mjUSESINGLE``. If this symbol is not defined, MuJoCo will use double-precision floating with the build-time flag ``mjUSESINGLE``. If this symbol is not defined, MuJoCo will use double-precision floating
@@ -1426,7 +1426,7 @@ MJX
Simulate Simulate
^^^^^^^^ ^^^^^^^^
18. :commit:`1eb70864` Added improved tutorial video. 18. :commit:`1eb70864` Added improved tutorial video.
19. :commit:`1eb70864` Improved the Brownian noise generator. 19. :commit:`f37f8408` Improved the Brownian noise generator.
20. :commit:`3d1d1d07` Now displaying model load times if they are longer than 0.25 seconds. 20. :commit:`3d1d1d07` Now displaying model load times if they are longer than 0.25 seconds.
Python bindings Python bindings
@@ -1515,9 +1515,9 @@ MJX
``mjx.device_put``. ``mjx.device_put``.
8. :commit:`0cd28d24` Added cylinder plane collisions. 8. :commit:`0cd28d24` Added cylinder plane collisions.
9. :commit:`a4df9120` Added ``efc_type`` to ``mjx.Data`` and ``dim``, ``efc_address`` to ``mjx.Contact``. 9. :commit:`71333938` Added ``efc_type`` to ``mjx.Data`` and ``dim``, ``efc_address`` to ``mjx.Contact``.
10. :commit:`a4df9120` Added ``geom`` to ``mjx.Contact`` and marked ``geom1``, ``geom2`` deprecated. 10. :commit:`71333938` Added ``geom`` to ``mjx.Contact`` and marked ``geom1``, ``geom2`` deprecated.
11. :commit:`a4df9120` Added ``ne``, ``nf``, ``nl``, ``nefc``, and ``ncon`` to ``mjx.Data`` to match ``mujoco.MjData``. 11. :commit:`3b64217b` Added ``ne``, ``nf``, ``nl``, ``nefc``, and ``ncon`` to ``mjx.Data`` to match ``mujoco.MjData``.
12. :commit:`a4df9120` Given the above added fields, removed ``mjx.get_params``, ``mjx.ncon``, and 12. :commit:`a4df9120` Given the above added fields, removed ``mjx.get_params``, ``mjx.ncon``, and
``mjx.count_constraints``. ``mjx.count_constraints``.
13. :commit:`a4df9120` Changed the way meshes are organized on device to speed up collision detection when a mesh is 13. :commit:`a4df9120` Changed the way meshes are organized on device to speed up collision detection when a mesh is
@@ -1672,8 +1672,8 @@ General
MJX MJX
^^^ ^^^
5. :commit:`63ec34f9` Added :ref:`dyntype<actuator-general-dyntype>` ``filterexact``. 5. :commit:`80f50c94` Added :ref:`dyntype<actuator-general-dyntype>` ``filterexact``.
6. :commit:`63ec34f9` Added :at:`site` transmission. 6. :commit:`8ce2c920` Added :at:`site` transmission.
7. :commit:`feb92bf5` Updated MJX colab tutorial with more stable quadruped environment. 7. :commit:`feb92bf5` Updated MJX colab tutorial with more stable quadruped environment.
8. :commit:`a02fc405` Added ``mjx.ray`` which mirrors :ref:`mj_ray` for planes, spheres, capsules, boxes, and meshes. 8. :commit:`a02fc405` Added ``mjx.ray`` which mirrors :ref:`mj_ray` for planes, spheres, capsules, boxes, and meshes.
9. :commit:`0a7be173` Added ``mjx.is_sparse`` which mirrors :ref:`mj_isSparse` and ``mjx.full_m`` which mirrors 9. :commit:`0a7be173` Added ``mjx.is_sparse`` which mirrors :ref:`mj_isSparse` and ``mjx.full_m`` which mirrors
@@ -1707,11 +1707,11 @@ Bug fixes
^^^^^^^^^ ^^^^^^^^^
1. :commit:`d39ed1d3` Fixed a bug (introduced in 3.1.0) where box-box collisions produced no contacts if one box was 1. :commit:`d39ed1d3` Fixed a bug (introduced in 3.1.0) where box-box collisions produced no contacts if one box was
deeply embedded in the other. deeply embedded in the other.
2. :commit:`d39ed1d3` Fixed a bug in :ref:`simulate<saSimulate>` where the "LOADING..." message was not showing 2. :commit:`dc0d0c59` Fixed a bug in :ref:`simulate<saSimulate>` where the "LOADING..." message was not showing
correctly. correctly.
3. :commit:`d39ed1d3` Fixed a crash in the Python :ref:`passive viewer<PyViewerPassive>`, when used with models 3. :commit:`d39ed1d3` Fixed a crash in the Python :ref:`passive viewer<PyViewerPassive>`, when used with models
containing Flex objects. containing Flex objects.
4. :commit:`d39ed1d3` Fixed a bug in MJX where ``site_xmat`` was ignored in ``get_data`` and ``put_data`` 4. :commit:`0915d69c` Fixed a bug in MJX where ``site_xmat`` was ignored in ``get_data`` and ``put_data``
5. :commit:`d39ed1d3` Fixed a bug in MJX where ``efc_address`` was sometimes incorrectly calculated in ``get_data``. 5. :commit:`d39ed1d3` Fixed a bug in MJX where ``efc_address`` was sometimes incorrectly calculated in ``get_data``.
@@ -1750,7 +1750,7 @@ Bug fixes
^^^^^^^^^ ^^^^^^^^^
8. :commit:`cd56a41f` Fix bug in Cartesian actuation with movable refsite, as when using body-centric Cartesian 8. :commit:`cd56a41f` Fix bug in Cartesian actuation with movable refsite, as when using body-centric Cartesian
actuators on a quadruped. Before this fix such actuators could lead to non-conservation of momentum. actuators on a quadruped. Before this fix such actuators could lead to non-conservation of momentum.
9. :commit:`d39ed1d3` Fix bug that prevented using flex with :ref:`simulate<saSimulate>`. 9. :commit:`cd56a41f` Fix bug that prevented using flex with :ref:`simulate<saSimulate>`.
10. :commit:`7d8d4d39` Fix bug that prevented the use of elasticity plugins in combination with pinned flex vertices. 10. :commit:`7d8d4d39` Fix bug that prevented the use of elasticity plugins in combination with pinned flex vertices.
11. :commit:`3c05f9fa` Release Python wheels targeting macOS 10.16 to support x86_64 systems where 11. :commit:`3c05f9fa` Release Python wheels targeting macOS 10.16 to support x86_64 systems where
``SYSTEM_VERSION_COMPAT`` is set. The minimum supported version is still 11.0, but we release these wheels to fix ``SYSTEM_VERSION_COMPAT`` is set. The minimum supported version is still 11.0, but we release these wheels to fix
@@ -1820,7 +1820,7 @@ MJX
Python bindings Python bindings
^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^
10. :commit:`893c4042` Fix the macOS ``mjpython`` launcher to work with the Python interpreter from Apple Command Line 10. :commit:`4c24be9e` Fix the macOS ``mjpython`` launcher to work with the Python interpreter from Apple Command Line
Tools. Tools.
11. :commit:`084facc9` Fixed a crash when copying instances of ``mujoco.MjData`` for models that use plugins. Introduced 11. :commit:`084facc9` Fixed a crash when copying instances of ``mujoco.MjData`` for models that use plugins. Introduced
a ``model`` attribute to ``MjData`` which is reference to the model that was used to create that ``MjData`` a ``model`` attribute to ``MjData`` which is reference to the model that was used to create that ``MjData``
@@ -1904,7 +1904,7 @@ New features
:align: right :align: right
:width: 240px :width: 240px
4. :commit:`2cc12054` Added constraint island discovery with :ref:`mj_island`. Constraint islands are disjoint sets of 4. :commit:`3e034e38` Added constraint island discovery with :ref:`mj_island`. Constraint islands are disjoint sets of
constraints and degrees-of-freedom that do not interact. The only solver which currently supports islands is constraints and degrees-of-freedom that do not interact. The only solver which currently supports islands is
:ref:`CG<option-solver>`. Island discovery can be activated using a new :ref:`enable flag<option-flag-island>`. :ref:`CG<option-solver>`. Island discovery can be activated using a new :ref:`enable flag<option-flag-island>`.
If island discovery is enabled, geoms, contacts and tendons will be colored according to the corresponding island, If island discovery is enabled, geoms, contacts and tendons will be colored according to the corresponding island,
@@ -1997,7 +1997,7 @@ General
20. :commit:`1a3215e3` Added :ref:`ls_iterations<option-ls_iterations>` and :ref:`ls_tolerance<option-ls_tolerance>` 20. :commit:`1a3215e3` Added :ref:`ls_iterations<option-ls_iterations>` and :ref:`ls_tolerance<option-ls_tolerance>`
options for adjusting linesearch stopping criteria in CG and Newton solvers. These can be useful for performance options for adjusting linesearch stopping criteria in CG and Newton solvers. These can be useful for performance
tuning. tuning.
21. :commit:`2cc12054` Added ``mesh_pos`` and ``mesh_quat`` fields to :ref:`mjModel` to store the normalizing 21. :commit:`ccda87aa` Added ``mesh_pos`` and ``mesh_quat`` fields to :ref:`mjModel` to store the normalizing
transformation applied to mesh assets. Fixes :issue:`409`. transformation applied to mesh assets. Fixes :issue:`409`.
22. :commit:`8064ad59` Added camera :ref:`resolution<body-camera-resolution>` attribute and 22. :commit:`8064ad59` Added camera :ref:`resolution<body-camera-resolution>` attribute and
:ref:`camprojection<sensor-camprojection>` sensor. If camera resolution is set to positive values, the camera :ref:`camprojection<sensor-camprojection>` sensor. If camera resolution is set to positive values, the camera
@@ -2061,7 +2061,7 @@ Documentation
Bug fixes Bug fixes
^^^^^^^^^ ^^^^^^^^^
33. :commit:`2cc12054` Fixed a bug that was causing :ref:`geom margin<body-geom-margin>` to be ignored during the 33. :commit:`b0077e40` Fixed a bug that was causing :ref:`geom margin<body-geom-margin>` to be ignored during the
construction of midphase collision trees. construction of midphase collision trees.
34. :commit:`1bd6c94e` Fixed a bug that was generating incorrect values in ``efc_diagApprox`` for weld equality 34. :commit:`1bd6c94e` Fixed a bug that was generating incorrect values in ``efc_diagApprox`` for weld equality
@@ -2089,7 +2089,7 @@ General
:ref:`integration<mjd_quatIntegrate>` (rotation with an angular velocity). Derivatives are in the 3D tangent space. :ref:`integration<mjd_quatIntegrate>` (rotation with an angular velocity). Derivatives are in the 3D tangent space.
#. :commit:`c50c92cc` Added :ref:`mjv_connector` which has identical functionality to ``mjv_makeConnector``, but with #. :commit:`c50c92cc` Added :ref:`mjv_connector` which has identical functionality to ``mjv_makeConnector``, but with
more convenient "from-to" argument parametrization. ``mjv_makeConnector`` is now deprecated. more convenient "from-to" argument parametrization. ``mjv_makeConnector`` is now deprecated.
#. :commit:`5fcdae77` Bumped oldest supported MacOS from version 10.12 to 11. MacOS 11 is the oldest version still #. :commit:`242aea93` Bumped oldest supported MacOS from version 10.12 to 11. MacOS 11 is the oldest version still
maintained by Apple. maintained by Apple.
Python bindings Python bindings
@@ -2188,10 +2188,10 @@ General
`elastic rubber balls <https://www.youtube.com/watch?v=uFLJcRegIVQ&t=3s>`__. This is an advanced option currently `elastic rubber balls <https://www.youtube.com/watch?v=uFLJcRegIVQ&t=3s>`__. This is an advanced option currently
only supported by explicit :ref:`contact pairs<contact-pair>`, using the only supported by explicit :ref:`contact pairs<contact-pair>`, using the
:ref:`solreffriction<contact-pair-solreffriction>` attribute. :ref:`solreffriction<contact-pair-solreffriction>` attribute.
#. :commit:`b0bc330b` Added :ref:`mjd_inverseFD` for finite-differenced inverse-dynamics derivatives. #. :commit:`c50177d3` Added :ref:`mjd_inverseFD` for finite-differenced inverse-dynamics derivatives.
#. :commit:`49efa9cc` Added functions for operations on banded-then-dense "arrowhead" matrices. Such matrices are common #. :commit:`49efa9cc` Added functions for operations on banded-then-dense "arrowhead" matrices. Such matrices are common
when doing direct trajectory optimization. See :ref:`mju_cholFactorBand` documentation for details. when doing direct trajectory optimization. See :ref:`mju_cholFactorBand` documentation for details.
#. :commit:`b0bc330b` Added :ref:`mj_multiRay` function for intersecting multiple rays emanating from a single point. #. :commit:`2ad82d59` Added :ref:`mj_multiRay` function for intersecting multiple rays emanating from a single point.
This is significantly faster than calling :ref:`mj_ray` multiple times. This is significantly faster than calling :ref:`mj_ray` multiple times.
#. :commit:`9d1a21f9` Ray-mesh collisions are now up to 10x faster, using a bounding volume hierarchy of mesh faces. #. :commit:`9d1a21f9` Ray-mesh collisions are now up to 10x faster, using a bounding volume hierarchy of mesh faces.
#. :commit:`3d82d2a4` Increased ``mjMAXUIITEM`` (maximum number of UI elements per section in Simulate) to 100. #. :commit:`3d82d2a4` Increased ``mjMAXUIITEM`` (maximum number of UI elements per section in Simulate) to 100.
@@ -2267,7 +2267,7 @@ General
2. :commit:`7cc42ecf` Added :ref:`visual-global<visual-global>` flag 2. :commit:`7cc42ecf` Added :ref:`visual-global<visual-global>` flag
:ref:`ellipsoidinertia<visual-global-ellipsoidinertia>` to visualize equivalent body inertias with ellipsoids instead :ref:`ellipsoidinertia<visual-global-ellipsoidinertia>` to visualize equivalent body inertias with ellipsoids instead
of the default boxes. of the default boxes.
#. :commit:`0db9a453` Added midphase and broadphase collision statistics to :ref:`mjData`. #. :commit:`5f132af6` Added midphase and broadphase collision statistics to :ref:`mjData`.
#. :commit:`01b84089` Added documentation for :ref:`engine plugins<exPlugin>`. #. :commit:`01b84089` Added documentation for :ref:`engine plugins<exPlugin>`.
#. :commit:`2e23594f` Added struct information to the ``introspect`` module. #. :commit:`2e23594f` Added struct information to the ``introspect`` module.
#. :commit:`fe3dccfd` Added a new extension mechanism called :ref:`resource providers<exProvider>`. This extensible #. :commit:`fe3dccfd` Added a new extension mechanism called :ref:`resource providers<exProvider>`. This extensible
@@ -2353,7 +2353,7 @@ General
#. :commit:`d3d789cf` Modified :ref:`mju_error` and :ref:`mju_warning` to be variadic functions (support for printf-like #. :commit:`d3d789cf` Modified :ref:`mju_error` and :ref:`mju_warning` to be variadic functions (support for printf-like
arguments). The functions ``mju_error_i``, ``mju_error_s``, ``mju_warning_i``, and ``mju_warning_s`` are now arguments). The functions ``mju_error_i``, ``mju_error_s``, ``mju_warning_i``, and ``mju_warning_s`` are now
deprecated. deprecated.
#. :commit:`8c7f6ce5` Implemented a performant ``mju_sqrMatTDSparse`` function that doesn't require dense memory #. :commit:`056e8492` Implemented a performant ``mju_sqrMatTDSparse`` function that doesn't require dense memory
allocation. allocation.
#. :commit:`8696247f` Added ``mj_stackAllocInt`` to get correct size for allocating ints on mjData stack. Reducing stack #. :commit:`8696247f` Added ``mj_stackAllocInt`` to get correct size for allocating ints on mjData stack. Reducing stack
memory usage by 10% - 15%. memory usage by 10% - 15%.
@@ -2371,7 +2371,7 @@ Python bindings
experimental/beta stage, and is not yet described in our :ref:`viewer documentation<PyViewer>`.) experimental/beta stage, and is not yet described in our :ref:`viewer documentation<PyViewer>`.)
#. :commit:`7a0def97` Added the ``mjpython`` launcher for macOS, which is required for ``viewer.launch_passive`` to #. :commit:`7a0def97` Added the ``mjpython`` launcher for macOS, which is required for ``viewer.launch_passive`` to
function there. function there.
#. :commit:`e20ab6c9` Removed ``efc_`` fields from joint indexers. Since the introduction of arena memory, these fields #. :commit:`71c5f179` Removed ``efc_`` fields from joint indexers. Since the introduction of arena memory, these fields
now have dynamic sizes that change between time steps depending on the number of active constraints, breaking strict now have dynamic sizes that change between time steps depending on the number of active constraints, breaking strict
correspondence between joints and ``efc_`` rows. correspondence between joints and ``efc_`` rows.
#. :commit:`e20ab6c9` Added a number of missing fields to the bindings of ``mjVisual`` and ``mjvPerturb`` structs. #. :commit:`e20ab6c9` Added a number of missing fields to the bindings of ``mjVisual`` and ``mjvPerturb`` structs.
@@ -2420,29 +2420,29 @@ Bug fixes
:align: right :align: right
:width: 300px :width: 300px
6. :commit:`6b80b010` The ``launch_repl`` functionality in the Python viewer has been fixed. 6. :commit:`d022cd1a` The ``launch_repl`` functionality in the Python viewer has been fixed.
#. :commit:`10c5d6a1` Set ``time`` correctly in ``mjd_transitionFD``, to support time-dependent user code. #. :commit:`06557c14` Set ``time`` correctly in ``mjd_transitionFD``, to support time-dependent user code.
#. :commit:`6b80b010` Fixed sensor data dimension validation when ``user`` type sensors are present. #. :commit:`6b80b010` Fixed sensor data dimension validation when ``user`` type sensors are present.
#. :commit:`6b80b010` Fixed incorrect plugin error message when a null ``nsensordata`` callback is encountered during #. :commit:`093125c2` Fixed incorrect plugin error message when a null ``nsensordata`` callback is encountered during
model compilation. model compilation.
#. :commit:`10c5d6a1` Correctly end the timer (``TM_END``) ``mj_fwdConstraint`` returns early. #. :commit:`e9869d3b` Correctly end the timer (``TM_END``) ``mj_fwdConstraint`` returns early.
#. :commit:`6b80b010` Fixed an infinite loop in ``mj_deleteFileVFS``. #. :commit:`436fc6e7` Fixed an infinite loop in ``mj_deleteFileVFS``.
Simulate Simulate
^^^^^^^^ ^^^^^^^^
12. :commit:`6b80b010` Increased precision of simulate sensor plot y-axis by 1 digit 12. :commit:`bc0184d6` Increased precision of simulate sensor plot y-axis by 1 digit
(`#719 <https://github.com/google-deepmind/mujoco/issues/719>`_). (`#719 <https://github.com/google-deepmind/mujoco/issues/719>`_).
#. :commit:`10c5d6a1` Body labels are now drawn at the body frame rather than inertial frame, unless inertia is being #. :commit:`79fffdc0` Body labels are now drawn at the body frame rather than inertial frame, unless inertia is being
visualised. visualised.
Plugins Plugins
^^^^^^^ ^^^^^^^
14. :commit:`10c5d6a1` The ``reset`` callback now receives instance-specific ``plugin_state`` and ``plugin_data`` as 14. :commit:`5c021d04` The ``reset`` callback now receives instance-specific ``plugin_state`` and ``plugin_data`` as
arguments, rather than the entire ``mjData``. Since ``reset`` is called inside ``mj_resetData`` before any physics arguments, rather than the entire ``mjData``. Since ``reset`` is called inside ``mj_resetData`` before any physics
forwarding call has been made, it is an error to read anything from ``mjData`` at this stage. forwarding call has been made, it is an error to read anything from ``mjData`` at this stage.
#. :commit:`10c5d6a1` The ``capabilities`` field in ``mjpPlugin`` is renamed ``capabilityflags`` to more clearly #. :commit:`30b4309a` The ``capabilities`` field in ``mjpPlugin`` is renamed ``capabilityflags`` to more clearly
indicate that this is a bit field. indicate that this is a bit field.
@@ -2479,7 +2479,7 @@ General
#. :commit:`0eb7f871` Removed the requirement that stateless actuators come before stateful actuators. #. :commit:`0eb7f871` Removed the requirement that stateless actuators come before stateful actuators.
#. :commit:`f905c7fb` Added :ref:`mju_fill`, :ref:`mju_symmetrize` and :ref:`mju_eye` utility functions. #. :commit:`f905c7fb` Added :ref:`mju_fill`, :ref:`mju_symmetrize` and :ref:`mju_eye` utility functions.
#. :commit:`60fbb77b` Added :at:`gravcomp` attribute to :ref:`body<body>`, implementing gravity compensation and #. :commit:`23092a11` Added :at:`gravcomp` attribute to :ref:`body<body>`, implementing gravity compensation and
buoyancy. See `balloons.xml <https://github.com/google-deepmind/mujoco/blob/main/model/balloons/balloons.xml>`__ buoyancy. See `balloons.xml <https://github.com/google-deepmind/mujoco/blob/main/model/balloons/balloons.xml>`__
example model. example model.
#. :commit:`36b30e45` Renamed the ``cable`` plugin library to ``elasticity``. #. :commit:`36b30e45` Renamed the ``cable`` plugin library to ``elasticity``.
@@ -2510,16 +2510,16 @@ General
- Only suitable for small strains (large displacements but small deformations). Tetrahedra may invert if subject to - Only suitable for small strains (large displacements but small deformations). Tetrahedra may invert if subject to
large loads. large loads.
#. :commit:`60fbb77b` Added API functions ``mj_loadPluginLibrary`` and ``mj_loadAllPluginLibraries``. The first function #. :commit:`9ecade07` Added API functions ``mj_loadPluginLibrary`` and ``mj_loadAllPluginLibraries``. The first function
is identical to ``dlopen`` on a POSIX system, and to ``LoadLibraryA`` on Windows. The second function scans a is identical to ``dlopen`` on a POSIX system, and to ``LoadLibraryA`` on Windows. The second function scans a
specified directory for all dynamic libraries file and loads each library found. Dynamic libraries opened by these specified directory for all dynamic libraries file and loads each library found. Dynamic libraries opened by these
functions are assumed to register one or more MuJoCo plugins on load. functions are assumed to register one or more MuJoCo plugins on load.
#. :commit:`60fbb77b` Added an optional ``visualize`` callback to plugins, which is called during ``mjv_updateScene``. #. :commit:`0d52feaa` Added an optional ``visualize`` callback to plugins, which is called during ``mjv_updateScene``.
This callback allows custom plugin visualizations. Enable stress visualization for the Cable plugin as an example. This callback allows custom plugin visualizations. Enable stress visualization for the Cable plugin as an example.
#. :commit:`dee1d602` Sensors of type :ref:`user<sensor-user>` no longer require :at:`objtype`, :at:`objname` and #. :commit:`dee1d602` Sensors of type :ref:`user<sensor-user>` no longer require :at:`objtype`, :at:`objname` and
:at:`needstage`. If unspecified, the objtype is now :ref:`mjOBJ_UNKNOWN<mjtObj>`. ``user`` sensors :at:`datatype` :at:`needstage`. If unspecified, the objtype is now :ref:`mjOBJ_UNKNOWN<mjtObj>`. ``user`` sensors :at:`datatype`
default is now :at-val:`"real"`, :at:`needstage` default is now :at-val:`"acc"`. default is now :at-val:`"real"`, :at:`needstage` default is now :at-val:`"acc"`.
#. :commit:`60fbb77b` Added support for capsules in URDF import. #. :commit:`638c9a69` Added support for capsules in URDF import.
#. :commit:`df25d7d6` On macOS, issue an informative error message when run under #. :commit:`df25d7d6` On macOS, issue an informative error message when run under
`Rosetta 2 <https://support.apple.com/en-gb/HT211861>`__ translation on an Apple Silicon machine. Pre-built MuJoCo `Rosetta 2 <https://support.apple.com/en-gb/HT211861>`__ translation on an Apple Silicon machine. Pre-built MuJoCo
binaries make use of `AVX <https://en.wikipedia.org/wiki/Advanced_Vector_Extensions>`__ instructions on x86-64 binaries make use of `AVX <https://en.wikipedia.org/wiki/Advanced_Vector_Extensions>`__ instructions on x86-64
@@ -2648,7 +2648,7 @@ General
:align: right :align: right
:height: 150px :height: 150px
1. :commit:`0b2f19bb` Added :ref:`adhesion actuators<actuator-adhesion>` mimicking vacuum grippers and adhesive 1. :commit:`3d77eb1e` Added :ref:`adhesion actuators<actuator-adhesion>` mimicking vacuum grippers and adhesive
biomechanical appendages. biomechanical appendages.
#. :commit:`3d77eb1e` Added related #. :commit:`3d77eb1e` Added related
`example model <https://github.com/google-deepmind/mujoco/tree/main/model/adhesion>`__ and video: `example model <https://github.com/google-deepmind/mujoco/tree/main/model/adhesion>`__ and video:
@@ -2659,7 +2659,7 @@ General
applied. See :ref:`weld <equality-weld>` for more details. applied. See :ref:`weld <equality-weld>` for more details.
#. :commit:`d26501c0` Increased ``mjNEQDATA``, the row length of equality constraint parameters in ``mjModel.eq_data``, #. :commit:`d26501c0` Increased ``mjNEQDATA``, the row length of equality constraint parameters in ``mjModel.eq_data``,
from 7 to 11. from 7 to 11.
#. :commit:`8ca5887c` Added visualisation of anchor points for both :el:`connect` and :el:`weld` constraints (activated #. :commit:`d26501c0` Added visualisation of anchor points for both :el:`connect` and :el:`weld` constraints (activated
by the 'N' key in ``simulate``). by the 'N' key in ``simulate``).
#. :commit:`8ca5887c` Added #. :commit:`8ca5887c` Added
`weld.xml <https://github.com/google-deepmind/mujoco/blob/main/test/engine/testdata/weld.xml>`__ showing different `weld.xml <https://github.com/google-deepmind/mujoco/blob/main/test/engine/testdata/weld.xml>`__ showing different
@@ -2691,7 +2691,7 @@ General
#. :commit:`8ca5887c` Added moment of inertia computation for all well-formed meshes. This option is activated by #. :commit:`8ca5887c` Added moment of inertia computation for all well-formed meshes. This option is activated by
setting the compiler flag :at:`exactmeshinertia` to ``true`` (defaults to ``false``). This default may change in the setting the compiler flag :at:`exactmeshinertia` to ``true`` (defaults to ``false``). This default may change in the
future. future.
#. :commit:`833dc740` Added parameter :at:`shellinertia` to :at:`geom`, for locating the inferred inertia on the #. :commit:`5c5449bf` Added parameter :at:`shellinertia` to :at:`geom`, for locating the inferred inertia on the
boundary (shell). Currently only meshes are supported. boundary (shell). Currently only meshes are supported.
#. :commit:`833dc740` For meshes from which volumetric inertia is inferred, raise error if the orientation of mesh faces #. :commit:`833dc740` For meshes from which volumetric inertia is inferred, raise error if the orientation of mesh faces
is not consistent. If this occurs, fix the mesh in e.g., MeshLab or Blender. is not consistent. If this occurs, fix the mesh in e.g., MeshLab or Blender.
@@ -2732,20 +2732,20 @@ Version 2.2.1 (July 18, 2022)
General General
^^^^^^^ ^^^^^^^
1. :commit:`d3a86bb7` Added ``mjd_transitionFD`` to compute efficient finite difference approximations of the 1. :commit:`228264c9` Added ``mjd_transitionFD`` to compute efficient finite difference approximations of the
state-transition and control-transition matrices, :ref:`see here<derivatives>` for more details. state-transition and control-transition matrices, :ref:`see here<derivatives>` for more details.
#. :commit:`373cc894` Added derivatives for the ellipsoid fluid model. #. :commit:`373cc894` Added derivatives for the ellipsoid fluid model.
#. :commit:`d3a86bb7` Added ``ctrl`` attribute to :ref:`keyframes<keyframe>`. #. :commit:`09a5efc0` Added ``ctrl`` attribute to :ref:`keyframes<keyframe>`.
#. :commit:`c14a7ef4` Added ``clock`` sensor which :ref:`measures time<sensor-clock>`. #. :commit:`c14a7ef4` Added ``clock`` sensor which :ref:`measures time<sensor-clock>`.
#. :commit:`d3a86bb7` Added visualisation groups to skins. #. :commit:`2d0995b4` Added visualisation groups to skins.
#. :commit:`d3a86bb7` Added actuator visualisation for ``free`` and ``ball`` joints and for actuators with ``site`` #. :commit:`6ead1461` Added actuator visualisation for ``free`` and ``ball`` joints and for actuators with ``site``
transmission. transmission.
#. :commit:`d3a86bb7` Added visualisation for actuator activations. #. :commit:`d3a86bb7` Added visualisation for actuator activations.
#. :commit:`d3a86bb7` Added ``<actuator-intvelocity>`` actuator shortcut for "integrated velocity" actuators, documented #. :commit:`d3a86bb7` Added ``<actuator-intvelocity>`` actuator shortcut for "integrated velocity" actuators, documented
:ref:`here <actuator-intvelocity>`. :ref:`here <actuator-intvelocity>`.
#. :commit:`d3a86bb7` Added ``<actuator-damper>`` actuator shortcut for active-damping actuators, documented #. :commit:`d3a86bb7` Added ``<actuator-damper>`` actuator shortcut for active-damping actuators, documented
:ref:`here <actuator-damper>`. :ref:`here <actuator-damper>`.
#. :commit:`d3a86bb7` ``mju_rotVecMat`` and ``mju_rotVecMatT`` now support in-place multiplication. #. :commit:`ec7133b0` ``mju_rotVecMat`` and ``mju_rotVecMatT`` now support in-place multiplication.
#. :commit:`d3a86bb7` ``mjData.ctrl`` values are no longer clamped in-place, remain untouched by the engine. #. :commit:`d3a86bb7` ``mjData.ctrl`` values are no longer clamped in-place, remain untouched by the engine.
#. :commit:`d3a86bb7` Arrays in mjData's buffer now align to 64-byte boundaries rather than 8-byte. #. :commit:`d3a86bb7` Arrays in mjData's buffer now align to 64-byte boundaries rather than 8-byte.
#. :commit:`f887c1e9` Added memory poisoning when building with #. :commit:`f887c1e9` Added memory poisoning when building with
@@ -2765,13 +2765,13 @@ Bug fixes
``quat`` and an :ref:`alternative specifier<COrientation>` e.g., ``<geom ... quat=".1 .2 .3 .4" euler="10 20 30">``, ``quat`` and an :ref:`alternative specifier<COrientation>` e.g., ``<geom ... quat=".1 .2 .3 .4" euler="10 20 30">``,
would lead to the ``quat`` being ignored and only ``euler`` being used. After this change a parse error will be would lead to the ``quat`` being ignored and only ``euler`` being used. After this change a parse error will be
thrown. thrown.
#. :commit:`d3a86bb7` Stricter parsing of XML attributes. Before this change an erroneous XML snippet like #. :commit:`f3453cf8` Stricter parsing of XML attributes. Before this change an erroneous XML snippet like
``<geom size="1/2 3 4">`` would have been parsed as ``size="1 0 0"`` and no error would have been thrown. Now throws ``<geom size="1/2 3 4">`` would have been parsed as ``size="1 0 0"`` and no error would have been thrown. Now throws
an error. an error.
#. :commit:`d3a86bb7` Trying to load a ``NaN`` via XML like ``<geom size="1 NaN 4">``, while allowed for debugging #. :commit:`d3a86bb7` Trying to load a ``NaN`` via XML like ``<geom size="1 NaN 4">``, while allowed for debugging
purposes, will now print a warning. purposes, will now print a warning.
#. :commit:`d3a86bb7` Fixed null pointer dereference in ``mj_loadModel``. #. :commit:`d5672639` Fixed null pointer dereference in ``mj_loadModel``.
#. :commit:`d3a86bb7` Fixed memory leaks when loading an invalid model from MJB. #. :commit:`dbef8e6c` Fixed memory leaks when loading an invalid model from MJB.
#. :commit:`d3a86bb7` Integer overflows are now avoided when computing ``mjModel`` buffer sizes. #. :commit:`d3a86bb7` Integer overflows are now avoided when computing ``mjModel`` buffer sizes.
#. :commit:`d3a86bb7` Added missing warning string for ``mjWARN_BADCTRL``. #. :commit:`d3a86bb7` Added missing warning string for ``mjWARN_BADCTRL``.