
# 键盘控制概述
请在本地**hw_r2c_sdk-*x.x.x*/r2c_sdk_python/config** 文件夹找到机器人配置文件**robot_*{不同的机器人}*_config.yaml**，比如robot_flexiv_config.yaml，机器人配置中包含键盘控制。
**键盘控制** 通过stdin轮询实现机器人控制，仅在**终端窗口有键盘焦点**时响应按键，支持Linux（X11/Wayland/TTY）、macOS、Windows。
#### 架构组件
表1架构组件 
| 模块                    | 职责                               |
|:---|:---|
| KeyboardController    | stdin轮询 + 命令分派                   |
| KeyboardCommandMapper | 按键 与命令名映射（支持merge + 大小写fallback） |
| SyncRobotClient       | 注入pause/stop回调                   |
   
#### 核心特性
- **焦点感知**：仅终端有焦点时响应，全局无干扰
- **零依赖**：纯Python stdlib（sys.stdin + select/msvcrt）
- **跨平台**：Linux（X11/Wayland/TTY）、macOS、Windows统一
- **安全门控**：命令可选择"暂停态才执行"，防止运动中误触
- **大小写不敏感**：按j或J都匹配
 
#### 平台兼容性
表2平台兼容性 
| 平台            | 终端                                  | 实现                                   | 终端恢复 |
|:---|:---|:---|:---|
| Linux X11     | GNOME Terminal / Konsole            | os.read(fd) + select + tty.setcbreak | √    |
| Linux Wayland | 同上                                  | 同上                                   | √    |
| Linux TTY     | 纯终端                                 | 同上                                   | √    |
| macOS         | Terminal.app / iTerm2               | 同上                                   | √    |
| Windows       | cmd / PowerShell / Windows Terminal | msvcrt.kbhit() + getwch()            | 无需   |
   
