我检查了这组日志。结论是：上层目标速度和M层计算基本正常，CAN通信也比较稳定；真正明显的波动发生在驱动器返回的实际电机速度，尤其是右前轮组。

数据文件：

- [CAN原始反馈](</D:/Users/Desktop/入职培训/停车机器人/MyParking/logs/wheel-speed/20260730_112709_961_Car1_can.csv>)
- [周期快照](</D:/Users/Desktop/入职培训/停车机器人/MyParking/logs/wheel-speed/20260730_112709_961_Car1_snapshot.csv>)

主要结果：

| 项目 | 结果 |
|---|---:|
| 测试总时长 | 27.5s |
| 有效运动时间 | 约23.1s |
| 稳态目标速度 | 0.30045m/s |
| CAN反馈频率 | 每个电机约20Hz |
| CAN记录帧数 | 4413帧 |
| 记录器丢帧 | 未发现 |
| 整车平均实际速度 | 0.29988m/s |
| 整车平均速度标准差 | 0.01538m/s，约5.1% |

软件下发没有跳变

8个原始目标速度在稳态完全一致：

```text
CmdLFL～CmdRRR = 0.30045m/s
标准差 = 0
```

启动阶段也不是突然给到0.3，而是大约1秒内平滑上升：

```text
0 → 0.03 → 0.06 → …… → 0.30045m/s
```

因此不是遥控器、`SendMotion`或者速度加减速逻辑产生的目标跳变。

舵轮PID修正也很小

`PidLFL～PidRRR` 的范围大约是：

```text
0.2991～0.3018m/s
```

修正量只有约 `±0.001m/s`。所以不是 [MotorRoutine.cs](</D:/Users/Desktop/入职培训/停车机器人/MyParking/MedullaAdapter/MotorRoutine.cs:168>) 中的舵角差速PID把轮速改成了0.2～0.4。

实际CAN反馈波动明显

稳态阶段8个电机反馈范围如下：

| 电机 | 均值 m/s | 标准差 | 最小～最大 m/s |
|---|---:|---:|---:|
| LFL | 0.3010 | 0.0332 | 0.229～0.377 |
| LFR | 0.2990 | 0.0340 | 0.217～0.369 |
| LRL | 0.2996 | 0.0261 | 0.236～0.387 |
| LRR | 0.3001 | 0.0304 | 0.226～0.374 |
| RFL | 0.2992 | 0.0380 | 0.211～0.387 |
| RFR | 0.3021 | 0.0480 | 0.212～0.397 |
| RRL | 0.3013 | 0.0274 | 0.231～0.383 |
| RRR | 0.2982 | 0.0321 | 0.222～0.388 |

均值都接近0.3，说明：

- RPM解码和单位换算没有明显错误。
- 减速比10.5、轮径85mm至少在平均值上是匹配的。
- 正负号处理正确，没有运行中正负翻转。

但瞬时波动确实比较大，右前右电机 `RFR` 最明显。

舵角不是主要原因

直线阶段：

```text
四个目标舵角始终为 0°
实际舵角基本在 ±0.4°以内
```

没有出现舵角从正角度跳到负等价角，也没有发生接近180°的方向重选。因此这次轮速波动不是舵轮方向正负切换造成的。

CAN通信整体正常

8个驱动器基本都是：

```text
反馈频率 ≈ 20Hz
通常最大间隔 ≈ 63ms
```

只有 `LFR` 出现过一次约105ms的间隔，像是偶发少一帧，但不足以解释整个测试期间持续的轮速波动。

需要注意的问题

同一舵轮内部两个电机的实际速度差，瞬时可达到约：

```text
0.075～0.10m/s
```

但软件下发给两个电机的差值只有约 `0.001m/s`。这说明较大的左右电机速度差不是M层主动要求的。

可能来源依次是：

1. 驱动器自身速度闭环参数或速度反馈滤波不足。
2. 编码器瞬时速度估计噪声。
3. 同一舵轮两个驱动电机负载不均。
4. 机械间隙、轮胎形变或地面摩擦变化。
5. 驱动器内部电流限幅或母线电压波动。

另外，`snapshot.csv` 实际只有约12.8Hz，而不是期望的50Hz。原始CAN仍有20Hz，所以本次诊断结论有效；但说明 `MCURoutine.Operation()` 中的同步串口、IO和多次CAN调用占用了较长时间。以后做快速轨迹控制时需要单独处理这个周期问题。

下一步最有价值的测试是：

- 把驱动轮架空，同样下发0.3m/s并记录一次。
- 落地空载，再记录一次。
- 分别测试0.1、0.2、0.3m/s，每档保持10秒。

如果架空后仍然在0.2～0.4之间波动，重点检查驱动器速度环和编码器速度反馈；如果架空稳定、落地波动，则重点检查机械负载、轮胎和同一舵轮双电机同步。