# UTTC_MS11 跳过 flyshot jerk 阻断的结论记录

## 背景

2026-05-11 对 `UTTC_MS11` 做了两轮独立 `ConfigRoot` 重新生成与对比：

1. 保持 flyshot 离散校验中的 `vel/acc/jerk` 全部生效。
2. 临时只对 flyshot 链路跳过 `jerk` 阻断，仍保留速度与加速度校验。

两轮都使用当前程序重新生成：

- `POST /set_speedRatio/`
- `POST /save_traj_info/`

并与以下旧抓包侧结果做对比：

- `../Rvbust/uttc-20260428/2026042802-1_joint_segments/segment_02/JointDetialTraj.txt`
- `../Rvbust/uttc-20260428/2026042802-0.5_joint_segments/segment_02/JointDetialTraj.txt`
- `../Rvbust/uttc-20260428/1倍速度 角度坐标点/真实轨迹JointDetialTraj.txt`

## 直接结论

对当前 `UTTC_MS11` 现场样本，flyshot 链路若继续用离散 `jerk` 作为阻断条件，会触发大量时间轴 stretch，使新结果远慢于旧抓包。

当 flyshot 链路只保留速度、加速度校验并跳过 `jerk` 阻断后：

- 新 `1.0x` 实发时长从 `16.576s` 回落到 `7.552s`
- 新 `0.5x` 实发时长从 `33.152s` 回落到 `15.104s`
- 与旧抓包主运动段相比，只剩很小的时长差异，可接受并忽略

因此，当前项目对 `UTTC_MS11` 的实际结论定为：

- flyshot 链路临时不再把离散 `jerk` 作为阻断条件
- 仍保留速度、加速度校验
- `jerk` 诊断文件继续保留，用于分析，不再作为该路径是否可运行的唯一否决条件

## 证据

### 1. 开启 jerk 阻断时的现象

重新生成结果目录：

- `../temp/regen-20260511-110950/`

关键结果：

- `1.0x ActualSendTiming.txt`：`2073` 行，`send_duration=16.576s`
- `0.5x ActualSendTiming.txt`：`4145` 行，`send_duration=33.152s`

对比旧抓包主段：

- 旧 `1.0x`：`7.408109s`
- 旧 `0.5x`：`14.808342s`

可见新结果明显被拉长。

### 2. 触发 stretch 的第一条失败证据

日志文件：

- `../temp/regen-20260511-110950/host.log`

第一条离散失败不是加速度，而是开头窗口的 `Joint1 Jerk`：

- `轨迹 UTTC_MS11 第 3 行 Joint1 Jerk超限`
- `time=0.008000->0.016000s`
- `actual=-1732.421875`
- `limit=91.698044`
- `ratio=18.8927`

后续 `CreateLimitCompliantDenseTrajectory(...)` 按 `1.01` 倍持续拉长时间轴，直到通过离散校验，最终把总时长推到约 `16.57s`。

### 3. 只跳过 flyshot jerk 阻断后的结果

重新生成结果目录：

- `../temp/regen-nojerk-20260511-113258/`

关键结果：

- `1.0x ActualSendTiming.txt`：`945` 行，`send_duration=7.552s`
- `0.5x ActualSendTiming.txt`：`1889` 行，`send_duration=15.104s`

与旧抓包主段对比：

| 项目 | 旧抓包时长 | 新结果时长 | 差值 |
| --- | ---: | ---: | ---: |
| `1.0x` | `7.408109s` | `7.552s` | `0.143891s` |
| `0.5x` | `14.808342s` | `15.104s` | `0.295658s` |

该差异已经很小，当前按“可忽略”处理。

## 轨迹误差变化

在同一套对比脚本口径下：

### 开启 jerk 阻断时

- `JointDetialTraj` 新 vs 旧真实轨迹：全局 RMS 约 `46.664 deg`
- `ActualSendJointTraj 1.0x` 新 vs 旧抓包：全局 RMS 约 `46.665 deg`
- `ActualSendJointTraj 0.5x` 新 vs 旧抓包：全局 RMS 约 `46.667 deg`

### 跳过 flyshot jerk 阻断后

- `JointDetialTraj` 新 vs 旧真实轨迹：全局 RMS 约 `8.411 deg`
- `ActualSendJointTraj 1.0x` 新 vs 旧抓包：全局 RMS 约 `8.412 deg`
- `ActualSendJointTraj 0.5x` 新 vs 旧抓包：全局 RMS 约 `8.412 deg`

说明这次差异收敛主要来自去掉 flyshot jerk 阻断后的 stretch，而不是 `speed_ratio` 链路本身被重新设计。

## 对 jerk 的解释

这次调整不等于“现场 jerk 完全合规”，而是明确区分：

1. `jerk` 仍然继续计算和导出
2. `jerk` 仍然可作为诊断指标
3. 但对当前 `UTTC_MS11` flyshot 现场样本，不再把 `jerk` 作为阻断执行的唯一判据

重新生成后的分析文件仍显示：

- 加速度 ratio 明显在限值内
- `jerk` ratio 依然可能大于 `1`

这与旧抓包整理结果的观察一致：当前现场样本里，“加速度合规但跃度超限”是可接受现象，不能单凭 jerk 超限就否决 flyshot 轨迹。

## 当前代码决策范围

本次代码调整范围刻意收窄为：

- 只对 flyshot 链路关闭 `jerk` 阻断
- 保留 flyshot 的速度、加速度校验
- 不修改 `move_joint` 的 jerk 约束逻辑

对应入口包括：

- `ControllerClientTrajectoryOrchestrator.CreateLimitCompliantDenseTrajectory(...)`
- `FlyshotExecutionSendSequenceBuilder.Build(...)`
- `FlyshotTrajectoryArtifactWriter.WriteActualSendArtifacts(...)`

`move_joint` 仍保持原先的 jerk 受限实现，不共享这次豁免策略。

## 当前验收判断

对 `UTTC_MS11`：

- 只保留 flyshot 速度/加速度校验
- 跳过 flyshot jerk 阻断
- 新 `1.0x / 0.5x` 与旧抓包主段的剩余时长差异已经很小
- 当前判断：这点差异可以忽略

后续除非现场再次提供新的反证，否则本结论作为当前项目实现与验收的记录保留。
