========= Changelog ========= Version 2.1.1 (Dec. 16, 2021) ----------------------------- 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 `__. .. 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 `'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 `_, 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 ` and :ref:`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 ` and :ref:`weld ` constraints. .. note:: Forces generated by :ref:`spatial tendons ` 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 `_, 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| Version 2.1.0 (Oct. 18, 2021) ----------------------------- New features ^^^^^^^^^^^^ 1. Keyframes now have ``mocap_pos`` and ``mocap_quat`` fields (mpos and quat attributes in the XML) allowing mocap poses to be stored in keyframes. 2. New utility functions: ``mju_insertionSortInt`` (integer insertion sort) and ``mju_sigmoid`` (constructing a sigmoid from two half-quadratics). General ^^^^^^^ 3. The pre-allocated sizes in the virtual file system (VFS) increased to 2000 and 1000, to allow for larger projects. #. The C structs in the ``mjuiItem`` union are now named, for compatibility. #. Fixed: ``mjcb_contactfilter`` type is ``mjfConFilt`` (was ``mjfGeneric``). #. Fixed: The array of sensors in ``mjCModel`` was not cleared. #. Cleaned up cross-platform code (internal changes, not visible via the API). #. Fixed a bug in parsing of XML ``texcoord`` data (related to number of vertices). #. Fixed a bug in `simulate.cc `_ related to ``nkey`` (the number of keyframes). #. Accelerated collision detection in the presence of large numbers of non-colliding geoms (with ``contype==0 and conaffinity==0``). UI ^^ 11. Figure selection type changed from ``int`` to ``float``. #. Figures now show data coordinates, when selection and highlight are enabled. #. Changed ``mjMAXUIMULTI`` to 35, ``mjMAXUITEXT`` to 300, ``mjMAXUIRECT`` to 25. #. Added collapsable sub-sections, implemented as separators with state: ``mjSEPCLOSED`` collapsed, ``mjSEPCLOSED+1`` expanded. #. Added ``mjITEM_RADIOLINE`` item type. #. Added function ``mjui_addToSection`` to simplify UI section construction. #. Added subplot titles to ``mjvFigure``. Rendering ^^^^^^^^^ 18. ``render_gl2`` guards against non-finite floating point data in the axis range computation. #. ``render_gl2`` draws lines from back to front for better visibility. #. Added function ``mjr_label`` (for text labels). #. ``mjr_render`` exits immediately if ``ngeom==0``, to avoid errors from uninitialized scenes (e.g. ``frustrum==0``). #. Added scissor box in ``mjr_render``, so we don't clear the entire window at every frame. License manager ^^^^^^^^^^^^^^^ 23. Removed the entire license manager. The functions ``mj_activate`` and ``mj_deactivate`` are still there for backward compabitibily, but now they do nothing and it is no longer necessary to call them. #. Removed the remote license certificate functions ``mj_certXXX``. Earlier Versions ---------------- For changelogs of earlier versions please see `roboti.us `_. .. |humanoid| image:: images/models/humanoid.gif :width: 270px .. |particle| image:: images/models/particle.gif :width: 270px