From a771fc6c0950d22da280d86f87b73efd9deb0bd1 Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Tue, 29 Jul 2025 08:37:08 -0700 Subject: [PATCH] Increase mjNSENS to 3 PiperOrigin-RevId: 788468705 Change-Id: Id22f131bebb6accc9a29c9aa285efa75fa8b2c16 --- doc/APIreference/APIglobals.rst | 2 +- include/mujoco/mjmodel.h | 2 +- mjx/mujoco/mjx/_src/sensor.py | 2 +- python/mujoco/introspect/structs.py | 2 +- python/mujoco/specs_test.py | 10 +++++----- test/engine/engine_sensor_test.cc | 4 +++- unity/Runtime/Bindings/MjBindings.cs | 2 +- 7 files changed, 13 insertions(+), 11 deletions(-) diff --git a/doc/APIreference/APIglobals.rst b/doc/APIreference/APIglobals.rst index b5dab753..ad97759a 100644 --- a/doc/APIreference/APIglobals.rst +++ b/doc/APIreference/APIglobals.rst @@ -445,7 +445,7 @@ shown in the table below. Their names are in the format ``mjKEY_XXX``. They corr - The maximal number of real-valued parameters used to define the impedance of each scalar constraint. Determines the size of all ``mjModel.XXX_solimp`` fields. * - ``mjNSENS`` - - 2 + - 3 - The number of sensor parameters. Determines the size of ``mjModel.sensor_intprm``. * - ``mjNSOLVER`` diff --git a/include/mujoco/mjmodel.h b/include/mujoco/mjmodel.h index 36d2ba22..335b91f4 100644 --- a/include/mujoco/mjmodel.h +++ b/include/mujoco/mjmodel.h @@ -41,7 +41,7 @@ #define mjNFLUID 12 // number of fluid interaction parameters #define mjNREF 2 // number of solver reference parameters #define mjNIMP 5 // number of solver impedance parameters -#define mjNSENS 2 // number of sensor parameters +#define mjNSENS 3 // number of sensor parameters #define mjNSOLVER 200 // size of one mjData.solver array #define mjNISLAND 20 // number of mjData.solver arrays diff --git a/mjx/mujoco/mjx/_src/sensor.py b/mjx/mujoco/mjx/_src/sensor.py index 6ea327f3..ad16d2ef 100644 --- a/mjx/mujoco/mjx/_src/sensor.py +++ b/mjx/mujoco/mjx/_src/sensor.py @@ -567,7 +567,7 @@ def sensor_acc(m: Model, d: Data) -> Data: size += size_i return size - dataspecs, reduces = m.sensor_intprm[idx].T + dataspecs, reduces, _ = m.sensor_intprm[idx].T dims = m.sensor_dim[idx] objtypes = m.sensor_objtype[idx] refid = m.sensor_refid[idx] diff --git a/python/mujoco/introspect/structs.py b/python/mujoco/introspect/structs.py index 6b53781a..dce810e8 100644 --- a/python/mujoco/introspect/structs.py +++ b/python/mujoco/introspect/structs.py @@ -10408,7 +10408,7 @@ STRUCTS: Mapping[str, StructDecl] = dict([ name='intprm', type=ArrayType( inner_type=ValueType(name='int'), - extents=(2,), + extents=(3,), ), doc='integer parameters', ), diff --git a/python/mujoco/specs_test.py b/python/mujoco/specs_test.py index f5076063..bf8acb93 100644 --- a/python/mujoco/specs_test.py +++ b/python/mujoco/specs_test.py @@ -1338,7 +1338,7 @@ class SpecsTest(absltest.TestCase): objtype=mujoco.mjtObj.mjOBJ_GEOM, objname='sphere1', dim=1, - intprm=[0, 0], + intprm=[0, 0, 0], ), ), dict( @@ -1351,7 +1351,7 @@ class SpecsTest(absltest.TestCase): objtype=mujoco.mjtObj.mjOBJ_GEOM, objname='sphere1', dim=1, - intprm=[1 << 10, 0], + intprm=[1 << 10, 0, 0], ), ), dict( @@ -1364,7 +1364,7 @@ class SpecsTest(absltest.TestCase): objtype=mujoco.mjtObj.mjOBJ_GEOM, objname='sphere1', dim=1, - intprm=[(1 << 10) | 1, 0], + intprm=[(1 << 10) | 1, 0, 0], ), ), dict( @@ -1376,7 +1376,7 @@ class SpecsTest(absltest.TestCase): objtype=mujoco.mjtObj.mjOBJ_GEOM, objname='sphere1', dim=2, - intprm=[2, 0], # force (size 3) + intprm=[2, 0, 0], # force (size 3) ), ), dict( @@ -1386,7 +1386,7 @@ class SpecsTest(absltest.TestCase): objtype=mujoco.mjtObj.mjOBJ_GEOM, objname='sphere1', dim=1, - intprm=[1, 4], + intprm=[1, 4, 0], ), ), dict( diff --git a/test/engine/engine_sensor_test.cc b/test/engine/engine_sensor_test.cc index fdb5282d..ac2c5db8 100644 --- a/test/engine/engine_sensor_test.cc +++ b/test/engine/engine_sensor_test.cc @@ -574,7 +574,7 @@ TEST_F(SensorTest, IntPrm) { )"; - ASSERT_EQ(mjNSENS, 2); + ASSERT_EQ(mjNSENS, 3); char err[1024]; mjSpec* spec = mj_parseXMLString(xml, 0, err, sizeof(err)); @@ -588,9 +588,11 @@ TEST_F(SensorTest, IntPrm) { mjsSensor* s = mjs_asSensor(mjs_findElement(spec, mjOBJ_SENSOR, "dummy")); s->intprm[0] = 3; s->intprm[1] = 4; + s->intprm[2] = 5; model = mj_compile(spec, nullptr); EXPECT_EQ(model->sensor_intprm[0], 3); EXPECT_EQ(model->sensor_intprm[1], 4); + EXPECT_EQ(model->sensor_intprm[2], 5); mj_deleteModel(model); mj_deleteSpec(spec); } diff --git a/unity/Runtime/Bindings/MjBindings.cs b/unity/Runtime/Bindings/MjBindings.cs index 5f05a0b8..c2c8f65b 100644 --- a/unity/Runtime/Bindings/MjBindings.cs +++ b/unity/Runtime/Bindings/MjBindings.cs @@ -49,7 +49,7 @@ public const int mjNBIAS = 10; public const int mjNFLUID = 12; public const int mjNREF = 2; public const int mjNIMP = 5; -public const int mjNSENS = 2; +public const int mjNSENS = 3; public const int mjNSOLVER = 200; public const int mjNISLAND = 20; public const bool THIRD_PARTY_MUJOCO_INCLUDE_MJPLUGIN_H_ = true;