多车联动问题修复记录
对照产品源 StandardMultiWheelLifterC/PilotDefinition.cs,Tutorial MultiWheelC 中已修复或规避的问题如下。
1. CenterTh 弧度/角度混用
| 项 |
说明 |
| 位置 |
产品源约 L534–536 |
| 问题 |
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()
| 项 |
说明 |
| 位置 |
产品源约 L531–535 |
| 问题 |
主车在把自己写入 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) 死分支
| 项 |
说明 |
| 位置 |
产品源约 L674–679 |
| 问题 |
fleet 数量门控与预对齐阶段被硬编码关闭 |
| 影响 |
未齐套也 SendMotion;对齐逻辑永不执行 |
| 修复 |
恢复 fleetReady = Count == MultiVehicleFleetNum 门控后再 SendMotion |
5. _accumulateTh 积分 dt 异常
| 项 |
说明 |
| 位置 |
产品源约 L547–550 |
| 问题 |
_lastThTime 初值为 MinValue 或 >1s 重置导致首帧/恢复后 dt 异常 |
| 影响 |
手动编队转向突变或几乎不动 |
| 修复 |
初始化 _lastThTime = Now,dt 上限 0.2s |
6. 主车 HTTP 通知自身
| 项 |
说明 |
| 位置 |
产品源约 L770–778 |
| 问题 |
notify 循环包含主车自己的 IP |
| 影响 |
冗余自调用、handler 重入 |
| 修复 |
ip == Conf.SimpleIp 时 skip |
7. 从车覆盖全局 Conf
| 项 |
说明 |
| 位置 |
产品源约 L585–596 |
| 问题 |
从 notification 写回 Conf.TestCarSyncTh 等全局配置 |
| 影响 |
网络数据污染本地配置,难以调试 |
| 修复 |
使用局部变量 syncTh/syncDistance/...,不修改 Conf |
8. ChassisController API 名称/签名错误
| 项 |
说明 |
| 位置 |
产品源 ChassisController.cs L95–117 |
| 问题 |
使用 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 重写 |