Update changelog for the 3.11.0 release.
PiperOrigin-RevId: 954795939 Change-Id: I357468dd9072a5d1bab5af2529039e4924db12ed
This commit is contained in:
committed by
Copybara-Service
parent
ca5337161d
commit
b85fdca54f
+123
-117
@@ -2,8 +2,8 @@
|
|||||||
Changelog
|
Changelog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
Upcoming version (not yet released)
|
Version 3.11.0 (July 27, 2026)
|
||||||
-----------------------------------
|
------------------------------
|
||||||
|
|
||||||
Engine
|
Engine
|
||||||
^^^^^^
|
^^^^^^
|
||||||
@@ -13,169 +13,175 @@ Engine
|
|||||||
:align: right
|
:align: right
|
||||||
:width: 35%
|
:width: 35%
|
||||||
|
|
||||||
- Added :ref:`geom/surfacevel<body-geom-surfacevel>`: the velocity of a geom's surface as seen by contacts, given as
|
1. :commit:`4787c809` Added :ref:`geom/surfacevel<body-geom-surfacevel>`: the velocity of a geom's surface as seen by
|
||||||
a velocity field with a constant component and a rotational component about the geom frame origin. This allows
|
contacts, given as a velocity field with a constant component and a rotational component about the geom frame origin.
|
||||||
conveyor belts, treadmills and turntables to be modeled with static geoms and no degrees of freedom: friction
|
This allows conveyor belts, treadmills and turntables to be modeled with static geoms and no degrees of freedom:
|
||||||
drives touching bodies along the motion of the surface, with the field projected onto each contact's tangent
|
friction drives touching bodies along the motion of the surface, with the field projected onto each contact's tangent
|
||||||
plane. Surface velocities compose correctly with each other and with body motion.
|
plane. Surface velocities compose correctly with each other and with body motion.
|
||||||
Note that the contact rows of ``mjData.efc_vel``, and the constraint-state sensors that read them, report the
|
Note that the contact rows of ``mjData.efc_vel``, and the constraint-state sensors that read them, report the
|
||||||
velocity relative to the moving surface rather than to the geom, since that is the quantity the constraint acts
|
velocity relative to the moving surface rather than to the geom, since that is the quantity the constraint acts
|
||||||
on; for geoms without :at:`surfacevel` the two are identical. Contact-point visualization draws an arrow along the
|
on; for geoms without :at:`surfacevel` the two are identical. Contact-point visualization draws an arrow along the
|
||||||
surface velocity at contacts with moving surfaces.
|
surface velocity at contacts with moving surfaces.
|
||||||
|
|
||||||
.. youtube:: GioWwB36XHI
|
.. youtube:: GioWwB36XHI
|
||||||
:aspect: 16:7
|
:aspect: 16:7
|
||||||
:align: right
|
:align: right
|
||||||
:width: 35%
|
:width: 35%
|
||||||
|
|
||||||
- Added :ref:`geom/adhesion<body-geom-adhesion>` and :ref:`pair/adhesion<contact-pair-adhesion>`: an adhesive force
|
2. :commit:`a264d0bc` Added :ref:`geom/adhesion<body-geom-adhesion>` and :ref:`pair/adhesion<contact-pair-adhesion>`: an
|
||||||
associated with a contact, useful for modeling sticky materials. Contacts can pull with up to the given force before
|
adhesive force associated with a contact, useful for modeling sticky materials. Contacts can pull with up to the
|
||||||
breaking, and the friction budget becomes :math:`\mu(f_N + \text{adhesion})`. Combined with :ref:`gap<body-geom-gap>`,
|
given force before breaking, and the friction budget becomes :math:`\mu(f_N + \text{adhesion})`. Combined with
|
||||||
adhesive contacts apply "adhesion at a distance", useful for modeling magnets. Resting penetration is unaffected by
|
:ref:`gap<body-geom-gap>`, adhesive contacts apply "adhesion at a distance", useful for modeling magnets. Resting
|
||||||
adhesion. :ref:`mj_contactForce` reports the net interface force, whose normal component can now be negative.
|
penetration is unaffected by adhesion. :ref:`mj_contactForce` reports the net interface force, whose normal component
|
||||||
- Replaced midpoint integration of free bodies with :ref:`gyroscopic derivatives<geFreeBody>` in the ``implicitfast``
|
can now be negative.
|
||||||
:ref:`integrator<geIntegrators>`: the bias-force derivative of every standalone free body is applied via a local
|
3. :commit:`f0fa3d82` Replaced midpoint integration of free bodies with :ref:`gyroscopic derivatives<geFreeBody>` in the
|
||||||
unsymmetric solve of its decoupled block, making ``implicitfast`` identical to ``implicit`` for such bodies.
|
``implicitfast`` :ref:`integrator<geIntegrators>`: the bias-force derivative of every standalone free body is applied
|
||||||
Unlike midpoint integration, which required vacuum and no constraints, this applies in all environments (contacts,
|
via a local unsymmetric solve of its decoupled block, making ``implicitfast`` identical to ``implicit`` for such
|
||||||
fluid, constraints), and is compatible with discrete-time inverse dynamics. Spinning free bodies no
|
bodies. Unlike midpoint integration, which required vacuum and no constraints, this applies in all environments
|
||||||
longer gain energy, but tumbling motion is now mildly damped; models requiring long-horizon energy conservation of
|
(contacts, fluid, constraints), and is compatible with discrete-time inverse dynamics. Spinning free bodies no
|
||||||
tumbling bodies in vacuum should use ``RK4``. The :ref:`invdiscrete<option-flag-invdiscrete>` flag no longer has any
|
longer gain energy, but tumbling motion is now mildly damped; models requiring long-horizon energy conservation of
|
||||||
effect on forward dynamics.
|
tumbling bodies in vacuum should use ``RK4``. The :ref:`invdiscrete<option-flag-invdiscrete>` flag no longer has any
|
||||||
- Added :ref:`body/simple<body-simple>` attribute ("false"/"auto") to disable the *simple body* mass matrix
|
effect on forward dynamics.
|
||||||
optimization. This is useful for domain randomization, where model parameters may change post-compilation.
|
4. :commit:`5618666a` Added :ref:`body/simple<body-simple>` attribute ("false"/"auto") to disable the *simple body* mass
|
||||||
- :ref:`mj_setConst` now recomputes the ``mjModel.{body,geom,site}_sameframe`` flags, to account for changes in
|
matrix optimization. This is useful for domain randomization, where model parameters may change post-compilation.
|
||||||
body/geom/site frames after compilation.
|
5. :commit:`14c0b0c9` :ref:`mj_setConst` now recomputes the ``mjModel.{body,geom,site}_sameframe`` flags, to account for
|
||||||
- Added support for :ref:`multiccd <coMultiCCD>` with arbitrarily large meshes.
|
changes in body/geom/site frames after compilation.
|
||||||
- Added ``flg_gravcomp`` and ``flg_surfacevel`` boolean flags to ``mjModel``. These flags replace the fast-path checks
|
6. :commit:`2444defc` Added support for :ref:`multiccd <coMultiCCD>` with arbitrarily large meshes.
|
||||||
as originally guarded by ``ngravcomp``. Since the engine uses these integers as flags (zero vs. non-zero), the new
|
7. :commit:`a04b0c5b` Added ``flg_gravcomp`` and ``flg_surfacevel`` boolean flags to ``mjModel``. These flags replace
|
||||||
flags are honest boolean properties, writeable from the Python bindings at runtime. The field ``ngravcomp`` is
|
the fast-path checks as originally guarded by ``ngravcomp``. Since the engine uses these integers as flags (zero vs.
|
||||||
deprecated and will be removed in a future release.
|
non-zero), the new flags are honest boolean properties, writeable from the Python bindings at runtime. The field
|
||||||
- Replaced quadratic scratch in DFS flood-fill island discovery with a linear-memory Union-Find (disjoint set).
|
``ngravcomp`` is deprecated and will be removed in a future release.
|
||||||
Contribution by :github:user:`teerthsharma`.
|
8. :commit:`a1f38c8e` Replaced quadratic scratch in DFS flood-fill island discovery with a linear-memory Union-Find
|
||||||
|
(disjoint set). Contribution by :github:user:`teerthsharma`.
|
||||||
|
|
||||||
.. admonition:: Breaking API changes
|
.. admonition:: Breaking API changes
|
||||||
:class: attention
|
:class: attention
|
||||||
|
|
||||||
- Changed the default value of :ref:`sleep_tolerance<option-sleep_tolerance>` from 1e-4 to 1e-3 (1mm/sec in SI
|
9. :commit:`ff629889` Changed the default value of :ref:`sleep_tolerance<option-sleep_tolerance>` from 1e-4 to 1e-3
|
||||||
units).
|
(1mm/sec in SI units).
|
||||||
- Removed the legacy sparse ancestor-walk inertia matrix ``mjData.qM``. The joint-space inertia matrix is now stored
|
10. :commit:`315bcfbf` Removed the legacy sparse ancestor-walk inertia matrix ``mjData.qM``. The joint-space inertia
|
||||||
exclusively in the compressed sparse row (CSR) format ``mjData.M``.
|
matrix is now stored exclusively in the compressed sparse row (CSR) format ``mjData.M``.
|
||||||
- Switched :ref:`mjd_inverseFD` to use the CSR-format ``mjData.M`` representation instead of the legacy ``mjData.qM``
|
11. :commit:`7e9ac58f` Switched :ref:`mjd_inverseFD` to use the CSR-format ``mjData.M`` representation instead of the
|
||||||
for the mass matrix derivative. This changes the shape of the ``DmDq`` parameter from ``(nv x nM)`` to
|
legacy ``mjData.qM`` for the mass matrix derivative. This changes the shape of the ``DmDq`` parameter from
|
||||||
``(nv x nC)``.
|
``(nv x nM)`` to ``(nv x nC)``.
|
||||||
- :ref:`mju_round` now breaks ties away from zero rather than towards :math:`+\infty`. This only affects
|
12. :commit:`1ea2d884` :ref:`mju_round` now breaks ties away from zero rather than towards :math:`+\infty`. This only
|
||||||
negative half-integers, e.g. ``mju_round(-2.5)`` now returns -3 rather than -2.
|
affects negative half-integers, e.g. ``mju_round(-2.5)`` now returns -3 rather than -2.
|
||||||
- Removed unneeded `mjvScene` argument from :ref:`mjv_moveCamera`.
|
13. :commit:`fa36015b` Removed unneeded `mjvScene` argument from :ref:`mjv_moveCamera`.
|
||||||
- Split up :ref:`mjrfMeshData` into `mjrfMeshData` and `mjrfMeshConfig` to allow reuploading of mesh data without
|
14. :commit:`ba9a6503` Split up :ref:`mjrfMeshData` into `mjrfMeshData` and `mjrfMeshConfig` to allow reuploading of
|
||||||
having to recreate the mesh object. Introduces :ref:`mjrfDefaultMeshConfig` and :ref:`mjrfSetMeshData` functions.
|
mesh data without having to recreate the mesh object. Introduces :ref:`mjrf_defaultMeshConfig` and
|
||||||
- Removed `bytes` field from :ref:`mjrVertexAttribute`.
|
:ref:`mjrf_setMeshData` functions.
|
||||||
|
15. :commit:`ba9a6503` Removed `bytes` field from :ref:`mjrVertexAttribute`.
|
||||||
|
|
||||||
.. admonition:: Breaking ABI changes
|
.. admonition:: Breaking ABI changes
|
||||||
:class: caution
|
:class: caution
|
||||||
|
|
||||||
- :ref:`mjModel` gained the ``actuator_ctrlspec`` field (input signature of each actuator), and :ref:`mjsActuator`
|
16. :commit:`072e963f` :ref:`mjModel` gained the ``actuator_ctrlspec`` field (input signature of each actuator), and
|
||||||
gained ``ctrlspec``, changing their size and layout. The :ref:`mjtGain` and :ref:`mjtBias` enums gained ``so3``
|
:ref:`mjsActuator` gained ``ctrlspec``, changing their size and layout. The :ref:`mjtGain` and :ref:`mjtBias`
|
||||||
members, shifting the values of ``mjGAIN_USER`` and ``mjBIAS_USER``.
|
enums gained ``so3`` members, shifting the values of ``mjGAIN_USER`` and ``mjBIAS_USER``.
|
||||||
- Added ``texid``, ``texuniform`` and ``texrepeat`` fields to :ref:`mjvGeom`.
|
17. :commit:`d43c3ed4` Added ``texid``, ``texuniform`` and ``texrepeat`` fields to :ref:`mjvGeom`.
|
||||||
- The :ref:`mjContact` struct gained an ``adhesion`` member, changing its size and layout.
|
18. :commit:`a264d0bc` The :ref:`mjContact` struct gained an ``adhesion`` member, changing its size and layout.
|
||||||
|
|
||||||
.. admonition:: Bug fixes
|
.. admonition:: Bug fixes
|
||||||
:class: admonition
|
:class: admonition
|
||||||
|
|
||||||
- Fixed a bug where ``body_margin`` excluded ``gap``, causing the mid-phase collision filter to incorrectly prune
|
19. :commit:`dddb2767` Fixed a bug where ``body_margin`` excluded ``gap``, causing the mid-phase collision filter to
|
||||||
in-gap contacts on multi-geom bodies.
|
incorrectly prune in-gap contacts on multi-geom bodies.
|
||||||
|
|
||||||
Actuation
|
Actuation
|
||||||
^^^^^^^^^
|
^^^^^^^^^
|
||||||
- Refactored actuator infrastructure in preparation for MIMO (multi-input multi-output) actuator support. Each actuator
|
20. :commit:`d507e921` Refactored actuator infrastructure in preparation for MIMO (multi-input multi-output) actuator
|
||||||
now has ``ctrlnum`` (number of controls) and ``outnum`` (number of force outputs). The total counts
|
support. Each actuator now has ``ctrlnum`` (number of controls) and ``outnum`` (number of force outputs). The total
|
||||||
``nu = sum(ctrlnum)`` and ``nout = sum(outnum)`` dimension ``mjData.ctrl`` and ``mjData.actuator_force``,
|
counts ``nu = sum(ctrlnum)`` and ``nout = sum(outnum)`` dimension ``mjData.ctrl`` and ``mjData.actuator_force``,
|
||||||
respectively, ``nactuator`` is the number of actuators. For existing actuators ``ctrnum = outnum = 1``, so
|
respectively, ``nactuator`` is the number of actuators. For existing actuators ``ctrnum = outnum = 1``, so
|
||||||
``nactuator == nu == nout`` and existing code is unaffected.
|
``nactuator == nu == nout`` and existing code is unaffected.
|
||||||
- Setpoints of :ref:`position<actuator-position>` and :ref:`intvelocity<actuator-intvelocity>` servos acting on 3D
|
21. :commit:`56a93979` Setpoints of :ref:`position<actuator-position>` and :ref:`intvelocity<actuator-intvelocity>`
|
||||||
rotational transmissions (ball joints, or site transmissions with a :ref:`refsite<actuator-general-refsite>` and
|
servos acting on 3D rotational transmissions (ball joints, or site transmissions with a
|
||||||
purely rotational gear) are now interpreted on the circle: the force uses the setpoint representative nearest the
|
:ref:`refsite<actuator-general-refsite>` and purely rotational gear) are now interpreted on the circle: the force
|
||||||
current angle, so targets winding beyond half a turn are tracked continuously instead of slipping by full turns.
|
uses the setpoint representative nearest the current angle, so targets winding beyond half a turn are tracked
|
||||||
Behavior is identical whenever the error does not exceed π. Relatedly, ``intvelocity`` actuators now expose
|
continuously instead of slipping by full turns. Behavior is identical whenever the error does not exceed π.
|
||||||
:ref:`actlimited<actuator-intvelocity-actlimited>`, which was previously hardcoded to "true": as for
|
Relatedly, ``intvelocity`` actuators now expose :ref:`actlimited<actuator-intvelocity-actlimited>`, which was
|
||||||
:ref:`general<actuator-general>` actuators it defaults to "auto", so activation clamping is enabled by specifying
|
previously hardcoded to "true": as for :ref:`general<actuator-general>` actuators it defaults to "auto", so
|
||||||
``actrange``. Unclamped integrated setpoints are well-behaved on rotational transmissions, where they wrap.
|
activation clamping is enabled by specifying ``actrange``. Unclamped integrated setpoints are well-behaved on
|
||||||
|
rotational transmissions, where they wrap.
|
||||||
|
|
||||||
.. youtube:: 17XpwnqyCXs
|
.. youtube:: 17XpwnqyCXs
|
||||||
:aspect: 16:7
|
:aspect: 16:7
|
||||||
:align: right
|
:align: right
|
||||||
:width: 35%
|
:width: 35%
|
||||||
|
|
||||||
- Added the :ref:`orientation<actuator-orientation>` actuator: a geodesic servo on a new SO(3) transmission (ball
|
22. :commit:`072e963f` Added the :ref:`orientation<actuator-orientation>` actuator: a geodesic servo on a new SO(3)
|
||||||
joints, or a site with a :ref:`refsite<actuator-general-refsite>`), acting jointly on the full relative orientation
|
transmission (ball joints, or a site with a :ref:`refsite<actuator-general-refsite>`), acting jointly on the full
|
||||||
with an exact equilibrium at every commanded orientation. This is the first actuator with multiple force outputs
|
relative orientation with an exact equilibrium at every commanded orientation. This is the first actuator with
|
||||||
(3), and, with ``input="quat"``, the first with different input and output dimensions (4 controls, 3 outputs). The
|
multiple force outputs (3), and, with ``input="quat"``, the first with different input and output dimensions (4
|
||||||
input signature is recorded in the new ``mjModel.actuator_ctrlspec``, exposed as the
|
controls, 3 outputs). The input signature is recorded in the new ``mjModel.actuator_ctrlspec``, exposed as the
|
||||||
:ref:`input<actuator-general-input>` attribute.
|
:ref:`input<actuator-general-input>` attribute.
|
||||||
- Added :ref:`mj_actuatorInputName`, returning the name of an actuator input (e.g. "qw" for the first control of a
|
23. :commit:`072e963f` Added :ref:`mj_actuatorInputName`, returning the name of an actuator input (e.g. "qw" for the
|
||||||
quaternion-commanded orientation actuator). The control sliders in :ref:`simulate<saSimulate>` and MuJoCo Studio are
|
first control of a quaternion-commanded orientation actuator). The control sliders in :ref:`simulate<saSimulate>`
|
||||||
now generated per control and labeled with the actuator name plus the input name suffix.
|
and MuJoCo Studio are now generated per control and labeled with the actuator name plus the input name suffix.
|
||||||
- Viewer control sliders now use a defined :ref:`ctrlrange<actuator-general-ctrlrange>` even when
|
24. :commit:`072e963f` Viewer control sliders now use a defined :ref:`ctrlrange<actuator-general-ctrlrange>` even when
|
||||||
:ref:`ctrllimited<actuator-general-ctrllimited>` is "false": the range sets the slider span, while clamping remains
|
:ref:`ctrllimited<actuator-general-ctrllimited>` is "false": the range sets the slider span, while clamping remains
|
||||||
controlled by :at:`ctrllimited`.
|
controlled by :at:`ctrllimited`.
|
||||||
- Added :ref:`mj_resetCtrl`, setting controls to neutral values: zero, except quaternion inputs which reset to the
|
25. :commit:`072e963f` Added :ref:`mj_resetCtrl`, setting controls to neutral values: zero, except quaternion inputs
|
||||||
identity quaternion. Called by :ref:`mj_resetData` and the viewers' "Clear All".
|
which reset to the identity quaternion. Called by :ref:`mj_resetData` and the viewers' "Clear All".
|
||||||
|
|
||||||
Solvers
|
Solvers
|
||||||
^^^^^^^
|
^^^^^^^
|
||||||
- Flex elasticity (stretch, bending, interpolation stiffness) is now integrated implicitly inside the CG constraint
|
26. :commit:`ea230a95` Flex elasticity (stretch, bending, interpolation stiffness) is now integrated implicitly inside
|
||||||
solver via an *effective metric*: the mass matrix is augmented with the stiffness Hessian,
|
the CG constraint solver via an *effective metric*: the mass matrix is augmented with the stiffness Hessian,
|
||||||
so contact and elastic forces are solved against one consistent metric. This replaces the previous post-hoc CG
|
so contact and elastic forces are solved against one consistent metric. This replaces the previous post-hoc CG
|
||||||
correction, which modified ``qacc`` after the constraint solve. The gate is ``solver="CG"`` with an implicit
|
correction, which modified ``qacc`` after the constraint solve. The gate is ``solver="CG"`` with an implicit
|
||||||
integrator and flex stiffness present; Newton and PGS are unaffected. Bending-only models pay zero per-step
|
integrator and flex stiffness present; Newton and PGS are unaffected. Bending-only models pay zero per-step
|
||||||
factorization cost (the factor is precomputed in :ref:`mj_setConst<mj_setConst>`). Inverse dynamics
|
factorization cost (the factor is precomputed in :ref:`mj_setConst<mj_setConst>`). Inverse dynamics
|
||||||
(:ref:`mj_inverse<mj_inverse>`) is now discrete-consistent with forward dynamics for gated models.
|
(:ref:`mj_inverse<mj_inverse>`) is now discrete-consistent with forward dynamics for gated models.
|
||||||
- Added Nesterov momentum extrapolation with adaptive gradient restart (O'Donoghue-Candès) to the PGS solver,
|
27. :commit:`c499f7f2` Added Nesterov momentum extrapolation with adaptive gradient restart (O'Donoghue-Candès) to the
|
||||||
significantly improving convergence. Overall PGS now requires ~2x fewer iterations.
|
PGS solver, significantly improving convergence. Overall PGS now requires ~2x fewer iterations.
|
||||||
- Added the Newton decrement -- the quadratic model's predicted cost improvement of the next iteration -- as a third
|
28. :commit:`1e66efd1` Added the Newton decrement -- the quadratic model's predicted cost improvement of the next
|
||||||
early-termination criterion of the :ref:`Newton solver<soAlgorithms>`, alongside cost improvement and gradient norm.
|
iteration -- as a third early-termination criterion of the :ref:`Newton solver<soAlgorithms>`, alongside cost
|
||||||
This reduces iteration counts at no accuracy cost. Proposed by :github:user:`adenzler-nvidia` in
|
improvement and gradient norm. This reduces iteration counts at no accuracy cost. Proposed by
|
||||||
:doc:`MJWarp <mjwarp/index>` pull request `1520 <https://github.com/google-deepmind/mujoco_warp/pull/1520>`__.
|
:github:user:`adenzler-nvidia` in :doc:`MJWarp <mjwarp/index>` pull request
|
||||||
- The CG and Newton solvers now terminate with zero iterations when a duality-gap certificate proves that the
|
`1520 <https://github.com/google-deepmind/mujoco_warp/pull/1520>`__.
|
||||||
warmstarted solution already satisfies the tolerance. The certificate requires only the existing mass-matrix
|
29. :commit:`c69ef030` The CG and Newton solvers now terminate with zero iterations when a duality-gap certificate
|
||||||
factorization, so quiescent scenes skip Hessian construction, factorization and the line search entirely. Newton
|
proves that the warmstarted solution already satisfies the tolerance. The certificate requires only the existing
|
||||||
zero-iteration exits additionally require the gradient criterion, preserving Newton's characteristic force-level
|
mass-matrix factorization, so quiescent scenes skip Hessian construction, factorization and the line search
|
||||||
accuracy. See :ref:`Warmstart<soAlgorithms>` in the Computation chapter for details.
|
entirely. Newton zero-iteration exits additionally require the gradient criterion, preserving Newton's
|
||||||
|
characteristic force-level accuracy. See :ref:`Warmstart<soAlgorithms>` in the Computation chapter for details.
|
||||||
|
|
||||||
|
|
||||||
Compiler
|
Compiler
|
||||||
^^^^^^^^
|
^^^^^^^^
|
||||||
- :ref:`mj_encode` now supports encoding of MJB and TXT files.
|
30. :commit:`4e1795b9` :ref:`mj_encode` now supports encoding of MJB and TXT files.
|
||||||
- The :ref:`attach<body-attach>` element now supports self-attachment (attaching elements of the current model to
|
31. :commit:`c6c3ec31` The :ref:`attach<body-attach>` element now supports self-attachment (attaching elements of the
|
||||||
itself) by omitting the :ref:`model<body-attach-model>` attribute. It also supports attaching a frame via the new
|
current model to itself) by omitting the :ref:`model<body-attach-model>` attribute. It also supports attaching a
|
||||||
:ref:`frame<body-attach-frame>` attribute, which is mutually exclusive with :ref:`body<body-attach-body>`.
|
frame via the new :ref:`frame<body-attach-frame>` attribute, which is mutually exclusive with
|
||||||
- Fixed loading of :ref:`.mjz <MJZArchives>` archives in :ref:`simulate<saSimulate>`: the archive was unmounted
|
:ref:`body<body-attach-body>`.
|
||||||
before model compilation, so assets failed to load. Failures in the :ref:`mjz <MJZArchives>` decoder now emit a
|
32. :commit:`040872fd` Fixed loading of :ref:`.mjz <MJZArchives>` archives in :ref:`simulate<saSimulate>`: the archive
|
||||||
warning with the underlying error instead of the generic "could not decode content" message.
|
was unmounted before model compilation, so assets failed to load. Failures in the :ref:`mjz <MJZArchives>` decoder
|
||||||
- The :ref:`mjz <MJZArchives>` decoder now searches for ``model.xml`` and ``<stem>/model.xml`` as a fallback if
|
now emit a warning with the underlying error instead of the generic "could not decode content" message.
|
||||||
``<stem>.xml`` and ``<stem>/<stem>.xml`` are not found.
|
33. :commit:`ebd4abae` The :ref:`mjz <MJZArchives>` decoder now searches for ``model.xml`` and ``<stem>/model.xml`` as a
|
||||||
- Added support for resource writing via :ref:`mju_writeResource` and the ``write`` callback in
|
fallback if ``<stem>.xml`` and ``<stem>/<stem>.xml`` are not found.
|
||||||
:ref:`mjpResourceProvider`.
|
34. :commit:`dc7581ac` Added support for resource writing via :ref:`mju_writeResource` and the ``write`` callback in
|
||||||
|
:ref:`mjpResourceProvider`.
|
||||||
|
|
||||||
.. admonition:: Breaking API changes
|
.. admonition:: Breaking API changes
|
||||||
:class: attention
|
:class: attention
|
||||||
|
|
||||||
- The return type of :ref:`mj_encode` and the :ref:`mjfEncode` callback changed from ``int`` to ``mjtSize``
|
35. :commit:`d83ef0b6` The return type of :ref:`mj_encode` and the :ref:`mjfEncode` callback changed from ``int`` to
|
||||||
(64-bit).
|
``mjtSize`` (64-bit).
|
||||||
|
|
||||||
.. admonition:: Bug fixes
|
.. admonition:: Bug fixes
|
||||||
:class: admonition
|
:class: admonition
|
||||||
|
|
||||||
- Fixed a bug in the mesh compiler where normals were scaled as vectors rather than covectors.
|
36. :commit:`f5f9d9ef` Fixed a bug in the mesh compiler where normals were scaled as vectors rather than covectors.
|
||||||
|
|
||||||
Python bindings
|
Python bindings
|
||||||
^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^
|
||||||
- The bindings now support free threading (`PEP 703 <https://peps.python.org/pep-0703/>`__) for Python 3.14.
|
37. :commit:`a07ae6f8` The bindings now support free threading (`PEP 703 <https://peps.python.org/pep-0703/>`__) for
|
||||||
|
Python 3.14.
|
||||||
|
|
||||||
Documentation
|
Documentation
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
- Expanded documentation for :ref:`spec.encode <meSaving>` workflows and added detailed documentation for the
|
38. :commit:`1f1bfa9e` Expanded documentation for :ref:`spec.encode <meSaving>` workflows and added detailed
|
||||||
:ref:`MJZ Archive <MJZArchives>` format (``.mjz`` / ``.zip``).
|
documentation for the :ref:`MJZ Archive <MJZArchives>` format (``.mjz`` / ``.zip``).
|
||||||
|
|
||||||
|
|
||||||
Version 3.10.0 (June 22, 2026)
|
Version 3.10.0 (June 22, 2026)
|
||||||
|
|||||||
Reference in New Issue
Block a user