
# runtime配置
请在本地**hw_r2c_sdk-*x.x.x*/r2c_sdk_python/config** 文件夹找到机器人配置文件**robot_*{不同的机器人}*_config.yaml**，比如robot_flexiv_config.yaml。
机器人端配置文件中**runtime配置项**主要分为基础控制项、异步融合、心跳上报、键盘控制这几类。
**runtime配置项** **示例**：
```
runtime:
  publish_hz: 20.0                # 动作运行频率 (Hz)，同时决定观测发布检查频率
  max_duration_s: 0.0             # 最大运行时长 (秒)，0表示持续运行
  dry_run: false                  # 调试模式：只发送观测，不运行动作
  action_response_timeout_s: 5.0  # 等待云端动作响应的超时时间 (秒)
  max_enqueue_actions_per_chunk: -1  # 单次入队的动作数上限，-1表示全部采用
  enable_action_chunk_alignment: false  # 启用chunk对齐
  skip_initial_observations: 1    # 启动后跳过的初始观测数，默认1
  # 心跳上报
  heartbeat:
    enabled: true
    interval_ms: 5000
    jitter_ms: 0
    status: "ONLINE"
    mode: "AUTO"
  # 键盘控制
  keyboard_control:
    enabled: false
```
```
# ── 异步请求融合配置 ─────────────────────────────────────────────
  # 控制是否启用异步请求与轨迹融合。启用后，队列未空即可提前发布新
  # observation（掩盖云端推理延迟），并用融合策略平滑新旧 chunk 衔接。
  async_request:
    enabled: false
    # 队列中剩余 action 数低于此阈值时提前请求新 observation。
    # 0 退化为队列空才发布。
    publish_trigger_threshold: 0
    # 轨迹融合子配置
    fusion:
      # 融合策略: replace (直接替换) / weighted_average (加权平均) / nearest_neighbor (最近邻)
      strategy: weighted_average
      # 融合窗口大小 (用于 weighted_average / nearest_neighbor)
      window_size: 10
      # 类型感知融合 (Type-Aware Fusion)：声明 joint_states.position 中每个元素的物理语义。
      # 可选值: joint_angle / position_xyz / euler / quaternion。
      # 需同时配置 strategy != replace 才能触发融合。
      state_types:
        - joint_angle
        - joint_angle
        - joint_angle
        - joint_angle
        - joint_angle
        - joint_angle
      # state_type_order — 为每个观测字段指定类型优先级排序 (可选)
      # state_type_order:
      #   euler: rpy
      #   quaternion: wxyz
```
#### runtime基础控制项
表1基础控制项参数 
| 参数                        | 类型    | 默认值   | 说明                                                                                                                                                              |
|:---|:---|:---|:---|
| publish_hz                | float | 30    | 控制循环（动作运行）频率。 主循环每tick消费1个队列中的动作并运行，同时检查是否需要发布新观测。 实际观测发布速率取决于云端响应和队列消耗速度，一般为10Hz\~30Hz。 |
| max_duration_s            | float | 0     | 最大运行时长。 **0或负数**表示持续运行，需通过Ctrl+C停止运行。                                                                                         |
| dry_run                   | bool  | false | 该参数为**true**时正常发送观测数据，但不运行推理返回的动作。 适用于调试。                                                                                  |
| action_response_timeout_s | float | 1.0   | 发送观测后等待云端动作的超时时间。 超时后重新发送观测。                                                                                                 |
| skip_initial_observations | int   | 1     | 启动后跳过前N个观测不发布。 首个观测通常包含不完整数据（传感器未就绪），默认跳过1个。                                                                                 |
   
#### 动作序列与异步融合
云端返回的action chunk（动作序列）被拆分为多个action，将action逐个推入运行队列消费。当队列中仍有未消费的旧动作时，新chunk到达会触发融合逻辑，避免关节轨迹跳变。
表2**动作队列与异步融合** 参数 
| 参数                            | 类型   | 默认值     | 说明                                                                                     |
|:---|:---|:---|:---|
| max_enqueue_actions_per_chunk | int  | -1      | 单次入队的动作数上限，超出部分丢弃。 **-1**表示全部采用。                   |
| enable_action_chunk_alignment | bool | false   | 新chunk到达时，先对齐到上次已运行的最后一个动作位置。 适用于chunk之间存在重叠的推理场景。 |
| publish_trigger_threshold     | int  | 0       | 队列中剩余动作数低于此阈值时触发新一轮观测发布。 **0**表示队列清空才发布（不进行异步融合）。 |
| fusion_strategy               | str  | replace | 融合策略，当前仅支持对关节值的融合，末端位姿暂不支持，请参见[表3]。           |
| fusion_window_size            | int  | 10      | 融合窗口大小，仅weighted_average策略使用。                                                          |
   
 表3融合策略 
| 策略               | 说明                            | 适用场景              |
|:---|:---|:---|
| replace          | 直接替换旧队列（默认行为）。                | 低延迟、single-step推理 |
| weighted_average | 新旧动作前W步线性加权平均，逐步过渡。           | chunk推理、要求平滑过渡    |
| nearest_neighbor | 以当前关节状态为锚点，在新chunk中匹配最近点作为起点。 | 关节快速运动、空间对齐       |
   
**动作队列与异步融合的配置建议**
```
# 低延迟模式（single-step 推理，不融合）
runtime:
  publish_trigger_threshold: 0
  fusion_strategy: "replace"
# 平滑过渡模式（chunk 推理，加权融合）
runtime:
  publish_trigger_threshold: 10
  fusion_strategy: "weighted_average"
  fusion_window_size: 10
```
#### 心跳上报
**runtime.heartbeat**参数控制向云端定期发送心跳信号，用于监控设备在线状态。
表4**heartbeat** 参数 
| 参数          | 类型   | 默认值      | 说明                 |
|:---|:---|:---|:---|
| enabled     | bool | false    | 是否启用心跳             |
| interval_ms | int  | 1000     | 心跳间隔               |
| jitter_ms   | int  | 0        | 随机抖动（毫秒），避免多设备同时上报 |
| status      | str  | "ONLINE" | 心跳状态值              |
| mode        | str  | "AUTO"   | 心跳模式               |
   
**心跳上报示例**
```
heartbeat:
  enabled: true
  interval_ms: 5000
  status: "ONLINE"
  mode: "AUTO"
```
#### 键盘控制
**runtime.keyboard_control**参数启用终端键盘快捷键控制机器人。
表5**keyboard_control** 参数 
| 参数      | 类型   | 默认值   | 说明                                                                                                   |
|:---|:---|:---|:---|
| enabled | bool | false | 是否启用键盘控制。 键盘控制默认快捷键如[表6]。 |
   
 表6键盘控制**默认快捷键** 
| 按键     | 功能           |
|:---|:---|
| Space键 | 暂停/恢复。       |
| h键     | 复位（go_home）。 |
| q键     | 停止。          |
   
