-----------------------------
API changes
^^^^^^^^^^^
1. Added ``mj_printFormattedModel``, which accepts a format string for floating point numbers, for example to increase
precision.
. Added ``mj_versionString``, which returns human-readable string that represents the version of the MuJoCo binary.
. Converted leading underscores to trailing underscores in private instances of API struct definitions, to conform to
reserved identifier directive, see
`C standard: Section 7.1.3 <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf>`__.
.. attention::
This is a minor breaking change. Code which references private instances will break. To fix, replace leading
underscores with trailing underscores, e.g. ``_mjModel`` |rarr| ``mjModel_``.
General
^^^^^^^
4. Safer string handling: replaced ``strcat``, ``strcpy``, and ``sprintf`` with ``strncat``, ``strncpy``, and
``snprintf`` respectively.
. Changed indentation from 4 spaces to 2 spaces, K&R bracing style, added braces to one-line conditionals.
Bug Fixes
^^^^^^^^^
6. Fixed reading from uninitialized memory in PGS solver.
. Computed capsule inertias are now exact. Until this change, capsule masses and inertias computed by the
:ref:`compiler <compiler>`'s :at:`inertiafromgeom` mechanism were approximated by a cylinder, formed by the
capsule's cylindrical middle section, extended on both ends by half the capsule radius. Capsule inertias are now
computed with the `Parallel Axis theorem <https://en.wikipedia.org/wiki/Parallel_axis_theorem>`__, applied to the two
hemispherical end-caps.
.. attention::
This is a minor breaking change. Simulation of a model with automatically-computed capsule inertias will be
numerically different, leading to, for example, breakage of golden-value tests.
. Fixed bug related to :ref:`force <sensor-force>` and :ref:`torque <sensor-torque>` sensors. Until this change, forces
and torques reported by F/T sensors ignored out-of-tree constraint wrenches except those produced by contacts. Force
and torque sensors now correctly take into account the effects of :ref:`connect <equality-connect>` and
:ref:`weld <equality-weld>` constraints.
.. note::
Forces generated by :ref:`spatial tendons <tendon-spatial>` which are outside the kinematic tree (i.e., between
bodies which have no ancestral relationship) are still not taken into account by force and torque sensors. This
remains a future work item.
Code samples
^^^^^^^^^^^^
9. ``testspeed``: Added injection of pseudo-random control noise, turned on by default. This is to avoid settling into
some fixed contact configuration and providing an unrealistic timing measure.
. ``simulate``:
a. Added slower-than-real-time functionality, which is controlled via the '+' and '-' keys.
. Added sliders for injecting Brownian noise into the controls.
. Added "Print Camera" button to print an MJCF clause with the pose of the current camera.
. The camera pose is not reset when reloading the same model file.
Updated dependencies
^^^^^^^^^^^^^^^^^^^^
11. ``TinyXML`` was replaced with ``TinyXML2`` 6.2.0.
. ``qhull`` was upgraded to version 8.0.2.
. ``libCCD`` was upgraded to version 1.4.
. On Linux, ``libstdc++`` was replaced with ``libc++``.
Binary build
^^^^^^^^^^^^
15. MacOS packaging. We now ship Universal binaries that natively support both Apple Silicon and Intel CPUs.
a. MuJoCo library is now packaged as a `Framework Bundle
<https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/FrameworkAnato
my.html>`__, allowing it to be incorporated more easily into Xcode projects (including Swift projects). Developers
are encouraged to compile and link against MuJoCo using the ``-framework mujoco`` flag, however all header files
and the ``libmujoco.2.1.1.dylib`` library can still be directly accessed inside the framework.
. Sample applications are now packaged into an Application Bundle called ``MuJoCo.app``. When launched via GUI,
the bundle launches the ``simulate`` executable. Other precompiled sample programs are shipped inside that bundle
(in ``MuJoCo.app/Contents/MacOS``) and can be launched via command line.
. Binaries are now signed and the disk image is notarized.
. Windows binaries and libraries are now signed.
. Link-time optimization is enabled on Linux and macOS, leading to an average of \~20% speedup when benchmarked on
three test models (``cloth.xml``, ``humanoid.xml``, and ``humanoid100.xml``).
. Linux binaries are now built with LLVM/Clang instead of GCC.
. An AArch64 (aka ARM64) Linux build is also provided.
. Private symbols are no longer stripped from shared libraries on Linux and MacOS.
Sample models
^^^^^^^^^^^^^
21. Clean-up of the ``model/`` directory.
a. Rearranged into subdirectories which include all dependencies.
. Added descriptions in XML comments, cleaned up XMLs.
. Deleted some composite models: ``grid1``, ``grid1pin``, ``grid2``, ``softcylinder``, ``softellipsoid``.
. Added descriptive animations in ``docs/images/models/`` :
|humanoid| |particle|