Update changelog.rst for version 2.3.3
PiperOrigin-RevId: 517932202 Change-Id: I55063e9bc5da2d424b1ad303834d8f11cb0a0fa9
This commit is contained in:
committed by
Copybara-Service
parent
33a2ce73d4
commit
e58d53e747
+50
-50
@@ -2,83 +2,83 @@
|
||||
Changelog
|
||||
=========
|
||||
|
||||
Upcoming version (not yet released)
|
||||
-----------------------------------
|
||||
Version 2.3.3 (March 20, 2023)
|
||||
------------------------------
|
||||
|
||||
General
|
||||
^^^^^^^
|
||||
|
||||
- Improvements to implicit integration:
|
||||
1. Improvements to implicit integration:
|
||||
|
||||
- The derivatives of the RNE algorithm are now computed using sparse math, leading to significant speed
|
||||
improvements for large models when using the :ref:`implicit integrator<geIntegration>`.
|
||||
- A new integrator called ``implicitfast`` was added. It is similar to the existing implicit integrator, but skips the
|
||||
derivatives of Coriolis and centripetal forces. See the :ref:`numerical integration<geIntegration>` section for a
|
||||
detailed motivation and discussion. The implicitfast integrator is recommended for all new models and will
|
||||
become the default integrator in a future version.
|
||||
- The derivatives of the RNE algorithm are now computed using sparse math, leading to significant speed
|
||||
improvements for large models when using the :ref:`implicit integrator<geIntegration>`.
|
||||
- A new integrator called ``implicitfast`` was added. It is similar to the existing implicit integrator, but skips the
|
||||
derivatives of Coriolis and centripetal forces. See the :ref:`numerical integration<geIntegration>` section for a
|
||||
detailed motivation and discussion. The implicitfast integrator is recommended for all new models and will
|
||||
become the default integrator in a future version.
|
||||
|
||||
The table below shows the compute cost of the 627-DoF `humanoid100
|
||||
<https://github.com/deepmind/mujoco/blob/main/model/humanoid100/humanoid100.xml>`_ model using different integrators.
|
||||
"implicit (old)" uses dense RNE derivatives, "implicit (new)" is after the sparsification mentioned above.
|
||||
Timings were measured on a single core of an AMD 3995WX CPU.
|
||||
The table below shows the compute cost of the 627-DoF `humanoid100
|
||||
<https://github.com/deepmind/mujoco/blob/main/model/humanoid100/humanoid100.xml>`_ model using different integrators.
|
||||
"implicit (old)" uses dense RNE derivatives, "implicit (new)" is after the sparsification mentioned above.
|
||||
Timings were measured on a single core of an AMD 3995WX CPU.
|
||||
|
||||
.. csv-table::
|
||||
:header: "timing", "Euler", "implicitfast", "implicit (new)", "implicit (old)"
|
||||
:widths: auto
|
||||
:align: left
|
||||
.. csv-table::
|
||||
:header: "timing", "Euler", "implicitfast", "implicit (new)", "implicit (old)"
|
||||
:widths: auto
|
||||
:align: left
|
||||
|
||||
one step (ms), 0.5, 0.53, 0.77, 5.0
|
||||
steps/second, 2000, 1900, 1300, 200
|
||||
one step (ms), 0.5, 0.53, 0.77, 5.0
|
||||
steps/second, 2000, 1900, 1300, 200
|
||||
|
||||
.. image:: images/computation/midphase.gif
|
||||
:align: right
|
||||
:width: 350px
|
||||
|
||||
- Added a collision mid-phase for pruning geoms in body pairs, see :ref:`documentation<coSelection>` for more details.
|
||||
This is based on static AABB bounding volume hierarchy (a BVH binary tree) in the body inertial frame. The GIF on the
|
||||
right is cut from `this longer video <https://youtu.be/e0babIM8hBo>`_.
|
||||
- The ``mjd_transitionFD`` function no longer triggers sensor calculation unless explicitly requested.
|
||||
- Corrected the spelling of the ``inteval`` attribute to ``interval`` in the :ref:`mjLROpt` struct.
|
||||
- Mesh texture and normal mappings are now 3-per-triangle rather than 1-per-vertex. Mesh vertices are no longer
|
||||
duplicated in order to circumvent this limitation as they previously were.
|
||||
- The non-zeros for the sparse constraint Jacobian matrix are now precounted and used for matrix memory allocation.
|
||||
For instance, the constraint Jacobian matrix from the `humanoid100
|
||||
<https://github.com/deepmind/mujoco/blob/main/model/humanoid100/humanoid100.xml>`_ model, which previously required
|
||||
~500,000 ``mjtNum``'s, now only requires ~6000. Very large models can now load and run with the CG solver.
|
||||
- Modified :ref:`mju_error` and :ref:`mju_warning` to be variadic functions (support for printf-like arguments). The
|
||||
functions :ref:`mju_error_i`, :ref:`mju_error_s`, :ref:`mju_warning_i`, and :ref:`mju_warning_s` are now deprecated.
|
||||
- Implemented a performant ``mju_sqrMatTDSparse`` function that doesn't require dense memory allocation.
|
||||
- Added ``mj_stackAllocInt`` to get correct size for allocating ints on mjData stack. Reducing stack memory usage
|
||||
by 10% - 15%.
|
||||
2. Added a collision mid-phase for pruning geoms in body pairs, see :ref:`documentation<coSelection>` for more details.
|
||||
This is based on static AABB bounding volume hierarchy (a BVH binary tree) in the body inertial frame. The GIF on
|
||||
the right is cut from `this longer video <https://youtu.be/e0babIM8hBo>`_.
|
||||
#. The ``mjd_transitionFD`` function no longer triggers sensor calculation unless explicitly requested.
|
||||
#. Corrected the spelling of the ``inteval`` attribute to ``interval`` in the :ref:`mjLROpt` struct.
|
||||
#. Mesh texture and normal mappings are now 3-per-triangle rather than 1-per-vertex. Mesh vertices are no longer
|
||||
duplicated in order to circumvent this limitation as they previously were.
|
||||
#. The non-zeros for the sparse constraint Jacobian matrix are now precounted and used for matrix memory allocation.
|
||||
For instance, the constraint Jacobian matrix from the `humanoid100
|
||||
<https://github.com/deepmind/mujoco/blob/main/model/humanoid100/humanoid100.xml>`_ model, which previously required
|
||||
~500,000 ``mjtNum``'s, now only requires ~6000. Very large models can now load and run with the CG solver.
|
||||
#. Modified :ref:`mju_error` and :ref:`mju_warning` to be variadic functions (support for printf-like arguments). The
|
||||
functions :ref:`mju_error_i`, :ref:`mju_error_s`, :ref:`mju_warning_i`, and :ref:`mju_warning_s` are now deprecated.
|
||||
#. Implemented a performant ``mju_sqrMatTDSparse`` function that doesn't require dense memory allocation.
|
||||
#. Added ``mj_stackAllocInt`` to get correct size for allocating ints on mjData stack. Reducing stack memory usage
|
||||
by 10% - 15%.
|
||||
|
||||
|
||||
Python bindings
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
- Fixed IPython history corruption when using ``viewer.launch_repl``. The ``launch_repl`` function now provides seamless
|
||||
continuation of an IPython interactive shell session, and is no longer considered experimental feature.
|
||||
- Added ``viewer.launch_passive`` which launches the interactive viewer in a passive, non-blocking mode. Calls to
|
||||
``launch_passive`` return immediately, allowing user code to continue execution, with the viewer automatically
|
||||
reflecting any changes to the physics state. (Note that this functionality is currently in experimental/beta stage,
|
||||
and is not yet described in our :ref:`viewer documentation<PyViewer>`.)
|
||||
- Added the ``mjpython`` launcher for macOS, which is required for ``viewer.launch_passive`` to function there.
|
||||
- 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.
|
||||
- Added a number of missing fields to the bindings of ``mjVisual`` and ``mjvPerturb`` structs.
|
||||
10. Fixed IPython history corruption when using ``viewer.launch_repl``. The ``launch_repl`` function now provides
|
||||
seamless continuation of an IPython interactive shell session, and is no longer considered experimental feature.
|
||||
#. Added ``viewer.launch_passive`` which launches the interactive viewer in a passive, non-blocking mode. Calls to
|
||||
``launch_passive`` return immediately, allowing user code to continue execution, with the viewer automatically
|
||||
reflecting any changes to the physics state. (Note that this functionality is currently in experimental/beta stage,
|
||||
and is not yet described in our :ref:`viewer documentation<PyViewer>`.)
|
||||
#. Added the ``mjpython`` launcher for macOS, which is required for ``viewer.launch_passive`` to function there.
|
||||
#. 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.
|
||||
#. Added a number of missing fields to the bindings of ``mjVisual`` and ``mjvPerturb`` structs.
|
||||
|
||||
Simulate
|
||||
^^^^^^^^
|
||||
|
||||
- Implemented a workaround for `broken VSync <https://github.com/glfw/glfw/issues/2249>`_ on macOS so that the frame
|
||||
rate is correctly capped when the Vertical Sync toggle is enabled.
|
||||
15. Implemented a workaround for `broken VSync <https://github.com/glfw/glfw/issues/2249>`_ on macOS so that the frame
|
||||
rate is correctly capped when the Vertical Sync toggle is enabled.
|
||||
|
||||
.. image:: images/changelog/contactlabel.png
|
||||
:align: right
|
||||
:width: 400px
|
||||
|
||||
- Added optional labels to contact visualization, indicating which two geoms are contacting (names if defined, ids
|
||||
otherwise). This can be useful in cluttered scenes.
|
||||
16. Added optional labels to contact visualization, indicating which two geoms are contacting (names if defined, ids
|
||||
otherwise). This can be useful in cluttered scenes.
|
||||
|
||||
|br|
|
||||
|
||||
|
||||
Reference in New Issue
Block a user