========= Changelog ========= Upcoming version (not yet released) ----------------------------------- Bug fixes ^^^^^^^^^ - Fixed a bug in the box-sphere collider, depth was incorrect for deep penetrations (:github:issue:`2206`). Version 3.2.6 (Dec 2, 2024) --------------------------- General ^^^^^^^ 1. Removed rope and loop from :ref:`composite`. The user is encouraged to instead use the :at:`cable` plugin or :ref:`flexcomp`, respectively. MJX ^^^ 2. Added muscle actuators. Python bindings ^^^^^^^^^^^^^^^ 3. Provide prebuilt wheels for Python 3.13. 4. 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. :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. Fixed :github:issue:`2212`, type error in ``mjx.get_data``. 7. Fixed bug introduced in 3.2.0 in handling of :ref:`texrepeat` attribute, was mistakenly cast from ``float`` to ``int``, (fixed :github:issue:`2223`). Version 3.2.5 (Nov 4, 2024) --------------------------- Feature promotion ^^^^^^^^^^^^^^^^^ 1. The :doc:`Model Editing` framework afforded by :ref:`mjSpec`, introduced in 3.2.0 as an in-development feature, is now stable and recommended for general use. 2. The native convex collision detection pipeline introduced in 3.2.3 and enabled by the :ref:`nativeccd` flag, is not yet the default but is already recommended for general use. Please try it when encountering collision-related problems and report any issues you encounter. General ^^^^^^^ 3. The global compiler flag ``exactmeshinertia`` has been removed and replaced with the mesh-specific :ref:`inertia` attribute. 4. The not-useful ``convexhull`` compiler option (to disable computation of mesh convex hulls) has been removed. 5. Removed the deprecated ``mju_rotVecMat``, ``mju_rotVecMatT`` and ``mjv_makeConnector`` functions. 6. Sorting now uses a faster, native sort function (fixes :github:issue:`1638`). 7. The PBR texture layers introduced in 3.2.1 were refactored from seperate sub-elements to a single :ref:`layer` sub-element. 8. The composite types box, cylinder, and sphere have been removed. Users should instead use the equivalent types available in :ref:`flexcomp`. MJX ^^^ 9. Added ``apply_ft``, ``jac``, and ``xfrc_accumulate`` as public functions. 10. Added ``TOUCH`` sensor. 11. Added support for ``eq_active``. Fixes :github:issue:`2173`. 12. Added ray intersection with ellipsoid. Bug fixes ^^^^^^^^^ 13. Fixed several bugs related to connect and weld constraints with site semantics (fixes :github:issue:`2179`, reported by :github:user:`yinfanyi`). The introduction of site specification to connects and welds in 3.2.3 conditionally changed the semantics of `mjData.eq_obj1id` and `mjData.eq_obj2id`, but these changes were not properly propagated in several places leading to incorrect computations of constraint inertia, readings of affected force/torque sensors and runtime enabling/disabling of such constraints. 14. Fixed a bug in slider-crank :ref:`transmission`. The bug was introduced in 3.0.0. 15. Fixed a bug in flex texture coordinates that prevented the correct allocation of textures in mjModel. Documentation ^^^^^^^^^^^^^ 16. Function headers in the :doc:`API reference <../APIreference/APIfunctions>` now link to their source definitions in GitHub. Version 3.2.4 (Oct 15, 2024) ---------------------------- General ^^^^^^^ .. youtube:: e8lUuykQPGs :align: right :width: 240px 1. The Newton solver no longer requires ``nv*nv`` memory allocation, allowing for much larger models. See e.g., `100_humanoids.xml `__. Two quadratic-memory allocations still remain to be fully sparsified: ``mjData.actuator_moment`` and the matrices used by the PGS solver. 2. Removed the :at:`solid` and :at:`membrane` plugins and moved the associated computations into the engine. See `3D example model `__ and `2D example model `__ for examples of flex objects that previously required these plugins. 3. Replaced the function ``mjs_setActivePlugins`` with :ref:`mjs_activatePlugin`. MJX ^^^ 4. Added ``mocap_pos`` and ``mocap_quat`` in kinematics. 5. Added support for :ref:`spatial tendons ` with pulleys and external sphere and cylinder wrapping. 6. Added sphere-cylinder and sphere-ellipsoid collision functions (:github:issue:`2126`). 7. Fixed a bug with frictionloss constraints. 8. Added ``TENDONPOS`` and ``TENDONVEL`` sensors. 9. Fixed a bug with the computation of tangential contact forces in ``_decode_pyramid``. 10. Added ``JOINTINPARENT`` actuator transmission type. Python bindings ^^^^^^^^^^^^^^^ 11. Removed support for Python 3.8, now that it's `deprecated upstream `__. Bug fixes ^^^^^^^^^ 12. Fixed a bug where ``actuator_force`` was not set in MJX (:github:issue:`2068`). 13. Fixed bug where MJX data tendon fields were incorrect after calling ``mjx.put_data``. 14. The compiler now returns an error if height fields are used with :ref:`collision sensors` as they are not yet supported. Version 3.2.3 (Sep 16, 2024) ---------------------------- General ^^^^^^^ .. admonition:: Breaking API changes :class: attention 1. The runtime options ``mpr_tolerance`` and ``mpr_iterations`` were renamed to :ref:`ccd_tolerance` and :ref:`ccd_iterations`, both in XML and in the :ref:`mjOption` struct. This is because the new convex collision detection pipeline (see below) does not use the MPR algorithm. The semantics of these options remain identical. 2. The functions ``mjs_findMesh`` and ``mjs_findKeyframe`` were replaced by ``mjs_findElement``, which allows to look for any object type. 3. The experimental use of 2D/3D elasticity plugins with :ref:`composite` has been removed. Users should instead use :ref:`flexcomp`, which provides the correct collision behavior. 4. Added the :ref:`nativeccd` flag. When this flag is enabled, general convex collision detection is handled with a new native code path, rather than `libccd `__. This feature is in early stages of testing, but users who've experienced issues related to collsion detection are welcome to experiment with it and report any issues. .. youtube:: kcM_oauk3ZA :align: right :width: 240px 5. Added a new way of defining :ref:`connect` and :ref:`weld` equality constraints, using two sites. The new semantic is useful when the assumption that the constraint is satisfied in the base configuration does not hold. In this case the sites will "snap together" at the beginning of the simulation. Additionally, changing the site positions (``mjModel.site_pos``) and orientations ( ``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. 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 sub-matrix, leading to both faster and more stable simulation of free bodies. While this optimization is a strict improvement, it changes the semantics of the joint's degrees-of-freedom. Therefore, ``qpos`` and ``qvel`` values saved in older versions (for example, in :ref:`keyframes`) will 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. Added an :ref:`mjSpec` option for creating a texture directly from a buffer. 8. :ref:`shell (surface) inertia ` is now supported by all geom types. 9. When :ref:`attaching` sub-models, :ref:`keyframes` will now be correctly merged into the parent model, but only on the first attachment. 10. 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`. 11. Added :ref:`mj_jacDot` for computing time-derivatives of kinematic Jacobians. Fixes :github:issue:`411`. MJX ^^^ 12. Added ``efc_pos`` to ``mjx.Data`` (:github:issue:`1388`). 13. Added position-dependent sensors: ``MAGNETOMETER``, ``CAMPROJECTION``, ``RANGEFINDER``, ``JOINTPOS``, ``ACTUATORPOS``, ``BALLQUAT``, ``FRAMEPOS``, ``FRAMEXAXIS``, ``FRAMEYAXIS``, ``FRAMEZAXIS``, ``FRAMEQUAT``, ``SUBTREECOM``, ``CLOCK``. 14. Added velocity-dependent sensors: ``VELOCIMETER``, ``GYRO``, ``JOINTVEL``, ``ACTUATORVEL``, ``BALLANGVEL``, ``FRAMELINVEL``, ``FRAMEANGVEL``, ``SUBTREELINVEL``, ``SUBTREEANGMOM``. 15. Added acceleration/force-dependent sensors: ``ACCELEROMETER``, ``FORCE``, ``TORQUE``, ``ACTUATORFRC``, ``JOINTACTFRC``, ``FRAMELINACC``, ``FRAMEANGACC``. 16. Changed default policy to avoid placing unused (MuJoCo-only) arrays on device. 17. Added ``device`` parameter to ``mjx.make_data`` to bring it to parity with ``mjx.put_model`` and ``mjx.put_data``. 18. Added support for :ref:`implicitfast integration` for all cases except :doc:`fluid drag `. 19. Fixed a bug where ``qLDiagInv`` had the wrong size for sparse mass matrices. 20. Added support for joint and tendon :ref:`frictionloss `. 21. Added support for :ref:`connect` equality constraints using two sites. 22. Added support for :ref:`spatial tendons ` with site wrapping. Bug fixes ^^^^^^^^^ 23. Fixed a performance regression introduced in 3.1.7 in mesh Bounding Volume Hierarchies (:github:issue:`1875`, contribution by :github:user:`michael-ahn`). 24. 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. 25. Fixed a bug in tendon wrapping around spheres. Before this fix, tendons that wrapped around spheres with an externally-placed :ref:`sidesite` could jump inside the sphere instead of wrapping around it. 26. Fixed a bug that caused :at:`meshdir` and :at:`texturedir` to be overwritten during model :ref:`attachment`, preventing model attachment for models with assets in different directories. Python bindings ^^^^^^^^^^^^^^^ 27. Added support for engine plugins in :ref:`mjSpec` (:github:issue:`1903`). 28. Better error reporting for issues with the assets dictionary, when loading models. Version 3.2.2 (Aug 8, 2024) --------------------------- General ^^^^^^^ 1. Increase texture and material limit back to 1000. 3.2.0 inadvertently reduced this limit to 100, breaking some existing models (:github:issue:`1877`). Version 3.2.1 (Aug 5, 2024) --------------------------- General ^^^^^^^ 1. Renamed ``mjModel.tex_rgb`` to ``mjModel.tex_data``. 2. Added a new :ref:`autoreset` flag to disable automatic reset when NaNs or infinities are detected. 3. Added sub-elements to the MJCF :ref:`material` element, to allow specification of multiple textures for rendering (e.g., ``occlusion, roughness, metallic``). Note that the MuJoCo renderer doesn't support these new features, and they are made available for use with external renderers. 4. Sorting (``mjQUICKSORT``) now calls ``std::sort`` when building with C++ (:github:issue:`1638`). MJX ^^^ 5. Added more fields to ``mjx.Model`` and ``mjx.Data`` for further compatibility with the corresponding MuJoCo structs. 6. Added support for :ref:`fixed tendons `. 7. Added support for tendon length limits (``mjCNSTR_LIMIT_TENDON`` in :ref:`mjtConstraint`). 8. Added support for tendon equality constraints (``mjEQ_TENDON`` in :ref:`mjtEq`). 9. Added support for tendon actuator transmission (``mjTRN_TENDON`` in :ref:`mjtTrn`). Python bindings ^^^^^^^^^^^^^^^ 10. Added support for asset dictionary argument in ``mujoco.spec.from_file``, ``mujoco.spec.from_string`` and ``mujoco.spec.compile``. Bug fixes ^^^^^^^^^ 11. Fixed a bug where implicit integrators did not take into account disabled actuators (:github:issue:`1838`). Version 3.2.0 (Jul 15, 2024) ---------------------------- New features ^^^^^^^^^^^^ 1. Introduced a major new feature: **procedural model creation and editing**, using a new top-level data-structure :ref:`mjSpec`. See the :doc:`Model Editing` chapter for details. Note that as of this release this feature is still in testing and subject to future breaking changes. Fixes :github:issue:`364`. General ^^^^^^^ .. admonition:: Breaking API changes :class: attention 2. 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. 3. Calls to :ref:`mj_defaultVFS` may allocate memory inside VFS, and the corresponding :ref:`mj_deleteVFS` must be called to deallocate any internal allocated memory. 4. Deprecated ``mju_rotVecMat`` and ``mju_rotVecMatT`` in favor of :ref:`mju_mulMatVec3` and :ref:`mju_mulMatTVec3`. These function names and argument order are more consistent with the rest of the API. The older functions have been removed from the Python bindings and will be removed from the C API in the next release. 5. Removed the ``actuator_actdim`` callback from actuator plugins. They now have the ``actdim`` attribute, which must be used with actuators that write state to the ``act`` array. This fixed a crash which happend 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. 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. The :ref:`VFS` implementation has been rewritten in C++ and is now considerably more efficient in speed and memory footprint. .. youtube:: ZXBTEIDWHhs :align: right :width: 240px 8. Added support for orthographic cameras. This is available for both fixed cameras and the free camera, using the :ref:`camera/orthographic` and :ref:`global/orthographic` attributes, respectively. 9. Added :ref:`maxhullvert`, the maximum number of vertices in a mesh's convex hull. 10. Added :ref:`mj_setKeyframe` for saving the current state into a model keyframe. 11. Added support for ``ball`` joints in the URDF parser ("spherical" in URDF). 12. 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 point, as usual. If ``mjUSESINGLE`` is defined, MuJoCo will use single-precision floating point. See :ref:`mjtNum`. Relatedly, fixed various type errors that prevented building with single-precision. 13. Quaternions in ``mjData.qpos`` and ``mjData.mocap_quat`` are no longer normalized in-place by :ref:`mj_kinematics`. Instead they are normalized when they are used. After the first step, quaternions in ``mjData.qpos`` will be normalized. 14. Mesh loading in the compiler, which is usually the slowest part of the loading process, is now multi-threaded. MJX ~~~ 15. Added support for :ref:`elliptic friction cones`. 16. Fixed a bug that resulted in less-optimal linesearch solutions for some difficult constraint settings. 17. Fixed a bug in the Newton solver that sometimes resulted in less-optimal gradients. .. youtube:: P83tKA1iz2Y :align: right :width: 360px Simulate ^^^^^^^^ 18. Added improved tutorial video. 19. Improved the Brownian noise generator. 20. Now displaying model load times if they are longer than 0.25 seconds. Python bindings ^^^^^^^^^^^^^^^ 21. Fixed a memory leak when using ``copy.deepcopy()`` on a ``mujoco.MjData`` instance (:github:issue:`1572`). Bug fixes ^^^^^^^^^ 22. Fix an issue where ``mj_copyData`` (or ``copy.copy()`` in the Python bindings) was not copying contact information correctly (:github:issue:`1710`). 23. Fix an issue with saving to XML that caused frames to be written multiple times (:github:issue:`1802`). Version 3.1.6 (Jun 3, 2024) --------------------------- General ^^^^^^^ 1. Added :ref:`mj_geomDistance` for computing the shortest signed distance between two geoms and optionally a segment connecting them. Relatedly, added the 3 sensors: :ref:`distance`, :ref:`normal`, :ref:`fromto`. See the function and sensor documentation for details. Fixes :github:issue:`51`. 2. Improvements to position actuators: - Added :ref:`timeconst` attribute to the :ref:`position actuator`. When set to a positive value, the actuator is made stateful with :at:`filterexact` dynamics. - Added :ref:`dampratio` to both :el:`position` and :el:`intvelocity` actuators. An alternative to the :at:`kv` attribute, it provides a convenient way to set actuator damping using natural units. See attribute documentation for details. MJX ^^^ 3. Add height-field collision support. Fixes :github:issue:`1491`. 4. Add a pre-compiled field ``mesh_convex`` to ``mjx.Model`` so that mesh properties can be vmapped over. Fixes :github:issue:`1655`. 5. Fix a bug in convex mesh collisions, where erroneous edge contacts were being created even though face separating axes were found. Fixes :github:issue:`1695`. Bug fixes ^^^^^^^^^ 6. Fixed a bug the could cause collisions to be missed when :ref:`fusestatic` is enabled, as is often the case for URDF imports. Fixes :github:issue:`1069`, :github:issue:`1577`. 7. Fixed a bug that was causing the visualization of SDF iterations to write outside the size of the vector storing them. Fixes :github:issue:`1539`. Version 3.1.5 (May 7, 2024) --------------------------- General ^^^^^^^ .. youtube:: 5k0_wsIRAFc :align: right :width: 240px 1. Added the :ref:`replicate` to MJCF, a :ref:`meta-element` which permits to repeat a subtree with incremental translational and rotational offsets. 2. Enabled an internal cache in the MuJoCo compiler resulting in recompilation speedup. Currently, processed textures, hfields, and OBJ meshes are cached. Support for Unity environments is not yet available. 3. Added ``mjModel.mesh_scale``: the scaling applied to asset vertices, as specified in the :ref:`scale` attribute. 4. Added visual properties which are ignored by the native renderer, but can be used by external renderers: - :ref:`light/bulbradius` attribute and corresponding ``mjModel.light_bulbradius`` field. - :ref:`material/metallic` attribute and corresponding ``mjModel.material_metallic`` field. - :ref:`material/roughness` attribute and corresponding ``mjModel.material_roughness`` field. 5. The type of the ``size`` argument of :ref:`mj_stackAllocNum` and :ref:`mj_stackAllocInt` was changed from ``int`` to ``size_t``. 6. Added support for gmsh format version 2.2 surface meshes in :ref:`flexcomp`. MJX ^^^ .. admonition:: Breaking API changes :class: attention 7. Removed deprecated ``mjx.device_get_into`` and ``mjx.device_put`` functions as they lack critical new functionality. **Migration:** Use ``mjx.get_data_into`` instead of ``mjx.device_get_into``, and ``mjx.put_data`` instead of ``mjx.device_put``. 8. Added cylinder plane collisions. 9. Added ``efc_type`` to ``mjx.Data`` and ``dim``, ``efc_address`` to ``mjx.Contact``. 10. Added ``geom`` to ``mjx.Contact`` and marked ``geom1``, ``geom2`` deprecated. 11. Added ``ne``, ``nf``, ``nl``, ``nefc``, and ``ncon`` to ``mjx.Data`` to match ``mujoco.MjData``. 12. Given the above added fields, removed ``mjx.get_params``, ``mjx.ncon``, and ``mjx.count_constraints``. 13. Changed the way meshes are organized on device to speed up collision detection when a mesh is replicated for many geoms. 14. Fixed a bug where capsules might be ignored in broadphase colliision checking. 15. Added cylinder collisions using SDFs. 16. Added support for all :ref:`condim `: 1, 3, 4, 6. 17. Add support functions for ``id2name`` and ``name2id``, MJX versions of :ref:`mj_id2name` and :ref:`mj_name2id`. 18. Added support for :ref:`gravcomp` and :ref:`actuatorgravcomp`. 19. Fixed a bug in ``mjx.ray`` for sometimes allowed negative distances for ray-mesh tests. 20. Added a new `differentiable physics tutorial `__ that demonstrates training locomotion policies with analytical gradients automatically derived from the MJX physics step. Contribution by :github:user:`Andrew-Luo1`. Bug fixes ^^^^^^^^^ 21. Defaults of lights were not being saved, now fixed. 22. Prevent overwriting of frame names by body names when saving an XML. Bug introduced in 3.1.4. 23. Fixed bug in Python binding of :ref:`mj_saveModel`: ``buffer`` argument was documented as optional but was actually not optional. 24. Fixed bug that prevented memory allocations larger than 2.15 GB. Fixes :github:issue:`1606`. Version 3.1.4 (April 10th, 2024) -------------------------------- General ^^^^^^^ .. admonition:: Breaking API changes :class: attention 1. Removed the ability to natively add noise to sensors. Note that the ``mjModel.sensor_noise`` field and :ref:`corresponding attribute` are kept and now function as a convenient location for the user to save standard-deviation information for their own use. This feature was removed because: - There was no mechanism to seed the random noise generator. - It was not thread-safe, even if seeding would have been provided, sampling on multiple threads would lead to non-reproducible results. - This feature was seen as overreach by the engine. Adding noise should be the user's responsibility. - We are not aware of anyone who was actually using the feature. **Migration:** Add noise to sensor values yourself. 2. Added the :ref:`actuatorgravcomp` joint attribute. When enabled, gravity compensation forces on the joint are treated as applied by actuators. See attribute documentation for more details. The example model `refsite.xml `__, which demostrates Cartesian actuation of an arm, has been updated to use this attribute. 3. Added support for gmsh format 2.2 , tetrahedral mesh, as generated by e.g. `fTetwild `__. 4. Added :ref:`mju_euler2Quat` for converting an Euler-angle sequence to quaternion. MJX ^^^ 5. Improved performance of SAT for convex collisions. 6. Fixed bug for sphere/capsule-convex deep penetration. 7. Fixed bug where ``mjx.Data`` produced by ``mjx.put_data`` had different treedef than ``mjx.make_data``. 8. Throw an error for margin/gap for convex mesh collisions, since they are not supported. 9. Added ellipsoid plane collisions. 10. Added support for userdata. 11. Added ellipsoid-ellipsoid and ellipsoid-capsule collisions using signed distance functions (SDFs). Simulate ^^^^^^^^ 12. Fixed bug in order of enable flag strings. Before this change, using the simulate UI to toggle the :ref:`invdiscrete` or the (now removed) ``sensornoise`` flags would actually toggle the other flag. Python bindings ^^^^^^^^^^^^^^^ .. youtube:: xHDS0n5DpqM :align: right :width: 240px 13. Added the ``mujoco.minimize`` Python module for nonlinear least-squares, designed for System Identification (sysID). The sysID tutorial is work in progress, but a pedagogical colab notebook with examples, including Inverse Kinematics, is available here: |ls_colab| |br| The video on the right shows example clips from the tutorial. .. |ls_colab| image:: https://colab.research.google.com/assets/colab-badge.svg :target: https://colab.research.google.com/github/google-deepmind/mujoco/blob/main/python/least_squares.ipynb Version 3.1.3 (March 5th, 2024) ------------------------------- General ^^^^^^^ 1. Added the :at:`inheritrange` attribute to :ref:`position` and :ref:`intvelocity` actuators, allowing convenient setting of the actuator's :at:`ctrlrange` or :at:`actrange` (respectively), according to the range of the transmission target (joint or tendon). See :ref:`position/inheritrange` for details. 2. Deprecated ``mj_makeEmptyFileVFS`` in favor of :ref:`mj_addBufferVFS`. :ref:`mjVFS` now computes checksums of its internal file buffers. :ref:`mj_addBufferVFS` allocates an empty buffer with a given name in an mjVFS and copies the data buffer into it, combining and replacing the deprecated two-step process of calling ``mj_makeEmptyFileVFS`` followed by a direct copy into the given mjVFS internal file buffer. 3. Added :ref:`mj_angmomMat` which computes the ``3 x nv`` angular momentum matrix :math:`H(q)`, providing the linear mapping from generalized velocities to subtree angular momentum :math:`h = H \dot q`. Contribution by :github:user:`v-r-a`. MJX ^^^ 4. Improved performance of getting and putting device data. - Use ``tobytes()`` for numpy array serialization, which is orders of magnitude faster than converting to tuples. - Avoid reallocating host ``mjData`` arrays when array shapes are unchanged. - Speed up calculation of ``mjx.ncon`` for models with many geoms. - Avoid calling ``mjx.ncon`` in ``mjx.get_data_into`` when ``nc`` can be derived from ``mjx.Data``. 5. Fixed a bug in ``mjx-viewer`` that prevented it from running. Updated ``mjx-viewer`` to use newer ``mjx.get_data_into`` function call. 6. Fixed a bug in ``mjx.euler`` that applied incorrect damping when using dense mass matrices. 7. Fixed a bug in ``mjx.solve`` that was causing slow convergence when using ``mjSOL_NEWTON`` in :ref:`mjtSolver`. 8. Added support for :ref:`mjOption.impratio` to ``mjx.Model``. 9. Added support for cameras in ``mjx.Model`` and ``mjx.Data``. Fixes :github:issue:`1422`. 10. Added an implementation of broadphase using `top_k` and bounding spheres. Python bindings ^^^^^^^^^^^^^^^ 11. Fixed incorrect data types in the bindings for the ``geom``, ``vert``, ``elem``, and ``flex`` array members of the ``mjContact`` struct, and all array members of the ``mjrContext`` struct. Version 3.1.2 (February 05, 2024) --------------------------------- General ^^^^^^^ 1. Improved the :ref:`discardvisual` compiler flag, which now discards all visual-only assets. See :ref:`discardvisual` for details. 2. Removed the :ref:`timer` for midphase colllision detection, it is now folded in with the narrowphase timer. This is because timing the two phases seperately required fine-grained timers inside the collision functions; these functions are so small and fast that the timer itself was incurring a measurable cost. 3. Added the flag :ref:`bvactive` to ``visual/global``, allowing users to turn off visualisation of active bounding volumes (the red/green boxes in this :ref:`this changelog item`). For models with very high-resolution meshes, the computation required for this visualization can slow down simulation speed. Fixes :github:issue:`1279`. - Added color of :ref:`bounding volumes` and :ref:`active bounding volumes` to :ref:`visual/rgba`. 4. Height-field elevation data can now be specified directly in XML with the :ref:`elevation` attribute (and not only with PNG files). See `example model `__. MJX ^^^ 5. Added :ref:`dyntype` ``filterexact``. 6. Added :at:`site` transmission. 7. Updated MJX colab tutorial with more stable quadruped environment. 8. Added ``mjx.ray`` which mirrors :ref:`mj_ray` for planes, spheres, capsules, boxes, and meshes. 9. Added ``mjx.is_sparse`` which mirrors :ref:`mj_isSparse` and ``mjx.full_m`` which mirrors :ref:`mj_fullM`. 10. Added support for specifying sparse or dense mass matrices via :ref:`option-jacobian`. 11. Raise a not implemented error when nonzero frictionloss is present. Fixes :github:issue:`1344`. Python bindings ^^^^^^^^^^^^^^^ 12. Improved the implementation of the :ref:`rollout` module. Note the changes below are breaking, dependent code will require modification. - Uses :ref:`mjSTATE_FULLPHYSICS` as state spec, enabling divergence detection by inspecting time. - Allows user-defined control spec for any combination of :ref:`user input` fields as controls. - Outputs are no longer squeezed and always have dim=3. 13. The ``sync`` function for the :ref:`passive viewer` can now pick up changes to rendering flags in ``user_scn``, as requested in :github:issue:`1190`. Bug fixes ^^^^^^^^^ 14. Fixed a bug that prevented the use of pins with plugins if flexes are not in the worldbody. Fixes :github:issue:`1270`. 15. Fixed a bug in the :ref:`muscle model` that led to non-zero values outside the lower bound of the length range. Fixes :github:issue:`1342`. Version 3.1.1 (December 18, 2023) ----------------------------------- Bug fixes ^^^^^^^^^ 1. 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. Fixed a bug in :ref:`simulate` where the "LOADING..." message was not showing correctly. 3. Fixed a crash in the Python :ref:`passive viewer`, when used with models containing Flex objects. 4. Fixed a bug in MJX where ``site_xmat`` was ignored in ``get_data`` and ``put_data`` 5. Fixed a bug in MJX where ``efc_address`` was sometimes incorrectly calculated in ``get_data``. Version 3.1.0 (December 12, 2023) --------------------------------- General ^^^^^^^ 1. Improved convergence of Signed Distance Function (SDF) collisions by using line search and a new objective function for the optimization. This allows to decrease the number of initial points needed for finding the contacts and is more robust for very small or large geom sizes. 2. Added :ref:`frame` to MJCF, a :ref:`meta-element` which defines a pure coordinate transformation on its direct children, without requiring a :ref:`body`. 3. Added the :at:`kv` attribute to the :ref:`position` and :ref:`intvelocity` actuators, for specifying actuator-applied damping. This can be used to implement a PD controller with 0 reference velocity. When using this attribute, it is recommended to use the implicitfast or implicit :ref:`integrators`. Plugins ^^^^^^^ 4. Allow actuator plugins to use activation variables in ``mjData.act`` as their internal state, rather than ``mjData.plugin_state``. Actuator plugins can now specify :ref:`callbacks` that compute activation variables, and they can be used with built-in :ref:`dyntype` actuator dynamics. 5. Added the `pid `__ actuator plugin, a configurable PID controller that implements the Integral term, which is not available with native MuJoCo actuators. MJX ^^^ 6. Added ``site_xpos`` and ``site_xmat`` to MJX. 7. Added ``put_data``, ``put_model``, ``get_data`` to replace ``device_put`` and ``device_get_into``, which will be deprecated. These new functions correctly translate fields that are the result of intermediate calculations such as ``efc_J``. Bug fixes ^^^^^^^^^ 8. 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. Fix bug that prevented using flex with :ref:`simulate`. 10. Fix bug that prevented the use of elasticity plugins in combination with pinned flex vertices. 11. 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 compatibility for those users. See :github:issue:`1213`. 12. Fixed mass computation of meshes: Use the correct mesh volume instead of approximating it using the inertia box. Version 3.0.1 (November 15, 2023) --------------------------------- General ^^^^^^^ 1. Added sub-terms of total passive forces in ``mjData.qfrc_passive`` to :ref:`mjData`: ``qfrc_{spring, damper, gravcomp, fluid}``. The sum of these vectors equals ``qfrc_passive``. .. youtube:: H9qG9Zf2W44 :align: right :width: 240px 2. Added :ref:`actuatorgroupdisable` attribute and associated :ref:`mjOption.disableactuator` integer bitfield, which can be used to disable sets of actuators at runtime according to their :ref:`group`. Fixes :github:issue:`1092`. See :ref:`CActDisable`. - The first 6 actuator groups are toggleable in the :ref:`simulate` viewer. See `example model `__ and associated screen-capture on the right. 3. Increased ``mjMAXUIITEM`` (maximum number of UI elements per section in Simulate) to 200. MJX ^^^ 4. Added support for Newton solver (``mjSOL_NEWTON`` in :ref:`mjtSolver`). The Newton solver significantly speeds up simulation on GPU: .. list-table:: Steps-per-second, Conjugate Gradient vs. Newton on A100 :header-rows: 1 :align: left * - Model - CG - Newton - Speedup * - `Humanoid `__ - 640,000 - 1,020,000 - **1.6 x** * - `Barkour v0 `__ - 1,290,000 - 1,750,000 - **1.35 x** * - `Shadow Hand `__ - 215,000 - 270,000 - **1.25 x** Humanoid is the standard MuJoCo humanoid, `Google Barkour `__ and the Shadow Hand are both available in the :ref:`MuJoCo Menagerie`. 5. Added support for joint equality constraints (``mjEQ_JOINT`` in :ref:`mjtEq`). 6. Fixed bug where mixed ``jnt_limited`` joints were not being constrained correctly. 7. Made ``device_put`` type validation more verbose (fixes :github:issue:`1113`). 8. Removed empty EFC rows from ``MJX``, for joints with no limits (fixes :github:issue:`1117`). 9. Fixed bug in ``scan.body_tree`` that led to incorrect smooth dynamics for some kinematic tree layouts. Python bindings ^^^^^^^^^^^^^^^ 10. Fix the macOS ``mjpython`` launcher to work with the Python interpreter from Apple Command Line Tools. 11. 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`` instance. Simulate ^^^^^^^^ 12. :ref:`simulate`: correct handling of "Pause update", "Fullscreen" and "VSync" buttons. Documentation ^^^^^^^^^^^^^ .. youtube:: cE3s_IfO4g4 :align: right :width: 240px 13. Added cell to the `tutorial colab `__ providing an example of procedural camera control: 14. Added documentation for the :ref:`UI` framework. 15. Fixed typos and supported fields in docs (fixes :github:issue:`1105` and :github:issue:`1106`). Bug fixes ^^^^^^^^^ 16. Fixed bug relating to welds modified with :ref:`torquescale`. Version 3.0.0 (October 18, 2023) -------------------------------- New features ^^^^^^^^^^^^ 1. Added simulation on GPU and TPU via the new :doc:`mjx` (MJX) Python module. Python users can now natively run MuJoCo simulations at millions of steps per second on Google TPU or their own accelerator hardware. - MJX is designed to work with on-device reinforcement learning algorithms. This Colab notebook demonstrates using MJX along with reinforcement learning to train humanoid and quadruped robots to locomote: |colab| - The MJX API is compatible with MuJoCo but is missing some features in this release. See the outline of :ref:`MJX feature parity ` for more details. .. |colab| image:: https://colab.research.google.com/assets/colab-badge.svg :target: https://colab.research.google.com/github/google-deepmind/mujoco/blob/main/mjx/tutorial.ipynb .. youtube:: QewlEqIZi1o :align: right :width: 240px 2. Added new signed distance field (SDF) collision primitive. SDFs can take any shape and are not constrained to be convex. Collision points are found by minimizing the maximum of the two colliding SDFs via gradient descent. - Added new SDF plugin for defining implicit geometries. The plugin must define methods computing an SDF and its gradient at query points. See the :ref:`documentation` for more details. .. youtube:: ra2bTiZHGlw :align: right :width: 240px 3. Added new low-level model element called ``flex``, used to define deformable objects. These `simplicial complexes `__ can be of dimension 1, 2 or 3, corresponding to stretchable lines, triangles or tetrahedra. Two new MJCF elements are used to define flexes. The top-level :ref:`deformable` section contains the low-level flex definition. The :ref:`flexcomp` element, similar to :ref:`composite` is a convenience macro for creating deformables, and supports the GMSH tetrahedral file format. - Added `shell `__ passive force plugin, computing bending forces using a constant precomputed Hessian (cotangent operator). **Note**: This feature is still under development and subject to change. In particular, deformable object functionality is currently available both via :ref:`deformable` and :ref:`composite`, and both are modifiable by the first-party `elasticity plugins `__. We expect some of this functionality to be unified in the future. .. youtube:: Vc1tq0fFvQA :align: right :width: 240px 4. 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, see video. Island discovery is currently disabled for models that have deformable objects (see previous item). 5. Added :ref:`mjThreadPool` and :ref:`mjTask` which allow for multi-threaded operations within the MuJoCo engine pipeline. If engine-internal threading is enabled, the following operations will be multi-threaded: - Island constraint resolution, if island discovery is :ref:`enabled` and the :ref:`CG solver` is selected. The `22 humanoids `__ model shows a 3x speedup compared to the single threaded simulation. - Inertia-related computations and collision detection will happen in parallel. Engine-internal threading is a work in progress and currently only available in first-party code via the :ref:`testspeed` utility, exposed with the ``npoolthread`` flag. 6. Added capability to initialize :ref:`composite` particles from OBJ files. Fixes :github:issue:`642` and :github:issue:`674`. General ^^^^^^^ .. admonition:: Breaking API changes :class: attention 7. Removed the macros ``mjMARKSTACK`` and ``mjFREESTACK``. **Migration:** These macros have been replaced by new functions :ref:`mj_markStack` and :ref:`mj_freeStack`. These functions manage the :ref:`mjData stack` in a fully encapsulated way (i.e., without introducing a local variable at the call site). 8. Renamed ``mj_stackAlloc`` to :ref:`mj_stackAllocNum`. The new function :ref:`mj_stackAllocByte` allocates an arbitrary number of bytes and has an additional argument for specifying the alignment of the returned pointer. **Migration:** The functionality for allocating ``mjtNum`` arrays is now available via :ref:`mj_stackAllocNum`. 9. Renamed the ``nstack`` field in :ref:`mjModel` and :ref:`mjData` to ``narena``. Changed ``narena``, ``pstack``, and ``maxuse_stack`` to count number of bytes rather than number of :ref:`mjtNum` |-| s. 10. Changed :ref:`mjData.solver`, the array used to collect solver diagnostic information. This array of :ref:`mjSolverStat` structs is now of length ``mjNISLAND * mjNSOLVER``, interpreted as as a matrix. Each row of length ``mjNSOLVER`` contains separate solver statistics for each constraint island. If the solver does not use islands, only row 0 is filled. - The new constant :ref:`mjNISLAND` was set to 20. - :ref:`mjNSOLVER` was reduced from 1000 to 200. - Added :ref:`mjData.solver_nisland`: the number of islands for which the solver ran. - Renamed ``mjData.solver_iter`` to ``solver_niter``. Both this member and ``mjData.solver_nnz`` are now integer vectors of length ``mjNISLAND``. 11. Removed ``mjOption.collision`` and the associated ``option/collision`` attribute. **Migration:** - For models which have ``