feat: configure MovementTest ST time controls

This commit is contained in:
梁薄云
2026-08-05 13:39:18 +08:00
parent 308c8bb587
commit ddea58a139
4 changed files with 60 additions and 1 deletions
@@ -14,6 +14,10 @@ public sealed class TrajectoryObservationSettings
public double ObserverPeriodSeconds { get; set; } = 0.05d;
public double SolverTimeoutSeconds { get; set; } = 0.50d;
public int MaximumOsqpIterations { get; set; } = 12000;
/// <summary>单次 ST 轨迹覆盖的未来时长,单位 s;不等于观察循环周期。</summary>
public double TimeHorizonSeconds { get; set; } = 6d;
/// <summary>发布 Trajectory 相邻 TimeFromStart 时间戳的间隔,单位 s;不等于观察循环周期。</summary>
public double OutputTimeStepSeconds { get; set; } = 0.10d;
public double VehicleLengthMeters { get; set; } = 0.80d;
public double VehicleWidthMeters { get; set; } = 0.60d;
public double SafetyMarginMeters { get; set; } = 0.05d;
@@ -29,6 +33,8 @@ public sealed class TrajectoryObservationSettings
ObserverPeriodSeconds = ObserverPeriodSeconds,
SolverTimeoutSeconds = SolverTimeoutSeconds,
MaximumOsqpIterations = MaximumOsqpIterations,
TimeHorizonSeconds = TimeHorizonSeconds,
OutputTimeStepSeconds = OutputTimeStepSeconds,
VehicleLengthMeters = VehicleLengthMeters,
VehicleWidthMeters = VehicleWidthMeters,
SafetyMarginMeters = SafetyMarginMeters,
@@ -47,6 +53,11 @@ public sealed class TrajectoryObservationSettings
EnsurePositiveFinite(SolverTimeoutSeconds, nameof(SolverTimeoutSeconds));
if (MaximumOsqpIterations <= 0)
throw new ArgumentOutOfRangeException(nameof(MaximumOsqpIterations), "Value must be positive.");
EnsurePositiveFinite(TimeHorizonSeconds, nameof(TimeHorizonSeconds));
EnsurePositiveFinite(OutputTimeStepSeconds, nameof(OutputTimeStepSeconds));
if (OutputTimeStepSeconds > TimeHorizonSeconds)
throw new ArgumentOutOfRangeException(nameof(OutputTimeStepSeconds),
"The trajectory timestamp spacing cannot exceed the ST time horizon.");
EnsurePositiveFinite(VehicleLengthMeters, nameof(VehicleLengthMeters));
EnsurePositiveFinite(VehicleWidthMeters, nameof(VehicleWidthMeters));
EnsurePositiveFinite(SafetyMarginMeters, nameof(SafetyMarginMeters));