Implement multi-cell finite element method for interpolated flexes.

This change introduces a `flex_cellcount` field to `mjModel` to specify the number of cells in each dimension for interpolated flexes. The stiffness computation, passive force calculation, and Jacobian derivatives are updated to operate on a per-cell basis, significantly improving performance by localizing computations to the nodes within each cell.

PiperOrigin-RevId: 901216393
Change-Id: Ic23132e609de11e71bb7fef8d1f139daad2ec264
This commit is contained in:
Alessio Quaglino
2026-04-17 04:10:54 -07:00
committed by Copybara-Service
parent 8415dff307
commit 6c7ed66781
36 changed files with 1777 additions and 1039 deletions
+19 -2
View File
@@ -3700,8 +3700,14 @@ saving the XML:
.. _body-flexcomp-count:
:at:`count`: :at-val:`int(3), "10 10 10"`
The number of automatically generated points in each dimension. This and the next attribute only apply to types grid,
box, cylinder, ellipsoid.
Specifies the number of automatically generated points in each dimension for types **grid**, **box**, **cylinder**,
and **ellipsoid**.
.. _body-flexcomp-cellcount:
:at:`cellcount`: :at-val:`int(3), "1 1 1"`
Specifies the number of cells in each dimension for the background interpolation grid when using **trilinear** or
**quadratic** dofs.
.. _body-flexcomp-spacing:
@@ -4242,6 +4248,17 @@ cases, the user will specify a :el:`flexcomp` which will then automatically cons
An array of MuJoCo body names (separated by white space) to which each node belongs. The number of body names
should equal the number of nodes (nnode). See the flexcomp :ref:`dof<body-flexcomp-dof>` attribute for more details.
.. _deformable-flex-cellcount:
:at:`cellcount`: :at-val:`int(3), optional`
When using **trilinear** or **quadratic** dofs, this specifies the number of cells in each dimension for the
background interpolation grid.
.. _deformable-flex-dof:
:at:`dof`: :at-val:`[trilinear, quadratic], optional`
Interpolation order for the flex.
.. _flex-edge:
:el-prefix:`flex/` |-| **edge** |?|