diff --git a/python/mujoco/specs.cc b/python/mujoco/specs.cc index 9589229d..047002f9 100644 --- a/python/mujoco/specs.cc +++ b/python/mujoco/specs.cc @@ -344,6 +344,12 @@ PYBIND11_MODULE(_specs, m) { return mjs_findFrame(self.ptr, name.c_str()); }, py::return_value_policy::reference_internal); + mjSpec.def( + "find_site", + [](MjSpec& self, std::string& name) -> raw::MjsSite* { + return mjs_asSite(mjs_findElement(self.ptr, mjOBJ_SITE, name.c_str())); + }, + py::return_value_policy::reference_internal); mjSpec.def( "find_default", [](MjSpec& self, std::string& classname) -> const raw::MjsDefault* { diff --git a/python/mujoco/specs_test.py b/python/mujoco/specs_test.py index afbcc576..a7133e77 100644 --- a/python/mujoco/specs_test.py +++ b/python/mujoco/specs_test.py @@ -723,6 +723,7 @@ class SpecsTest(absltest.TestCase): self.assertIsNotNone(head) site = head.first_site() self.assertIsNotNone(site) + self.assertEqual(site, spec.find_site('head')) site.delete() spec.sensors[-1].delete()