API changes
1. Added ``mj_printFormattedModel``, which accepts a format string for floating point numbers, for example to increase precision.
2. Added ``mj_versionString``, which returns human-readable string that represents the version of the MuJoCo binary.
3. 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](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf).
This is a minor breaking change. Code which references private instances will break. To fix, replace leading underscores with trailing underscores, e.g. `struct _mjModel` becomes `struct mjModel_`.
General
4. Safer string handling: replaced `strcat`, `strcpy`, and `sprintf` with `strncat`, `strncpy`, and
`snprintf` respectively.
5. Changed indentation from 4 spaces to 2 spaces everywhere.
Bug Fixes
6. Fixed reading from uninitialized memory in PGS solver.
7. Computed capsule inertias are now exact. Until this change, capsule masses and inertias computed by the
[`compiler`](https://mujoco.readthedocs.io/en/2.1.2/XMLreference.html#compiler)'s `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.
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.
8. Fixed bug related to [`force`](https://mujoco.readthedocs.io/en/2.1.2/XMLreference.html#sensor-force) and [`torque`](https://mujoco.readthedocs.io/en/2.1.2/XMLreference.html#sensor-force) sensors. Until this change, forces torques reported by F/T sensors ignored out-of-tree constraint wrenches except those produced by contacts. Force and and torque sensors now correctly take into account the effects of [`connect`](https://mujoco.readthedocs.io/en/2.1.2/XMLreference.html#equality-connect) and [`weld`](https://mujoco.readthedocs.io/en/2.1.2/XMLreference.html#equality-connect) constraints.
Forces generated by [spatial tendons](https://mujoco.readthedocs.io/en/2.1.2/XMLreference.html#sensor-force) 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.
10. `simulate`:
- 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.
12. `qhull` was upgraded to version 8.0.2.
13. `libCCD` was upgraded to version 1.4.
14. 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.
- MuJoCo library is now packaged as a [Framework Bundle](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/FrameworkAnatomy.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.
16. Windows binaries and libraries are now signed.
17. 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`).
18. Linux binaries are now built with LLVM/Clang instead of GCC.
19. An AArch64 (aka ARM64) Linux build is also provided.
20. Private symbols are no longer stripped from shared libraries on Linux and MacOS.
Sample models
21. Clean-up of the `model/` directory.
- Rearranged into subdirectories which include all dependencies.
- Added descriptions in XML comments, cleaned up XMLs.
- Deleted some composite models: `grid1`, `grid1pin`, `grid2`, `softcylinder`, `softellipsoid`.
22. Added descriptive animations in `docs/images/models/`
-----
EDIT (30/12/2021 21:45 UTC): Added import libraries `mujoco.lib` and `mujoco_nogl.lib` to the Windows release package.
EDIT (16/12/2021 21:10 UTC): We've updated the download packages to reflect minor changes in https://github.com/deepmind/mujoco/commit/ee39340ae783f6944f74168d852d7ac1664268c0. These changes only affect the bundled code and asset files. The libraries and binaries behave identically to the original packages released earlier today.