Skip to content

Releases: google-deepmind/mujoco

3.11.0

Choose a tag to compare

@mmossg mmossg released this 28 Jul 01:17

Version 3.11.0 (July 27, 2026)

Engine

  1. 4787c809 Added geom/surfacevel: the velocity of a geom's surface as seen by contacts, given as a velocity field with a constant component and a rotational component about the geom frame origin. This allows conveyor belts, treadmills and turntables to be modeled with static geoms and no degrees of freedom: 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. 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 on; for geoms without surfacevel the two are identical. Contact-point visualization draws an arrow along the surface velocity at contacts with moving surfaces.

    Watch video

  2. a264d0bc Added geom/adhesion and pair/adhesion: an adhesive force associated with a contact, useful for modeling sticky materials. Contacts can pull with up to the given force before breaking, and the friction budget becomes $\mu(f_N + \text{adhesion})$. Combined with gap, adhesive contacts apply "adhesion at a distance", useful for modeling magnets. Resting penetration is unaffected by adhesion. mj_contactForce reports the net interface force, whose normal component can now be negative.

    Watch video

  3. f0fa3d82 Replaced midpoint integration of free bodies with gyroscopic derivatives in the implicitfast integrator: the bias-force derivative of every standalone free body is applied via a local unsymmetric solve of its decoupled block, making implicitfast identical to implicit for such bodies. Unlike midpoint integration, which required vacuum and no constraints, this applies in all environments (contacts, fluid, constraints), and is compatible with discrete-time inverse dynamics. Spinning free bodies no longer gain energy, but tumbling motion is now mildly damped; models requiring long-horizon energy conservation of tumbling bodies in vacuum should use RK4. The invdiscrete flag no longer has any effect on forward dynamics.

  4. 5618666a Added body/simple attribute ("false"/"auto") to disable the simple body mass matrix optimization. This is useful for domain randomization, where model parameters may change post-compilation.

  5. 14c0b0c9 mj_setConst now recomputes the mjModel.{body,geom,site}_sameframe flags, to account for changes in body/geom/site frames after compilation.

  6. 2444defc Added support for multiccd with arbitrarily large meshes.

  7. a04b0c5b Added flg_gravcomp and flg_surfacevel boolean flags to mjModel. These flags replace the fast-path checks as originally guarded by ngravcomp. Since the engine uses these integers as flags (zero vs. non-zero), the new flags are honest boolean properties, writeable from the Python bindings at runtime. The field ngravcomp is deprecated and will be removed in a future release.

  8. a1f38c8e Replaced quadratic scratch in DFS flood-fill island discovery with a linear-memory Union-Find (disjoint set). Contribution by @teerthsharma.

Warning

Breaking API changes

  1. ff629889 Changed the default value of sleep_tolerance from 1e-4 to 1e-3 (1mm/sec in SI units).
  2. 315bcfbf Removed the legacy sparse ancestor-walk inertia matrix mjData.qM. The joint-space inertia matrix is now stored exclusively in the compressed sparse row (CSR) format mjData.M.
  3. 7e9ac58f Switched mjd_inverseFD to use the CSR-format mjData.M representation instead of the legacy mjData.qM for the mass matrix derivative. This changes the shape of the DmDq parameter from (nv x nM) to (nv x nC).
  4. 1ea2d884 mju_round now breaks ties away from zero rather than towards $+\infty$. This only affects negative half-integers, e.g. mju_round(-2.5) now returns -3 rather than -2.
  5. fa36015b Removed unneeded mjvScene argument from mjv_moveCamera.
  6. ba9a6503 Split up mjrfMeshData into mjrfMeshData and mjrfMeshConfig to allow reuploading of mesh data without having to recreate the mesh object. Introduces mjrf_defaultMeshConfig and mjrf_setMeshData functions.
  7. ba9a6503 Removed bytes field from mjrVertexAttribute.

Caution

Breaking ABI changes

  1. 072e963f mjModel gained the actuator_ctrlspec field (input signature of each actuator), and mjsActuator gained ctrlspec, changing their size and layout. The mjtGain and mjtBias enums gained so3 members, shifting the values of mjGAIN_USER and mjBIAS_USER.
  2. d43c3ed4 Added texid, texuniform and texrepeat fields to mjvGeom.
  3. a264d0bc The mjContact struct gained an adhesion member, changing its size and layout.

Note

Bug fixes

  1. dddb2767 Fixed a bug where body_margin excluded gap, causing the mid-phase collision filter to incorrectly prune in-gap contacts on multi-geom bodies.

Actuation

  1. d507e921 Refactored actuator infrastructure in preparation for MIMO (multi-input multi-output) actuator support. Each actuator now has ctrlnum (number of controls) and outnum (number of force outputs). The total 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 nactuator == nu == nout and existing code is unaffected.

  2. 56a93979 Setpoints of position and intvelocity servos acting on 3D rotational transmissions (ball joints, or site transmissions with a refsite and purely rotational gear) are now interpreted on the circle: the force uses the setpoint representative nearest the current angle, so targets winding beyond half a turn are tracked continuously instead of slipping by full turns. Behavior is identical whenever the error does not exceed π. Relatedly, intvelocity actuators now expose actlimited, which was previously hardcoded to "true": as for [general](https:...

Read more

3.10.0

Choose a tag to compare

@mmossg mmossg released this 22 Jun 17:04

See the changelog

3.9.0

Choose a tag to compare

@mmossg mmossg released this 27 May 14:46

See the changelog

3.8.1

Choose a tag to compare

@mmossg mmossg released this 11 May 13:59

See the changelog

3.8.0

Choose a tag to compare

@mmossg mmossg released this 24 Apr 23:03

See the changelog

3.7.0

Choose a tag to compare

@mmossg mmossg released this 14 Apr 13:03

See the changelog

3.6.0

Choose a tag to compare

@mmossg mmossg released this 11 Mar 01:53

See the changelog

3.5.0

Choose a tag to compare

@mmossg mmossg released this 13 Feb 01:20

See the changelog.

3.4.0

Choose a tag to compare

@comploplo comploplo released this 05 Dec 23:17

See the changelog.

3.3.7

Choose a tag to compare

@comploplo comploplo released this 14 Oct 17:38

See the changelog.