From 1f1a01a798f052deb0aaa0fa3364a766f9464008 Mon Sep 17 00:00:00 2001 From: Simon Alibert Date: Tue, 25 Mar 2025 17:42:18 +0100 Subject: [PATCH] Rename CalibrationMode -> MotorNormMode --- lerobot/common/motors/__init__.py | 2 +- .../motors/dynamixel/dynamixel_calibration.py | 6 +++--- lerobot/common/motors/motors_bus.py | 4 ++-- lerobot/common/robots/koch/robot_koch.py | 14 ++++++------- lerobot/common/robots/so100/robot_so100.py | 14 ++++++------- lerobot/common/robots/viperx/robot_viperx.py | 20 +++++++++---------- .../common/teleoperators/koch/teleop_koch.py | 14 ++++++------- .../teleoperators/so100/teleop_so100.py | 14 ++++++------- .../teleoperators/widowx/teleop_widowx.py | 20 +++++++++---------- tests/motors/test_calibration.py | 8 ++++---- tests/motors/test_dynamixel.py | 8 ++++---- tests/motors/test_feetech.py | 8 ++++---- 12 files changed, 66 insertions(+), 66 deletions(-) diff --git a/lerobot/common/motors/__init__.py b/lerobot/common/motors/__init__.py index 75904fa8..852317ea 100644 --- a/lerobot/common/motors/__init__.py +++ b/lerobot/common/motors/__init__.py @@ -1 +1 @@ -from .motors_bus import CalibrationMode, Motor, MotorsBus +from .motors_bus import Motor, MotorNormMode, MotorsBus diff --git a/lerobot/common/motors/dynamixel/dynamixel_calibration.py b/lerobot/common/motors/dynamixel/dynamixel_calibration.py index d959aee5..94151af2 100644 --- a/lerobot/common/motors/dynamixel/dynamixel_calibration.py +++ b/lerobot/common/motors/dynamixel/dynamixel_calibration.py @@ -17,7 +17,7 @@ import numpy as np -from ..motors_bus import CalibrationMode, MotorsBus +from ..motors_bus import MotorNormMode, MotorsBus from .dynamixel import TorqueMode from .tables import MODEL_RESOLUTION @@ -133,13 +133,13 @@ def run_arm_calibration(arm: MotorsBus, robot_type: str, arm_name: str, arm_type print() # Joints with rotational motions are expressed in degrees in nominal range of [-180, 180] - calib_mode = [CalibrationMode.DEGREE.name] * len(arm.names) + calib_mode = [MotorNormMode.DEGREE.name] * len(arm.names) # TODO(rcadene): make type of joints (DEGREE or LINEAR) configurable from yaml? if robot_type in ["aloha"] and "gripper" in arm.names: # Joints with linear motions (like gripper of Aloha) are expressed in nominal range of [0, 100] calib_idx = arm.names.index("gripper") - calib_mode[calib_idx] = CalibrationMode.LINEAR.name + calib_mode[calib_idx] = MotorNormMode.LINEAR.name calib_data = { "homing_offset": homing_offset.tolist(), diff --git a/lerobot/common/motors/motors_bus.py b/lerobot/common/motors/motors_bus.py index 57c49b7d..1d9e1af1 100644 --- a/lerobot/common/motors/motors_bus.py +++ b/lerobot/common/motors/motors_bus.py @@ -76,7 +76,7 @@ def assert_same_address(model_ctrl_table: dict[str, dict], motor_models: list[st ) -class CalibrationMode(Enum): +class MotorNormMode(Enum): DEGREE = 0 RANGE_0_100 = 1 RANGE_M100_100 = 2 @@ -87,7 +87,7 @@ class CalibrationMode(Enum): class Motor: id: int model: str - calibration: CalibrationMode + norm_mode: MotorNormMode class JointOutOfRangeError(Exception): diff --git a/lerobot/common/robots/koch/robot_koch.py b/lerobot/common/robots/koch/robot_koch.py index fa1ee284..06e21b1c 100644 --- a/lerobot/common/robots/koch/robot_koch.py +++ b/lerobot/common/robots/koch/robot_koch.py @@ -22,7 +22,7 @@ from typing import Any from lerobot.common.cameras.utils import make_cameras_from_configs from lerobot.common.constants import OBS_IMAGES, OBS_STATE from lerobot.common.errors import DeviceAlreadyConnectedError, DeviceNotConnectedError -from lerobot.common.motors import CalibrationMode, Motor +from lerobot.common.motors import Motor, MotorNormMode from lerobot.common.motors.dynamixel import ( DynamixelMotorsBus, OperatingMode, @@ -53,12 +53,12 @@ class KochRobot(Robot): self.arm = DynamixelMotorsBus( port=self.config.port, motors={ - "shoulder_pan": Motor(1, "xl430-w250", CalibrationMode.RANGE_M100_100), - "shoulder_lift": Motor(2, "xl430-w250", CalibrationMode.RANGE_M100_100), - "elbow_flex": Motor(3, "xl330-m288", CalibrationMode.RANGE_M100_100), - "wrist_flex": Motor(4, "xl330-m288", CalibrationMode.RANGE_M100_100), - "wrist_roll": Motor(5, "xl330-m288", CalibrationMode.RANGE_M100_100), - "gripper": Motor(6, "xl330-m288", CalibrationMode.RANGE_0_100), + "shoulder_pan": Motor(1, "xl430-w250", MotorNormMode.RANGE_M100_100), + "shoulder_lift": Motor(2, "xl430-w250", MotorNormMode.RANGE_M100_100), + "elbow_flex": Motor(3, "xl330-m288", MotorNormMode.RANGE_M100_100), + "wrist_flex": Motor(4, "xl330-m288", MotorNormMode.RANGE_M100_100), + "wrist_roll": Motor(5, "xl330-m288", MotorNormMode.RANGE_M100_100), + "gripper": Motor(6, "xl330-m288", MotorNormMode.RANGE_0_100), }, ) self.cameras = make_cameras_from_configs(config.cameras) diff --git a/lerobot/common/robots/so100/robot_so100.py b/lerobot/common/robots/so100/robot_so100.py index f05d7bef..00432d4b 100644 --- a/lerobot/common/robots/so100/robot_so100.py +++ b/lerobot/common/robots/so100/robot_so100.py @@ -23,7 +23,7 @@ import numpy as np from lerobot.common.cameras.utils import make_cameras_from_configs from lerobot.common.constants import OBS_IMAGES, OBS_STATE from lerobot.common.errors import DeviceAlreadyConnectedError, DeviceNotConnectedError -from lerobot.common.motors import CalibrationMode, Motor +from lerobot.common.motors import Motor, MotorNormMode from lerobot.common.motors.calibration import find_min_max, find_offset, set_calibration from lerobot.common.motors.feetech import ( FeetechMotorsBus, @@ -53,12 +53,12 @@ class SO100Robot(Robot): self.arm = FeetechMotorsBus( port=self.config.port, motors={ - "shoulder_pan": Motor(1, "sts3215", CalibrationMode.RANGE_M100_100), - "shoulder_lift": Motor(2, "sts3215", CalibrationMode.RANGE_M100_100), - "elbow_flex": Motor(3, "sts3215", CalibrationMode.RANGE_M100_100), - "wrist_flex": Motor(4, "sts3215", CalibrationMode.RANGE_M100_100), - "wrist_roll": Motor(5, "sts3215", CalibrationMode.RANGE_M100_100), - "gripper": Motor(6, "sts3215", CalibrationMode.RANGE_0_100), + "shoulder_pan": Motor(1, "sts3215", MotorNormMode.RANGE_M100_100), + "shoulder_lift": Motor(2, "sts3215", MotorNormMode.RANGE_M100_100), + "elbow_flex": Motor(3, "sts3215", MotorNormMode.RANGE_M100_100), + "wrist_flex": Motor(4, "sts3215", MotorNormMode.RANGE_M100_100), + "wrist_roll": Motor(5, "sts3215", MotorNormMode.RANGE_M100_100), + "gripper": Motor(6, "sts3215", MotorNormMode.RANGE_0_100), }, ) self.cameras = make_cameras_from_configs(config.cameras) diff --git a/lerobot/common/robots/viperx/robot_viperx.py b/lerobot/common/robots/viperx/robot_viperx.py index e4b20094..5471a312 100644 --- a/lerobot/common/robots/viperx/robot_viperx.py +++ b/lerobot/common/robots/viperx/robot_viperx.py @@ -13,7 +13,7 @@ import numpy as np from lerobot.common.cameras.utils import make_cameras_from_configs from lerobot.common.constants import OBS_IMAGES, OBS_STATE from lerobot.common.errors import DeviceAlreadyConnectedError, DeviceNotConnectedError -from lerobot.common.motors import CalibrationMode, Motor, TorqueMode +from lerobot.common.motors import Motor, MotorNormMode, TorqueMode from lerobot.common.motors.dynamixel import ( DynamixelMotorsBus, run_arm_calibration, @@ -43,15 +43,15 @@ class ViperXRobot(Robot): self.arm = DynamixelMotorsBus( port=self.config.port, motors={ - "waist": Motor(1, "xm540-w270", CalibrationMode.RANGE_M100_100), - "shoulder": Motor(2, "xm540-w270", CalibrationMode.RANGE_M100_100), - "shoulder_shadow": Motor(3, "xm540-w270", CalibrationMode.RANGE_M100_100), - "elbow": Motor(4, "xm540-w270", CalibrationMode.RANGE_M100_100), - "elbow_shadow": Motor(5, "xm540-w270", CalibrationMode.RANGE_M100_100), - "forearm_roll": Motor(6, "xm540-w270", CalibrationMode.RANGE_M100_100), - "wrist_angle": Motor(7, "xm540-w270", CalibrationMode.RANGE_M100_100), - "wrist_rotate": Motor(8, "xm430-w350", CalibrationMode.RANGE_M100_100), - "gripper": Motor(9, "xm430-w350", CalibrationMode.RANGE_0_100), + "waist": Motor(1, "xm540-w270", MotorNormMode.RANGE_M100_100), + "shoulder": Motor(2, "xm540-w270", MotorNormMode.RANGE_M100_100), + "shoulder_shadow": Motor(3, "xm540-w270", MotorNormMode.RANGE_M100_100), + "elbow": Motor(4, "xm540-w270", MotorNormMode.RANGE_M100_100), + "elbow_shadow": Motor(5, "xm540-w270", MotorNormMode.RANGE_M100_100), + "forearm_roll": Motor(6, "xm540-w270", MotorNormMode.RANGE_M100_100), + "wrist_angle": Motor(7, "xm540-w270", MotorNormMode.RANGE_M100_100), + "wrist_rotate": Motor(8, "xm430-w350", MotorNormMode.RANGE_M100_100), + "gripper": Motor(9, "xm430-w350", MotorNormMode.RANGE_0_100), }, ) self.cameras = make_cameras_from_configs(config.cameras) diff --git a/lerobot/common/teleoperators/koch/teleop_koch.py b/lerobot/common/teleoperators/koch/teleop_koch.py index 3d2bf54e..1b1506bd 100644 --- a/lerobot/common/teleoperators/koch/teleop_koch.py +++ b/lerobot/common/teleoperators/koch/teleop_koch.py @@ -21,7 +21,7 @@ import time import numpy as np from lerobot.common.errors import DeviceAlreadyConnectedError, DeviceNotConnectedError -from lerobot.common.motors import CalibrationMode, Motor +from lerobot.common.motors import Motor, MotorNormMode from lerobot.common.motors.dynamixel import ( DynamixelMotorsBus, OperatingMode, @@ -51,12 +51,12 @@ class KochTeleop(Teleoperator): self.arm = DynamixelMotorsBus( port=self.config.port, motors={ - "shoulder_pan": Motor(1, "xl330-m077", CalibrationMode.RANGE_M100_100), - "shoulder_lift": Motor(2, "xl330-m077", CalibrationMode.RANGE_M100_100), - "elbow_flex": Motor(3, "xl330-m077", CalibrationMode.RANGE_M100_100), - "wrist_flex": Motor(4, "xl330-m077", CalibrationMode.RANGE_M100_100), - "wrist_roll": Motor(5, "xl330-m077", CalibrationMode.RANGE_M100_100), - "gripper": Motor(6, "xl330-m077", CalibrationMode.RANGE_0_100), + "shoulder_pan": Motor(1, "xl330-m077", MotorNormMode.RANGE_M100_100), + "shoulder_lift": Motor(2, "xl330-m077", MotorNormMode.RANGE_M100_100), + "elbow_flex": Motor(3, "xl330-m077", MotorNormMode.RANGE_M100_100), + "wrist_flex": Motor(4, "xl330-m077", MotorNormMode.RANGE_M100_100), + "wrist_roll": Motor(5, "xl330-m077", MotorNormMode.RANGE_M100_100), + "gripper": Motor(6, "xl330-m077", MotorNormMode.RANGE_0_100), }, ) diff --git a/lerobot/common/teleoperators/so100/teleop_so100.py b/lerobot/common/teleoperators/so100/teleop_so100.py index 89524165..2190321c 100644 --- a/lerobot/common/teleoperators/so100/teleop_so100.py +++ b/lerobot/common/teleoperators/so100/teleop_so100.py @@ -21,7 +21,7 @@ import time import numpy as np from lerobot.common.errors import DeviceAlreadyConnectedError, DeviceNotConnectedError -from lerobot.common.motors import CalibrationMode, Motor +from lerobot.common.motors import Motor, MotorNormMode from lerobot.common.motors.calibration import find_min_max, find_offset, set_calibration from lerobot.common.motors.feetech import ( FeetechMotorsBus, @@ -48,12 +48,12 @@ class SO100Teleop(Teleoperator): self.arm = FeetechMotorsBus( port=self.config.port, motors={ - "shoulder_pan": Motor(1, "sts3215", CalibrationMode.RANGE_M100_100), - "shoulder_lift": Motor(2, "sts3215", CalibrationMode.RANGE_M100_100), - "elbow_flex": Motor(3, "sts3215", CalibrationMode.RANGE_M100_100), - "wrist_flex": Motor(4, "sts3215", CalibrationMode.RANGE_M100_100), - "wrist_roll": Motor(5, "sts3215", CalibrationMode.RANGE_M100_100), - "gripper": Motor(6, "sts3215", CalibrationMode.RANGE_0_100), + "shoulder_pan": Motor(1, "sts3215", MotorNormMode.RANGE_M100_100), + "shoulder_lift": Motor(2, "sts3215", MotorNormMode.RANGE_M100_100), + "elbow_flex": Motor(3, "sts3215", MotorNormMode.RANGE_M100_100), + "wrist_flex": Motor(4, "sts3215", MotorNormMode.RANGE_M100_100), + "wrist_roll": Motor(5, "sts3215", MotorNormMode.RANGE_M100_100), + "gripper": Motor(6, "sts3215", MotorNormMode.RANGE_0_100), }, ) diff --git a/lerobot/common/teleoperators/widowx/teleop_widowx.py b/lerobot/common/teleoperators/widowx/teleop_widowx.py index 702f8d44..c1aca4a9 100644 --- a/lerobot/common/teleoperators/widowx/teleop_widowx.py +++ b/lerobot/common/teleoperators/widowx/teleop_widowx.py @@ -21,7 +21,7 @@ import time import numpy as np from lerobot.common.errors import DeviceAlreadyConnectedError, DeviceNotConnectedError -from lerobot.common.motors import CalibrationMode, Motor, TorqueMode +from lerobot.common.motors import Motor, MotorNormMode, TorqueMode from lerobot.common.motors.dynamixel import ( DynamixelMotorsBus, run_arm_calibration, @@ -47,15 +47,15 @@ class WidowXTeleop(Teleoperator): self.arm = DynamixelMotorsBus( port=self.config.port, motors={ - "waist": Motor(1, "xm430-w350", CalibrationMode.RANGE_M100_100), - "shoulder": Motor(2, "xm430-w350", CalibrationMode.RANGE_M100_100), - "shoulder_shadow": Motor(3, "xm430-w350", CalibrationMode.RANGE_M100_100), - "elbow": Motor(4, "xm430-w350", CalibrationMode.RANGE_M100_100), - "elbow_shadow": Motor(5, "xm430-w350", CalibrationMode.RANGE_M100_100), - "forearm_roll": Motor(6, "xm430-w350", CalibrationMode.RANGE_M100_100), - "wrist_angle": Motor(7, "xm430-w350", CalibrationMode.RANGE_M100_100), - "wrist_rotate": Motor(8, "xl430-w250", CalibrationMode.RANGE_M100_100), - "gripper": Motor(9, "xc430-w150", CalibrationMode.RANGE_0_100), + "waist": Motor(1, "xm430-w350", MotorNormMode.RANGE_M100_100), + "shoulder": Motor(2, "xm430-w350", MotorNormMode.RANGE_M100_100), + "shoulder_shadow": Motor(3, "xm430-w350", MotorNormMode.RANGE_M100_100), + "elbow": Motor(4, "xm430-w350", MotorNormMode.RANGE_M100_100), + "elbow_shadow": Motor(5, "xm430-w350", MotorNormMode.RANGE_M100_100), + "forearm_roll": Motor(6, "xm430-w350", MotorNormMode.RANGE_M100_100), + "wrist_angle": Motor(7, "xm430-w350", MotorNormMode.RANGE_M100_100), + "wrist_rotate": Motor(8, "xl430-w250", MotorNormMode.RANGE_M100_100), + "gripper": Motor(9, "xc430-w150", MotorNormMode.RANGE_0_100), }, ) diff --git a/tests/motors/test_calibration.py b/tests/motors/test_calibration.py index 011174db..2ea66e96 100644 --- a/tests/motors/test_calibration.py +++ b/tests/motors/test_calibration.py @@ -5,7 +5,7 @@ from unittest.mock import Mock, call, patch import pytest import scservo_sdk as scs -from lerobot.common.motors import CalibrationMode, Motor +from lerobot.common.motors import Motor, MotorNormMode from lerobot.common.motors.calibration import find_min_max, find_offset, set_min_max, set_offset from lerobot.common.motors.feetech import FeetechMotorsBus from tests.mocks.mock_feetech import MockMotors, MockPortHandler @@ -31,9 +31,9 @@ def mock_motors() -> Generator[MockMotors, None, None]: @pytest.fixture def dummy_motors() -> dict[str, Motor]: return { - "dummy_1": Motor(1, "sts3215", CalibrationMode.RANGE_M100_100), - "wrist_roll": Motor(2, "sts3215", CalibrationMode.RANGE_M100_100), - "dummy_3": Motor(3, "sts3215", CalibrationMode.RANGE_M100_100), + "dummy_1": Motor(1, "sts3215", MotorNormMode.RANGE_M100_100), + "wrist_roll": Motor(2, "sts3215", MotorNormMode.RANGE_M100_100), + "dummy_3": Motor(3, "sts3215", MotorNormMode.RANGE_M100_100), } diff --git a/tests/motors/test_dynamixel.py b/tests/motors/test_dynamixel.py index 80f853d6..4f3165e7 100644 --- a/tests/motors/test_dynamixel.py +++ b/tests/motors/test_dynamixel.py @@ -5,7 +5,7 @@ from unittest.mock import patch import dynamixel_sdk as dxl import pytest -from lerobot.common.motors import CalibrationMode, Motor +from lerobot.common.motors import Motor, MotorNormMode from lerobot.common.motors.dynamixel import MODEL_NUMBER, DynamixelMotorsBus from tests.mocks.mock_dynamixel import MockMotors, MockPortHandler @@ -30,9 +30,9 @@ def mock_motors() -> Generator[MockMotors, None, None]: @pytest.fixture def dummy_motors() -> dict[str, Motor]: return { - "dummy_1": Motor(1, "xl430-w250", CalibrationMode.RANGE_M100_100), - "dummy_2": Motor(2, "xm540-w270", CalibrationMode.RANGE_M100_100), - "dummy_3": Motor(3, "xl330-m077", CalibrationMode.RANGE_M100_100), + "dummy_1": Motor(1, "xl430-w250", MotorNormMode.RANGE_M100_100), + "dummy_2": Motor(2, "xm540-w270", MotorNormMode.RANGE_M100_100), + "dummy_3": Motor(3, "xl330-m077", MotorNormMode.RANGE_M100_100), } diff --git a/tests/motors/test_feetech.py b/tests/motors/test_feetech.py index f65813c3..fcc73780 100644 --- a/tests/motors/test_feetech.py +++ b/tests/motors/test_feetech.py @@ -5,7 +5,7 @@ from unittest.mock import patch import pytest import scservo_sdk as scs -from lerobot.common.motors import CalibrationMode, Motor +from lerobot.common.motors import Motor, MotorNormMode from lerobot.common.motors.feetech import MODEL_NUMBER, FeetechMotorsBus from tests.mocks.mock_feetech import MockMotors, MockPortHandler @@ -30,9 +30,9 @@ def mock_motors() -> Generator[MockMotors, None, None]: @pytest.fixture def dummy_motors() -> dict[str, Motor]: return { - "dummy_1": Motor(1, "sts3215", CalibrationMode.RANGE_M100_100), - "dummy_2": Motor(2, "sts3215", CalibrationMode.RANGE_M100_100), - "dummy_3": Motor(3, "sts3215", CalibrationMode.RANGE_M100_100), + "dummy_1": Motor(1, "sts3215", MotorNormMode.RANGE_M100_100), + "dummy_2": Motor(2, "sts3215", MotorNormMode.RANGE_M100_100), + "dummy_3": Motor(3, "sts3215", MotorNormMode.RANGE_M100_100), }