Rename CalibrationMode -> MotorNormMode

This commit is contained in:
Simon Alibert
2025-03-25 17:42:18 +01:00
parent faa476f0d2
commit 1f1a01a798
12 changed files with 66 additions and 66 deletions

View File

@@ -1 +1 @@
from .motors_bus import CalibrationMode, Motor, MotorsBus from .motors_bus import Motor, MotorNormMode, MotorsBus

View File

@@ -17,7 +17,7 @@
import numpy as np import numpy as np
from ..motors_bus import CalibrationMode, MotorsBus from ..motors_bus import MotorNormMode, MotorsBus
from .dynamixel import TorqueMode from .dynamixel import TorqueMode
from .tables import MODEL_RESOLUTION from .tables import MODEL_RESOLUTION
@@ -133,13 +133,13 @@ def run_arm_calibration(arm: MotorsBus, robot_type: str, arm_name: str, arm_type
print() print()
# Joints with rotational motions are expressed in degrees in nominal range of [-180, 180] # 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? # TODO(rcadene): make type of joints (DEGREE or LINEAR) configurable from yaml?
if robot_type in ["aloha"] and "gripper" in arm.names: 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] # Joints with linear motions (like gripper of Aloha) are expressed in nominal range of [0, 100]
calib_idx = arm.names.index("gripper") calib_idx = arm.names.index("gripper")
calib_mode[calib_idx] = CalibrationMode.LINEAR.name calib_mode[calib_idx] = MotorNormMode.LINEAR.name
calib_data = { calib_data = {
"homing_offset": homing_offset.tolist(), "homing_offset": homing_offset.tolist(),

View File

@@ -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 DEGREE = 0
RANGE_0_100 = 1 RANGE_0_100 = 1
RANGE_M100_100 = 2 RANGE_M100_100 = 2
@@ -87,7 +87,7 @@ class CalibrationMode(Enum):
class Motor: class Motor:
id: int id: int
model: str model: str
calibration: CalibrationMode norm_mode: MotorNormMode
class JointOutOfRangeError(Exception): class JointOutOfRangeError(Exception):

View File

@@ -22,7 +22,7 @@ from typing import Any
from lerobot.common.cameras.utils import make_cameras_from_configs from lerobot.common.cameras.utils import make_cameras_from_configs
from lerobot.common.constants import OBS_IMAGES, OBS_STATE from lerobot.common.constants import OBS_IMAGES, OBS_STATE
from lerobot.common.errors import DeviceAlreadyConnectedError, DeviceNotConnectedError 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 ( from lerobot.common.motors.dynamixel import (
DynamixelMotorsBus, DynamixelMotorsBus,
OperatingMode, OperatingMode,
@@ -53,12 +53,12 @@ class KochRobot(Robot):
self.arm = DynamixelMotorsBus( self.arm = DynamixelMotorsBus(
port=self.config.port, port=self.config.port,
motors={ motors={
"shoulder_pan": Motor(1, "xl430-w250", CalibrationMode.RANGE_M100_100), "shoulder_pan": Motor(1, "xl430-w250", MotorNormMode.RANGE_M100_100),
"shoulder_lift": Motor(2, "xl430-w250", CalibrationMode.RANGE_M100_100), "shoulder_lift": Motor(2, "xl430-w250", MotorNormMode.RANGE_M100_100),
"elbow_flex": Motor(3, "xl330-m288", CalibrationMode.RANGE_M100_100), "elbow_flex": Motor(3, "xl330-m288", MotorNormMode.RANGE_M100_100),
"wrist_flex": Motor(4, "xl330-m288", CalibrationMode.RANGE_M100_100), "wrist_flex": Motor(4, "xl330-m288", MotorNormMode.RANGE_M100_100),
"wrist_roll": Motor(5, "xl330-m288", CalibrationMode.RANGE_M100_100), "wrist_roll": Motor(5, "xl330-m288", MotorNormMode.RANGE_M100_100),
"gripper": Motor(6, "xl330-m288", CalibrationMode.RANGE_0_100), "gripper": Motor(6, "xl330-m288", MotorNormMode.RANGE_0_100),
}, },
) )
self.cameras = make_cameras_from_configs(config.cameras) self.cameras = make_cameras_from_configs(config.cameras)

View File

@@ -23,7 +23,7 @@ import numpy as np
from lerobot.common.cameras.utils import make_cameras_from_configs from lerobot.common.cameras.utils import make_cameras_from_configs
from lerobot.common.constants import OBS_IMAGES, OBS_STATE from lerobot.common.constants import OBS_IMAGES, OBS_STATE
from lerobot.common.errors import DeviceAlreadyConnectedError, DeviceNotConnectedError 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.calibration import find_min_max, find_offset, set_calibration
from lerobot.common.motors.feetech import ( from lerobot.common.motors.feetech import (
FeetechMotorsBus, FeetechMotorsBus,
@@ -53,12 +53,12 @@ class SO100Robot(Robot):
self.arm = FeetechMotorsBus( self.arm = FeetechMotorsBus(
port=self.config.port, port=self.config.port,
motors={ motors={
"shoulder_pan": Motor(1, "sts3215", CalibrationMode.RANGE_M100_100), "shoulder_pan": Motor(1, "sts3215", MotorNormMode.RANGE_M100_100),
"shoulder_lift": Motor(2, "sts3215", CalibrationMode.RANGE_M100_100), "shoulder_lift": Motor(2, "sts3215", MotorNormMode.RANGE_M100_100),
"elbow_flex": Motor(3, "sts3215", CalibrationMode.RANGE_M100_100), "elbow_flex": Motor(3, "sts3215", MotorNormMode.RANGE_M100_100),
"wrist_flex": Motor(4, "sts3215", CalibrationMode.RANGE_M100_100), "wrist_flex": Motor(4, "sts3215", MotorNormMode.RANGE_M100_100),
"wrist_roll": Motor(5, "sts3215", CalibrationMode.RANGE_M100_100), "wrist_roll": Motor(5, "sts3215", MotorNormMode.RANGE_M100_100),
"gripper": Motor(6, "sts3215", CalibrationMode.RANGE_0_100), "gripper": Motor(6, "sts3215", MotorNormMode.RANGE_0_100),
}, },
) )
self.cameras = make_cameras_from_configs(config.cameras) self.cameras = make_cameras_from_configs(config.cameras)

View File

@@ -13,7 +13,7 @@ import numpy as np
from lerobot.common.cameras.utils import make_cameras_from_configs from lerobot.common.cameras.utils import make_cameras_from_configs
from lerobot.common.constants import OBS_IMAGES, OBS_STATE from lerobot.common.constants import OBS_IMAGES, OBS_STATE
from lerobot.common.errors import DeviceAlreadyConnectedError, DeviceNotConnectedError 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 ( from lerobot.common.motors.dynamixel import (
DynamixelMotorsBus, DynamixelMotorsBus,
run_arm_calibration, run_arm_calibration,
@@ -43,15 +43,15 @@ class ViperXRobot(Robot):
self.arm = DynamixelMotorsBus( self.arm = DynamixelMotorsBus(
port=self.config.port, port=self.config.port,
motors={ motors={
"waist": Motor(1, "xm540-w270", CalibrationMode.RANGE_M100_100), "waist": Motor(1, "xm540-w270", MotorNormMode.RANGE_M100_100),
"shoulder": Motor(2, "xm540-w270", CalibrationMode.RANGE_M100_100), "shoulder": Motor(2, "xm540-w270", MotorNormMode.RANGE_M100_100),
"shoulder_shadow": Motor(3, "xm540-w270", CalibrationMode.RANGE_M100_100), "shoulder_shadow": Motor(3, "xm540-w270", MotorNormMode.RANGE_M100_100),
"elbow": Motor(4, "xm540-w270", CalibrationMode.RANGE_M100_100), "elbow": Motor(4, "xm540-w270", MotorNormMode.RANGE_M100_100),
"elbow_shadow": Motor(5, "xm540-w270", CalibrationMode.RANGE_M100_100), "elbow_shadow": Motor(5, "xm540-w270", MotorNormMode.RANGE_M100_100),
"forearm_roll": Motor(6, "xm540-w270", CalibrationMode.RANGE_M100_100), "forearm_roll": Motor(6, "xm540-w270", MotorNormMode.RANGE_M100_100),
"wrist_angle": Motor(7, "xm540-w270", CalibrationMode.RANGE_M100_100), "wrist_angle": Motor(7, "xm540-w270", MotorNormMode.RANGE_M100_100),
"wrist_rotate": Motor(8, "xm430-w350", CalibrationMode.RANGE_M100_100), "wrist_rotate": Motor(8, "xm430-w350", MotorNormMode.RANGE_M100_100),
"gripper": Motor(9, "xm430-w350", CalibrationMode.RANGE_0_100), "gripper": Motor(9, "xm430-w350", MotorNormMode.RANGE_0_100),
}, },
) )
self.cameras = make_cameras_from_configs(config.cameras) self.cameras = make_cameras_from_configs(config.cameras)

View File

@@ -21,7 +21,7 @@ import time
import numpy as np import numpy as np
from lerobot.common.errors import DeviceAlreadyConnectedError, DeviceNotConnectedError 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 ( from lerobot.common.motors.dynamixel import (
DynamixelMotorsBus, DynamixelMotorsBus,
OperatingMode, OperatingMode,
@@ -51,12 +51,12 @@ class KochTeleop(Teleoperator):
self.arm = DynamixelMotorsBus( self.arm = DynamixelMotorsBus(
port=self.config.port, port=self.config.port,
motors={ motors={
"shoulder_pan": Motor(1, "xl330-m077", CalibrationMode.RANGE_M100_100), "shoulder_pan": Motor(1, "xl330-m077", MotorNormMode.RANGE_M100_100),
"shoulder_lift": Motor(2, "xl330-m077", CalibrationMode.RANGE_M100_100), "shoulder_lift": Motor(2, "xl330-m077", MotorNormMode.RANGE_M100_100),
"elbow_flex": Motor(3, "xl330-m077", CalibrationMode.RANGE_M100_100), "elbow_flex": Motor(3, "xl330-m077", MotorNormMode.RANGE_M100_100),
"wrist_flex": Motor(4, "xl330-m077", CalibrationMode.RANGE_M100_100), "wrist_flex": Motor(4, "xl330-m077", MotorNormMode.RANGE_M100_100),
"wrist_roll": Motor(5, "xl330-m077", CalibrationMode.RANGE_M100_100), "wrist_roll": Motor(5, "xl330-m077", MotorNormMode.RANGE_M100_100),
"gripper": Motor(6, "xl330-m077", CalibrationMode.RANGE_0_100), "gripper": Motor(6, "xl330-m077", MotorNormMode.RANGE_0_100),
}, },
) )

View File

@@ -21,7 +21,7 @@ import time
import numpy as np import numpy as np
from lerobot.common.errors import DeviceAlreadyConnectedError, DeviceNotConnectedError 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.calibration import find_min_max, find_offset, set_calibration
from lerobot.common.motors.feetech import ( from lerobot.common.motors.feetech import (
FeetechMotorsBus, FeetechMotorsBus,
@@ -48,12 +48,12 @@ class SO100Teleop(Teleoperator):
self.arm = FeetechMotorsBus( self.arm = FeetechMotorsBus(
port=self.config.port, port=self.config.port,
motors={ motors={
"shoulder_pan": Motor(1, "sts3215", CalibrationMode.RANGE_M100_100), "shoulder_pan": Motor(1, "sts3215", MotorNormMode.RANGE_M100_100),
"shoulder_lift": Motor(2, "sts3215", CalibrationMode.RANGE_M100_100), "shoulder_lift": Motor(2, "sts3215", MotorNormMode.RANGE_M100_100),
"elbow_flex": Motor(3, "sts3215", CalibrationMode.RANGE_M100_100), "elbow_flex": Motor(3, "sts3215", MotorNormMode.RANGE_M100_100),
"wrist_flex": Motor(4, "sts3215", CalibrationMode.RANGE_M100_100), "wrist_flex": Motor(4, "sts3215", MotorNormMode.RANGE_M100_100),
"wrist_roll": Motor(5, "sts3215", CalibrationMode.RANGE_M100_100), "wrist_roll": Motor(5, "sts3215", MotorNormMode.RANGE_M100_100),
"gripper": Motor(6, "sts3215", CalibrationMode.RANGE_0_100), "gripper": Motor(6, "sts3215", MotorNormMode.RANGE_0_100),
}, },
) )

View File

@@ -21,7 +21,7 @@ import time
import numpy as np import numpy as np
from lerobot.common.errors import DeviceAlreadyConnectedError, DeviceNotConnectedError 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 ( from lerobot.common.motors.dynamixel import (
DynamixelMotorsBus, DynamixelMotorsBus,
run_arm_calibration, run_arm_calibration,
@@ -47,15 +47,15 @@ class WidowXTeleop(Teleoperator):
self.arm = DynamixelMotorsBus( self.arm = DynamixelMotorsBus(
port=self.config.port, port=self.config.port,
motors={ motors={
"waist": Motor(1, "xm430-w350", CalibrationMode.RANGE_M100_100), "waist": Motor(1, "xm430-w350", MotorNormMode.RANGE_M100_100),
"shoulder": Motor(2, "xm430-w350", CalibrationMode.RANGE_M100_100), "shoulder": Motor(2, "xm430-w350", MotorNormMode.RANGE_M100_100),
"shoulder_shadow": Motor(3, "xm430-w350", CalibrationMode.RANGE_M100_100), "shoulder_shadow": Motor(3, "xm430-w350", MotorNormMode.RANGE_M100_100),
"elbow": Motor(4, "xm430-w350", CalibrationMode.RANGE_M100_100), "elbow": Motor(4, "xm430-w350", MotorNormMode.RANGE_M100_100),
"elbow_shadow": Motor(5, "xm430-w350", CalibrationMode.RANGE_M100_100), "elbow_shadow": Motor(5, "xm430-w350", MotorNormMode.RANGE_M100_100),
"forearm_roll": Motor(6, "xm430-w350", CalibrationMode.RANGE_M100_100), "forearm_roll": Motor(6, "xm430-w350", MotorNormMode.RANGE_M100_100),
"wrist_angle": Motor(7, "xm430-w350", CalibrationMode.RANGE_M100_100), "wrist_angle": Motor(7, "xm430-w350", MotorNormMode.RANGE_M100_100),
"wrist_rotate": Motor(8, "xl430-w250", CalibrationMode.RANGE_M100_100), "wrist_rotate": Motor(8, "xl430-w250", MotorNormMode.RANGE_M100_100),
"gripper": Motor(9, "xc430-w150", CalibrationMode.RANGE_0_100), "gripper": Motor(9, "xc430-w150", MotorNormMode.RANGE_0_100),
}, },
) )

View File

@@ -5,7 +5,7 @@ from unittest.mock import Mock, call, patch
import pytest import pytest
import scservo_sdk as scs 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.calibration import find_min_max, find_offset, set_min_max, set_offset
from lerobot.common.motors.feetech import FeetechMotorsBus from lerobot.common.motors.feetech import FeetechMotorsBus
from tests.mocks.mock_feetech import MockMotors, MockPortHandler from tests.mocks.mock_feetech import MockMotors, MockPortHandler
@@ -31,9 +31,9 @@ def mock_motors() -> Generator[MockMotors, None, None]:
@pytest.fixture @pytest.fixture
def dummy_motors() -> dict[str, Motor]: def dummy_motors() -> dict[str, Motor]:
return { return {
"dummy_1": Motor(1, "sts3215", CalibrationMode.RANGE_M100_100), "dummy_1": Motor(1, "sts3215", MotorNormMode.RANGE_M100_100),
"wrist_roll": Motor(2, "sts3215", CalibrationMode.RANGE_M100_100), "wrist_roll": Motor(2, "sts3215", MotorNormMode.RANGE_M100_100),
"dummy_3": Motor(3, "sts3215", CalibrationMode.RANGE_M100_100), "dummy_3": Motor(3, "sts3215", MotorNormMode.RANGE_M100_100),
} }

View File

@@ -5,7 +5,7 @@ from unittest.mock import patch
import dynamixel_sdk as dxl import dynamixel_sdk as dxl
import pytest 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 lerobot.common.motors.dynamixel import MODEL_NUMBER, DynamixelMotorsBus
from tests.mocks.mock_dynamixel import MockMotors, MockPortHandler from tests.mocks.mock_dynamixel import MockMotors, MockPortHandler
@@ -30,9 +30,9 @@ def mock_motors() -> Generator[MockMotors, None, None]:
@pytest.fixture @pytest.fixture
def dummy_motors() -> dict[str, Motor]: def dummy_motors() -> dict[str, Motor]:
return { return {
"dummy_1": Motor(1, "xl430-w250", CalibrationMode.RANGE_M100_100), "dummy_1": Motor(1, "xl430-w250", MotorNormMode.RANGE_M100_100),
"dummy_2": Motor(2, "xm540-w270", CalibrationMode.RANGE_M100_100), "dummy_2": Motor(2, "xm540-w270", MotorNormMode.RANGE_M100_100),
"dummy_3": Motor(3, "xl330-m077", CalibrationMode.RANGE_M100_100), "dummy_3": Motor(3, "xl330-m077", MotorNormMode.RANGE_M100_100),
} }

View File

@@ -5,7 +5,7 @@ from unittest.mock import patch
import pytest import pytest
import scservo_sdk as scs 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 lerobot.common.motors.feetech import MODEL_NUMBER, FeetechMotorsBus
from tests.mocks.mock_feetech import MockMotors, MockPortHandler from tests.mocks.mock_feetech import MockMotors, MockPortHandler
@@ -30,9 +30,9 @@ def mock_motors() -> Generator[MockMotors, None, None]:
@pytest.fixture @pytest.fixture
def dummy_motors() -> dict[str, Motor]: def dummy_motors() -> dict[str, Motor]:
return { return {
"dummy_1": Motor(1, "sts3215", CalibrationMode.RANGE_M100_100), "dummy_1": Motor(1, "sts3215", MotorNormMode.RANGE_M100_100),
"dummy_2": Motor(2, "sts3215", CalibrationMode.RANGE_M100_100), "dummy_2": Motor(2, "sts3215", MotorNormMode.RANGE_M100_100),
"dummy_3": Motor(3, "sts3215", CalibrationMode.RANGE_M100_100), "dummy_3": Motor(3, "sts3215", MotorNormMode.RANGE_M100_100),
} }