From 42d11c20c256cbe602c4ba38337b08a534b6e512 Mon Sep 17 00:00:00 2001 From: glannuzel Date: Wed, 27 Aug 2025 11:25:28 +0200 Subject: [PATCH] Rename reachy2_teleoperator --- docs/source/reachy2.mdx | 4 ++-- .../__init__.py | 4 ++-- .../config_reachy2_teleoperator.py} | 4 ++-- .../reachy2_teleoperator.py} | 18 ++++++++++++------ src/lerobot/teleoperators/utils.py | 6 +++--- 5 files changed, 21 insertions(+), 15 deletions(-) rename src/lerobot/teleoperators/{reachy2_fake_teleoperator => reachy2_teleoperator}/__init__.py (82%) rename src/lerobot/teleoperators/{reachy2_fake_teleoperator/config_reachy2_fake_teleoperator.py => reachy2_teleoperator/config_reachy2_teleoperator.py} (88%) rename src/lerobot/teleoperators/{reachy2_fake_teleoperator/reachy2_fake_teleoperator.py => reachy2_teleoperator/reachy2_teleoperator.py} (90%) diff --git a/docs/source/reachy2.mdx b/docs/source/reachy2.mdx index 33219675c..b7979d286 100644 --- a/docs/source/reachy2.mdx +++ b/docs/source/reachy2.mdx @@ -64,7 +64,7 @@ python -m lerobot.record \ --robot.id=r2-0000 \ --robot.use_external_commands=true \ --robot.with_mobile_base=false \ - --teleop.type=reachy2_fake_teleoperator \ + --teleop.type=reachy2_teleoperator \ --teleop.ip_address=192.168.0.200 \ --teleop.with_mobile_base=false \ --dataset.repo_id=pollen_robotics/record_test \ @@ -116,7 +116,7 @@ python -m lerobot.record \ --robot.with_left_teleop_camera=true \ --robot.with_right_teleop_camera=true \ --robot.with_torso_camera=true \ - --teleop.type=reachy2_fake_teleoperator \ + --teleop.type=reachy2_teleoperator \ --teleop.ip_address=192.168.0.200 \ --teleop.with_mobile_base=false \ --teleop.with_l_arm=true \ diff --git a/src/lerobot/teleoperators/reachy2_fake_teleoperator/__init__.py b/src/lerobot/teleoperators/reachy2_teleoperator/__init__.py similarity index 82% rename from src/lerobot/teleoperators/reachy2_fake_teleoperator/__init__.py rename to src/lerobot/teleoperators/reachy2_teleoperator/__init__.py index 96d747a65..2a911e179 100644 --- a/src/lerobot/teleoperators/reachy2_fake_teleoperator/__init__.py +++ b/src/lerobot/teleoperators/reachy2_teleoperator/__init__.py @@ -14,5 +14,5 @@ # See the License for the specific language governing permissions and # limitations under the License. -from .config_reachy2_fake_teleoperator import Reachy2FakeTeleoperatorConfig -from .reachy2_fake_teleoperator import Reachy2FakeTeleoperator +from .config_reachy2_teleoperator import Reachy2TeleoperatorConfig +from .reachy2_teleoperator import Reachy2Teleoperator diff --git a/src/lerobot/teleoperators/reachy2_fake_teleoperator/config_reachy2_fake_teleoperator.py b/src/lerobot/teleoperators/reachy2_teleoperator/config_reachy2_teleoperator.py similarity index 88% rename from src/lerobot/teleoperators/reachy2_fake_teleoperator/config_reachy2_fake_teleoperator.py rename to src/lerobot/teleoperators/reachy2_teleoperator/config_reachy2_teleoperator.py index afc9e6946..5b066a98f 100644 --- a/src/lerobot/teleoperators/reachy2_fake_teleoperator/config_reachy2_fake_teleoperator.py +++ b/src/lerobot/teleoperators/reachy2_teleoperator/config_reachy2_teleoperator.py @@ -19,9 +19,9 @@ from dataclasses import dataclass from ..config import TeleoperatorConfig -@TeleoperatorConfig.register_subclass("reachy2_fake_teleoperator") +@TeleoperatorConfig.register_subclass("reachy2_teleoperator") @dataclass -class Reachy2FakeTeleoperatorConfig(TeleoperatorConfig): +class Reachy2TeleoperatorConfig(TeleoperatorConfig): # Port to connect to the arm ip_address: str | None = "localhost" with_mobile_base: bool = True diff --git a/src/lerobot/teleoperators/reachy2_fake_teleoperator/reachy2_fake_teleoperator.py b/src/lerobot/teleoperators/reachy2_teleoperator/reachy2_teleoperator.py similarity index 90% rename from src/lerobot/teleoperators/reachy2_fake_teleoperator/reachy2_fake_teleoperator.py rename to src/lerobot/teleoperators/reachy2_teleoperator/reachy2_teleoperator.py index 9de428697..0705d601b 100644 --- a/src/lerobot/teleoperators/reachy2_fake_teleoperator/reachy2_fake_teleoperator.py +++ b/src/lerobot/teleoperators/reachy2_teleoperator/reachy2_teleoperator.py @@ -26,7 +26,7 @@ import time from reachy2_sdk import ReachySDK from ..teleoperator import Teleoperator -from .config_reachy2_fake_teleoperator import Reachy2FakeTeleoperatorConfig +from .config_reachy2_teleoperator import Reachy2TeleoperatorConfig logger = logging.getLogger(__name__) @@ -71,15 +71,15 @@ REACHY2_VEL = { } -class Reachy2FakeTeleoperator(Teleoperator): +class Reachy2Teleoperator(Teleoperator): """ [Reachy 2](https://www.pollen-robotics.com/reachy/), by Pollen Robotics. """ - config_class = Reachy2FakeTeleoperatorConfig + config_class = Reachy2TeleoperatorConfig name = "reachy2_specific" - def __init__(self, config: Reachy2FakeTeleoperatorConfig): + def __init__(self, config: Reachy2TeleoperatorConfig): super().__init__(config) self.config = config self.reachy: None | ReachySDK = None @@ -142,12 +142,18 @@ class Reachy2FakeTeleoperator(Teleoperator): start = time.perf_counter() if self.reachy and self.is_connected: - joint_action = {k: self.reachy.joints_dict[v].goal_position for k, v in self.joints_dict.items()} + joint_action = { + k: self.reachy.joints[v].goal_position + for k, v in self.joints_dict.items() + } if not self.config.with_mobile_base: dt_ms = (time.perf_counter() - start) * 1e3 logger.debug(f"{self} read action: {dt_ms:.1f}ms") return joint_action - vel_action = {k: self.reachy.mobile_base.last_cmd_vel[v] for k, v in REACHY2_VEL.items()} + vel_action = { + k: self.reachy.mobile_base.last_cmd_vel[v] + for k, v in REACHY2_VEL.items() + } dt_ms = (time.perf_counter() - start) * 1e3 logger.debug(f"{self} read action: {dt_ms:.1f}ms") return {**joint_action, **vel_action} diff --git a/src/lerobot/teleoperators/utils.py b/src/lerobot/teleoperators/utils.py index 53bd7bb08..02e6fd22c 100644 --- a/src/lerobot/teleoperators/utils.py +++ b/src/lerobot/teleoperators/utils.py @@ -65,9 +65,9 @@ def make_teleoperator_from_config(config: TeleoperatorConfig) -> Teleoperator: from .bi_so100_leader import BiSO100Leader return BiSO100Leader(config) - elif config.type == "reachy2_fake_teleoperator": - from .reachy2_fake_teleoperator import Reachy2FakeTeleoperator + elif config.type == "reachy2_teleoperator": + from .reachy2_teleoperator import Reachy2Teleoperator - return Reachy2FakeTeleoperator(config) + return Reachy2Teleoperator(config) else: raise ValueError(config.type)