From 11a0b0174f7890f76b6ca67cfc24948e8f35cd32 Mon Sep 17 00:00:00 2001 From: Khalil Meftah Date: Mon, 13 Apr 2026 12:31:00 +0200 Subject: [PATCH] fix(teleop): keyboard EE teleop not registering special keys and losing intervention state Fixes #2345 Co-authored-by: jpizarrom --- src/lerobot/teleoperators/keyboard/teleop_keyboard.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/lerobot/teleoperators/keyboard/teleop_keyboard.py b/src/lerobot/teleoperators/keyboard/teleop_keyboard.py index 090aa7fae..45b5cf48a 100644 --- a/src/lerobot/teleoperators/keyboard/teleop_keyboard.py +++ b/src/lerobot/teleoperators/keyboard/teleop_keyboard.py @@ -104,11 +104,14 @@ class KeyboardTeleop(Teleoperator): def _on_press(self, key): if hasattr(key, "char"): - self.event_queue.put((key.char, True)) + key = key.char + self.event_queue.put((key, True)) def _on_release(self, key): if hasattr(key, "char"): - self.event_queue.put((key.char, False)) + key = key.char + self.event_queue.put((key, False)) + if key == keyboard.Key.esc: logging.info("ESC pressed, disconnecting.") self.disconnect() @@ -204,8 +207,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, @@ -256,6 +257,8 @@ class KeyboardEndEffectorTeleop(KeyboardTeleop): ] is_intervention = any(self.current_pressed.get(key, False) for key in movement_keys) + self.current_pressed.clear() + # Check for episode control commands from misc_keys_queue terminate_episode = False success = False