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>
130 lines
5.3 KiB
Markdown
130 lines
5.3 KiB
Markdown
# 多车联动问题修复记录
|
||
|
||
对照产品源 `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` 重写 |
|