fix: accelerate EM trajectories from rest

This commit is contained in:
梁薄云
2026-08-07 07:51:43 +08:00
parent 162f1a24e6
commit 0bba8d7e61
9 changed files with 273 additions and 20 deletions
@@ -19,6 +19,7 @@ internal static class EmPlanningServiceChecks
VerifiesFullScopePublishesItsRequestScope();
VerifiesRequestAndStateFailuresPublishNoTrajectory();
VerifiesProjectionCorridorAndOptimizationFailuresPublishNoTrajectory();
VerifiesNoProgressPublishesNoTrajectory();
VerifiesTimeoutFallbackAndCancellationSemantics();
VerifiesPublicationFailureAndDebugIsolation();
}
@@ -396,6 +397,22 @@ internal static class EmPlanningServiceChecks
}
}
private static void VerifiesNoProgressPublishesNoTrajectory()
{
EmPlanningRequest request = CreateRequest(TravelDirection.Forward, 0d, false, false,
CreateReferencePath(TravelDirection.Forward, false, 0.10d), null,
EmPlanningScope.FullDirectionSegment);
request.Configuration.Scheduling.MaximumOptimizationSpatialStepMeters = 1d;
request.Configuration.Scheduling.MaximumOptimizationTimeStepSeconds = 1d;
EmPlanningResult result = new EmPlanningService(new ScriptedPipelineSolver(PipelineSolverMode.NoProgress)).Plan(
request, CancellationToken.None);
VerifyFailure(result, EmPlanningStatus.NoProgress, "full nonterminal no progress");
Verification.True(result.FailureReason.IndexOf("NoProgress", StringComparison.Ordinal) >= 0,
"no-progress failure preserves its diagnostic");
}
private static void VerifiesPublicationFailureAndDebugIsolation()
{
EmPlanningRequest validationFailure = CreateRequest(TravelDirection.Forward, 0d, false, false);
@@ -610,6 +627,7 @@ internal static class EmPlanningServiceChecks
SolverUnavailable,
TimeoutWithoutFallback,
TimeoutWithFallback,
NoProgress,
PublicationValidationFailure,
}
@@ -647,6 +665,8 @@ internal static class EmPlanningServiceChecks
LastLongitudinalProblem = problem;
if (mode == PipelineSolverMode.LongitudinalInfeasible)
return Result(QpSolveStatus.PrimalInfeasible, Array.Empty<double>());
if (mode == PipelineSolverMode.NoProgress)
return Result(QpSolveStatus.Solved, new double[problem.VariableCount]);
if (strictFullPrimal != null && strictFullPrimal.Count == problem.VariableCount)
{
longitudinalCallCount++;