Rename CalibrationMode -> MotorNormMode
This commit is contained in:
@@ -1 +1 @@
|
|||||||
from .motors_bus import CalibrationMode, Motor, MotorsBus
|
from .motors_bus import Motor, MotorNormMode, MotorsBus
|
||||||
|
|||||||
@@ -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(),
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -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),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -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),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -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),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user