From e1f5534b5fd2073731496031cbd41cfc98e77e6a Mon Sep 17 00:00:00 2001 From: Taylor Howell Date: Wed, 13 May 2026 08:11:04 -0700 Subject: [PATCH] Fix tactile sensor body validation. PiperOrigin-RevId: 914870657 Change-Id: I57565b4975e0cd7eb1b1ffa199e451a5c5bc0a6e --- src/engine/engine_io.c | 3 +-- test/engine/engine_sensor_test.cc | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/engine/engine_io.c b/src/engine/engine_io.c index 77dd0063..5626baee 100644 --- a/src/engine/engine_io.c +++ b/src/engine/engine_io.c @@ -2072,8 +2072,7 @@ const char* mj_validateReferences(const mjModel* m) { return "Invalid model: invalid sensor_refid"; } if (sensor_type == mjSENS_TACTILE) { - int obj_id = m->sensor_objid[i]; - int parent_body = m->geom_bodyid[obj_id]; + int parent_body = m->geom_bodyid[m->sensor_refid[i]]; int collision_geoms = 0; for (int b = 0; b < m->body_geomnum[parent_body]; ++b) { int geom_id = m->body_geomadr[parent_body]+b; diff --git a/test/engine/engine_sensor_test.cc b/test/engine/engine_sensor_test.cc index 01aced2e..1474c856 100644 --- a/test/engine/engine_sensor_test.cc +++ b/test/engine/engine_sensor_test.cc @@ -1784,5 +1784,34 @@ TEST_F(SensorTest, InsideSiteFlexBody) { mj_deleteModel(m); } +// Test that a tactile sensor's compile-time body-collision check correctly +// uses the referenced Geom ID instead of mistakenly indexing by Mesh ID. +TEST_F(SensorTest, TactileMeshIdMismatchedValidator) { + static constexpr char xml[] = R"( + + + + + + + + + + + + + + + + + )"; + + char error[1024] = {0}; + mjModel* m = LoadModelFromString(xml, error, sizeof(error)); + ASSERT_THAT(m, NotNull()) << error; + + mj_deleteModel(m); +} + } // namespace } // namespace mujoco