diff --git a/doc/changelog.rst b/doc/changelog.rst index 7e0e9a27..40113e4b 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -126,7 +126,7 @@ General .. admonition:: Breaking API changes :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. 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 @@ -259,10 +259,10 @@ General (nonzero :ref:`density` or :ref:`viscosity`). Midpoint integration treats external forces as zero-order-hold constants, which causes 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 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. .. admonition:: Future breaking API changes @@ -302,7 +302,7 @@ General 2. :commit:`2f2d00da` Added :ref:`multi-cell support` 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 flexes. -3. :commit:`34d69ad4` Refactored ``strain`` flex :ref:`equality constraints` to be instantiated +3. :commit:`3d45a331` Refactored ``strain`` flex :ref:`equality constraints` to be instantiated 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 ` 4. :commit:`33259718` Added new :ref:`mj_maxContact` function to get the maximum number of possible @@ -313,7 +313,7 @@ General .. admonition:: Breaking API changes :class: attention - 6. :commit:`34d69ad4` The :ref:`multiccd` option (multiple contacts returned from the convex collision + 6. :commit:`6cb6e5a9` The :ref:`multiccd` 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 little performance overhead and improves stability. @@ -365,7 +365,7 @@ General for :ref:`connect` and :ref:`weld` equality constaints. This significantly improves the stability of constrained mechanisms like four-bar linkages. See :ref:`Dual problem` 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`. 7. :commit:`f5d3ce34` Added :ref:`mj_encode`, :ref:`mjp_registerEncoder`, :ref:`mjp_defaultEncoder`, and @@ -406,7 +406,7 @@ General 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) ------------------------------ @@ -417,7 +417,7 @@ General .. admonition:: Breaking API changes :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 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` type for trilinear and quadratic :ref:`dofs`. 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``. -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``. 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` section for details. Bug fixes @@ -450,8 +450,8 @@ Version 3.5.0 (February 12, 2026) Significant new features ^^^^^^^^^^^^^^^^^^^^^^^^ -1. :commit:`54b8b68b` :doc:`MuJoCo Warp ` is now officially released. -2. :commit:`54b8b68b` Added a new **System Identification** toolbox (Python), see +1. :commit:`b64b527e` :doc:`MuJoCo Warp ` is now officially released. +2. :commit:`146a5c08` Added a new **System Identification** toolbox (Python), see `README `__ for details. |br| A Colab notebook demonstrating the toolbox is available here: |sysid_colab| |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 -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 ``mjData.history`` variable to the :ref:`Physics state`. See :ref:`Delays` for details. @@ -484,7 +484,7 @@ Significant new features :align: right :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` attribute. In this case, the sensor respects the :ref:`camera/resolution` attribute and casts multiple rays, one for each pixel. 7. :commit:`ed15493a` :ref:`Rangefinders` can now report various kinds of information besides ray @@ -502,7 +502,7 @@ General .. admonition:: Breaking API changes :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 :ref:`mj_ray`, :ref:`mj_multiRay`, :ref:`mju_rayGeom`, :ref:`mj_rayFlex`, :ref:`mj_rayHfield` and :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 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 fisheye cameras. Relatedly, the ``camera/orthographic`` MJCF attribute for cameras has been renamed to :ref:`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 same shared implementation. - 12. :commit:`54b8b68b` When combining the ``margin`` or ``gap`` :ref:`parameters` of two geoms to obtain + 12. :commit:`6af0d4c8` When combining the ``margin`` or ``gap`` :ref:`parameters` of two geoms to obtain 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. @@ -533,7 +533,7 @@ General 14. :commit:`608115ab` Cameras now have an :ref:`output` attribute, parsed into the ``mjModel.cam_output`` bitfield. Unused by the renderer, it serves as a convenient location to store a camera's 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. 16. :commit:`1d2d0b1c` The optimization whereby sequential :ref:`collision sensors` with identical attributes shared computation has been removed. This results in a (likely minor) performance regression for models @@ -571,7 +571,7 @@ Documentation has been expanded. 22. :commit:`c5925e7b` The usability of the :ref:`MJCF schema` is improved with a collapsible dropdown menu 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 `__. @@ -581,10 +581,10 @@ Bug fixes derivatives were incorrectly computed when the force was clamped by :ref:`forcerange`. 25. :commit:`7f74487a` Fixed a bug in :ref:`implicit integrator` derivatives where actuator velocity derivatives did not account for the :ref:`actearly` flag. -26. :commit:`54b8b68b` Multi-threaded mesh processing, enabled by the :ref:`usethread` compiler flag +26. :commit:`64a2345c` Multi-threaded mesh processing, enabled by the :ref:`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 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. 28. :commit:`c1b3b306` Fixed :ref:`gravcomp` being ignored for bodies with no joints nested inside jointed parent bodies (:issue:`3066`, reported by :github:user:`Alex108306`). @@ -655,7 +655,7 @@ General .. admonition:: Breaking API changes :class: attention - 1. :commit:`f7708954` The mjSpec C API fields :ref:`meshdir` and + 1. :commit:`77e025ea` The mjSpec C API fields :ref:`meshdir` and :ref:`texturedir` have been moved to `compiler.meshdir `__ and @@ -674,11 +674,11 @@ General existing color with :ref:`visual/rgba/constraint`. For spatial tendons, this visualization aid is active only if no :ref:`material` is set and :ref:`rgba` is 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. 6. :commit:`e4704cd2` Added the code sample ``dependencies`` which provides command line utility for printing the result 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. .. admonition:: Breaking ABI changes @@ -691,7 +691,7 @@ General MJX ^^^ 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. Bug fixes @@ -760,12 +760,12 @@ General 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 :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``. Bug fixes @@ -781,7 +781,7 @@ General ^^^^^^^ 1. :commit:`e6c57159` Added the :ref:`insidesite` sensor, for checking if an object is inside the volume of a site. It is useful for triggering events in surrounding environment logic. -2. :commit:`3152458a` Added the :ref:`contact` sensor, for reporting contact information according to +2. :commit:`d0e4771c` Added the :ref:`contact` sensor, for reporting contact information according to user-defined criteria. 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. @@ -805,7 +805,7 @@ General 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 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 @@ -880,7 +880,7 @@ General **Migration:** Replace light/directional="false/true" with light/type="spot/directional", respectively. - 4. :commit:`7548d370` Added :ref:`mjtColorSpace` enum and associated :ref:`colorspace` + 4. :commit:`3e9bc79b` Added :ref:`mjtColorSpace` enum and associated :ref:`colorspace` attribute that allows to specify the color space of textures (either linear or `sRGB `__). Since this property is now read correctly from PNG files, textures files which use sRGB will now be rendered differently. @@ -943,7 +943,7 @@ General length. 4. :commit:`f96f3e1c` Added the :ref:`compiler/saveinertial` flag, writing explicit inertial clauses for all bodies when saving to XML. -5. :commit:`f96f3e1c` Added :ref:`orientation` attribute to :ref:`composite`. +5. :commit:`e8c67ca5` Added :ref:`orientation` attribute to :ref:`composite`. Moreover, allow the composite to be the direct child of a frame. 6. :commit:`96dda6ea` Added :ref:`tendon actuator force limits` and :ref:`tendon actuator force sensor`. @@ -958,7 +958,7 @@ Bug fixes 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 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`. Python bindings @@ -970,7 +970,7 @@ Python bindings :width: 240px 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` in the documentation. .. |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 may break some workflows. In this case, set :ref:`nativeccd` to "disable" to restore the 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 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. @@ -1108,16 +1108,16 @@ MJX Python bindings ^^^^^^^^^^^^^^^ 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 identification of model elements. -5. :commit:`ec9986dc` :ref:`rollout` can now accept sequences of MjModel of length ``nroll``. Also removed +5. :commit:`943eb6bc` :ref:`rollout` can now accept sequences of MjModel of length ``nroll``. Also removed the ``nroll`` argument because its value can always be inferred. Bug fixes ^^^^^^^^^ 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` attribute, +7. :commit:`5c23ae11` Fixed bug introduced in 3.2.0 in handling of :ref:`texrepeat` attribute, was mistakenly cast from ``float`` to ``int``, (fixed :issue:`2223`). 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 been removed. 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 :ref:`layer` sub-element. 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 `example model `__ using 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 feature can be toggled individually using the :ref:`freejoint/align` attribute or globally using the compiler :ref:`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 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. -8. :commit:`577afd1e` :ref:`shell (surface) inertia ` is now supported by all geom types. -9. :commit:`8b03daa0` When :ref:`attaching` sub-models, :ref:`keyframes` will now be correctly +7. :commit:`851bb6ee` Added an :ref:`mjSpec` option for creating a texture directly from a buffer. +8. :commit:`466368ef` :ref:`shell (surface) inertia ` is now supported by all geom types. +9. :commit:`afd7c73f` When :ref:`attaching` sub-models, :ref:`keyframes` will now be correctly 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 their children. These alignments are used for computation shortcuts in :ref:`mj_kinematics`. @@ -1291,7 +1291,7 @@ MJX 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`). 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. @@ -1365,7 +1365,7 @@ General .. admonition:: Breaking API changes :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. **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 when the wrong value of actdim is provided. -6. :commit:`e13ddfa2` Added :ref:`attach` meta-element to MJCF, which allows :ref:`attaching` +6. :commit:`27b9ddda` Added :ref:`attach` meta-element to MJCF, which allows :ref:`attaching` a subtree from a different model to a body in the current model. 7. :commit:`57e6760e` The :ref:`VFS` implementation has been rewritten in C++ and is now considerably more efficient in speed and memory footprint. @@ -1398,7 +1398,7 @@ General 9. :commit:`ace0c8f0` Added :ref:`maxhullvert`, the maximum number of vertices in a mesh's convex hull. 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 `mjtnum.h `__ with the build-time flag ``mjUSESINGLE``. If this symbol is not defined, MuJoCo will use double-precision floating @@ -1426,7 +1426,7 @@ MJX Simulate ^^^^^^^^ 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. Python bindings @@ -1515,9 +1515,9 @@ MJX ``mjx.device_put``. 8. :commit:`0cd28d24` Added cylinder plane collisions. -9. :commit:`a4df9120` 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. -11. :commit:`a4df9120` Added ``ne``, ``nf``, ``nl``, ``nefc``, and ``ncon`` to ``mjx.Data`` to match ``mujoco.MjData``. +9. :commit:`71333938` Added ``efc_type`` to ``mjx.Data`` and ``dim``, ``efc_address`` to ``mjx.Contact``. +10. :commit:`71333938` Added ``geom`` to ``mjx.Contact`` and marked ``geom1``, ``geom2`` deprecated. +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 ``mjx.count_constraints``. 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 ^^^ -5. :commit:`63ec34f9` Added :ref:`dyntype` ``filterexact``. -6. :commit:`63ec34f9` Added :at:`site` transmission. +5. :commit:`80f50c94` Added :ref:`dyntype` ``filterexact``. +6. :commit:`8ce2c920` Added :at:`site` transmission. 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. 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 deeply embedded in the other. -2. :commit:`d39ed1d3` Fixed a bug in :ref:`simulate` where the "LOADING..." message was not showing +2. :commit:`dc0d0c59` Fixed a bug in :ref:`simulate` where the "LOADING..." message was not showing correctly. 3. :commit:`d39ed1d3` Fixed a crash in the Python :ref:`passive viewer`, when used with models 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``. @@ -1750,7 +1750,7 @@ Bug fixes ^^^^^^^^^ 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. -9. :commit:`d39ed1d3` Fix bug that prevented using flex with :ref:`simulate`. +9. :commit:`cd56a41f` Fix bug that prevented using flex with :ref:`simulate`. 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 ``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 ^^^^^^^^^^^^^^^ -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. 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`` @@ -1904,7 +1904,7 @@ New features :align: right :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 :ref:`CG`. Island discovery can be activated using a new :ref:`enable flag`. 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` and :ref:`ls_tolerance` options for adjusting linesearch stopping criteria in CG and Newton solvers. These can be useful for performance 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`. 22. :commit:`8064ad59` Added camera :ref:`resolution` attribute and :ref:`camprojection` sensor. If camera resolution is set to positive values, the camera @@ -2061,7 +2061,7 @@ Documentation Bug fixes ^^^^^^^^^ -33. :commit:`2cc12054` Fixed a bug that was causing :ref:`geom margin` to be ignored during the +33. :commit:`b0077e40` Fixed a bug that was causing :ref:`geom margin` to be ignored during the construction of midphase collision trees. 34. :commit:`1bd6c94e` Fixed a bug that was generating incorrect values in ``efc_diagApprox`` for weld equality @@ -2089,7 +2089,7 @@ General :ref:`integration` (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 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. Python bindings @@ -2188,10 +2188,10 @@ General `elastic rubber balls `__. This is an advanced option currently only supported by explicit :ref:`contact pairs`, using the :ref:`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 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. #. :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. @@ -2267,7 +2267,7 @@ General 2. :commit:`7cc42ecf` Added :ref:`visual-global` flag :ref:`ellipsoidinertia` to visualize equivalent body inertias with ellipsoids instead 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`. #. :commit:`2e23594f` Added struct information to the ``introspect`` module. #. :commit:`fe3dccfd` Added a new extension mechanism called :ref:`resource providers`. 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 arguments). The functions ``mju_error_i``, ``mju_error_s``, ``mju_warning_i``, and ``mju_warning_s`` are now 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. #. :commit:`8696247f` Added ``mj_stackAllocInt`` to get correct size for allocating ints on mjData stack. Reducing stack memory usage by 10% - 15%. @@ -2371,7 +2371,7 @@ Python bindings experimental/beta stage, and is not yet described in our :ref:`viewer documentation`.) #. :commit:`7a0def97` Added the ``mjpython`` launcher for macOS, which is required for ``viewer.launch_passive`` to 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 correspondence between joints and ``efc_`` rows. #. :commit:`e20ab6c9` Added a number of missing fields to the bindings of ``mjVisual`` and ``mjvPerturb`` structs. @@ -2420,29 +2420,29 @@ Bug fixes :align: right :width: 300px -6. :commit:`6b80b010` 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. +6. :commit:`d022cd1a` The ``launch_repl`` functionality in the Python viewer has been fixed. +#. :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 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. -#. :commit:`10c5d6a1` Correctly end the timer (``TM_END``) ``mj_fwdConstraint`` returns early. -#. :commit:`6b80b010` Fixed an infinite loop in ``mj_deleteFileVFS``. +#. :commit:`e9869d3b` Correctly end the timer (``TM_END``) ``mj_fwdConstraint`` returns early. +#. :commit:`436fc6e7` Fixed an infinite loop in ``mj_deleteFileVFS``. 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 `_). -#. :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. 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 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. @@ -2479,7 +2479,7 @@ General #. :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:`60fbb77b` Added :at:`gravcomp` attribute to :ref:`body`, implementing gravity compensation and +#. :commit:`23092a11` Added :at:`gravcomp` attribute to :ref:`body`, implementing gravity compensation and buoyancy. See `balloons.xml `__ example model. #. :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 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 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. -#. :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. #. :commit:`dee1d602` Sensors of type :ref:`user` no longer require :at:`objtype`, :at:`objname` and :at:`needstage`. If unspecified, the objtype is now :ref:`mjOBJ_UNKNOWN`. ``user`` sensors :at:`datatype` 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 `Rosetta 2 `__ translation on an Apple Silicon machine. Pre-built MuJoCo binaries make use of `AVX `__ instructions on x86-64 @@ -2648,7 +2648,7 @@ General :align: right :height: 150px -1. :commit:`0b2f19bb` Added :ref:`adhesion actuators` mimicking vacuum grippers and adhesive +1. :commit:`3d77eb1e` Added :ref:`adhesion actuators` mimicking vacuum grippers and adhesive biomechanical appendages. #. :commit:`3d77eb1e` Added related `example model `__ and video: @@ -2659,7 +2659,7 @@ General applied. See :ref:`weld ` for more details. #. :commit:`d26501c0` Increased ``mjNEQDATA``, the row length of equality constraint parameters in ``mjModel.eq_data``, 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``). #. :commit:`8ca5887c` Added `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 setting the compiler flag :at:`exactmeshinertia` to ``true`` (defaults to ``false``). This default may change in the 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. #. :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. @@ -2732,20 +2732,20 @@ Version 2.2.1 (July 18, 2022) 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` for more details. #. :commit:`373cc894` Added derivatives for the ellipsoid fluid model. -#. :commit:`d3a86bb7` Added ``ctrl`` attribute to :ref:`keyframes`. +#. :commit:`09a5efc0` Added ``ctrl`` attribute to :ref:`keyframes`. #. :commit:`c14a7ef4` Added ``clock`` sensor which :ref:`measures time`. -#. :commit:`d3a86bb7` Added visualisation groups to skins. -#. :commit:`d3a86bb7` Added actuator visualisation for ``free`` and ``ball`` joints and for actuators with ``site`` +#. :commit:`2d0995b4` Added visualisation groups to skins. +#. :commit:`6ead1461` Added actuator visualisation for ``free`` and ``ball`` joints and for actuators with ``site`` transmission. #. :commit:`d3a86bb7` Added visualisation for actuator activations. #. :commit:`d3a86bb7` Added ```` actuator shortcut for "integrated velocity" actuators, documented :ref:`here `. #. :commit:`d3a86bb7` Added ```` actuator shortcut for active-damping actuators, documented :ref:`here `. -#. :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` Arrays in mjData's buffer now align to 64-byte boundaries rather than 8-byte. #. :commit:`f887c1e9` Added memory poisoning when building with @@ -2765,13 +2765,13 @@ Bug fixes ``quat`` and an :ref:`alternative specifier` e.g., ````, would lead to the ``quat`` being ignored and only ``euler`` being used. After this change a parse error will be 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 ```` would have been parsed as ``size="1 0 0"`` and no error would have been thrown. Now throws an error. #. :commit:`d3a86bb7` Trying to load a ``NaN`` via XML like ````, while allowed for debugging purposes, will now print a warning. -#. :commit:`d3a86bb7` Fixed null pointer dereference in ``mj_loadModel``. -#. :commit:`d3a86bb7` Fixed memory leaks when loading an invalid model from MJB. +#. :commit:`d5672639` Fixed null pointer dereference in ``mj_loadModel``. +#. :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` Added missing warning string for ``mjWARN_BADCTRL``.