修改控制按钮;增加enter以确认当前轨迹;增加backspace以丢弃当前轨迹。
Some checks are pending
Secret Leaks / trufflehog (push) Waiting to run

This commit is contained in:
2025-05-07 21:05:28 +08:00
parent 5bf422ca6f
commit ac85a0d17e
2 changed files with 33 additions and 8 deletions

View File

@@ -121,36 +121,39 @@ def init_keyboard_listener():
events["exit_early"] = False
events["rerecord_episode"] = False
events["stop_recording"] = False
events["confirm_save"] = False
events["discard_episode"] = False
if is_headless():
logging.warning(
"Headless environment detected. On-screen cameras display and keyboard inputs will not be available."
)
listener = None
return listener, events
# Only import pynput if not in a headless environment
from pynput import keyboard
def on_press(key):
try:
if key == keyboard.Key.right:
print("Right arrow key pressed. Exiting loop...")
print("Right arrow key pressed. Exiting current recording...")
events["exit_early"] = True
elif key == keyboard.Key.left:
print("Left arrow key pressed. Exiting loop and rerecord the last episode...")
print("Left arrow key pressed. Interrupting and preparing to rerecord...")
events["rerecord_episode"] = True
events["exit_early"] = True
elif key == keyboard.Key.esc:
print("Escape key pressed. Stopping data recording...")
print("Escape key pressed. Stopping data recording session...")
events["stop_recording"] = True
events["exit_early"] = True
elif key == keyboard.Key.enter:
print("Enter key pressed. Confirming and saving current episode...")
events["confirm_save"] = True
elif key == keyboard.Key.backspace:
print("Back key pressed. Discarding completed episode...")
events["discard_episode"] = True
except Exception as e:
print(f"Error handling key press: {e}")
listener = keyboard.Listener(on_press=on_press)
listener.start()
return listener, events

View File

@@ -291,6 +291,28 @@ def record(
single_task=cfg.single_task,
)
# 录制完成后等待用户确认是否保存
if not events["stop_recording"] and not events["rerecord_episode"]:
log_say("Episode recorded. Press Enter to save, Backspace to discard, Esc to end session", cfg.play_sounds)
print("Confirmation controls: Enter to save, Backspace to discard, Esc to end recording session")
# 等待用户确认是否保存该段录制
waiting_for_confirmation = True
events["confirm_save"] = False
events["discard_episode"] = False
while waiting_for_confirmation and not events["stop_recording"]:
time.sleep(0.1)
if events["confirm_save"]:
log_say("Saving episode", cfg.play_sounds)
waiting_for_confirmation = False
elif events["discard_episode"]:
log_say("Discarding episode", cfg.play_sounds)
events["rerecord_episode"] = True
waiting_for_confirmation = False
elif events["stop_recording"]:
waiting_for_confirmation = False
# Execute a few seconds without recording to give time to manually reset the environment
# Current code logic doesn't allow to teleoperate during this time.
# TODO(rcadene): add an option to enable teleoperation during reset