
# 命令机制总览
在机器人使用者选定机器人型号后，需要写一份YAML配置，让cloudroboclient启动后键盘按h/空格就能让**机械臂归位**。
请在本地**hw_r2c_sdk-*x.x.x*/r2c_sdk_python/config** 文件夹找到机器人配置文件**robot_*{不同的机器人}*_config.yaml**，比如robot_flexiv_config.yaml，机器人配置中包含命令机制配置。
**命令机制** 配置**commands.go_home**只接受 4个标准键，其余都会被拒绝。
表1支持的标准键 
| 键名         | 类型                                     | 含义                      | 适用适配器                             |
|:---|:---|:---|:---|
| pose_euler | \[x, y, z, roll, pitch, yaw\] 6 floats | 米 + 弧度，TCP目标位姿（欧拉角）     | flexiv（其它适配器报NotImplementedError） |
| pose_quat  | \[x, y, z, qw, qx, qy, qz\] 7 floats   | 米 + 单位四元数，TCP目标位姿       | -                                 |
| joints     | \[j1, j2, ..., jN\] N floats           | 各关节目标角度(弧度)，N = 机器人 DOF | dummy/lerobot/flexiv              |
| gripper    | float或"open" / "close"                 | 夹爪目标宽度（m）或语义动作          | flexiv（其它适配器走no-op）               |
   
**关键约束**
- pose_euler/pose_quat/joints**三选一**，只允许一个存在。配置里同时放多个键，启动时报ValueError。
- 三个运动键**都不填**，不会报错，SDK打印WARNING日志后跳过本次执行（软失败）。
- gripper是可选的，只填夹爪键不动臂是不允许的（软失败），但是**臂 + 夹爪组合**是允许的。
- 调用顺序固定为**先臂后夹爪**：臂没动成功就不会动夹爪（atomic语义，中间态不安全）。
#### 触发方式
按键盘按键进行命令触发，默认情况下，键盘按键触发的命令如[表2]。
 表2按键触发的命令 
| 按键  | 命令            | 说明        | 可重映射？ |
|:---|:---|:---|:---|
| 空格键 | pause_resume  | 暂停/恢复推理循环 | 保留键   |
| h键  | go_home       | 复位（需暂停态）  | 支持    |
| q键  | graceful_stop | 退出进程      | 保留键   |
   
键盘触发条件：在runtime段打开keyboard_control.enabled。
典型配置片段
```
runtime:
  keyboard_control:
    enabled: true   # 空格 触发暂停/恢复，在暂停时按h 触发 go_home
hardware:
  type: dummy
  config:
    commands:
      go_home:      # 命令实例名称 键盘按键映射时的目标
        type: go_home  # 命令类型 go_home 表示复位命令 可定义多个go_home 命令实例，从而支持多个复位点
        joints: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5]
      go_home_ready:      # 命令实例名称 键盘按键映射时的目标
        type: go_home  # 命令类型 go_home 表示复位命令 可定义多个go_home 命令实例，从而支持多个复位点
        joints: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5]
```
