feat: configure MovementTest ST time controls
This commit is contained in:
+6
@@ -33,6 +33,10 @@ public sealed class TrajectoryObservationMovementTest : MovementTest
|
||||
public double ObserverPeriodSeconds = 0.05d;
|
||||
public double SolverTimeoutSeconds = 0.50d;
|
||||
public int MaximumOsqpIterations = 12000;
|
||||
/// <summary>单次 ST 轨迹覆盖的未来时长,单位 s;默认 6s,不等于观察循环周期。</summary>
|
||||
public double TimeHorizonSeconds = 6d;
|
||||
/// <summary>Trajectory 相邻 TimeFromStart 时间戳的间隔,单位 s;默认 0.10s,不等于观察循环周期。</summary>
|
||||
public double OutputTimeStepSeconds = 0.10d;
|
||||
public double VehicleLengthMeters = 0.80d;
|
||||
public double VehicleWidthMeters = 0.60d;
|
||||
public double SafetyMarginMeters = 0.05d;
|
||||
@@ -63,6 +67,8 @@ public sealed class TrajectoryObservationMovementTest : MovementTest
|
||||
ObserverPeriodSeconds = ObserverPeriodSeconds,
|
||||
SolverTimeoutSeconds = SolverTimeoutSeconds,
|
||||
MaximumOsqpIterations = MaximumOsqpIterations,
|
||||
TimeHorizonSeconds = TimeHorizonSeconds,
|
||||
OutputTimeStepSeconds = OutputTimeStepSeconds,
|
||||
VehicleLengthMeters = VehicleLengthMeters,
|
||||
VehicleWidthMeters = VehicleWidthMeters,
|
||||
SafetyMarginMeters = SafetyMarginMeters,
|
||||
|
||||
+11
@@ -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));
|
||||
|
||||
+2
@@ -209,6 +209,8 @@ public sealed class TrajectoryObservationController
|
||||
configuration.Scheduling.ReplanPeriodSeconds = settings.ReplanPeriodSeconds;
|
||||
configuration.Scheduling.SolverTimeoutSeconds = settings.SolverTimeoutSeconds;
|
||||
configuration.Solver.MaximumOsqpIterations = settings.MaximumOsqpIterations;
|
||||
configuration.Scheduling.TimeHorizonSeconds = settings.TimeHorizonSeconds;
|
||||
configuration.Scheduling.OutputTimeStepSeconds = settings.OutputTimeStepSeconds;
|
||||
coordinator = new EmPlanningCoordinator(planningService);
|
||||
executor = new TrajectoryExecutor(configuration);
|
||||
this.sessionId = sessionId;
|
||||
|
||||
Reference in New Issue
Block a user