Handle ctrl special case explicitly in bind().

PiperOrigin-RevId: 714055763
Change-Id: I020008723af4a590926268a2ea615af54e20aa0b
This commit is contained in:
Alessio Quaglino
2025-01-10 08:07:05 -08:00
committed by Copybara-Service
parent 3f32cc2479
commit da32b0db30
2 changed files with 14 additions and 11 deletions
+10 -9
View File
@@ -404,7 +404,7 @@ class BindData(object):
self.prefix = 'cam_' self.prefix = 'cam_'
ids.append(name2id(model, mujoco.mjtObj.mjOBJ_CAMERA, spec.name)) ids.append(name2id(model, mujoco.mjtObj.mjOBJ_CAMERA, spec.name))
case mujoco.MjsTendon(): case mujoco.MjsTendon():
self.prefix = 'tendon_' self.prefix = 'ten_'
ids.append(name2id(model, mujoco.mjtObj.mjOBJ_TENDON, spec.name)) ids.append(name2id(model, mujoco.mjtObj.mjOBJ_TENDON, spec.name))
case mujoco.MjsActuator(): case mujoco.MjsActuator():
self.prefix = 'actuator_' self.prefix = 'actuator_'
@@ -412,6 +412,9 @@ class BindData(object):
case mujoco.MjsSensor(): case mujoco.MjsSensor():
self.prefix = 'sensor_' self.prefix = 'sensor_'
ids.append(name2id(model, mujoco.mjtObj.mjOBJ_SENSOR, spec.name)) ids.append(name2id(model, mujoco.mjtObj.mjOBJ_SENSOR, spec.name))
case mujoco.MjsEquality():
self.prefix = 'eq_'
ids.append(name2id(model, mujoco.mjtObj.mjOBJ_EQUALITY, spec.name))
case _: case _:
raise ValueError('invalid spec type') raise ValueError('invalid spec type')
if len(ids) == 1: if len(ids) == 1:
@@ -420,15 +423,13 @@ class BindData(object):
self.id = ids self.id = ids
def __getname(self, name: str): def __getname(self, name: str):
try: if name == 'ctrl':
getattr(self.data, self.prefix + name) if self.prefix == 'actuator_':
return self.prefix + name
except AttributeError:
try:
getattr(self.data, name)
return name return name
except AttributeError as e: else:
raise ValueError(f'invalid name: {name}') from e raise AttributeError('ctrl is not available for this type')
else:
return self.prefix + name
def __getattr__(self, name: str): def __getattr__(self, name: str):
return getattr(self.data, self.__getname(name))[self.id, ...] return getattr(self.data, self.__getname(name))[self.id, ...]
+4 -2
View File
@@ -238,9 +238,11 @@ class SupportTest(parameterized.TestCase):
np.testing.assert_array_equal(dx.bind(mx, s.actuators).ctrl, [0, 0, 0]) np.testing.assert_array_equal(dx.bind(mx, s.actuators).ctrl, [0, 0, 0])
# test invalid name # test invalid name
with self.assertRaises(ValueError): with self.assertRaises(AttributeError):
print(dx.bind(mx, s.geoms).ctrl)
with self.assertRaises(AttributeError):
print(dx.bind(mx, s.actuators).actuator_ctrl) print(dx.bind(mx, s.actuators).actuator_ctrl)
with self.assertRaises(ValueError): with self.assertRaises(AttributeError):
print(dx.bind(mx, s.actuators).set('actuator_ctrl', [1, 2, 3])) print(dx.bind(mx, s.actuators).set('actuator_ctrl', [1, 2, 3]))
_CONTACTS = """ _CONTACTS = """