From 4457c978b23136c16558bec183bec468e2897d30 Mon Sep 17 00:00:00 2001 From: AdilZouitine Date: Fri, 3 Oct 2025 16:51:22 +0200 Subject: [PATCH] Enhance keyboard teleoperation to capture both character and special keys. Clear current pressed keys in `KeyboardEndEffectorTeleop` for improved state management. --- .../teleoperators/keyboard/teleop_keyboard.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/lerobot/teleoperators/keyboard/teleop_keyboard.py b/src/lerobot/teleoperators/keyboard/teleop_keyboard.py index 6f53a17c7..54779ac8f 100644 --- a/src/lerobot/teleoperators/keyboard/teleop_keyboard.py +++ b/src/lerobot/teleoperators/keyboard/teleop_keyboard.py @@ -102,12 +102,21 @@ class KeyboardTeleop(Teleoperator): pass def _on_press(self, key): + # Capture both character keys and special keys (arrows, shift, ctrl, etc.) if hasattr(key, "char"): self.event_queue.put((key.char, True)) + else: + # Capture special keys directly (keyboard.Key enum values) + self.event_queue.put((key, True)) def _on_release(self, key): + # Capture both character keys and special keys if hasattr(key, "char"): self.event_queue.put((key.char, False)) + else: + # Capture special keys directly (keyboard.Key enum values) + self.event_queue.put((key, False)) + if key == keyboard.Key.esc: logging.info("ESC pressed, disconnecting.") self.disconnect() @@ -214,8 +223,6 @@ class KeyboardEndEffectorTeleop(KeyboardTeleop): # this is useful for retrieving other events like interventions for RL, episode success, etc. self.misc_keys_queue.put(key) - self.current_pressed.clear() - action_dict = { "delta_x": delta_x, "delta_y": delta_y, @@ -283,6 +290,8 @@ class KeyboardEndEffectorTeleop(KeyboardTeleop): terminate_episode = True success = False + self.current_pressed.clear() + return { TeleopEvents.IS_INTERVENTION: is_intervention, TeleopEvents.TERMINATE_EPISODE: terminate_episode,