Alessio Quaglino
4fc69fa64d
Ensure that the Octree is balanced.
...
This means that two adjacent nodes can only have at most one level of refinement difference.
Note: This is a small breaking change for mjWarp since the order of the children was flipped.
PiperOrigin-RevId: 806299445
Change-Id: Ia326a31c7a8162ae02d70c868d87779198e805be
2025-09-12 08:34:15 -07:00
Alessio Quaglino
7e048b7535
Refactor: Convert mjCOctree::MakeOctree from recursive to iterative.
...
The octree construction is now performed using a breadth-first search with a `std::deque` to manage tasks. A new `OctreeTask` struct encapsulates the state for each node to be processed, and a helper function `Subdivide` is introduced for subdividing the Octree nodes.
Also reduce the number of (center, size) to (min, max) conversion for the bounding box representation in order to avoid duplicated vertices in the Octree due to floating point errors.
PiperOrigin-RevId: 806214441
Change-Id: Iff9015ebe4705522db743c478cef5acf1a7312b7
2025-09-12 03:22:17 -07:00
Haroon Qureshi
ad5f07e060
Extract functions from mjv_updateCamera for calculating frames and frustums.
...
PiperOrigin-RevId: 805770746
Change-Id: Id2a6022a2ee2e8b1a783debf54b470a9df81051a
2025-09-11 04:10:59 -07:00
Haroon Qureshi
017e7d5a73
Add light ids.
...
PiperOrigin-RevId: 805755907
Change-Id: I92a1b1ea4ce1495c2746fd518f33ab2d1ad81399
2025-09-11 03:20:44 -07:00
Alessio Quaglino
9d5063799f
Resize keyframes also at the start of compilation.
...
Previously, it was assumed that attaching was the last operation performed on the mjSpec, so keyframes resulted in the incorrect size. In order to prevent information loss, we now only allow the resize function to expand the keyframe array, since attach should never remove a degree of freedom.
PiperOrigin-RevId: 804917828
Change-Id: Icfacd207ced1c6aac600d514f8d9065ceff2d347
2025-09-09 08:16:32 -07:00
Kyle Bayes
ea660f4c13
Expose minimal asset cache API.
...
PiperOrigin-RevId: 803126923
Change-Id: Iabf63802572f7cb86864b5ece85f44b3f15a4ec0
2025-09-04 12:18:36 -07:00
Alessio Quaglino
767996ab17
Transform inputs to global before calling rayMesh in SDF collisions.
...
PiperOrigin-RevId: 802523399
Change-Id: I889b020e4e721fbf471992f5c87446df601ba766
2025-09-03 06:12:34 -07:00
Yuval Tassa
7a93e22514
Refactor MJMODEL_POINTERS into category-specific macros.
...
PiperOrigin-RevId: 802089588
Change-Id: Id3443f88e8243c5167a23b6e42eb32a32f88e8d3
2025-09-02 04:41:50 -07:00
Haroon Qureshi
8d884585dd
Add target relative mouse motion actions.
...
PiperOrigin-RevId: 802072880
Change-Id: I1ff204594a126f8e50df4c703709f70ec4dd458c
2025-09-02 03:39:49 -07:00
Alessio Quaglino
8acd83f317
Add passive collision mode for flexes.
...
PiperOrigin-RevId: 801754907
Change-Id: I4147af2ee2596519d42cb9a03cf8d5488f0bc3e8
2025-09-01 04:13:58 -07:00
Yuval Tassa
b9900db00e
Extract memory allocation functions and core utilities
...
PiperOrigin-RevId: 801745499
Change-Id: Iaf05c3430769d3115743d8ab020d13148cb2eb59
2025-09-01 03:38:25 -07:00
Yuval Tassa
b092563cab
Remove mjDSBL_PASSIVE, split it into mjDSBL_SPRING and mjDSBL_DAMPING.
...
PiperOrigin-RevId: 800870384
Change-Id: I273e0ceec090901e2620febb67e57914928e94bb
2025-08-29 06:06:28 -07:00
Yuval Tassa
b1c94c3761
Add printing of block-diagonalized matrices
...
PiperOrigin-RevId: 800345520
Change-Id: I4996c5a7509cb451744d3e428a975cceee845ea5
2025-08-28 00:54:39 -07:00
Yuval Tassa
643dc5bf4f
Update USD schema formatting
...
PiperOrigin-RevId: 800018484
Change-Id: I7677cd099415af1271c7475d80a660653199b984
2025-08-27 07:02:50 -07:00
Yuval Tassa
7443e685ac
Allow contact sensor subtree1/subtree2 to be any body.
...
PiperOrigin-RevId: 799632590
Change-Id: If9cd6c5a3a5f83d89ae024a8f64232ab1f1d603a
2025-08-26 11:00:39 -07:00
Yuval Tassa
ec94bb49aa
Make constraint island discovery on by default.
...
Also fix latent bug in mjData serialization.
PiperOrigin-RevId: 799505349
Change-Id: I299e7cc8133fa2ec0b339a7ff3d02543e06778b1
2025-08-26 04:27:24 -07:00
Yuval Tassa
a230aa60c5
Improve mj_addM and associated test
...
- Updated docs to clarify that only the lower triangle is touched
- The function was unnecessarily adding the upper triangle in the sparse case
- The test used an unnecessarily large model and stepping it leading to timeouts under ASAN
PiperOrigin-RevId: 798528736
Change-Id: I592cc17dfb62379bb0cd6b332a8eb7e8b0ef6355
2025-08-23 03:56:47 -07:00
Sam Haves
1fb1810b07
Add ability to specify a material assignment to a mesh asset.
...
This extends both the spec and the XML definition to allow specification of a material name on a mesh. This material acts as a fallback in the case that the referencing geom element does not specify a material of it's own.
PiperOrigin-RevId: 798232378
Change-Id: Iaf300c727732744ea1b613e64334ee505ac6e209
2025-08-22 09:11:31 -07:00
Haroon Qureshi
debbd7c916
Fix cast; should be mjtGeom not mjtMouse.
...
PiperOrigin-RevId: 798177495
Change-Id: I5d95446dd7f7f84052b60cb378acdd856c1e4d50
2025-08-22 05:47:49 -07:00
Yuval Tassa
2f28473bc1
Remove transposed Jacobian fields from mjData
...
No longer computed unconditionally, only ad-hoc where required.
PiperOrigin-RevId: 797753297
Change-Id: I2030fc342c98ff33575b0526dd72e2110c4fcb74
2025-08-21 07:21:24 -07:00
Yuval Tassa
5fe4224ae7
Compute sparse Jacobian transpose inside solver.
...
PiperOrigin-RevId: 797745776
Change-Id: I2ec429120d0c6eb51bec340619ab178389482e69
2025-08-21 06:55:48 -07:00
Yuval Tassa
174a50442d
Allow transposing of sparse sub-matrices whose first row is > 0
...
PiperOrigin-RevId: 797728559
Change-Id: I3c825118dae198333d357d2e4f248d00b0f5d8ce
2025-08-21 05:56:33 -07:00
Yuval Tassa
c7a82c32dc
Do not update qacc_warmstart at the end of the solver call; instead, update it at the same time as all other state variables. This change makes mj_forward idempotent.
...
See changelog herein for motivation and discussion.
PiperOrigin-RevId: 797392841
Change-Id: If50e9f09e1d07e8363169d3589c32097aeca2432
2025-08-20 11:30:13 -07:00
Sam Haves
4bad134ba2
Add proper handling of MJCF asset/mesh/texturedir compiler attributes to USD plugin.
...
This allows the MJCF SdfFileFormat plugin to load MJCF files that specify assetdir, meshdir, or texturedir attributes. This is specifically important for resolver implementations that fetch assets into a local cache.
PiperOrigin-RevId: 796509754
Change-Id: Ib2b0c9cf9d6a3351ceea49d90c882edf94d0b880
2025-08-18 11:38:32 -07:00
Yuval Tassa
424226b640
Refactor mj_mulM to use CSR structure
...
PiperOrigin-RevId: 796450207
Change-Id: I2a9d567732614674547c7ae02ff0d3d4bbf1b654
2025-08-18 09:09:29 -07:00
Alessio Quaglino
c2ff60e630
Decrease time step in shell examples.
...
Also add bending damping.
PiperOrigin-RevId: 796446515
Change-Id: I4744003caf6146e5e00614a6016d1a6dfc42cca7
2025-08-18 09:00:10 -07:00
Yuval Tassa
7c10a62f21
Improve island visualization colors and logic.
...
- Make island visualization off by default
- Give it the keyboard shortcut 'N'
- Use HSV island coloring
PiperOrigin-RevId: 796375514
Change-Id: I3cc8d6f8142412c771b2b8e57e82e70000727770
2025-08-18 05:03:41 -07:00
Alessio Quaglino
b66175eba6
Bending stiffness for curved shells in flex.
...
PiperOrigin-RevId: 796361841
Change-Id: I105ea235fe2a8e1bcbde67276d77fa92eed214a1
2025-08-18 04:13:18 -07:00
Yuval Tassa
6b41fbe72a
Use CSR matrices for dof-dof index mappings
...
PiperOrigin-RevId: 795895311
Change-Id: I1000e0ee98906ef35990e73236e85d6354487b82
2025-08-16 13:06:32 -07:00
Yuval Tassa
c0096b51a4
Move ntree to mjModel allocator sizes
...
PiperOrigin-RevId: 795855203
Change-Id: Idab185294d53dced9ebf073b782969dc5643b95a
2025-08-16 09:16:41 -07:00
Yuval Tassa
1447711037
Rename spec to sig in state-related API functions.
...
(to avoid confusion with mjSpec)
PiperOrigin-RevId: 795848898
Change-Id: I0b64eb85f5c7a3ee889a746c751d9f5561650277
2025-08-16 08:38:25 -07:00
Yuval Tassa
bbb70d98a4
Add utility functions for mapping between sparse matrix patterns.
...
PiperOrigin-RevId: 795543910
Change-Id: I92be3afc3cd90020027737fffdba18c45e25f825
2025-08-15 11:22:35 -07:00
Google DeepMind
931036adda
Always try to find the skybox texture, even if there are no materials in the MJCF. Fixes #2412
...
Before the fix this only occured if the MJCF contained 0 materials.
PiperOrigin-RevId: 795510952
Change-Id: I0a36c275e6006f80dc9a5ba6b9c6040ce21187c9
2025-08-15 09:53:37 -07:00
Yuval Tassa
b566ef2883
Ignore geoms with tiny mass in inertiafromgeom computation. Fixes #2754
...
PiperOrigin-RevId: 795475978
Change-Id: I02b5db9e2ac7ec556cb0a0ec6dbe4214ba9128d7
2025-08-15 07:57:02 -07:00
Yuval Tassa
977f94e9df
Delete sparsity structures from mjData, use the ones in mjModel
...
PiperOrigin-RevId: 795067950
Change-Id: If4f52e40ac49f7c6986b33ef9c8b534199dfd21a
2025-08-14 09:13:02 -07:00
Yuval Tassa
7eb13777f8
Put sparsity structures in mjModel, don't use them yet.
...
PiperOrigin-RevId: 795032051
Change-Id: I75c69e881980ff9c308acf00bb3a65f4b2ef12f5
2025-08-14 07:37:42 -07:00
Yuval Tassa
f077fd00a9
Compute sparse matrix sizes before making the mjModel in the compiler.
...
PiperOrigin-RevId: 794998215
Change-Id: Ib7d0a2479b18cc8b3168c0656d3c4be0eff43a0f
2025-08-14 05:51:17 -07:00
Alessio Quaglino
dcdf0a9c5c
Use mj_rayMesh for computing an inexact SDF for mesh-SDF collisions.
...
PiperOrigin-RevId: 794576123
Change-Id: I3c688056a5ed617a0787ccf1f4aa683f9409040f
2025-08-13 07:50:06 -07:00
Yuval Tassa
84ba12e7b3
Clean up and standardize mj_printFormattedData
...
PiperOrigin-RevId: 793087071
Change-Id: I99d45ccf6591af02ee26e7f800bfbcc872336eb1
2025-08-09 14:03:13 -07:00
Alessio Quaglino
ca4ca173ab
Fix oct_distance return value.
...
PiperOrigin-RevId: 792924045
Change-Id: I42b8d0adaae7282d5c4e787fd1c85162720e977b
2025-08-09 00:33:38 -07:00
Rishi Krishnan
ed3ff15870
Update MuJoCo's version number following the 3.3.5 release.
...
PiperOrigin-RevId: 792806341
Change-Id: Ic68ecceacc48ddbd6b0c741ae8f0791551e1b4dd
2025-08-08 16:45:12 -07:00
Kyle Bayes
50fa598d93
Update x_norm in tetrahedron case in GJK.
...
This check is never called due to the fallback to gjkIntersection, however it's needed for debugging when disabling the fallback.
PiperOrigin-RevId: 792623394
Change-Id: I7178d9afae697bd22984688e89fd1865d3c6a37f
2025-08-08 07:52:00 -07:00
Yuval Tassa
19781b60a1
Fix a gcc-related compilation error.
...
PiperOrigin-RevId: 792592986
Change-Id: I6bd49d3c739a58f9b611fe24594bd3f11e757c5b
2025-08-08 06:00:17 -07:00
Yuval Tassa
8b5213c557
Cleanup: extract local functions in compiler for setting datatype and needstage
...
PiperOrigin-RevId: 792566070
Change-Id: I22d397758f5e8b35899c9461543989e352bd2b96
2025-08-08 04:11:14 -07:00
Yuval Tassa
3c6e4f1ece
Clean up engine_core_smooth.c
...
PiperOrigin-RevId: 792564094
Change-Id: I47b3f1953db5402acc49dac373a039c9c0bf1ad9
2025-08-08 04:05:13 -07:00
Alessio Quaglino
eb1da7c43d
Compute the interpolation coefficients per vertex rather than per node.
...
PiperOrigin-RevId: 792124681
Change-Id: Ib0e18d0b59f09c7e3bdb2ef9940a9b7327b92cd3
2025-08-07 06:03:11 -07:00
Alessio Quaglino
781242ae95
Avoid duplicated vertices in the SDF octree.
...
Before: nnode: 42777, nvert: 342216
After: nnode: 42777, nvert: 77588
PiperOrigin-RevId: 792115571
Change-Id: I17913ed3d22f22a0370dc4cbd2b833a0f5983cda
2025-08-07 05:27:01 -07:00
Alessio Quaglino
840108cf7c
Refactor octree in preparation for continuous interpolation.
...
PiperOrigin-RevId: 792092644
Change-Id: I096ca0989210a00ae0b4556498d96212755d23c7
2025-08-07 04:06:03 -07:00
Alessio Quaglino
132f90b17f
Validate mjs_setFrame dest parameter and raise an error if null.
...
PiperOrigin-RevId: 791742890
Change-Id: I926e6dfb08aa66fac2816b805e156074c37dce99
2025-08-06 10:19:01 -07:00
Alessio Quaglino
49f45a93c8
Guard against division by zero when calculating pressure in tactile sensor.
...
PiperOrigin-RevId: 791641958
Change-Id: I457bc7f55c0b03e14b9c3944935866ede14f1d51
2025-08-06 05:07:12 -07:00