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

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
+52 -3
View File
@@ -16,6 +16,14 @@ namespace MedullaAdapter
[UseManualController(manualController = typeof(Remote))]
public class DiverCartDefinition : MultiWheelCartDefinition
{
public DiverCartDefinition()
{
// 实车配置可覆盖这些回退值;四个舵轮在MotorRoutine中统一读取它们。
DiffSteerKp = 0.0042f;
DiffSteerKi = 0f;
DiffSteerKd = 0f;
}
#region
public MCUSerialBridge Bridge;
@@ -65,16 +73,37 @@ namespace MedullaAdapter
#region
[AsInitParam(desc = "差速转舵目标角速度前馈增益")]
// public float DiffSteerRateFeedforwardGain = 0.9f;
// 旧参数仅用于兼容已有配置和历史日志,新模型逆前馈不读取它。
[AsInitParam(desc = "旧差速转舵目标角速度前馈增益(已停用)")]
public float DiffSteerRateFeedforwardGain = 0f;
[AsInitParam(desc = "差速舵轮左右轮间距,单位mm")]
[AsInitParam(desc = "旧前馈差速舵轮左右轮间距,单位mm(已停用)")]
public float DiffSteerWheelDistanceMillimeters = 85f;
[AsInitParam(desc = "差速转舵前馈最大速度,单位m/s")]
public float DiffSteerRateFeedforwardMaximumSpeed = 0.03f;
[AsInitParam(desc = "启用差速舵轮到位迟滞")]
public bool EnableDiffSteerSettlingHysteresis = false;
[AsInitParam(desc = "差速舵轮停止调整误差,单位deg")]
public float DiffSteerStopErrorDegrees = 0.5f;
[AsInitParam(desc = "差速舵轮重新启动误差,单位deg")]
public float DiffSteerRestartErrorDegrees = 0.8f;
[AsInitParam(desc = "差速舵轮到位确认周期数")]
public int DiffSteerSettlingCycles = 3;
[AsInitParam(desc = "启用差速转舵模型逆前馈")]
public bool EnableDiffSteerInverseFeedforward = false;
[AsInitParam(desc = "静止舵轮模型增益")]
public float DiffSteerPlantGain = 687.06f;
[AsInitParam(desc = "模型逆前馈滤波时间常数,单位s")]
public float DiffSteerInverseFeedforwardTimeConstantSeconds = 0.15f;
[AsInitParam(desc = "MCU端口号")] public string MCUPort = "COM4";
[AsInitParam(desc = "遥控器速度上限")] public float TransmitterSpeedUpperLimit = 1.0f;
[AsInitParam(desc = "遥控器速度下限")] public float TransmitterSpeedLowerLimit = 0.0f;
@@ -119,6 +148,18 @@ namespace MedullaAdapter
[IOObjectMonitor(desc = "左后舵轮转向合成差速输出")] public float DiffSteerTotalOutputLeftRear;
[IOObjectMonitor(desc = "右前舵轮转向合成差速输出")] public float DiffSteerTotalOutputRightFront;
[IOObjectMonitor(desc = "右后舵轮转向合成差速输出")] public float DiffSteerTotalOutputRightRear;
[IOObjectMonitor(desc = "左前舵轮进入停止调整区")] public bool DiffSteerInStopZoneLeftFront;
[IOObjectMonitor(desc = "左后舵轮进入停止调整区")] public bool DiffSteerInStopZoneLeftRear;
[IOObjectMonitor(desc = "右前舵轮进入停止调整区")] public bool DiffSteerInStopZoneRightFront;
[IOObjectMonitor(desc = "右后舵轮进入停止调整区")] public bool DiffSteerInStopZoneRightRear;
[IOObjectMonitor(desc = "左前舵轮连续到位周期数")] public int DiffSteerSettlingCountLeftFront;
[IOObjectMonitor(desc = "左后舵轮连续到位周期数")] public int DiffSteerSettlingCountLeftRear;
[IOObjectMonitor(desc = "右前舵轮连续到位周期数")] public int DiffSteerSettlingCountRightFront;
[IOObjectMonitor(desc = "右后舵轮连续到位周期数")] public int DiffSteerSettlingCountRightRear;
[IOObjectMonitor(desc = "左前舵轮已到位")] public bool DiffSteerSettledLeftFront;
[IOObjectMonitor(desc = "左后舵轮已到位")] public bool DiffSteerSettledLeftRear;
[IOObjectMonitor(desc = "右前舵轮已到位")] public bool DiffSteerSettledRightFront;
[IOObjectMonitor(desc = "右后舵轮已到位")] public bool DiffSteerSettledRightRear;
[IOObjectMonitor(desc = "灯光模式")] public int LightMode = 0;
[IOObjectMonitor(desc = "实体遥控器当前速度倍率")] public float TransmitterSpeed = 0.3f;
[IOObjectMonitor(desc = "轮速诊断记录已启用")]
@@ -154,6 +195,14 @@ namespace MedullaAdapter
internal float DiffSteerTargetRateRightFrontDegreesPerSecond;
internal float DiffSteerTargetRateRightRearDegreesPerSecond;
internal float DiffSteerFeedforwardDeltaTimeMilliseconds;
internal float DiffSteerInverseFeedforwardRawLeftFront;
internal float DiffSteerInverseFeedforwardRawLeftRear;
internal float DiffSteerInverseFeedforwardRawRightFront;
internal float DiffSteerInverseFeedforwardRawRightRear;
internal float DiffSteerInverseFeedforwardFilteredLeftFront;
internal float DiffSteerInverseFeedforwardFilteredLeftRear;
internal float DiffSteerInverseFeedforwardFilteredRightFront;
internal float DiffSteerInverseFeedforwardFilteredRightRear;
internal bool DiffSteerFeedforwardLimitedLeftFront;
internal bool DiffSteerFeedforwardLimitedLeftRear;
internal bool DiffSteerFeedforwardLimitedRightFront;