Prepare changelog for release

PiperOrigin-RevId: 869124525
Change-Id: I7ea6f3c1cf163e98b1bc0b8ed87f8e44afd59ab5
This commit is contained in:
Yuval Tassa
2026-02-12 03:15:44 -08:00
committed by Copybara-Service
parent 14116336e0
commit 54b8b68b23
2 changed files with 89 additions and 91 deletions
+88 -89
View File
@@ -8,47 +8,45 @@ Upcoming version (not yet released)
Significant new features
^^^^^^^^^^^^^^^^^^^^^^^^
- Added new System Identification toolbox (Python), see
`README <https://github.com/google-deepmind/mujoco/blob/main/python/mujoco/sysid/README.md>`__ for details.
A Colab notebook demonstrating the toolbox is available here: |sysid_colab|
Contribution by :github:user:`kevinzakka`, :github:user:`aftersomemath`, :github:user:`jonathanembleyriches`,
:github:user:`qiayuanl`, :github:user:`spjardim` and :github:user:`gizemozd`.
1. :doc:`MuJoCo Warp <mjwarp/index>` is now officially released.
2. Added a new **System Identification** toolbox (Python), see
`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| Contribution by :github:user:`kevinzakka`, :github:user:`aftersomemath`, :github:user:`jonathanembleyriches`,
:github:user:`qiayuanl`, :github:user:`spjardim` and :github:user:`gizemozd`.
.. |sysid_colab| image:: https://colab.research.google.com/assets/colab-badge.png
:target: https://colab.research.google.com/github/google-deepmind/mujoco/blob/main/python/mujoco/sysid/sysid.ipynb
- Actuators and sensors now support arbitrary delays via history buffers, and sensors 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<siPhysicsState>`. See :ref:`Delays<CDelay>` for details.
3. 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<siPhysicsState>`. See :ref:`Delays<CDelay>` for details.
.. image:: images/changelog/poncho.png
:width: 45%
:align: right
:target: https://github.com/google-deepmind/mujoco/blob/main/model/flex/poncho.xml
- Added new :ref:`flexvert<equality-flexvert>` equality constraints that enable cloth simulations with coarser meshes.
This adds a new option ``vert`` to flexcomp edge :ref:`equality<flexcomp-edge-equality>` and the new equality type
:ref:`flexvert<equality-flexvert>`.
- Added implicit integration support for deformable objects (flex) in ``implicit`` and ``implicitfast``
:ref:`integrators<geIntegration>`. This method extracts the flex degrees of freedom and solves them as a dense block,
enabling increased stability for stiff flex objects without reducing the timestep. It is compatible with the
``trilinear`` and ``quadratic`` :ref:`dof<body-flexcomp-dof>` types.
.. container:: custom-clear
.. raw:: html
<div style="clear: both;"></div>
4. Added new :ref:`flexvert<equality-flexvert>` equality constraints that enable cloth simulations with coarser meshes.
This adds a new attribute value ``vert`` to flexcomp edge :ref:`equality<flexcomp-edge-equality>` and the new
equality type :ref:`flexvert<equality-flexvert>`. Uses the method described in
`Chen, Kry and Vouga, 2019 <https://arxiv.org/abs/1911.05204>`__.
5. Added implicit integration support for deformable objects (flex) in ``implicit`` and ``implicitfast``
:ref:`integrators<geIntegration>`. This method extracts the flex degrees of freedom and solves them as a dense block,
enabling increased stability for stiff flex objects without reducing the timestep. It is compatible with the
``trilinear`` and ``quadratic`` :ref:`dof<body-flexcomp-dof>` types.
.. image:: images/XMLreference/rfcamera.png
:width: 45%
:align: right
:target: https://github.com/google-deepmind/mujoco/blob/main/test/engine/testdata/sensor/rfcamera.xml
- Rangefinder sensors can now be attached to a camera using the :ref:`ragefinder/camera<sensor-rangefinder-camera>`
attribute. In this case, the sensor will cast multiple ray, one for each pixel.
- :ref:`Rangefinders<sensor-rangefinder>` can now report various kinds of information besides ray distances,
including surface normals.
6. 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:`camera/resolution<body-camera-resolution>` attribute and casts
multiple rays, one for each pixel.
7. :ref:`Rangefinders<sensor-rangefinder>` can now report various kinds of information besides ray distances,
including surface normals and intersection points.
.. container:: custom-clear
@@ -62,89 +60,90 @@ General
.. admonition:: Breaking API changes
:class: attention
- 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`.
8. 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`.
**Migration:** In C/C++, pass ``NULL`` to the ``normal`` argument. In Python, in all functions except
:ref:`mj_multiRay`, it defaults to ``None``, so no action is required.
**Migration:** In C/C++, pass ``NULL`` to the ``normal`` argument. In Python, in all functions except
:ref:`mj_multiRay`, it defaults to ``None``, so no action is required.
- ``mju_rayFlex`` has been renamed to :ref:`mj_rayFlex` for consistency with other functions that take
``mjModel*`` and ``mjData*`` arguments.
9. ``mju_rayFlex`` has been renamed to :ref:`mj_rayFlex` for consistency with other functions that take
``mjModel*`` and ``mjData*`` arguments.
- 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<body-camera-projection>` and now accepts the values ``orthographic`` and ``perspective``.
10. 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<body-camera-projection>` and now accepts the values ``orthographic`` and ``perspective``.
**Migration:** Replace ``orthographic = "false/true"`` with ``projection="perspective/orthographic"``,
respectively.
**Migration:** Replace ``orthographic = "false/true"`` with ``projection="perspective/orthographic"``,
respectively.
- Removed ``getdir`` from the ``mjpResourceProvider`` struct. All Resource Providers now use the same shared
implementation.
- When combining the ``margin`` and ``gap`` :ref:`parameters<CContact>` of two geoms to obtain the parameters
of a contact, the respective values are now **summed** rather than than taking the maximum. This allows geom
margins to be a proper "inflation" of the geom.
11. Removed ``getdir`` from the ``mjpResourceProvider`` struct. All Resource Providers now use the same shared
implementation.
12. 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 geom
margins to be a proper "inflation" of the geom.
- Camera frustum visualization is now triggered by setting :ref:`resolution<body-camera-resolution>` to values larger
than 1. Relatedly, frustum visualization also works for :ref:`orthographic<body-camera-projection>` cameras.
See :ref:`rangefinder<sensor-rangefinder>` for details.
- 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 supported output types.
- 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.
- 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 which exploited
this optimization. To recover the performance, use the :ref:`fromto<sensor-fromto>` and compute the other values
manually. If ``from = fromto[0:3]`` and ``to = fromto[3:6]`` then ``distance = norm(to-from)`` and
``normal = normalize(to-from)``.
- Non-breaking ABI changes:
13. Camera frustum visualization is now triggered by setting :ref:`resolution<body-camera-resolution>` to values larger
than 1. Relatedly, frustum visualization also works for :ref:`orthographic<body-camera-projection>` cameras.
See :ref:`rangefinder<sensor-rangefinder>` for details.
14. 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 supported output types.
15. 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. 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 which exploited
this optimization. To recover the performance, use the :ref:`fromto<sensor-fromto>` and compute the other values
manually. If ``from = fromto[0:3]`` and ``to = fromto[3:6]`` then ``distance = norm(to-from)`` and
``normal = normalize(to-from)``.
17. :doc:`OpenUSD <OpenUSD/index>`:
- The type of the ``sig`` (signature) argument of :ref:`mj_stateSize` and related functions has been changed from
``unsigned int`` to ``int``. Before this change, invalid negative arguments passed to this function would result in
a silent implicit cast, now negativity will trigger an error.
- Added a :ref:`depth<mjtRndFlag>` rendering flag.
- Allocating sizes in :ref:`mjModel` now use 64-bit rather than 32-bit integers to accommodate larger scenes.
- Parsing has been moved out of experimental into a mjpDecoder plugin. (documentation pending)
- OpenUSD can now be built with the
`third_party_deps/openusd <https://github.com/google-deepmind/mujoco/tree/main/cmake/third_party_deps/openusd>`__
CMake utility project.
- ``USD_DIR`` is no longer used by the MuJoCo CMake project, instead use ``pxr_DIR`` if you have a pre-built USD
library.
- Users no longer have to set ``PXR_PLUGINPATH_NAME`` environment variable, MuJoCo should load USD plugins
automatically.
18. Non-breaking ABI changes:
- :doc:`OpenUSD <OpenUSD/index>`:
- Parsing has been moved out of experimental into a mjpDecoder plugin. (documentation pending)
- OpenUSD can now be built with the
`third_party_deps/openusd <https://github.com/google-deepmind/mujoco/tree/main/cmake/third_party_deps/openusd>`__
CMake utility project.
- ``USD_DIR`` is no longer used by the MuJoCo CMake project, instead use ``pxr_DIR`` if you have a pre-built USD
library.
- Users no longer have to set ``PXR_PLUGINPATH_NAME`` environment variable, MuJoCo should load USD plugins
automatically.
- The type of the ``sig`` (signature) argument of :ref:`mj_stateSize` and related functions has been changed from
``unsigned int`` to ``int``. Before this change, invalid negative arguments passed to this function would result
in a silent implicit cast; now, negativity will trigger an error.
- Added a :ref:`depth<mjtRndFlag>` rendering flag.
- Allocation sizes in :ref:`mjModel` now use 64-bit rather than 32-bit integers to accommodate larger scenes.
MJX
^^^
- Added ``actuator_length``, ``cdof`` and ``cdof_dof`` fields to ``mjx.Data``.
- Add ``graph_mode`` argument to ``put_model`` to support multiple Warp graph capture modes.
19. Added ``actuator_length``, ``cdof`` and ``cdof_dof`` fields to ``mjx.Data``.
20. Add ``graph_mode`` argument to ``put_model`` to support multiple Warp graph capture modes.
Documentation
^^^^^^^^^^^^^
- General improvements to the :ref:`Programming/Simulation<Simulation>` chapter. Notably, the main discussion of
:ref:`state<siStateControl>` has been moved there, and the section on :ref:`mjModel changes<siChange>` has been
expanded.
- The usability of the :ref:`MJCF schema<CSchema>` is improved with a collapsible dropdown menu with links to elements
and attributes.
21. General improvements to the :ref:`Programming/Simulation<Simulation>` chapter. Notably, the main discussion of
:ref:`state<siStateControl>` has been moved there, and the section on :ref:`mjModel changes<siChange>` has been
expanded.
22. The usability of the :ref:`MJCF schema<CSchema>` is improved with a collapsible dropdown menu with links to elements
and attributes.
23. MuJoCo version numbering is now based on Semantic Versioning, see
`VERSIONING.md <https://github.com/google-deepmind/mujoco/blob/main/VERSIONING.md>`__.
Bug fixes
^^^^^^^^^
- Fixed a bug in :ref:`implicit integrator<geIntegrators>` derivatives where actuator velocity derivatives were
incorrectly computed when the force was clamped by :ref:`forcerange<actuator-general-forcerange>`.
- Fixed a bug in :ref:`implicit integrator<geIntegrators>` derivatives where actuator velocity derivatives did not
account for the :ref:`actearly<actuator-general-actearly>` flag.
- 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 to) the number of
available cores.
- The ``vertid`` argument of :ref:`mj_rayFlex` and :ref:`mju_raySkin` was marked as nullable but was not; it is now
nullable.
- Fixed :ref:`gravcomp<body-gravcomp>` being ignored for bodies with no joints nested inside jointed parent bodies
(:issue:`3066`, reported by :github:user:`Alex108306`).
24. Fixed a bug in :ref:`implicit integrator<geIntegrators>` derivatives where actuator velocity derivatives were
incorrectly computed when the force was clamped by :ref:`forcerange<actuator-general-forcerange>`.
25. Fixed a bug in :ref:`implicit integrator<geIntegrators>` derivatives where actuator velocity derivatives did not
account for the :ref:`actearly<actuator-general-actearly>` flag.
26. 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 to) the number
of available cores.
27. The ``vertid`` argument of :ref:`mj_rayFlex` and :ref:`mju_raySkin` was marked as nullable but was not; it is now
nullable.
28. Fixed :ref:`gravcomp<body-gravcomp>` being ignored for bodies with no joints nested inside jointed parent bodies
(:issue:`3066`, reported by :github:user:`Alex108306`).
Version 3.4.0 (December 5, 2025)
--------------------------------
+1 -2
View File
@@ -11,8 +11,7 @@ MuJoCo Warp (MJWarp)
MuJoCo Warp (MJWarp) is an implementation of MuJoCo written in `Warp <https://nvidia.github.io/warp/>`__ and optimized
for `NVIDIA <https://nvidia.com>`__ hardware and parallel simulation. MJWarp lives in the
`google-deepmind/mujoco_warp <https://github.com/google-deepmind/mujoco_warp>`__ GitHub repository and is currently in
beta.
`google-deepmind/mujoco_warp <https://github.com/google-deepmind/mujoco_warp>`__ GitHub repository.
MJWarp is developed and maintained as a joint effort by `NVIDIA <https://nvidia.com>`__ and
`Google DeepMind <https://deepmind.google/>`__.