Files
Tutorial/docs/BugFixes.md
T
ruifeng.zhouandCursor 235c6c70ac Add Clumsy plugins and dual-vehicle fleet sync demo.
Restructure into DiffWheel/MultiWheel folders, add DiffWheelC and MultiWheelC with MovementTests, FleetRemote multi-vehicle manual sync, deploy templates, and documentation. Update dependency paths to D:\MDCS\Release and mirror motor feedback in MotorRoutine for simulation.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-28 15:04:55 +08:00

130 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 多车联动问题修复记录
对照产品源 `StandardMultiWheelLifterC/PilotDefinition.cs`Tutorial `MultiWheelC` 中已修复或规避的问题如下。
## 1. CenterTh 弧度/角度混用
| 项 | 说明 |
|----|------|
| **位置** | 产品源约 L534536 |
| **问题** | `Math.Sin(v.Th)` / `Math.Cos(v.Th)``v.Th` 为角度(deg),但 `Sin/Cos` 需要弧度,导致车队中心航向错误 |
| **影响** | 自动/定位补偿模式下 fleet 中心朝向偏差,联动走形异常 |
| **修复** | 改为 `Math.Sin(v.Th * Math.PI / 180.0)` |
## 2. 空 fleet 上调用 Average()
| 项 | 说明 |
|----|------|
| **位置** | 产品源约 L531535 |
| **问题** | 主车在把自己写入 fleet **之前**对 `MultiVehicleFleet.Values` 求平均,早期 tick 可能为空 |
| **影响** | 可能抛 `InvalidOperationException`sync 线程崩溃 |
| **修复** | 先写入主车自身,再 `Count > 0` 时才 Average |
## 3. 阻塞式 HTTP (.Result)
| 项 | 说明 |
|----|------|
| **位置** | 产品源约 L484, L778, L802 |
| **问题** | 50ms 循环内 `hc.GetStringAsync(...).Result` 阻塞,超时 2s |
| **影响** | sync 线程卡顿,motion 与 notify 延迟累积 |
| **修复** | 改为 `FireAndForgetRegister/Notify``ContinueWith` 记录失败 |
## 4. if(true)/if(false) 死分支
| 项 | 说明 |
|----|------|
| **位置** | 产品源约 L674679 |
| **问题** | fleet 数量门控与预对齐阶段被硬编码关闭 |
| **影响** | 未齐套也 SendMotion;对齐逻辑永不执行 |
| **修复** | 恢复 `fleetReady = Count == MultiVehicleFleetNum` 门控后再 SendMotion |
## 5. _accumulateTh 积分 dt 异常
| 项 | 说明 |
|----|------|
| **位置** | 产品源约 L547550 |
| **问题** | `_lastThTime` 初值为 `MinValue` 或 >1s 重置导致首帧/恢复后 dt 异常 |
| **影响** | 手动编队转向突变或几乎不动 |
| **修复** | 初始化 `_lastThTime = Now`dt 上限 0.2s |
## 6. 主车 HTTP 通知自身
| 项 | 说明 |
|----|------|
| **位置** | 产品源约 L770778 |
| **问题** | notify 循环包含主车自己的 IP |
| **影响** | 冗余自调用、handler 重入 |
| **修复** | `ip == Conf.SimpleIp` 时 skip |
## 7. 从车覆盖全局 Conf
| 项 | 说明 |
|----|------|
| **位置** | 产品源约 L585596 |
| **问题** | 从 notification 写回 `Conf.TestCarSyncTh` 等全局配置 |
| **影响** | 网络数据污染本地配置,难以调试 |
| **修复** | 使用局部变量 `syncTh/syncDistance/...`,不修改 `Conf` |
## 8. ChassisController API 名称/签名错误
| 项 | 说明 |
|----|------|
| **位置** | 产品源 `ChassisController.cs` L95117 |
| **问题** | 使用 `MultiVehicleGetCenterPos`(不存在)及 3 参 `MultiVehicleSendMotion` |
| **影响** | 自动联动可能无法编译或静默失效 |
| **修复** | 使用 `MultiVehicleGetFleetPos` + 5 参 `Action<float,float,float,Vector2,float>` |
## 9. VehicleSyncInfo JSON 反序列化
| 项 | 说明 |
|----|------|
| **位置** | 产品源 DTO 定义 |
| **问题** | 只读字段 + 有参构造,Newtonsoft 默认难反序列化 |
| **影响** | register/notify 解析失败 → HTTP 500 |
| **修复** | 改为可写属性 + `[JsonProperty]`(见 `VehicleSyncModels.cs` |
## 10. 手动联动未接线(产品层)
| 项 | 说明 |
|----|------|
| **位置** | `StandardMultiWheelLifterM/Remote.cs``MultiWheelRemote.MultiVehicleModeChassisLogic` 为空 |
| **问题** | `MultiVehicleManual*` LowerIO 从未被 M 插件赋值 |
| **影响** | 遥控器无法驱动 fleet |
| **修复** | Tutorial `MultiWheelM``FleetMode` 开关 + `MultiVehicleManual*` UpperIO 字段 |
## 11. MultiVehicleManualVy 未使用(产品源)
| 项 | 说明 |
|----|------|
| **位置** | 产品源声明但未读 |
| **问题** | 横移联动未实现 |
| **Tutorial 状态** | 保留字段,当前手动模式仅 Vx + Vth;Vy 固定为 0 |
## 12. 产品源仍存在的已知限制(Tutorial 未改框架)
- ~~激光两腿检测联动~~ → 已上移到 MDCSToolBox 接口;Tutorial 默认不启用检测,产品在插件内实现 `DetectNeighborBias`
- `ClumsyLite` 与 Medulla share-object tag 的绑定机制依赖运行时 CartActivator 配置,需与 `startup.iocmd``SetShareObjectTag` 一致
## 13. 同机多 Detour/Clumsy 串台(2026-06
| 项 | 说明 |
|----|------|
| **问题** | 写死 `DObject("DetourPos")`、Detour HTTP `127.0.0.1:4321`、同步 HTTP `:8008`,同 PC 双实例互相覆盖 |
| **修复** | Detour `shareObjectTag` + Clumsy `soTag`Clumsy `detourHost`/`detourPort``WebAPI.port` + `VehicleSyncInfo.Port`;主车端点 `MultiVehicleMasterEndpoint``ip:port` |
| **配置** | 见 `deploy/clumsy_agv*/clumsyconsole.json``detour.json` |
## 14. 车队中心取平均(2026-06
| 项 | 说明 |
|----|------|
| **问题** | 旧逻辑对全部车位姿取平均,且假设每台都有 Detour |
| **修复** | 固定 slot 表 + 仅对 `PosAvailable` 车反推中心;有效车集合运行中可变 |
| **位置** | `MultiWheelPilotDefinition.MultiVehicle.cs``TryInferFleetCenter` |
## 15. 同步引擎重复实现(2026-06
| 项 | 说明 |
|----|------|
| **问题** | Tutorial 与 `StandardMultiWheelLifterC` 各维护一套 register/notify/loop |
| **修复** | 统一到 MDCSToolBox 基类 `InitMultiVehicleCoordination()`;子类仅配置 + `DetectNeighborBias` 重写 |