From 1ff8986c77db7570059e92a27bc7a72b2f080b03 Mon Sep 17 00:00:00 2001 From: Francesco Capuano <74058581+fracapuano@users.noreply.github.com> Date: Sat, 18 Oct 2025 12:06:43 +0200 Subject: [PATCH] fix: add MockMotorBus to MockRobot (#2081) --- tests/mocks/mock_robot.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/tests/mocks/mock_robot.py b/tests/mocks/mock_robot.py index 027ee45ed..b0513fd38 100644 --- a/tests/mocks/mock_robot.py +++ b/tests/mocks/mock_robot.py @@ -20,8 +20,10 @@ from functools import cached_property from typing import Any from lerobot.cameras import CameraConfig, make_cameras_from_configs +from lerobot.motors.motors_bus import Motor, MotorNormMode from lerobot.robots import Robot, RobotConfig from lerobot.utils.errors import DeviceAlreadyConnectedError, DeviceNotConnectedError +from tests.mocks.mock_motors_bus import MockMotorsBus @RobotConfig.register_subclass("mock_robot") @@ -58,9 +60,22 @@ class MockRobot(Robot): self.config = config self._is_connected = False self._is_calibrated = config.calibrated - self.motors = [f"motor_{i + 1}" for i in range(config.n_motors)] self.cameras = make_cameras_from_configs(config.cameras) + mock_motors = {} + for i in range(config.n_motors): + motor_name = f"motor_{i + 1}" + mock_motors[motor_name] = Motor( + id=i + 1, + model="model_1", # Use model_1 which exists in MockMotorsBus tables + norm_mode=MotorNormMode.RANGE_M100_100, + ) + + self.bus = MockMotorsBus("/dev/dummy-port", mock_motors) + + # NOTE(fracapuano): The .motors attribute was used from the previous interface + self.motors = [f"motor_{i + 1}" for i in range(config.n_motors)] + @property def _motors_ft(self) -> dict[str, type]: return {f"{motor}.pos": float for motor in self.motors}