优化差速转舵并增加纵向辨识测试

This commit is contained in:
2026-08-27 12:39:22 +08:00
parent 17092c2766
commit 1c5181b327
24 changed files with 1748 additions and 266 deletions
+10 -2
View File
@@ -72,7 +72,8 @@
### 10. 对已观察的舵轮响应加入有限前馈与预瞄
- M层差速转舵角速度前馈已接入,当前默认增益0.9、速度上限0.03m/s;实现位于 `MotorRoutine.CalculateDiffSteerRateFeedforward()`
- M层差速转舵已实施四轮独立的到位迟滞与模型逆前馈:默认回退参数为公共纯P `Kp=0.0042`,到位逻辑为0.5°停止区、0.8°重启区、连续3周期确认;对象逆前馈按 `targetRate/687.06` 计算并经0.15s一阶滤波,独立限幅0.03m/s。两项功能各有默认关闭的独立开关,实车参考配置可显式启用;状态不在四轮之间共享。实现位于 `DiverCartDefinition``MotorRoutine.CalculateDiffSteerRateFeedforward()``UpdateDiffSteerSettlingState()`
-`DiffSteerRateFeedforwardGain` 不再作为模型逆前馈的物理参数;PID反馈与前馈分别限幅后相加,合成差速不再受PID的±0.3m/s阈值二次截断,最终八电机仍由M层既有发送阈值独立保护。
- Stanley曲率前馈预瞄已接入,当前车辆默认时间0.15s、最大距离0.12m。
- 两者均是可配置补偿,不替代底层PID、真实周期和机械响应验证。
@@ -125,10 +126,17 @@
- 主车 `FleetSafetySupervisor` 依据主车本地接收时间、成员状态和故障锁存整队停车决定;每辆车的 `FleetMemberAgent` 依据本机单调时间和命令有效期独立看门狗停车。`FleetRuntime` 已执行本车停止并向可达成员下发停止,两层保护仍不能互相替代。
- 同一 `FleetRuntime` 部署到所有车辆,角色由显式 `selfVehicleId``leaderVehicleId` 决定,不把固定车号硬编码为主车;主车也是成员,本车命令直接执行,不要求传输层回环。
### 17. 纵向辨识区分目标命令、实际发送命令和停车语义
- C层 `LongitudinalIdentificationTests.cs` 提供“速度阶跃与立即停车”和“速度阶跃与正常减速”两个入口,共用舵轮回正、定时命令、CSV记录、停止响应和异常停车流程,不经过Stanley或纵向PID。
- 初次辨识保持生产配置中的 `AccPerSecond/DeAccPerSecond` 固定;上层目标速度只作为参考,车辆对象辨识以M层最终 `SentSpeed*` 为输入、轮组反馈合成速度为输出,避免把已知速度斜坡误认为车辆本体迟滞。
- `SendBodyTwist(Twist2D.Zero)` 表示立即停车并绕过 `DeAccPerSecond`;正常减速实验必须持续发送零目标 `SendMotion`,让底盘内部发送速度按 `DeAccPerSecond` 逐周期下降。两类数据不能混为同一种制动响应。
- 第一轮先完成当前配置的正向重复实验,再依据数据决定是否补充倒车和加减速度参数A/B;辨识过程中不同时改变多个限幅或控制参数。
## 已经确认但尚未实施
- 路线顺序:先完成单车闭环和停车功能验证,再正式实施多车通信、编队和协同控制。来源:`README.md`
- 转舵系统辨识应对四个轮组分别使用相同激励,输入采用实际差速转舵命令(`TotalDiff`或左右轮实际发送命令之差),输出采用实际舵角;若只用目标角到实际角,会把当前PID包含在闭环模型中,更换PID后该模型不能继续代表转舵机构。控制阶段优先保留四个独立PID实例和内部状态、共用一套参数,并依据四个健康轮组中最不利的动态设计稳定裕量;只有硬件健康且公共参数仍无法兼顾时,才评估配置化的逐轮小幅校准,不在代码中硬编码某个轮位特例。
- 转舵系统辨识应对四个轮组分别使用相同激励,输入采用实际差速转舵命令(`TotalDiff`或左右轮实际发送命令之差),输出采用实际舵角;若只用目标角到实际角,会把当前PID包含在闭环模型中,更换PID后该模型不能继续代表转舵机构。当前主辨识流程固定用第一次实验作估计集、第三次实验作验证集,两者角度死区均为0.1°;第二次0.5°死区实验不进入主辨识,只保留作死区敏感性参考。控制阶段优先保留四个独立PID实例和内部状态、共用一套参数,并依据四个健康轮组中最不利的动态设计稳定裕量;只有硬件健康且公共参数仍无法兼顾时,才评估配置化的逐轮小幅校准,不在代码中硬编码某个轮位特例。当前15°/s参数由 `ParkingMaximumGcpAngleRateDegreesPerSecond` 配置并在 `GcpCommandExecutor` 中限制前后虚拟GCP目标,位于上述辨识对象上游,不进入“实际差速命令→实际舵角”模型;实施顺序确定为四轮对象辨识、公共反馈/前馈设计、舵角阶跃与斜坡验证、按最慢健康轮组留裕量设置GCP变化率,最后再用轨迹实验整定曲率预瞄和横向控制参数,不删除GCP变化率保护。
- 当前多车的固定布局滚动任务已形成内存通信可运行链路。仍缺少C层正式动作入口、布局原子激活、成员状态实际采集、跨机时间换算、公共世界坐标验证和无线传输实现。
- 单车 `MultiWheelC/StateEstimation` 继续负责Detour重复帧、跳变候选、轮速短时预测和任务坐标连续化;车队层不复制这套原始定位处理,只消费经过本车校验的成员状态,并负责跨车时间对齐、固定布局反算、成员一致性检查和中心融合。成员状态进入融合前仍必须确认处于同一公共坐标系;各车独立的 `_controlFromDetour` 连续化变换是否会造成跨车基准差异,属于通信/状态接收契约必须验证的事项。
- 第一版保留当前保守的等权车队中心融合;任务生命周期和内存零速运行链已经贯通。公共坐标系与主车时间轴语义确认并取得静止/低速双车日志后,再按数据增加车队历史预测、逐成员创新门控、健康降级和Huber等鲁棒加权;不在缺少Detour协方差时提前实现协方差加权或Covariance Intersection。